Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
kvdb
rocksdb
提交
24fdc474
R
rocksdb
项目概览
kvdb
/
rocksdb
12 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rocksdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
24fdc474
编写于
11月 15, 2014
作者:
F
fyrz
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[RocksJava] Backupable/Restorable DB update 3.8.0
- GarbageCollectMethod() available. - GetCorruptedBackups() available.
上级
9972f969
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
152 addition
and
1 deletion
+152
-1
java/org/rocksdb/BackupableDB.java
java/org/rocksdb/BackupableDB.java
+26
-0
java/org/rocksdb/RestoreBackupableDB.java
java/org/rocksdb/RestoreBackupableDB.java
+27
-1
java/org/rocksdb/test/BackupableDBTest.java
java/org/rocksdb/test/BackupableDBTest.java
+6
-0
java/rocksjni/backupablejni.cc
java/rocksjni/backupablejni.cc
+46
-0
java/rocksjni/restorejni.cc
java/rocksjni/restorejni.cc
+47
-0
未找到文件。
java/org/rocksdb/BackupableDB.java
浏览文件 @
24fdc474
...
...
@@ -92,6 +92,29 @@ public class BackupableDB extends RocksDB {
return
getBackupInfo
(
nativeHandle_
);
}
/**
* <p>Returns a list of corrupted backup ids. If there
* is no corrupted backup the method will return an
* empty list.</p>
*
* @return list of backup ids as Integer.
*/
public
List
<
Integer
>
getCorruptedBackups
()
{
return
getCorruptedBackups
(
nativeHandle_
);
}
/**
* <p>Will delete all the files we don't need anymore. It will
* do the full scan of the files/ directory and delete all the
* files that are not referenced.</p>
*
* @throws RocksDBException thrown if error happens in underlying
* native library.
*/
public
void
garbageCollect
()
throws
RocksDBException
{
garbageCollect
(
nativeHandle_
);
}
/**
* Close the BackupableDB instance and release resource.
*
...
...
@@ -126,4 +149,7 @@ public class BackupableDB extends RocksDB {
private
native
void
deleteBackup0
(
long
nativeHandle
,
int
backupId
)
throws
RocksDBException
;
protected
native
List
<
BackupInfo
>
getBackupInfo
(
long
handle
);
private
native
List
<
Integer
>
getCorruptedBackups
(
long
handle
);
private
native
void
garbageCollect
(
long
handle
)
throws
RocksDBException
;
}
java/org/rocksdb/RestoreBackupableDB.java
浏览文件 @
24fdc474
...
...
@@ -101,6 +101,29 @@ public class RestoreBackupableDB extends RocksObject {
return
getBackupInfo
(
nativeHandle_
);
}
/**
* <p>Returns a list of corrupted backup ids. If there
* is no corrupted backup the method will return an
* empty list.</p>
*
* @return list of backup ids as Integer.
*/
public
List
<
Integer
>
getCorruptedBackups
()
{
return
getCorruptedBackups
(
nativeHandle_
);
}
/**
* <p>Will delete all the files we don't need anymore. It will
* do the full scan of the files/ directory and delete all the
* files that are not referenced.</p>
*
* @throws RocksDBException thrown if error happens in underlying
* native library.
*/
public
void
garbageCollect
()
throws
RocksDBException
{
garbageCollect
(
nativeHandle_
);
}
/**
* Release the memory allocated for the current instance
* in the c++ side.
...
...
@@ -121,6 +144,9 @@ public class RestoreBackupableDB extends RocksObject {
throws
RocksDBException
;
private
native
void
deleteBackup0
(
long
nativeHandle
,
int
backupId
)
throws
RocksDBException
;
protected
native
List
<
BackupInfo
>
getBackupInfo
(
long
handle
);
private
native
List
<
BackupInfo
>
getBackupInfo
(
long
handle
);
private
native
List
<
Integer
>
getCorruptedBackups
(
long
handle
);
private
native
void
garbageCollect
(
long
handle
)
throws
RocksDBException
;
private
native
void
dispose
(
long
nativeHandle
);
}
java/org/rocksdb/test/BackupableDBTest.java
浏览文件 @
24fdc474
...
...
@@ -56,6 +56,9 @@ public class BackupableDBTest {
isEqualTo
(
0
);
bdb
.
createNewBackup
(
true
);
assertThat
(
bdb
.
getCorruptedBackups
().
size
()).
isEqualTo
(
0
);
bdb
.
garbageCollect
();
backupInfos
=
bdb
.
getBackupInfos
();
assertThat
(
backupInfos
.
size
()).
isEqualTo
(
1
);
...
...
@@ -102,6 +105,9 @@ public class BackupableDBTest {
ropt
);
// do nothing because there is only one backup
rdb
.
purgeOldBackups
(
1
);
rdb
.
garbageCollect
();
assertThat
(
rdb
.
getCorruptedBackups
().
size
()).
isEqualTo
(
0
);
restoreInfos
=
rdb
.
getBackupInfos
();
assertThat
(
restoreInfos
.
size
()).
isEqualTo
(
1
);
...
...
java/rocksjni/backupablejni.cc
浏览文件 @
24fdc474
...
...
@@ -92,6 +92,52 @@ jobject Java_org_rocksdb_BackupableDB_getBackupInfo(
backup_infos
);
}
/*
* Class: org_rocksdb_BackupableDB
* Method: getCorruptedBackups
* Signature: (J)Ljava/util/List;
*/
jobject
Java_org_rocksdb_BackupableDB_getCorruptedBackups
(
JNIEnv
*
env
,
jobject
jbdb
,
jlong
jhandle
)
{
std
::
vector
<
rocksdb
::
BackupID
>
backup_ids
;
reinterpret_cast
<
rocksdb
::
BackupableDB
*>
(
jhandle
)
->
GetCorruptedBackups
(
&
backup_ids
);
jclass
jclazz
=
env
->
FindClass
(
"java/util/ArrayList"
);
jmethodID
mid
=
rocksdb
::
ListJni
::
getArrayListConstructorMethodId
(
env
,
jclazz
);
jobject
jbackup_id_handle_list
=
env
->
NewObject
(
jclazz
,
mid
,
backup_ids
.
size
());
// insert in java list
for
(
std
::
vector
<
rocksdb
::
BackupID
>::
size_type
i
=
0
;
i
!=
backup_ids
.
size
();
i
++
)
{
// convert BackupID to Integer
jclass
jIntClazz
=
env
->
FindClass
(
"java/lang/Integer"
);
jmethodID
midLong
=
env
->
GetMethodID
(
jIntClazz
,
"<init>"
,
"(I)V"
);
jobject
obj
=
env
->
NewObject
(
jIntClazz
,
midLong
,
(
backup_ids
[
i
]));
// add Integer to List
env
->
CallBooleanMethod
(
jbackup_id_handle_list
,
rocksdb
::
ListJni
::
getListAddMethodId
(
env
),
obj
);
}
return
jbackup_id_handle_list
;
}
/*
* Class: org_rocksdb_BackupableDB
* Method: garbageCollect
* Signature: (J)V
*/
void
Java_org_rocksdb_BackupableDB_garbageCollect
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
jhandle
)
{
auto
db
=
reinterpret_cast
<
rocksdb
::
BackupableDB
*>
(
jhandle
);
rocksdb
::
Status
s
=
db
->
GarbageCollect
();
if
(
!
s
.
ok
())
{
rocksdb
::
RocksDBExceptionJni
::
ThrowNew
(
env
,
s
);
}
}
///////////////////////////////////////////////////////////////////////////
// BackupDBOptions
...
...
java/rocksjni/restorejni.cc
浏览文件 @
24fdc474
...
...
@@ -145,6 +145,53 @@ jobject Java_org_rocksdb_RestoreBackupableDB_getBackupInfo(
backup_infos
);
}
/*
* Class: org_rocksdb_RestoreBackupableDB
* Method: getCorruptedBackups
* Signature: (J)Ljava/util/List;
*/
jobject
Java_org_rocksdb_RestoreBackupableDB_getCorruptedBackups
(
JNIEnv
*
env
,
jobject
jbdb
,
jlong
jhandle
)
{
std
::
vector
<
rocksdb
::
BackupID
>
backup_ids
;
reinterpret_cast
<
rocksdb
::
RestoreBackupableDB
*>
(
jhandle
)
->
GetCorruptedBackups
(
&
backup_ids
);
jclass
jclazz
=
env
->
FindClass
(
"java/util/ArrayList"
);
jmethodID
mid
=
rocksdb
::
ListJni
::
getArrayListConstructorMethodId
(
env
,
jclazz
);
jobject
jbackup_id_handle_list
=
env
->
NewObject
(
jclazz
,
mid
,
backup_ids
.
size
());
// insert in java list
for
(
std
::
vector
<
rocksdb
::
BackupID
>::
size_type
i
=
0
;
i
!=
backup_ids
.
size
();
i
++
)
{
// convert BackupID to Integer
jclass
jIntClazz
=
env
->
FindClass
(
"java/lang/Integer"
);
jmethodID
midLong
=
env
->
GetMethodID
(
jIntClazz
,
"<init>"
,
"(I)V"
);
jobject
obj
=
env
->
NewObject
(
jIntClazz
,
midLong
,
(
backup_ids
[
i
]));
// add Integer to List
env
->
CallBooleanMethod
(
jbackup_id_handle_list
,
rocksdb
::
ListJni
::
getListAddMethodId
(
env
),
obj
);
}
return
jbackup_id_handle_list
;
}
/*
* Class: org_rocksdb_RestoreBackupableDB
* Method: garbageCollect
* Signature: (J)V
*/
void
Java_org_rocksdb_RestoreBackupableDB_garbageCollect
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
jhandle
)
{
auto
db
=
reinterpret_cast
<
rocksdb
::
RestoreBackupableDB
*>
(
jhandle
);
rocksdb
::
Status
s
=
db
->
GarbageCollect
();
if
(
!
s
.
ok
())
{
rocksdb
::
RocksDBExceptionJni
::
ThrowNew
(
env
,
s
);
}
}
/*
* Class: org_rocksdb_RestoreBackupableDB
* Method: dispose
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录