cff0d1e8e6
Summary: The primary goal of this change is to add support for backing up and restoring (applying on restore) file temperature metadata, without committing to either the DB manifest or the FS reported "current" temperatures being exclusive "source of truth". To achieve this goal, we need to add temperature information to backup metadata, which requires updated backup meta schema. Fortunately I prepared for this in https://github.com/facebook/rocksdb/issues/8069, which began forward compatibility in version 6.19.0 for this kind of schema update. (Previously, backup meta schema was not extensible! Making this schema update public will allow some other "nice to have" features like taking backups with hard links, and avoiding crc32c checksum computation when another checksum is already available.) While schema version 2 is newly public, the default schema version is still 1. Until we change the default, users will need to set to 2 to enable features like temperature data backup+restore. New metadata like temperature information will be ignored with a warning in versions before this change and since 6.19.0. The metadata is considered ignorable because a functioning DB can be restored without it. Some detail: * Some renaming because "future schema" is now just public schema 2. * Initialize some atomics in TestFs (linter reported) * Add temperature hint support to SstFileDumper (used by BackupEngine) Pull Request resolved: https://github.com/facebook/rocksdb/pull/9660 Test Plan: related unit test majorly updated for the new functionality, including some shared testing support for tracking temperatures in a FS. Some other tests and testing hooks into production code also updated for making the backup meta schema change public. Reviewed By: ajkr Differential Revision: D34686968 Pulled By: pdillinger fbshipit-source-id: 3ac1fa3e67ee97ca8a5103d79cc87d872c1d862a
30 lines
1.0 KiB
C++
30 lines
1.0 KiB
C++
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
|
|
#pragma once
|
|
#ifndef ROCKSDB_LITE
|
|
|
|
#include "rocksdb/utilities/backup_engine.h"
|
|
|
|
namespace ROCKSDB_NAMESPACE {
|
|
|
|
struct TEST_BackupMetaSchemaOptions {
|
|
std::string version = "2";
|
|
bool crc32c_checksums = false;
|
|
bool file_sizes = true;
|
|
std::map<std::string, std::string> meta_fields;
|
|
std::map<std::string, std::string> file_fields;
|
|
std::map<std::string, std::string> footer_fields;
|
|
};
|
|
|
|
// Modifies the BackupEngine(Impl) to write backup meta files using the
|
|
// unpublished schema version 2, for the life of this object (not backup_dir).
|
|
// TEST_BackupMetaSchemaOptions offers some customization for testing.
|
|
void TEST_SetBackupMetaSchemaOptions(
|
|
BackupEngine *engine, const TEST_BackupMetaSchemaOptions &options);
|
|
|
|
} // namespace ROCKSDB_NAMESPACE
|
|
#endif // ROCKSDB_LITE
|