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: 43545356baddb4c2c76c62cd63d7a3238d1f8a00main
parent
e9c74bc474
commit
560906ab33
@ -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