Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
indiff7643
Terarkdb
提交
ee4aa9a0
T
Terarkdb
项目概览
indiff7643
/
Terarkdb
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Terarkdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ee4aa9a0
编写于
2月 09, 2015
作者:
I
Igor Canadi
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #481 from mkevac/backupable
Allow creating and restoring backups from C
上级
bbb52b21
82faa377
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
215 addition
and
0 deletion
+215
-0
db/c.cc
db/c.cc
+98
-0
db/c_test.c
db/c_test.c
+42
-0
examples/c_simple_example.c
examples/c_simple_example.c
+22
-0
include/rocksdb/c.h
include/rocksdb/c.h
+53
-0
未找到文件。
db/c.cc
浏览文件 @
ee4aa9a0
...
...
@@ -29,6 +29,7 @@
#include "rocksdb/statistics.h"
#include "rocksdb/slice_transform.h"
#include "rocksdb/table.h"
#include "rocksdb/utilities/backupable_db.h"
using
rocksdb
::
Cache
;
using
rocksdb
::
ColumnFamilyDescriptor
;
...
...
@@ -69,12 +70,19 @@ using rocksdb::WritableFile;
using
rocksdb
::
WriteBatch
;
using
rocksdb
::
WriteOptions
;
using
rocksdb
::
LiveFileMetaData
;
using
rocksdb
::
BackupEngine
;
using
rocksdb
::
BackupableDBOptions
;
using
rocksdb
::
BackupInfo
;
using
rocksdb
::
RestoreOptions
;
using
std
::
shared_ptr
;
extern
"C"
{
struct
rocksdb_t
{
DB
*
rep
;
};
struct
rocksdb_backup_engine_t
{
BackupEngine
*
rep
;
};
struct
rocksdb_backup_engine_info_t
{
std
::
vector
<
BackupInfo
>
rep
;
};
struct
rocksdb_restore_options_t
{
RestoreOptions
rep
;
};
struct
rocksdb_iterator_t
{
Iterator
*
rep
;
};
struct
rocksdb_writebatch_t
{
WriteBatch
rep
;
};
struct
rocksdb_snapshot_t
{
const
Snapshot
*
rep
;
};
...
...
@@ -527,6 +535,96 @@ rocksdb_t* rocksdb_open_for_read_only(
return
result
;
}
rocksdb_backup_engine_t
*
rocksdb_backup_engine_open
(
const
rocksdb_options_t
*
options
,
const
char
*
path
,
char
**
errptr
)
{
BackupEngine
*
be
;
if
(
SaveError
(
errptr
,
BackupEngine
::
Open
(
options
->
rep
.
env
,
BackupableDBOptions
(
path
),
&
be
)))
{
return
nullptr
;
}
rocksdb_backup_engine_t
*
result
=
new
rocksdb_backup_engine_t
;
result
->
rep
=
be
;
return
result
;
}
void
rocksdb_backup_engine_create_new_backup
(
rocksdb_backup_engine_t
*
be
,
rocksdb_t
*
db
,
char
**
errptr
)
{
SaveError
(
errptr
,
be
->
rep
->
CreateNewBackup
(
db
->
rep
));
}
rocksdb_restore_options_t
*
rocksdb_restore_options_create
()
{
return
new
rocksdb_restore_options_t
;
}
void
rocksdb_restore_options_destroy
(
rocksdb_restore_options_t
*
opt
)
{
delete
opt
;
}
void
rocksdb_restore_options_set_keep_log_files
(
rocksdb_restore_options_t
*
opt
,
int
v
)
{
opt
->
rep
.
keep_log_files
=
v
;
}
void
rocksdb_backup_engine_restore_db_from_latest_backup
(
rocksdb_backup_engine_t
*
be
,
const
char
*
db_dir
,
const
char
*
wal_dir
,
const
rocksdb_restore_options_t
*
restore_options
,
char
**
errptr
)
{
SaveError
(
errptr
,
be
->
rep
->
RestoreDBFromLatestBackup
(
std
::
string
(
db_dir
),
std
::
string
(
wal_dir
),
restore_options
->
rep
));
}
const
rocksdb_backup_engine_info_t
*
rocksdb_backup_engine_get_backup_info
(
rocksdb_backup_engine_t
*
be
)
{
rocksdb_backup_engine_info_t
*
result
=
new
rocksdb_backup_engine_info_t
;
be
->
rep
->
GetBackupInfo
(
&
result
->
rep
);
return
result
;
}
int
rocksdb_backup_engine_info_count
(
const
rocksdb_backup_engine_info_t
*
info
)
{
return
static_cast
<
int
>
(
info
->
rep
.
size
());
}
const
int64_t
rocksdb_backup_engine_info_timestamp
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
)
{
return
info
->
rep
[
index
].
timestamp
;
}
const
uint32_t
rocksdb_backup_engine_info_backup_id
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
)
{
return
info
->
rep
[
index
].
backup_id
;
}
const
uint64_t
rocksdb_backup_engine_info_size
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
)
{
return
info
->
rep
[
index
].
size
;
}
const
uint32_t
rocksdb_backup_engine_info_number_files
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
)
{
return
info
->
rep
[
index
].
number_files
;
}
void
rocksdb_backup_engine_info_destroy
(
const
rocksdb_backup_engine_info_t
*
info
)
{
delete
info
;
}
void
rocksdb_backup_engine_close
(
rocksdb_backup_engine_t
*
be
)
{
delete
be
->
rep
;
delete
be
;
}
void
rocksdb_close
(
rocksdb_t
*
db
)
{
delete
db
->
rep
;
delete
db
;
...
...
db/c_test.c
浏览文件 @
ee4aa9a0
...
...
@@ -10,9 +10,11 @@
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <inttypes.h>
const
char
*
phase
=
""
;
static
char
dbname
[
200
];
static
char
dbbackupname
[
200
];
static
void
StartPhase
(
const
char
*
name
)
{
fprintf
(
stderr
,
"=== Test %s
\n
"
,
name
);
...
...
@@ -346,6 +348,11 @@ int main(int argc, char** argv) {
GetTempDir
(),
((
int
)
geteuid
()));
snprintf
(
dbbackupname
,
sizeof
(
dbbackupname
),
"%s/rocksdb_c_test-%d-backup"
,
GetTempDir
(),
((
int
)
geteuid
()));
StartPhase
(
"create_objects"
);
cmp
=
rocksdb_comparator_create
(
NULL
,
CmpDestroy
,
CmpCompare
,
CmpName
);
env
=
rocksdb_create_default_env
();
...
...
@@ -396,6 +403,41 @@ int main(int argc, char** argv) {
CheckNoError
(
err
);
CheckGet
(
db
,
roptions
,
"foo"
,
"hello"
);
StartPhase
(
"backup_and_restore"
);
{
rocksdb_destroy_db
(
options
,
dbbackupname
,
&
err
);
CheckNoError
(
err
);
rocksdb_backup_engine_t
*
be
=
rocksdb_backup_engine_open
(
options
,
dbbackupname
,
&
err
);
CheckNoError
(
err
);
rocksdb_backup_engine_create_new_backup
(
be
,
db
,
&
err
);
CheckNoError
(
err
);
rocksdb_delete
(
db
,
woptions
,
"foo"
,
3
,
&
err
);
CheckNoError
(
err
);
rocksdb_close
(
db
);
rocksdb_destroy_db
(
options
,
dbname
,
&
err
);
CheckNoError
(
err
);
rocksdb_restore_options_t
*
restore_options
=
rocksdb_restore_options_create
();
rocksdb_restore_options_set_keep_log_files
(
restore_options
,
0
);
rocksdb_backup_engine_restore_db_from_latest_backup
(
be
,
dbname
,
dbname
,
restore_options
,
&
err
);
CheckNoError
(
err
);
rocksdb_restore_options_destroy
(
restore_options
);
rocksdb_options_set_error_if_exists
(
options
,
0
);
db
=
rocksdb_open
(
options
,
dbname
,
&
err
);
CheckNoError
(
err
);
rocksdb_options_set_error_if_exists
(
options
,
1
);
CheckGet
(
db
,
roptions
,
"foo"
,
"hello"
);
rocksdb_backup_engine_close
(
be
);
}
StartPhase
(
"compactall"
);
rocksdb_compact_range
(
db
,
NULL
,
0
,
NULL
,
0
);
CheckGet
(
db
,
roptions
,
"foo"
,
"hello"
);
...
...
examples/c_simple_example.c
浏览文件 @
ee4aa9a0
...
...
@@ -8,9 +8,11 @@
#include <unistd.h> // sysconf() - get CPU count
const
char
DBPath
[]
=
"/tmp/rocksdb_simple_example"
;
const
char
DBBackupPath
[]
=
"/tmp/rocksdb_simple_example_backup"
;
int
main
(
int
argc
,
char
**
argv
)
{
rocksdb_t
*
db
;
rocksdb_backup_engine_t
*
be
;
rocksdb_options_t
*
options
=
rocksdb_options_create
();
// Optimize RocksDB. This is the easiest way to
// get RocksDB to perform well
...
...
@@ -25,6 +27,10 @@ int main(int argc, char **argv) {
db
=
rocksdb_open
(
options
,
DBPath
,
&
err
);
assert
(
!
err
);
// open Backup Engine that we will use for backing up or database
be
=
rocksdb_backup_engine_open
(
options
,
DBBackupPath
,
&
err
);
assert
(
!
err
);
// Put key-value
rocksdb_writeoptions_t
*
writeoptions
=
rocksdb_writeoptions_create
();
const
char
key
[]
=
"key"
;
...
...
@@ -41,10 +47,26 @@ int main(int argc, char **argv) {
assert
(
strcmp
(
returned_value
,
"value"
)
==
0
);
free
(
returned_value
);
// create new backup in a directory specified by DBBackupPath
rocksdb_backup_engine_create_new_backup
(
be
,
db
,
&
err
);
assert
(
!
err
);
rocksdb_close
(
db
);
// If something is wrong, you might want to restore data from last backup
rocksdb_restore_options_t
*
restore_options
=
rocksdb_restore_options_create
();
rocksdb_backup_engine_restore_db_from_latest_backup
(
be
,
DBPath
,
DBPath
,
restore_options
,
&
err
);
assert
(
!
err
);
rocksdb_restore_options_destroy
(
restore_options
);
db
=
rocksdb_open
(
options
,
DBPath
,
&
err
);
assert
(
!
err
);
// cleanup
rocksdb_writeoptions_destroy
(
writeoptions
);
rocksdb_readoptions_destroy
(
readoptions
);
rocksdb_options_destroy
(
options
);
rocksdb_backup_engine_close
(
be
);
rocksdb_close
(
db
);
return
0
;
...
...
include/rocksdb/c.h
浏览文件 @
ee4aa9a0
...
...
@@ -55,6 +55,9 @@ extern "C" {
/* Exported types */
typedef
struct
rocksdb_t
rocksdb_t
;
typedef
struct
rocksdb_backup_engine_t
rocksdb_backup_engine_t
;
typedef
struct
rocksdb_backup_engine_info_t
rocksdb_backup_engine_info_t
;
typedef
struct
rocksdb_restore_options_t
rocksdb_restore_options_t
;
typedef
struct
rocksdb_cache_t
rocksdb_cache_t
;
typedef
struct
rocksdb_compactionfilter_t
rocksdb_compactionfilter_t
;
typedef
struct
rocksdb_compactionfiltercontext_t
...
...
@@ -104,6 +107,56 @@ extern rocksdb_t* rocksdb_open_for_read_only(
unsigned
char
error_if_log_file_exist
,
char
**
errptr
);
extern
rocksdb_backup_engine_t
*
rocksdb_backup_engine_open
(
const
rocksdb_options_t
*
options
,
const
char
*
path
,
char
**
errptr
);
extern
void
rocksdb_backup_engine_create_new_backup
(
rocksdb_backup_engine_t
*
be
,
rocksdb_t
*
db
,
char
**
errptr
);
extern
rocksdb_restore_options_t
*
rocksdb_restore_options_create
();
extern
void
rocksdb_restore_options_destroy
(
rocksdb_restore_options_t
*
opt
);
extern
void
rocksdb_restore_options_set_keep_log_files
(
rocksdb_restore_options_t
*
opt
,
int
v
);
extern
void
rocksdb_backup_engine_restore_db_from_latest_backup
(
rocksdb_backup_engine_t
*
be
,
const
char
*
db_dir
,
const
char
*
wal_dir
,
const
rocksdb_restore_options_t
*
restore_options
,
char
**
errptr
);
extern
const
rocksdb_backup_engine_info_t
*
rocksdb_backup_engine_get_backup_info
(
rocksdb_backup_engine_t
*
be
);
extern
int
rocksdb_backup_engine_info_count
(
const
rocksdb_backup_engine_info_t
*
info
);
extern
const
int64_t
rocksdb_backup_engine_info_timestamp
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
);
extern
const
uint32_t
rocksdb_backup_engine_info_backup_id
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
);
extern
const
uint64_t
rocksdb_backup_engine_info_size
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
);
extern
const
uint32_t
rocksdb_backup_engine_info_number_files
(
const
rocksdb_backup_engine_info_t
*
info
,
int
index
);
extern
void
rocksdb_backup_engine_info_destroy
(
const
rocksdb_backup_engine_info_t
*
info
);
extern
void
rocksdb_backup_engine_close
(
rocksdb_backup_engine_t
*
be
);
extern
rocksdb_t
*
rocksdb_open_column_families
(
const
rocksdb_options_t
*
options
,
const
char
*
name
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录