mirror of https://github.com/facebook/rocksdb.git
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:
parent
e9c74bc474
commit
560906ab33
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue