Add a simple example of backup and restore (#10054)

Summary:
Add a simple example of backup and restore

Signed-off-by: YiteGu <ess_gyt@qq.com>

Pull Request resolved: https://github.com/facebook/rocksdb/pull/10054

Reviewed By: jay-zhuang

Differential Revision: D36678141

Pulled By: ajkr

fbshipit-source-id: 43545356baddb4c2c76c62cd63d7a3238d1f8a00
This commit is contained in:
yite.gu 2022-06-03 23:25:31 -07:00 committed by Facebook GitHub Bot
parent e9c74bc474
commit 560906ab33
2 changed files with 104 additions and 2 deletions

View File

@ -16,7 +16,7 @@ CFLAGS += -Wstrict-prototypes
.PHONY: clean librocksdb
all: simple_example column_families_example compact_files_example c_simple_example optimistic_transaction_example transaction_example compaction_filter_example options_file_example
all: simple_example column_families_example compact_files_example c_simple_example optimistic_transaction_example transaction_example compaction_filter_example options_file_example rocksdb_backup_restore_example
simple_example: librocksdb simple_example.cc
$(CXX) $(CXXFLAGS) $@.cc -o$@ ../librocksdb.a -I../include -O2 -std=c++17 $(PLATFORM_LDFLAGS) $(PLATFORM_CXXFLAGS) $(EXEC_LDFLAGS)
@ -48,8 +48,11 @@ options_file_example: librocksdb options_file_example.cc
multi_processes_example: librocksdb multi_processes_example.cc
$(CXX) $(CXXFLAGS) $@.cc -o$@ ../librocksdb.a -I../include -O2 -std=c++17 $(PLATFORM_LDFLAGS) $(PLATFORM_CXXFLAGS) $(EXEC_LDFLAGS)
rocksdb_backup_restore_example: librocksdb rocksdb_backup_restore_example.cc
$(CXX) $(CXXFLAGS) $@.cc -o$@ ../librocksdb.a -I../include -O2 -std=c++17 $(PLATFORM_LDFLAGS) $(PLATFORM_CXXFLAGS) $(EXEC_LDFLAGS)
clean:
rm -rf ./simple_example ./column_families_example ./compact_files_example ./compaction_filter_example ./c_simple_example c_simple_example.o ./optimistic_transaction_example ./transaction_example ./options_file_example ./multi_processes_example
rm -rf ./simple_example ./column_families_example ./compact_files_example ./compaction_filter_example ./c_simple_example c_simple_example.o ./optimistic_transaction_example ./transaction_example ./options_file_example ./multi_processes_example ./rocksdb_backup_restore_example
librocksdb:
cd .. && $(MAKE) static_lib

View File

@ -0,0 +1,99 @@
// Copyright (c) 2011-present, Facebook, Inc. 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).
#include <cstdio>
#include <string>
#include <vector>
#include "rocksdb/db.h"
#include "rocksdb/options.h"
#include "rocksdb/utilities/backup_engine.h"
using ROCKSDB_NAMESPACE::BackupEngine;
using ROCKSDB_NAMESPACE::BackupEngineOptions;
using ROCKSDB_NAMESPACE::BackupEngineReadOnly;
using ROCKSDB_NAMESPACE::BackupInfo;
using ROCKSDB_NAMESPACE::DB;
using ROCKSDB_NAMESPACE::Env;
using ROCKSDB_NAMESPACE::Options;
using ROCKSDB_NAMESPACE::ReadOptions;
using ROCKSDB_NAMESPACE::Status;
using ROCKSDB_NAMESPACE::WriteOptions;
#if defined(OS_WIN)
std::string kDBPath = "C:\\Windows\\TEMP\\rocksdb_example";
#else
std::string kDBPath = "/tmp/rocksdb_example";
#endif
int main() {
DB* db;
Options options;
// Optimize RocksDB. This is the easiest way to get RocksDB to perform well
options.IncreaseParallelism();
options.OptimizeLevelStyleCompaction();
// create the DB if it's not already present
options.create_if_missing = true;
// open DB
Status s = DB::Open(options, kDBPath, &db);
assert(s.ok());
// Put key-value
db->Put(WriteOptions(), "key1", "value1");
assert(s.ok());
// create backup
BackupEngine* backup_engine;
s = BackupEngine::Open(Env::Default(),
BackupEngineOptions("/tmp/rocksdb_example_backup"),
&backup_engine);
assert(s.ok());
backup_engine->CreateNewBackup(db);
assert(s.ok());
std::vector<BackupInfo> backup_info;
backup_engine->GetBackupInfo(&backup_info);
s = backup_engine->VerifyBackup(1);
assert(s.ok());
// Put key-value
db->Put(WriteOptions(), "key2", "value2");
assert(s.ok());
db->Close();
delete db;
db = nullptr;
// restore db to backup 1
BackupEngineReadOnly* backup_engine_ro;
s = BackupEngineReadOnly::Open(
Env::Default(), BackupEngineOptions("/tmp/rocksdb_example_backup"),
&backup_engine_ro);
assert(s.ok());
s = backup_engine_ro->RestoreDBFromBackup(1, "/tmp/rocksdb_example",
"/tmp/rocksdb_example");
assert(s.ok());
// open db again
s = DB::Open(options, kDBPath, &db);
assert(s.ok());
std::string value;
s = db->Get(ReadOptions(), "key1", &value);
assert(!s.IsNotFound());
s = db->Get(ReadOptions(), "key2", &value);
assert(s.IsNotFound());
delete backup_engine;
delete backup_engine_ro;
delete db;
return 0;
}