2022-04-17 12:11:43 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Core/Types.h>
|
2022-04-25 14:33:25 +00:00
|
|
|
#include <optional>
|
2022-04-17 12:11:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
/// Keeps information about files contained in a backup.
|
|
|
|
class IBackupCoordination
|
|
|
|
{
|
|
|
|
public:
|
2022-05-01 13:36:32 +00:00
|
|
|
virtual ~IBackupCoordination() = default;
|
|
|
|
|
2022-05-31 09:33:23 +00:00
|
|
|
/// Sets the current stage and waits for other hosts to come to this stage too.
|
|
|
|
virtual void syncStage(const String & current_host, int stage, const Strings & wait_hosts, std::chrono::seconds timeout) = 0;
|
|
|
|
|
|
|
|
/// Sets that the current host encountered an error, so other hosts should know that and stop waiting in syncStage().
|
|
|
|
virtual void syncStageError(const String & current_host, const String & error_message) = 0;
|
|
|
|
|
2022-05-08 21:41:49 +00:00
|
|
|
struct PartNameAndChecksum
|
|
|
|
{
|
|
|
|
String part_name;
|
|
|
|
UInt128 checksum;
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Adds part names which a specified replica of a replicated table is going to put to the backup.
|
|
|
|
/// Multiple replicas of the replicated table call this function and then the added part names can be returned by call of the function
|
2022-05-23 12:05:35 +00:00
|
|
|
/// getReplicatedPartNames().
|
2022-05-08 21:41:49 +00:00
|
|
|
/// Checksums are used only to control that parts under the same names on different replicas are the same.
|
2022-05-29 19:53:56 +00:00
|
|
|
virtual void addReplicatedPartNames(const String & table_zk_path, const String & table_name_for_logs, const String & replica_name,
|
|
|
|
const std::vector<PartNameAndChecksum> & part_names_and_checksums) = 0;
|
2022-05-08 21:41:49 +00:00
|
|
|
|
2022-05-29 19:53:56 +00:00
|
|
|
/// Returns the names of the parts which a specified replica of a replicated table should put to the backup.
|
|
|
|
/// This is the same list as it was added by call of the function addReplicatedPartNames() but without duplications and without
|
|
|
|
/// parts covered by another parts.
|
|
|
|
virtual Strings getReplicatedPartNames(const String & table_zk_path, const String & replica_name) const = 0;
|
2022-05-23 12:05:35 +00:00
|
|
|
|
|
|
|
/// Adds a data path in backup for a replicated table.
|
|
|
|
/// Multiple replicas of the replicated table call this function and then all the added paths can be returned by call of the function
|
2022-05-29 19:53:56 +00:00
|
|
|
/// getReplicatedDataPaths().
|
|
|
|
virtual void addReplicatedDataPath(const String & table_zk_path, const String & data_path) = 0;
|
|
|
|
|
|
|
|
/// Returns all the data paths in backup added for a replicated table (see also addReplicatedDataPath()).
|
|
|
|
virtual Strings getReplicatedDataPaths(const String & table_zk_path) const = 0;
|
2022-05-23 12:05:35 +00:00
|
|
|
|
2022-04-17 12:11:43 +00:00
|
|
|
struct FileInfo
|
|
|
|
{
|
|
|
|
String file_name;
|
|
|
|
|
|
|
|
UInt64 size = 0;
|
|
|
|
UInt128 checksum{0};
|
|
|
|
|
|
|
|
/// for incremental backups
|
|
|
|
UInt64 base_size = 0;
|
|
|
|
UInt128 base_checksum{0};
|
|
|
|
|
2022-04-19 09:02:34 +00:00
|
|
|
/// Name of the data file.
|
|
|
|
String data_file_name;
|
|
|
|
|
2022-04-17 12:11:43 +00:00
|
|
|
/// Suffix of an archive if the backup is stored as a series of archives.
|
|
|
|
String archive_suffix;
|
|
|
|
|
|
|
|
/// Position in the archive.
|
|
|
|
UInt64 pos_in_archive = static_cast<UInt64>(-1);
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Adds file information.
|
2022-04-19 09:02:34 +00:00
|
|
|
/// If specified checksum+size are new for this IBackupContentsInfo the function sets `is_data_file_required`.
|
|
|
|
virtual void addFileInfo(const FileInfo & file_info, bool & is_data_file_required) = 0;
|
2022-04-17 12:11:43 +00:00
|
|
|
|
|
|
|
void addFileInfo(const FileInfo & file_info)
|
|
|
|
{
|
2022-04-19 09:02:34 +00:00
|
|
|
bool is_data_file_required;
|
|
|
|
addFileInfo(file_info, is_data_file_required);
|
2022-04-17 12:11:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Updates some fields (currently only `archive_suffix`) of a stored file's information.
|
|
|
|
virtual void updateFileInfo(const FileInfo & file_info) = 0;
|
|
|
|
|
2022-04-19 18:15:27 +00:00
|
|
|
virtual std::vector<FileInfo> getAllFileInfos() const = 0;
|
2022-06-06 09:50:20 +00:00
|
|
|
virtual Strings listFiles(const String & directory, bool recursive) const = 0;
|
|
|
|
virtual bool hasFiles(const String & directory) const = 0;
|
2022-04-17 12:11:43 +00:00
|
|
|
|
2022-04-19 09:02:34 +00:00
|
|
|
using SizeAndChecksum = std::pair<UInt64, UInt128>;
|
|
|
|
|
2022-04-19 18:15:27 +00:00
|
|
|
virtual std::optional<FileInfo> getFileInfo(const String & file_name) const = 0;
|
|
|
|
virtual std::optional<FileInfo> getFileInfo(const SizeAndChecksum & size_and_checksum) const = 0;
|
|
|
|
virtual std::optional<SizeAndChecksum> getFileSizeAndChecksum(const String & file_name) const = 0;
|
2022-04-17 12:11:43 +00:00
|
|
|
|
|
|
|
/// Generates a new archive suffix, e.g. "001", "002", "003", ...
|
|
|
|
virtual String getNextArchiveSuffix() = 0;
|
|
|
|
|
|
|
|
/// Returns the list of all the archive suffixes which were generated.
|
2022-04-19 18:15:27 +00:00
|
|
|
virtual Strings getAllArchiveSuffixes() const = 0;
|
2022-04-17 12:11:43 +00:00
|
|
|
|
|
|
|
/// Removes remotely stored information.
|
|
|
|
virtual void drop() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|