#pragma once
-#include <stdint.h>
-
+#include <cstdint>
#include <limits>
+#include <memory>
#include <string>
#include <vector>
+#include "rocksdb/options.h"
#include "rocksdb/types.h"
namespace ROCKSDB_NAMESPACE {
-struct ColumnFamilyMetaData;
-struct LevelMetaData;
-struct SstFileMetaData;
-// The metadata that describes a column family.
-struct ColumnFamilyMetaData {
- ColumnFamilyMetaData() : size(0), file_count(0), name("") {}
- ColumnFamilyMetaData(const std::string& _name, uint64_t _size,
- const std::vector<LevelMetaData>&& _levels)
- : size(_size), name(_name), levels(_levels) {}
+// Basic identifiers and metadata for a file in a DB. This only includes
+// information considered relevant for taking backups, checkpoints, or other
+// services relating to DB file storage.
+// This is only appropriate for immutable files, such as SST files or all
+// files in a backup. See also LiveFileStorageInfo.
+struct FileStorageInfo {
+ // The name of the file within its directory (e.g. "123456.sst")
+ std::string relative_filename;
+ // The directory containing the file, without a trailing '/'. This could be
+ // a DB path, wal_dir, etc.
+ std::string directory;
+
+ // The id of the file within a single DB. Set to 0 if the file does not have
+ // a number (e.g. CURRENT)
+ uint64_t file_number = 0;
+ // The type of the file as part of a DB.
+ FileType file_type = kTempFile;
+
+ // File size in bytes. See also `trim_to_size`.
+ uint64_t size = 0;
+
+ // This feature is experimental and subject to change.
+ Temperature temperature = Temperature::kUnknown;
- // The size of this column family in bytes, which is equal to the sum of
- // the file size of its "levels".
- uint64_t size;
- // The number of files in this column family.
- size_t file_count;
- // The name of the column family.
- std::string name;
- // The metadata of all levels in this column family.
- std::vector<LevelMetaData> levels;
-};
+ // The checksum of a SST file, the value is decided by the file content and
+ // the checksum algorithm used for this SST file. The checksum function is
+ // identified by the file_checksum_func_name. If the checksum function is
+ // not specified, file_checksum is "0" by default.
+ std::string file_checksum;
-// The metadata that describes a level.
-struct LevelMetaData {
- LevelMetaData(int _level, uint64_t _size,
- const std::vector<SstFileMetaData>&& _files)
- : level(_level), size(_size), files(_files) {}
+ // The name of the checksum function used to generate the file checksum
+ // value. If file checksum is not enabled (e.g., sst_file_checksum_func is
+ // null), file_checksum_func_name is UnknownFileChecksumFuncName, which is
+ // "Unknown".
+ std::string file_checksum_func_name;
+};
- // The level which this meta data describes.
- const int level;
- // The size of this level in bytes, which is equal to the sum of
- // the file size of its "files".
- const uint64_t size;
- // The metadata of all sst files in this level.
- const std::vector<SstFileMetaData> files;
+// Adds to FileStorageInfo the ability to capture the state of files that
+// might change in a running DB.
+struct LiveFileStorageInfo : public FileStorageInfo {
+ // If non-empty, this string represents the "saved" contents of the file
+ // for the current context. (This field is used for checkpointing CURRENT
+ // file.) In that case, size == replacement_contents.size() and file on disk
+ // should be ignored. If empty string, the file on disk should still have
+ // "saved" contents. (See trim_to_size.)
+ std::string replacement_contents;
+
+ // If true, the file on disk is allowed to be larger than `size` but only
+ // the first `size` bytes should be used for the current context. If false,
+ // the file is corrupt if size on disk does not equal `size`.
+ bool trim_to_size = false;
};
-// The metadata that describes a SST file.
-struct SstFileMetaData {
- SstFileMetaData()
- : size(0),
- file_number(0),
- smallest_seqno(0),
- largest_seqno(0),
- num_reads_sampled(0),
- being_compacted(false),
- num_entries(0),
- num_deletions(0),
- oldest_blob_file_number(0),
- oldest_ancester_time(0),
- file_creation_time(0) {}
+// The metadata that describes an SST file. (Does not need to extend
+// LiveFileStorageInfo because SST files are always immutable.)
+struct SstFileMetaData : public FileStorageInfo {
+ SstFileMetaData() { file_type = kTableFile; }
SstFileMetaData(const std::string& _file_name, uint64_t _file_number,
- const std::string& _path, size_t _size,
+ const std::string& _directory, uint64_t _size,
SequenceNumber _smallest_seqno, SequenceNumber _largest_seqno,
const std::string& _smallestkey,
const std::string& _largestkey, uint64_t _num_reads_sampled,
- bool _being_compacted, uint64_t _oldest_blob_file_number,
+ bool _being_compacted, Temperature _temperature,
+ uint64_t _oldest_blob_file_number,
uint64_t _oldest_ancester_time, uint64_t _file_creation_time,
std::string& _file_checksum,
std::string& _file_checksum_func_name)
- : size(_size),
- name(_file_name),
- file_number(_file_number),
- db_path(_path),
- smallest_seqno(_smallest_seqno),
+ : smallest_seqno(_smallest_seqno),
largest_seqno(_largest_seqno),
smallestkey(_smallestkey),
largestkey(_largestkey),
num_deletions(0),
oldest_blob_file_number(_oldest_blob_file_number),
oldest_ancester_time(_oldest_ancester_time),
- file_creation_time(_file_creation_time),
- file_checksum(_file_checksum),
- file_checksum_func_name(_file_checksum_func_name) {}
-
- // File size in bytes.
- size_t size;
- // The name of the file.
- std::string name;
- // The id of the file.
- uint64_t file_number;
- // The full path where the file locates.
- std::string db_path;
-
- SequenceNumber smallest_seqno; // Smallest sequence number in file.
- SequenceNumber largest_seqno; // Largest sequence number in file.
- std::string smallestkey; // Smallest user defined key in the file.
- std::string largestkey; // Largest user defined key in the file.
- uint64_t num_reads_sampled; // How many times the file is read.
- bool being_compacted; // true if the file is currently being compacted.
-
- uint64_t num_entries;
- uint64_t num_deletions;
-
- uint64_t oldest_blob_file_number; // The id of the oldest blob file
- // referenced by the file.
+ file_creation_time(_file_creation_time) {
+ if (!_file_name.empty()) {
+ if (_file_name[0] == '/') {
+ relative_filename = _file_name.substr(1);
+ name = _file_name; // Deprecated field
+ } else {
+ relative_filename = _file_name;
+ name = std::string("/") + _file_name; // Deprecated field
+ }
+ assert(relative_filename.size() + 1 == name.size());
+ assert(relative_filename[0] != '/');
+ assert(name[0] == '/');
+ }
+ directory = _directory;
+ db_path = _directory; // Deprecated field
+ file_number = _file_number;
+ file_type = kTableFile;
+ size = _size;
+ temperature = _temperature;
+ file_checksum = _file_checksum;
+ file_checksum_func_name = _file_checksum_func_name;
+ }
+
+ SequenceNumber smallest_seqno = 0; // Smallest sequence number in file.
+ SequenceNumber largest_seqno = 0; // Largest sequence number in file.
+ std::string smallestkey; // Smallest user defined key in the file.
+ std::string largestkey; // Largest user defined key in the file.
+ uint64_t num_reads_sampled = 0; // How many times the file is read.
+ bool being_compacted =
+ false; // true if the file is currently being compacted.
+
+ uint64_t num_entries = 0;
+ uint64_t num_deletions = 0;
+
+ uint64_t oldest_blob_file_number = 0; // The id of the oldest blob file
+ // referenced by the file.
// An SST file may be generated by compactions whose input files may
// in turn be generated by earlier compactions. The creation time of the
- // oldest SST file that is the compaction ancester of this file.
- // The timestamp is provided Env::GetCurrentTime().
+ // oldest SST file that is the compaction ancestor of this file.
+ // The timestamp is provided SystemClock::GetCurrentTime().
// 0 if the information is not available.
//
// Note: for TTL blob files, it contains the start of the expiration range.
- uint64_t oldest_ancester_time;
- // Timestamp when the SST file is created, provided by Env::GetCurrentTime().
- // 0 if the information is not available.
- uint64_t file_creation_time;
-
- // The checksum of a SST file, the value is decided by the file content and
- // the checksum algorithm used for this SST file. The checksum function is
- // identified by the file_checksum_func_name. If the checksum function is
- // not specified, file_checksum is "0" by default.
- std::string file_checksum;
+ uint64_t oldest_ancester_time = 0;
+ // Timestamp when the SST file is created, provided by
+ // SystemClock::GetCurrentTime(). 0 if the information is not available.
+ uint64_t file_creation_time = 0;
+
+ // DEPRECATED: The name of the file within its directory with a
+ // leading slash (e.g. "/123456.sst"). Use relative_filename from base struct
+ // instead.
+ std::string name;
- // The name of the checksum function used to generate the file checksum
- // value. If file checksum is not enabled (e.g., sst_file_checksum_func is
- // null), file_checksum_func_name is UnknownFileChecksumFuncName, which is
- // "Unknown".
- std::string file_checksum_func_name;
+ // DEPRECATED: replaced by `directory` in base struct
+ std::string db_path;
};
// The full set of metadata associated with each SST file.
LiveFileMetaData() : column_family_name(), level(0) {}
};
+// The MetaData that describes a Blob file
+struct BlobMetaData {
+ BlobMetaData()
+ : blob_file_number(0),
+ blob_file_size(0),
+ total_blob_count(0),
+ total_blob_bytes(0),
+ garbage_blob_count(0),
+ garbage_blob_bytes(0) {}
+
+ BlobMetaData(uint64_t _file_number, const std::string& _file_name,
+ const std::string& _file_path, uint64_t _file_size,
+ uint64_t _total_blob_count, uint64_t _total_blob_bytes,
+ uint64_t _garbage_blob_count, uint64_t _garbage_blob_bytes,
+ const std::string& _file_checksum,
+ const std::string& _file_checksum_func_name)
+ : blob_file_number(_file_number),
+ blob_file_name(_file_name),
+ blob_file_path(_file_path),
+ blob_file_size(_file_size),
+ total_blob_count(_total_blob_count),
+ total_blob_bytes(_total_blob_bytes),
+ garbage_blob_count(_garbage_blob_count),
+ garbage_blob_bytes(_garbage_blob_bytes),
+ checksum_method(_file_checksum),
+ checksum_value(_file_checksum_func_name) {}
+ uint64_t blob_file_number;
+ std::string blob_file_name;
+ std::string blob_file_path;
+ uint64_t blob_file_size;
+ uint64_t total_blob_count;
+ uint64_t total_blob_bytes;
+ uint64_t garbage_blob_count;
+ uint64_t garbage_blob_bytes;
+ std::string checksum_method;
+ std::string checksum_value;
+};
+
+// The metadata that describes a level.
+struct LevelMetaData {
+ LevelMetaData(int _level, uint64_t _size,
+ const std::vector<SstFileMetaData>&& _files)
+ : level(_level), size(_size), files(_files) {}
+
+ // The level which this meta data describes.
+ const int level;
+ // The size of this level in bytes, which is equal to the sum of
+ // the file size of its "files".
+ const uint64_t size;
+ // The metadata of all sst files in this level.
+ const std::vector<SstFileMetaData> files;
+};
+
+// The metadata that describes a column family.
+struct ColumnFamilyMetaData {
+ ColumnFamilyMetaData() : size(0), file_count(0), name("") {}
+ ColumnFamilyMetaData(const std::string& _name, uint64_t _size,
+ const std::vector<LevelMetaData>&& _levels)
+ : size(_size), name(_name), levels(_levels) {}
+
+ // The size of this column family in bytes, which is equal to the sum of
+ // the file size of its "levels".
+ uint64_t size;
+ // The number of files in this column family.
+ size_t file_count;
+ // The name of the column family.
+ std::string name;
+ // The metadata of all levels in this column family.
+ std::vector<LevelMetaData> levels;
+
+ // The total size of all blob files
+ uint64_t blob_file_size = 0;
+ // The number of blob files in this column family.
+ size_t blob_file_count = 0;
+ // The metadata of the blobs in this column family.
+ std::vector<BlobMetaData> blob_files;
+};
+
// Metadata returned as output from ExportColumnFamily() and used as input to
// CreateColumnFamiliesWithImport().
struct ExportImportFilesMetaData {