forked from facebook/rocksdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrocksdb_backup_restore_example.cc
99 lines (79 loc) · 2.57 KB
/
rocksdb_backup_restore_example.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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;
}