#pragma once #include #include #include namespace DB { class IDisk; using DiskPtr = std::shared_ptr; /// Represents a file prepared to be included in a backup, assuming that until this backup entry is destroyed the file won't be changed. class BackupEntryFromImmutableFile : public BackupEntryWithChecksumCalculation { public: /// The constructor is allowed to not set `file_size_` or `checksum_`, in that case it will be calculated from the data. BackupEntryFromImmutableFile( const DiskPtr & disk_, const String & file_path_, bool copy_encrypted_ = false, const std::optional & file_size_ = {}, const std::optional & checksum_ = {}); ~BackupEntryFromImmutableFile() override; std::unique_ptr getReadBuffer(const ReadSettings & read_settings) const override; UInt64 getSize() const override; UInt128 getChecksum(const ReadSettings & read_settings) const override; std::optional getPartialChecksum(size_t prefix_length, const ReadSettings & read_settings) const override; DataSourceDescription getDataSourceDescription() const override { return data_source_description; } bool isEncryptedByDisk() const override { return copy_encrypted; } bool isFromFile() const override { return true; } bool isFromImmutableFile() const override { return true; } DiskPtr getDisk() const override { return disk; } String getFilePath() const override { return file_path; } private: const DiskPtr disk; const String file_path; const DataSourceDescription data_source_description; const bool copy_encrypted; mutable std::optional file_size; mutable std::optional checksum; mutable bool file_size_adjusted = false; mutable bool checksum_adjusted = false; mutable std::mutex size_and_checksum_mutex; }; }