aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Backups/BackupFileInfo.h
blob: 63da6f234272b1c7ebdba8ebc3940f88cdbd75bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#pragma once

#include <Core/Types.h>
#include <Common/ThreadPool_fwd.h>

namespace Poco { class Logger; }

namespace DB
{

class IBackup;
class IBackupEntry;
using BackupPtr = std::shared_ptr<const IBackup>;
using BackupEntryPtr = std::shared_ptr<const IBackupEntry>;
using BackupEntries = std::vector<std::pair<String, BackupEntryPtr>>;
struct ReadSettings;


/// Information about a file stored in a backup.
struct BackupFileInfo
{
    String file_name;

    UInt64 size = 0;
    UInt128 checksum{0};

    /// for incremental backups
    UInt64 base_size = 0;
    UInt128 base_checksum{0};

    /// Name of the data file. An empty string means there is no data file (that can happen if the file is empty or was taken from the base backup as a whole).
    /// This field is set during backup coordination (see the class BackupCoordinationFileInfos).
    String data_file_name;

    /// Index of the data file. -1 means there is no data file.
    /// This field is set during backup coordination (see the class BackupCoordinationFileInfos).
    size_t data_file_index = static_cast<size_t>(-1);

    /// Whether this file is encrypted by an encrypted disk.
    bool encrypted_by_disk = false;

    struct LessByFileName
    {
        bool operator()(const BackupFileInfo & lhs, const BackupFileInfo & rhs) const { return (lhs.file_name < rhs.file_name); }
        bool operator()(const BackupFileInfo * lhs, const BackupFileInfo * rhs) const { return (lhs->file_name < rhs->file_name); }
    };

    struct EqualByFileName
    {
        bool operator()(const BackupFileInfo & lhs, const BackupFileInfo & rhs) const { return (lhs.file_name == rhs.file_name); }
        bool operator()(const BackupFileInfo * lhs, const BackupFileInfo * rhs) const { return (lhs->file_name == rhs->file_name); }
    };

    struct LessBySizeOrChecksum
    {
        bool operator()(const BackupFileInfo & lhs, const BackupFileInfo & rhs) const
        {
            return (lhs.size < rhs.size) || (lhs.size == rhs.size && lhs.checksum < rhs.checksum);
        }
    };

    /// Note: this format doesn't allow to parse data back.
    /// Must be used only for debugging purposes.
    String describe() const;
};

using BackupFileInfos = std::vector<BackupFileInfo>;

/// Builds a BackupFileInfo for a specified backup entry.
BackupFileInfo buildFileInfoForBackupEntry(const String & file_name, const BackupEntryPtr & backup_entry, const BackupPtr & base_backup, const ReadSettings & read_settings, Poco::Logger * log);

/// Builds a vector of BackupFileInfos for specified backup entries.
BackupFileInfos buildFileInfosForBackupEntries(const BackupEntries & backup_entries, const BackupPtr & base_backup, const ReadSettings & read_settings, ThreadPool & thread_pool);

}