[RocksJava] Integrated review comments from D28209
This commit is contained in:
parent
a4b28c1ae7
commit
628e39e97d
@ -66,6 +66,7 @@ JAVA_TESTS = org.rocksdb.test.AbstractComparatorTest\
|
||||
org.rocksdb.test.PlainTableConfigTest\
|
||||
org.rocksdb.test.ReadOnlyTest\
|
||||
org.rocksdb.test.ReadOptionsTest\
|
||||
org.rocksdb.test.RocksEnvTest\
|
||||
org.rocksdb.test.RocksIteratorTest\
|
||||
org.rocksdb.test.SnapshotTest\
|
||||
org.rocksdb.test.StatisticsCollectorTest\
|
||||
@ -112,11 +113,11 @@ column_family_sample: java
|
||||
|
||||
resolve_test_deps:
|
||||
mkdir -p "$(JAVA_TEST_LIBDIR)"
|
||||
test -s "$(JAVA_JUNIT_JAR)" || curl -L -o $(JAVA_JUNIT_JAR) http://search.maven.org/remotecontent?filepath=junit/junit/4.12-beta-2/junit-4.12-beta-2.jar
|
||||
test -s "$(JAVA_HAMCR_JAR)" || curl -L -o $(JAVA_HAMCR_JAR) http://search.maven.org/remotecontent?filepath=org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
|
||||
test -s "$(JAVA_MOCKITO_JAR)" || curl -L -o "$(JAVA_MOCKITO_JAR)" http://search.maven.org/remotecontent?filepath=org/mockito/mockito-all/1.9.5/mockito-all-1.9.5.jar
|
||||
test -s "$(JAVA_CGLIB_JAR)" || curl -L -o "$(JAVA_CGLIB_JAR)" http://search.maven.org/remotecontent?filepath=cglib/cglib/2.2.2/cglib-2.2.2.jar
|
||||
test -s "$(JAVA_ASSERTJ_JAR)" || curl -L -o "$(JAVA_ASSERTJ_JAR)" http://central.maven.org/maven2/org/assertj/assertj-core/1.7.0/assertj-core-1.7.0.jar
|
||||
test -s "$(JAVA_JUNIT_JAR)" || curl -k -L -o $(JAVA_JUNIT_JAR) http://search.maven.org/remotecontent?filepath=junit/junit/4.12-beta-2/junit-4.12-beta-2.jar
|
||||
test -s "$(JAVA_HAMCR_JAR)" || curl -k -L -o $(JAVA_HAMCR_JAR) http://search.maven.org/remotecontent?filepath=org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar
|
||||
test -s "$(JAVA_MOCKITO_JAR)" || curl -k -L -o "$(JAVA_MOCKITO_JAR)" http://search.maven.org/remotecontent?filepath=org/mockito/mockito-all/1.9.5/mockito-all-1.9.5.jar
|
||||
test -s "$(JAVA_CGLIB_JAR)" || curl -k -L -o "$(JAVA_CGLIB_JAR)" http://search.maven.org/remotecontent?filepath=cglib/cglib/2.2.2/cglib-2.2.2.jar
|
||||
test -s "$(JAVA_ASSERTJ_JAR)" || curl -k -L -o "$(JAVA_ASSERTJ_JAR)" http://central.maven.org/maven2/org/assertj/assertj-core/1.7.0/assertj-core-1.7.0.jar
|
||||
|
||||
test: java resolve_test_deps
|
||||
javac -cp $(JAVA_TESTCLASSPATH) org/rocksdb/test/*.java
|
||||
|
@ -1010,7 +1010,6 @@ public class Options extends RocksObject
|
||||
long cfOptHandle);
|
||||
private native void disposeInternal(long handle);
|
||||
private native void setEnv(long optHandle, long envHandle);
|
||||
private native long getEnvHandle(long handle);
|
||||
private native void prepareForBulkLoad(long handle);
|
||||
|
||||
// DB native handles
|
||||
|
@ -29,117 +29,137 @@ public class BackupableDBTest {
|
||||
|
||||
@Test
|
||||
public void backupableDb() throws RocksDBException {
|
||||
Options opt = null;
|
||||
BackupableDBOptions bopt = null;
|
||||
BackupableDB bdb = null;
|
||||
RestoreOptions ropt = null;
|
||||
RestoreBackupableDB rdb = null;
|
||||
try {
|
||||
opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
|
||||
Options opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
bopt = new BackupableDBOptions(
|
||||
backupFolder.getRoot().getAbsolutePath(), false,
|
||||
true, false, true, 0, 0);
|
||||
assertThat(bopt.backupDir()).isEqualTo(
|
||||
backupFolder.getRoot().getAbsolutePath());
|
||||
|
||||
BackupableDBOptions bopt = new BackupableDBOptions(
|
||||
backupFolder.getRoot().getAbsolutePath(), false,
|
||||
true, false, true, 0, 0);
|
||||
BackupableDB bdb;
|
||||
List<BackupInfo> backupInfos;
|
||||
List<BackupInfo> restoreInfos;
|
||||
List<BackupInfo> backupInfos;
|
||||
List<BackupInfo> restoreInfos;
|
||||
|
||||
bdb = BackupableDB.open(opt, bopt,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
bdb.put("abc".getBytes(), "def".getBytes());
|
||||
bdb.put("ghi".getBytes(), "jkl".getBytes());
|
||||
bdb = BackupableDB.open(opt, bopt,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
bdb.put("abc".getBytes(), "def".getBytes());
|
||||
bdb.put("ghi".getBytes(), "jkl".getBytes());
|
||||
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(0);
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(0);
|
||||
|
||||
bdb.createNewBackup(true);
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(1);
|
||||
bdb.createNewBackup(true);
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(1);
|
||||
|
||||
// Retrieving backup infos twice shall not
|
||||
// lead to different results
|
||||
List<BackupInfo> tmpBackupInfo = bdb.getBackupInfos();
|
||||
assertThat(tmpBackupInfo.get(0).backupId()).
|
||||
isEqualTo(backupInfos.get(0).backupId());
|
||||
assertThat(tmpBackupInfo.get(0).timestamp()).
|
||||
isEqualTo(backupInfos.get(0).timestamp());
|
||||
assertThat(tmpBackupInfo.get(0).size()).
|
||||
isEqualTo(backupInfos.get(0).size());
|
||||
assertThat(tmpBackupInfo.get(0).numberFiles()).
|
||||
isEqualTo(backupInfos.get(0).numberFiles());
|
||||
// Retrieving backup infos twice shall not
|
||||
// lead to different results
|
||||
List<BackupInfo> tmpBackupInfo = bdb.getBackupInfos();
|
||||
assertThat(tmpBackupInfo.get(0).backupId()).
|
||||
isEqualTo(backupInfos.get(0).backupId());
|
||||
assertThat(tmpBackupInfo.get(0).timestamp()).
|
||||
isEqualTo(backupInfos.get(0).timestamp());
|
||||
assertThat(tmpBackupInfo.get(0).size()).
|
||||
isEqualTo(backupInfos.get(0).size());
|
||||
assertThat(tmpBackupInfo.get(0).numberFiles()).
|
||||
isEqualTo(backupInfos.get(0).numberFiles());
|
||||
|
||||
// delete record after backup
|
||||
bdb.remove("abc".getBytes());
|
||||
byte[] value = bdb.get("abc".getBytes());
|
||||
assertThat(value).isNull();
|
||||
bdb.close();
|
||||
// delete record after backup
|
||||
bdb.remove("abc".getBytes());
|
||||
byte[] value = bdb.get("abc".getBytes());
|
||||
assertThat(value).isNull();
|
||||
bdb.close();
|
||||
|
||||
// restore from backup
|
||||
RestoreOptions ropt = new RestoreOptions(false);
|
||||
RestoreBackupableDB rdb = new RestoreBackupableDB(bopt);
|
||||
// restore from backup
|
||||
ropt = new RestoreOptions(false);
|
||||
rdb = new RestoreBackupableDB(bopt);
|
||||
|
||||
// getting backup infos from restorable db should
|
||||
// lead to the same infos as from backupable db
|
||||
restoreInfos = rdb.getBackupInfos();
|
||||
assertThat(restoreInfos.size()).
|
||||
isEqualTo(backupInfos.size());
|
||||
assertThat(restoreInfos.get(0).backupId()).
|
||||
isEqualTo(backupInfos.get(0).backupId());
|
||||
assertThat(restoreInfos.get(0).timestamp()).
|
||||
isEqualTo(backupInfos.get(0).timestamp());
|
||||
assertThat(restoreInfos.get(0).size()).
|
||||
isEqualTo(backupInfos.get(0).size());
|
||||
assertThat(restoreInfos.get(0).numberFiles()).
|
||||
isEqualTo(backupInfos.get(0).numberFiles());
|
||||
// getting backup infos from restorable db should
|
||||
// lead to the same infos as from backupable db
|
||||
restoreInfos = rdb.getBackupInfos();
|
||||
assertThat(restoreInfos.size()).
|
||||
isEqualTo(backupInfos.size());
|
||||
assertThat(restoreInfos.get(0).backupId()).
|
||||
isEqualTo(backupInfos.get(0).backupId());
|
||||
assertThat(restoreInfos.get(0).timestamp()).
|
||||
isEqualTo(backupInfos.get(0).timestamp());
|
||||
assertThat(restoreInfos.get(0).size()).
|
||||
isEqualTo(backupInfos.get(0).size());
|
||||
assertThat(restoreInfos.get(0).numberFiles()).
|
||||
isEqualTo(backupInfos.get(0).numberFiles());
|
||||
|
||||
rdb.restoreDBFromLatestBackup(
|
||||
dbFolder.getRoot().getAbsolutePath(),
|
||||
dbFolder.getRoot().getAbsolutePath(),
|
||||
ropt);
|
||||
// do nothing because there is only one backup
|
||||
rdb.purgeOldBackups(1);
|
||||
restoreInfos = rdb.getBackupInfos();
|
||||
assertThat(restoreInfos.size()).
|
||||
isEqualTo(1);
|
||||
rdb.dispose();
|
||||
ropt.dispose();
|
||||
rdb.restoreDBFromLatestBackup(
|
||||
dbFolder.getRoot().getAbsolutePath(),
|
||||
dbFolder.getRoot().getAbsolutePath(),
|
||||
ropt);
|
||||
// do nothing because there is only one backup
|
||||
rdb.purgeOldBackups(1);
|
||||
restoreInfos = rdb.getBackupInfos();
|
||||
assertThat(restoreInfos.size()).
|
||||
isEqualTo(1);
|
||||
rdb.dispose();
|
||||
ropt.dispose();
|
||||
|
||||
// verify that backed up data contains deleted record
|
||||
bdb = BackupableDB.open(opt, bopt,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
value = bdb.get("abc".getBytes());
|
||||
assertThat(new String(value)).
|
||||
isEqualTo("def");
|
||||
// verify that backed up data contains deleted record
|
||||
bdb = BackupableDB.open(opt, bopt,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
value = bdb.get("abc".getBytes());
|
||||
assertThat(new String(value)).
|
||||
isEqualTo("def");
|
||||
|
||||
bdb.createNewBackup(false);
|
||||
// after new backup there must be two backup infos
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(2);
|
||||
// deleting the backup must be possible using the
|
||||
// id provided by backup infos
|
||||
bdb.deleteBackup(backupInfos.get(1).backupId());
|
||||
// after deletion there should only be one info
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(1);
|
||||
bdb.createNewBackup(false);
|
||||
bdb.createNewBackup(false);
|
||||
bdb.createNewBackup(false);
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(4);
|
||||
// purge everything and keep two
|
||||
bdb.purgeOldBackups(2);
|
||||
// backup infos need to be two
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(2);
|
||||
assertThat(backupInfos.get(0).backupId()).
|
||||
isEqualTo(4);
|
||||
assertThat(backupInfos.get(1).backupId()).
|
||||
isEqualTo(5);
|
||||
|
||||
opt.dispose();
|
||||
bopt.dispose();
|
||||
bdb.close();
|
||||
bdb.createNewBackup(false);
|
||||
// after new backup there must be two backup infos
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(2);
|
||||
// deleting the backup must be possible using the
|
||||
// id provided by backup infos
|
||||
bdb.deleteBackup(backupInfos.get(1).backupId());
|
||||
// after deletion there should only be one info
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(1);
|
||||
bdb.createNewBackup(false);
|
||||
bdb.createNewBackup(false);
|
||||
bdb.createNewBackup(false);
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(4);
|
||||
// purge everything and keep two
|
||||
bdb.purgeOldBackups(2);
|
||||
// backup infos need to be two
|
||||
backupInfos = bdb.getBackupInfos();
|
||||
assertThat(backupInfos.size()).
|
||||
isEqualTo(2);
|
||||
assertThat(backupInfos.get(0).backupId()).
|
||||
isEqualTo(4);
|
||||
assertThat(backupInfos.get(1).backupId()).
|
||||
isEqualTo(5);
|
||||
} finally {
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
if (bopt != null) {
|
||||
bopt.dispose();
|
||||
}
|
||||
if (bdb != null) {
|
||||
bdb.close();
|
||||
}
|
||||
if (ropt != null) {
|
||||
ropt.dispose();
|
||||
}
|
||||
if (rdb != null) {
|
||||
rdb.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -54,113 +54,138 @@ public class ComparatorTest {
|
||||
@Test
|
||||
public void builtinForwardComparator()
|
||||
throws RocksDBException {
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options.setComparator(BuiltinComparator.BYTEWISE_COMPARATOR);
|
||||
RocksDB rocksDB = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
Options options = null;
|
||||
RocksDB rocksDB = null;
|
||||
RocksIterator rocksIterator = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options.setComparator(BuiltinComparator.BYTEWISE_COMPARATOR);
|
||||
rocksDB = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
|
||||
rocksDB.put("abc1".getBytes(), "abc1".getBytes());
|
||||
rocksDB.put("abc2".getBytes(), "abc2".getBytes());
|
||||
rocksDB.put("abc3".getBytes(), "abc3".getBytes());
|
||||
rocksDB.put("abc1".getBytes(), "abc1".getBytes());
|
||||
rocksDB.put("abc2".getBytes(), "abc2".getBytes());
|
||||
rocksDB.put("abc3".getBytes(), "abc3".getBytes());
|
||||
|
||||
RocksIterator rocksIterator = rocksDB.newIterator();
|
||||
// Iterate over keys using a iterator
|
||||
rocksIterator.seekToFirst();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isFalse();
|
||||
// Get last one
|
||||
rocksIterator.seekToLast();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
// Seek for abc
|
||||
rocksIterator.seek("abc".getBytes());
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
rocksIterator.dispose();
|
||||
rocksDB.close();
|
||||
options.dispose();
|
||||
rocksIterator = rocksDB.newIterator();
|
||||
// Iterate over keys using a iterator
|
||||
rocksIterator.seekToFirst();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isFalse();
|
||||
// Get last one
|
||||
rocksIterator.seekToLast();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
// Seek for abc
|
||||
rocksIterator.seek("abc".getBytes());
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
|
||||
} finally {
|
||||
if (rocksIterator != null) {
|
||||
rocksIterator.dispose();
|
||||
}
|
||||
if (rocksDB != null) {
|
||||
rocksDB.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void builtinReverseComparator()
|
||||
throws RocksDBException {
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options.setComparator(
|
||||
BuiltinComparator.REVERSE_BYTEWISE_COMPARATOR);
|
||||
RocksDB rocksDB = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
Options options = null;
|
||||
RocksDB rocksDB = null;
|
||||
RocksIterator rocksIterator = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options.setComparator(
|
||||
BuiltinComparator.REVERSE_BYTEWISE_COMPARATOR);
|
||||
rocksDB = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
|
||||
rocksDB.put("abc1".getBytes(), "abc1".getBytes());
|
||||
rocksDB.put("abc2".getBytes(), "abc2".getBytes());
|
||||
rocksDB.put("abc3".getBytes(), "abc3".getBytes());
|
||||
rocksDB.put("abc1".getBytes(), "abc1".getBytes());
|
||||
rocksDB.put("abc2".getBytes(), "abc2".getBytes());
|
||||
rocksDB.put("abc3".getBytes(), "abc3".getBytes());
|
||||
|
||||
RocksIterator rocksIterator = rocksDB.newIterator();
|
||||
// Iterate over keys using a iterator
|
||||
rocksIterator.seekToFirst();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isFalse();
|
||||
// Get last one
|
||||
rocksIterator.seekToLast();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
// Will be invalid because abc is after abc1
|
||||
rocksIterator.seek("abc".getBytes());
|
||||
assertThat(rocksIterator.isValid()).isFalse();
|
||||
// Will be abc3 because the next one after abc999
|
||||
// is abc3
|
||||
rocksIterator.seek("abc999".getBytes());
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
rocksIterator.dispose();
|
||||
rocksDB.close();
|
||||
options.dispose();
|
||||
rocksIterator = rocksDB.newIterator();
|
||||
// Iterate over keys using a iterator
|
||||
rocksIterator.seekToFirst();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc2".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
rocksIterator.next();
|
||||
assertThat(rocksIterator.isValid()).isFalse();
|
||||
// Get last one
|
||||
rocksIterator.seekToLast();
|
||||
assertThat(rocksIterator.isValid()).isTrue();
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc1".getBytes());
|
||||
// Will be invalid because abc is after abc1
|
||||
rocksIterator.seek("abc".getBytes());
|
||||
assertThat(rocksIterator.isValid()).isFalse();
|
||||
// Will be abc3 because the next one after abc999
|
||||
// is abc3
|
||||
rocksIterator.seek("abc999".getBytes());
|
||||
assertThat(rocksIterator.key()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
assertThat(rocksIterator.value()).isEqualTo(
|
||||
"abc3".getBytes());
|
||||
} finally {
|
||||
if (rocksIterator != null) {
|
||||
rocksIterator.dispose();
|
||||
}
|
||||
if (rocksDB != null) {
|
||||
rocksDB.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -17,25 +17,32 @@ public class FilterTest {
|
||||
|
||||
@Test
|
||||
public void filter() {
|
||||
Options options = new Options();
|
||||
// test table config
|
||||
options.setTableFormatConfig(new BlockBasedTableConfig().
|
||||
setFilter(new BloomFilter()));
|
||||
options.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// new Bloom filter
|
||||
options = new Options();
|
||||
BlockBasedTableConfig blockConfig = new BlockBasedTableConfig();
|
||||
blockConfig.setFilter(new BloomFilter());
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
BloomFilter bloomFilter = new BloomFilter(10);
|
||||
blockConfig.setFilter(bloomFilter);
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
blockConfig.setFilter(new BloomFilter(10, false));
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
options.dispose();
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
// test table config
|
||||
options.setTableFormatConfig(new BlockBasedTableConfig().
|
||||
setFilter(new BloomFilter()));
|
||||
options.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// new Bloom filter
|
||||
options = new Options();
|
||||
BlockBasedTableConfig blockConfig = new BlockBasedTableConfig();
|
||||
blockConfig.setFilter(new BloomFilter());
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
BloomFilter bloomFilter = new BloomFilter(10);
|
||||
blockConfig.setFilter(bloomFilter);
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
blockConfig.setFilter(new BloomFilter(10, false));
|
||||
options.setTableFormatConfig(blockConfig);
|
||||
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ public class KeyMayExistTest {
|
||||
|
||||
@Test
|
||||
public void keyMayExist() throws RocksDBException {
|
||||
<<<<<<< HEAD
|
||||
RocksDB db;
|
||||
DBOptions options = new DBOptions();
|
||||
options.setCreateIfMissing(true)
|
||||
@ -49,23 +50,50 @@ public class KeyMayExistTest {
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
=======
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true)
|
||||
.setCreateMissingColumnFamilies(true);
|
||||
// open database using cf names
|
||||
List<String> cfNames = new ArrayList<>();
|
||||
List<ColumnFamilyHandle> columnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
cfNames.add("default");
|
||||
cfNames.add("new_cf");
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath(),
|
||||
cfNames, columnFamilyHandleList);
|
||||
assertThat(columnFamilyHandleList.size()).
|
||||
isEqualTo(2);
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
// Test without column family
|
||||
StringBuffer retValue = new StringBuffer();
|
||||
boolean exists = db.keyMayExist("key".getBytes(), retValue);
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
>>>>>>> [RocksJava] Integrated review comments from D28209
|
||||
|
||||
// Test without column family but with readOptions
|
||||
retValue = new StringBuffer();
|
||||
exists = db.keyMayExist(new ReadOptions(), "key".getBytes(),
|
||||
retValue);
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
// Test without column family but with readOptions
|
||||
retValue = new StringBuffer();
|
||||
exists = db.keyMayExist(new ReadOptions(), "key".getBytes(),
|
||||
retValue);
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
|
||||
// Test with column family
|
||||
retValue = new StringBuffer();
|
||||
exists = db.keyMayExist(columnFamilyHandleList.get(0), "key".getBytes(),
|
||||
retValue);
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
// Test with column family
|
||||
retValue = new StringBuffer();
|
||||
exists = db.keyMayExist(columnFamilyHandleList.get(0), "key".getBytes(),
|
||||
retValue);
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
|
||||
<<<<<<< HEAD
|
||||
// Test with column family and readOptions
|
||||
retValue = new StringBuffer();
|
||||
exists = db.keyMayExist(new ReadOptions(),
|
||||
@ -74,9 +102,27 @@ public class KeyMayExistTest {
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
=======
|
||||
// Test with column family and readOptions
|
||||
retValue = new StringBuffer();
|
||||
exists = db.keyMayExist(new ReadOptions(),
|
||||
columnFamilyHandleList.get(0), "key".getBytes(),
|
||||
retValue);
|
||||
assertThat(exists).isTrue();
|
||||
assertThat(retValue.toString()).
|
||||
isEqualTo("value");
|
||||
>>>>>>> [RocksJava] Integrated review comments from D28209
|
||||
|
||||
// KeyMayExist in CF1 must return false
|
||||
assertThat(db.keyMayExist(columnFamilyHandleList.get(1),
|
||||
"key".getBytes(), retValue)).isFalse();
|
||||
// KeyMayExist in CF1 must return false
|
||||
assertThat(db.keyMayExist(columnFamilyHandleList.get(1),
|
||||
"key".getBytes(), retValue)).isFalse();
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,94 +18,121 @@ public class MemTableTest {
|
||||
new RocksMemoryResource();
|
||||
|
||||
@Test
|
||||
public void memTable() throws RocksDBException {
|
||||
Options options = new Options();
|
||||
// Test HashSkipListMemTableConfig
|
||||
HashSkipListMemTableConfig memTableConfig =
|
||||
new HashSkipListMemTableConfig();
|
||||
assertThat(memTableConfig.bucketCount()).
|
||||
isEqualTo(1000000);
|
||||
memTableConfig.setBucketCount(2000000);
|
||||
assertThat(memTableConfig.bucketCount()).
|
||||
isEqualTo(2000000);
|
||||
assertThat(memTableConfig.height()).
|
||||
isEqualTo(4);
|
||||
memTableConfig.setHeight(5);
|
||||
assertThat(memTableConfig.height()).
|
||||
isEqualTo(5);
|
||||
assertThat(memTableConfig.branchingFactor()).
|
||||
isEqualTo(4);
|
||||
memTableConfig.setBranchingFactor(6);
|
||||
assertThat(memTableConfig.branchingFactor()).
|
||||
isEqualTo(6);
|
||||
options.setMemTableConfig(memTableConfig);
|
||||
options.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// Test SkipList
|
||||
options = new Options();
|
||||
SkipListMemTableConfig skipMemTableConfig =
|
||||
new SkipListMemTableConfig();
|
||||
assertThat(skipMemTableConfig.lookahead()).
|
||||
isEqualTo(0);
|
||||
skipMemTableConfig.setLookahead(20);
|
||||
assertThat(skipMemTableConfig.lookahead()).
|
||||
isEqualTo(20);
|
||||
options.setMemTableConfig(skipMemTableConfig);
|
||||
options.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// Test HashLinkedListMemTableConfig
|
||||
options = new Options();
|
||||
HashLinkedListMemTableConfig hashLinkedListMemTableConfig =
|
||||
new HashLinkedListMemTableConfig();
|
||||
assertThat(hashLinkedListMemTableConfig.bucketCount()).
|
||||
isEqualTo(50000);
|
||||
hashLinkedListMemTableConfig.setBucketCount(100000);
|
||||
assertThat(hashLinkedListMemTableConfig.bucketCount()).
|
||||
isEqualTo(100000);
|
||||
assertThat(hashLinkedListMemTableConfig.hugePageTlbSize()).
|
||||
isEqualTo(0);
|
||||
hashLinkedListMemTableConfig.setHugePageTlbSize(1);
|
||||
assertThat(hashLinkedListMemTableConfig.hugePageTlbSize()).
|
||||
isEqualTo(1);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
bucketEntriesLoggingThreshold()).
|
||||
isEqualTo(4096);
|
||||
hashLinkedListMemTableConfig.
|
||||
setBucketEntriesLoggingThreshold(200);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
bucketEntriesLoggingThreshold()).
|
||||
isEqualTo(200);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
ifLogBucketDistWhenFlush()).isTrue();
|
||||
hashLinkedListMemTableConfig.
|
||||
setIfLogBucketDistWhenFlush(false);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
ifLogBucketDistWhenFlush()).isFalse();
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
thresholdUseSkiplist()).
|
||||
isEqualTo(256);
|
||||
hashLinkedListMemTableConfig.setThresholdUseSkiplist(29);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
thresholdUseSkiplist()).
|
||||
isEqualTo(29);
|
||||
options.setMemTableConfig(hashLinkedListMemTableConfig);
|
||||
options.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test VectorMemTableConfig
|
||||
options = new Options();
|
||||
VectorMemTableConfig vectorMemTableConfig =
|
||||
new VectorMemTableConfig();
|
||||
assertThat(vectorMemTableConfig.reservedSize()).
|
||||
isEqualTo(0);
|
||||
vectorMemTableConfig.setReservedSize(123);
|
||||
assertThat(vectorMemTableConfig.reservedSize()).
|
||||
isEqualTo(123);
|
||||
options.setMemTableConfig(vectorMemTableConfig);
|
||||
options.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
public void hashSkipListMemTable() throws RocksDBException {
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
// Test HashSkipListMemTableConfig
|
||||
HashSkipListMemTableConfig memTableConfig =
|
||||
new HashSkipListMemTableConfig();
|
||||
assertThat(memTableConfig.bucketCount()).
|
||||
isEqualTo(1000000);
|
||||
memTableConfig.setBucketCount(2000000);
|
||||
assertThat(memTableConfig.bucketCount()).
|
||||
isEqualTo(2000000);
|
||||
assertThat(memTableConfig.height()).
|
||||
isEqualTo(4);
|
||||
memTableConfig.setHeight(5);
|
||||
assertThat(memTableConfig.height()).
|
||||
isEqualTo(5);
|
||||
assertThat(memTableConfig.branchingFactor()).
|
||||
isEqualTo(4);
|
||||
memTableConfig.setBranchingFactor(6);
|
||||
assertThat(memTableConfig.branchingFactor()).
|
||||
isEqualTo(6);
|
||||
options.setMemTableConfig(memTableConfig);
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void skipListMemTable() throws RocksDBException {
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
SkipListMemTableConfig skipMemTableConfig =
|
||||
new SkipListMemTableConfig();
|
||||
assertThat(skipMemTableConfig.lookahead()).
|
||||
isEqualTo(0);
|
||||
skipMemTableConfig.setLookahead(20);
|
||||
assertThat(skipMemTableConfig.lookahead()).
|
||||
isEqualTo(20);
|
||||
options.setMemTableConfig(skipMemTableConfig);
|
||||
options.dispose();
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hashLinkedListMemTable() throws RocksDBException {
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
HashLinkedListMemTableConfig hashLinkedListMemTableConfig =
|
||||
new HashLinkedListMemTableConfig();
|
||||
assertThat(hashLinkedListMemTableConfig.bucketCount()).
|
||||
isEqualTo(50000);
|
||||
hashLinkedListMemTableConfig.setBucketCount(100000);
|
||||
assertThat(hashLinkedListMemTableConfig.bucketCount()).
|
||||
isEqualTo(100000);
|
||||
assertThat(hashLinkedListMemTableConfig.hugePageTlbSize()).
|
||||
isEqualTo(0);
|
||||
hashLinkedListMemTableConfig.setHugePageTlbSize(1);
|
||||
assertThat(hashLinkedListMemTableConfig.hugePageTlbSize()).
|
||||
isEqualTo(1);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
bucketEntriesLoggingThreshold()).
|
||||
isEqualTo(4096);
|
||||
hashLinkedListMemTableConfig.
|
||||
setBucketEntriesLoggingThreshold(200);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
bucketEntriesLoggingThreshold()).
|
||||
isEqualTo(200);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
ifLogBucketDistWhenFlush()).isTrue();
|
||||
hashLinkedListMemTableConfig.
|
||||
setIfLogBucketDistWhenFlush(false);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
ifLogBucketDistWhenFlush()).isFalse();
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
thresholdUseSkiplist()).
|
||||
isEqualTo(256);
|
||||
hashLinkedListMemTableConfig.setThresholdUseSkiplist(29);
|
||||
assertThat(hashLinkedListMemTableConfig.
|
||||
thresholdUseSkiplist()).
|
||||
isEqualTo(29);
|
||||
options.setMemTableConfig(hashLinkedListMemTableConfig);
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void vectorMemTable() throws RocksDBException {
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
VectorMemTableConfig vectorMemTableConfig =
|
||||
new VectorMemTableConfig();
|
||||
assertThat(vectorMemTableConfig.reservedSize()).
|
||||
isEqualTo(0);
|
||||
vectorMemTableConfig.setReservedSize(123);
|
||||
assertThat(vectorMemTableConfig.reservedSize()).
|
||||
isEqualTo(123);
|
||||
options.setMemTableConfig(vectorMemTableConfig);
|
||||
options.dispose();
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,180 +28,227 @@ public class MergeTest {
|
||||
@Test
|
||||
public void stringOption()
|
||||
throws InterruptedException, RocksDBException {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
Options opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
opt.setMergeOperatorName("stringappend");
|
||||
RocksDB db = null;
|
||||
Options opt = null;
|
||||
try {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
opt.setMergeOperatorName("stringappend");
|
||||
|
||||
RocksDB db = RocksDB.open(opt, db_path_string);
|
||||
// writing aa under key
|
||||
db.put("key".getBytes(), "aa".getBytes());
|
||||
// merge bb under key
|
||||
db.merge("key".getBytes(), "bb".getBytes());
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
// writing aa under key
|
||||
db.put("key".getBytes(), "aa".getBytes());
|
||||
// merge bb under key
|
||||
db.merge("key".getBytes(), "bb".getBytes());
|
||||
|
||||
byte[] value = db.get("key".getBytes());
|
||||
String strValue = new String(value);
|
||||
|
||||
db.close();
|
||||
opt.dispose();
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
byte[] value = db.get("key".getBytes());
|
||||
String strValue = new String(value);
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cFStringOption()
|
||||
throws InterruptedException, RocksDBException {
|
||||
DBOptions opt = new DBOptions();
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
opt.setCreateIfMissing(true);
|
||||
opt.setCreateMissingColumnFamilies(true);
|
||||
|
||||
List<ColumnFamilyDescriptor> cfDescr =
|
||||
new ArrayList<>();
|
||||
RocksDB db = null;
|
||||
DBOptions opt = null;
|
||||
List<ColumnFamilyHandle> columnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
cfDescr.add(new ColumnFamilyDescriptor("default",
|
||||
new ColumnFamilyOptions().setMergeOperatorName(
|
||||
"stringappend")));
|
||||
cfDescr.add(new ColumnFamilyDescriptor("default",
|
||||
new ColumnFamilyOptions().setMergeOperatorName(
|
||||
"stringappend")));
|
||||
RocksDB db = RocksDB.open(opt, db_path_string,
|
||||
cfDescr, columnFamilyHandleList);
|
||||
new ArrayList<>();
|
||||
try {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
opt = new DBOptions();
|
||||
opt.setCreateIfMissing(true);
|
||||
opt.setCreateMissingColumnFamilies(true);
|
||||
|
||||
// writing aa under key
|
||||
db.put(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "aa".getBytes());
|
||||
// merge bb under key
|
||||
db.merge(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "bb".getBytes());
|
||||
List<ColumnFamilyDescriptor> cfDescriptors =
|
||||
new ArrayList<>();
|
||||
cfDescriptors.add(new ColumnFamilyDescriptor("default",
|
||||
new ColumnFamilyOptions().setMergeOperatorName(
|
||||
"stringappend")));
|
||||
cfDescriptors.add(new ColumnFamilyDescriptor("default",
|
||||
new ColumnFamilyOptions().setMergeOperatorName(
|
||||
"stringappend")));
|
||||
db = RocksDB.open(opt, db_path_string,
|
||||
cfDescriptors, columnFamilyHandleList);
|
||||
|
||||
byte[] value = db.get(columnFamilyHandleList.get(1), "cfkey".getBytes());
|
||||
String strValue = new String(value);
|
||||
// writing aa under key
|
||||
db.put(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "aa".getBytes());
|
||||
// merge bb under key
|
||||
db.merge(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "bb".getBytes());
|
||||
|
||||
for (ColumnFamilyHandle handle : columnFamilyHandleList) {
|
||||
handle.dispose();
|
||||
byte[] value = db.get(columnFamilyHandleList.get(1), "cfkey".getBytes());
|
||||
String strValue = new String(value);
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
} finally {
|
||||
for (ColumnFamilyHandle handle : columnFamilyHandleList) {
|
||||
handle.dispose();
|
||||
}
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
db.close();
|
||||
opt.dispose();
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void operatorOption()
|
||||
throws InterruptedException, RocksDBException {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
Options opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
RocksDB db = null;
|
||||
Options opt = null;
|
||||
try {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
|
||||
StringAppendOperator stringAppendOperator = new StringAppendOperator();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
StringAppendOperator stringAppendOperator = new StringAppendOperator();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
|
||||
RocksDB db = RocksDB.open(opt, db_path_string);
|
||||
// Writing aa under key
|
||||
db.put("key".getBytes(), "aa".getBytes());
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
// Writing aa under key
|
||||
db.put("key".getBytes(), "aa".getBytes());
|
||||
|
||||
// Writing bb under key
|
||||
db.merge("key".getBytes(), "bb".getBytes());
|
||||
// Writing bb under key
|
||||
db.merge("key".getBytes(), "bb".getBytes());
|
||||
|
||||
byte[] value = db.get("key".getBytes());
|
||||
String strValue = new String(value);
|
||||
byte[] value = db.get("key".getBytes());
|
||||
String strValue = new String(value);
|
||||
|
||||
db.close();
|
||||
opt.dispose();
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cFOperatorOption()
|
||||
throws InterruptedException, RocksDBException {
|
||||
DBOptions opt = new DBOptions();
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
RocksDB db = null;
|
||||
DBOptions opt = null;
|
||||
ColumnFamilyHandle columnFamilyHandle = null;
|
||||
try {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
opt = new DBOptions();
|
||||
opt.setCreateIfMissing(true);
|
||||
opt.setCreateMissingColumnFamilies(true);
|
||||
StringAppendOperator stringAppendOperator = new StringAppendOperator();
|
||||
|
||||
opt.setCreateIfMissing(true);
|
||||
opt.setCreateMissingColumnFamilies(true);
|
||||
StringAppendOperator stringAppendOperator = new StringAppendOperator();
|
||||
List<ColumnFamilyDescriptor> cfDescriptors =
|
||||
new ArrayList<>();
|
||||
List<ColumnFamilyHandle> columnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
cfDescriptors.add(new ColumnFamilyDescriptor("default",
|
||||
new ColumnFamilyOptions().setMergeOperator(
|
||||
stringAppendOperator)));
|
||||
cfDescriptors.add(new ColumnFamilyDescriptor("new_cf",
|
||||
new ColumnFamilyOptions().setMergeOperator(
|
||||
stringAppendOperator)));
|
||||
db = RocksDB.open(opt, db_path_string,
|
||||
cfDescriptors, columnFamilyHandleList);
|
||||
|
||||
List<ColumnFamilyDescriptor> cfDescr =
|
||||
new ArrayList<>();
|
||||
List<ColumnFamilyHandle> columnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
cfDescr.add(new ColumnFamilyDescriptor("default",
|
||||
new ColumnFamilyOptions().setMergeOperator(
|
||||
stringAppendOperator)));
|
||||
cfDescr.add(new ColumnFamilyDescriptor("new_cf",
|
||||
new ColumnFamilyOptions().setMergeOperator(
|
||||
stringAppendOperator)));
|
||||
RocksDB db = RocksDB.open(opt, db_path_string,
|
||||
cfDescr, columnFamilyHandleList);
|
||||
// writing aa under key
|
||||
db.put(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "aa".getBytes());
|
||||
// merge bb under key
|
||||
db.merge(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "bb".getBytes());
|
||||
byte[] value = db.get(columnFamilyHandleList.get(1), "cfkey".getBytes());
|
||||
String strValue = new String(value);
|
||||
// writing aa under key
|
||||
db.put(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "aa".getBytes());
|
||||
// merge bb under key
|
||||
db.merge(columnFamilyHandleList.get(1),
|
||||
"cfkey".getBytes(), "bb".getBytes());
|
||||
byte[] value = db.get(columnFamilyHandleList.get(1), "cfkey".getBytes());
|
||||
String strValue = new String(value);
|
||||
|
||||
// Test also with createColumnFamily
|
||||
ColumnFamilyHandle columnFamilyHandle = db.createColumnFamily(
|
||||
new ColumnFamilyDescriptor("new_cf2",
|
||||
new ColumnFamilyOptions().setMergeOperator(
|
||||
new StringAppendOperator())));
|
||||
// writing xx under cfkey2
|
||||
db.put(columnFamilyHandle, "cfkey2".getBytes(), "xx".getBytes());
|
||||
// merge yy under cfkey2
|
||||
db.merge(columnFamilyHandle, "cfkey2".getBytes(), "yy".getBytes());
|
||||
value = db.get(columnFamilyHandle, "cfkey2".getBytes());
|
||||
String strValueTmpCf = new String(value);
|
||||
// Test also with createColumnFamily
|
||||
columnFamilyHandle = db.createColumnFamily(
|
||||
new ColumnFamilyDescriptor("new_cf2"));
|
||||
// writing xx under cfkey2
|
||||
db.put(columnFamilyHandle, "cfkey2".getBytes(), "xx".getBytes());
|
||||
// merge yy under cfkey2
|
||||
db.merge(columnFamilyHandle, "cfkey2".getBytes(), "yy".getBytes());
|
||||
value = db.get(columnFamilyHandle, "cfkey2".getBytes());
|
||||
String strValueTmpCf = new String(value);
|
||||
|
||||
columnFamilyHandle.dispose();
|
||||
db.close();
|
||||
opt.dispose();
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
assertThat(strValueTmpCf).isEqualTo("xx,yy");
|
||||
columnFamilyHandle.dispose();
|
||||
assertThat(strValue).isEqualTo("aa,bb");
|
||||
assertThat(strValueTmpCf).isEqualTo("xx,yy");
|
||||
} finally {
|
||||
if (columnFamilyHandle != null) {
|
||||
columnFamilyHandle.dispose();
|
||||
}
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void operatorGcBehaviour()
|
||||
throws RocksDBException {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
Options opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
StringAppendOperator stringAppendOperator = new StringAppendOperator();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
RocksDB db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test reuse
|
||||
opt = new Options();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test param init
|
||||
opt = new Options();
|
||||
opt.setMergeOperator(new StringAppendOperator());
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test replace one with another merge operator instance
|
||||
opt = new Options();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
StringAppendOperator newStringAppendOperator = new StringAppendOperator();
|
||||
opt.setMergeOperator(newStringAppendOperator);
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
Options opt = null;
|
||||
RocksDB db = null;
|
||||
try {
|
||||
String db_path_string =
|
||||
dbFolder.getRoot().getAbsolutePath();
|
||||
opt = new Options();
|
||||
opt.setCreateIfMissing(true);
|
||||
StringAppendOperator stringAppendOperator = new StringAppendOperator();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test reuse
|
||||
opt = new Options();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test param init
|
||||
opt = new Options();
|
||||
opt.setMergeOperator(new StringAppendOperator());
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
// test replace one with another merge operator instance
|
||||
opt = new Options();
|
||||
opt.setMergeOperator(stringAppendOperator);
|
||||
StringAppendOperator newStringAppendOperator = new StringAppendOperator();
|
||||
opt.setMergeOperator(newStringAppendOperator);
|
||||
db = RocksDB.open(opt, db_path_string);
|
||||
db.close();
|
||||
opt.dispose();
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,281 +21,350 @@ public class OptionsTest {
|
||||
|
||||
@Test
|
||||
public void options() throws RocksDBException {
|
||||
Options opt = new Options();
|
||||
Random rand = PlatformRandomHelper.
|
||||
getPlatformSpecificRandomFactory();
|
||||
Options opt = null;
|
||||
try {
|
||||
opt = new Options();
|
||||
Random rand = PlatformRandomHelper.
|
||||
getPlatformSpecificRandomFactory();
|
||||
DBOptionsTest.testDBOptions(opt);
|
||||
|
||||
DBOptionsTest.testDBOptions(opt);
|
||||
{ // WriteBufferSize test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setWriteBufferSize(longValue);
|
||||
assert (opt.writeBufferSize() == longValue);
|
||||
}
|
||||
|
||||
{ // WriteBufferSize test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setWriteBufferSize(longValue);
|
||||
assert(opt.writeBufferSize() == longValue);
|
||||
{ // MaxWriteBufferNumber test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxWriteBufferNumber(intValue);
|
||||
assert (opt.maxWriteBufferNumber() == intValue);
|
||||
}
|
||||
|
||||
{ // MinWriteBufferNumberToMerge test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMinWriteBufferNumberToMerge(intValue);
|
||||
assert (opt.minWriteBufferNumberToMerge() == intValue);
|
||||
}
|
||||
|
||||
{ // NumLevels test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setNumLevels(intValue);
|
||||
assert (opt.numLevels() == intValue);
|
||||
}
|
||||
|
||||
{ // LevelFileNumCompactionTrigger test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setLevelZeroFileNumCompactionTrigger(intValue);
|
||||
assert (opt.levelZeroFileNumCompactionTrigger() == intValue);
|
||||
}
|
||||
|
||||
{ // LevelSlowdownWritesTrigger test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setLevelZeroSlowdownWritesTrigger(intValue);
|
||||
assert (opt.levelZeroSlowdownWritesTrigger() == intValue);
|
||||
}
|
||||
|
||||
{ // LevelStopWritesTrigger test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setLevelZeroStopWritesTrigger(intValue);
|
||||
assert (opt.levelZeroStopWritesTrigger() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxMemCompactionLevel test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxMemCompactionLevel(intValue);
|
||||
assert (opt.maxMemCompactionLevel() == intValue);
|
||||
}
|
||||
|
||||
{ // TargetFileSizeBase test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setTargetFileSizeBase(longValue);
|
||||
assert (opt.targetFileSizeBase() == longValue);
|
||||
}
|
||||
|
||||
{ // TargetFileSizeMultiplier test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setTargetFileSizeMultiplier(intValue);
|
||||
assert (opt.targetFileSizeMultiplier() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxBytesForLevelBase test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setMaxBytesForLevelBase(longValue);
|
||||
assert (opt.maxBytesForLevelBase() == longValue);
|
||||
}
|
||||
|
||||
{ // MaxBytesForLevelMultiplier test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxBytesForLevelMultiplier(intValue);
|
||||
assert (opt.maxBytesForLevelMultiplier() == intValue);
|
||||
}
|
||||
|
||||
{ // ExpandedCompactionFactor test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setExpandedCompactionFactor(intValue);
|
||||
assert (opt.expandedCompactionFactor() == intValue);
|
||||
}
|
||||
|
||||
{ // SourceCompactionFactor test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setSourceCompactionFactor(intValue);
|
||||
assert (opt.sourceCompactionFactor() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxGrandparentOverlapFactor test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxGrandparentOverlapFactor(intValue);
|
||||
assert (opt.maxGrandparentOverlapFactor() == intValue);
|
||||
}
|
||||
|
||||
{ // SoftRateLimit test
|
||||
double doubleValue = rand.nextDouble();
|
||||
opt.setSoftRateLimit(doubleValue);
|
||||
assert (opt.softRateLimit() == doubleValue);
|
||||
}
|
||||
|
||||
{ // HardRateLimit test
|
||||
double doubleValue = rand.nextDouble();
|
||||
opt.setHardRateLimit(doubleValue);
|
||||
assert (opt.hardRateLimit() == doubleValue);
|
||||
}
|
||||
|
||||
{ // RateLimitDelayMaxMilliseconds test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setRateLimitDelayMaxMilliseconds(intValue);
|
||||
assert (opt.rateLimitDelayMaxMilliseconds() == intValue);
|
||||
}
|
||||
|
||||
{ // ArenaBlockSize test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setArenaBlockSize(longValue);
|
||||
assert (opt.arenaBlockSize() == longValue);
|
||||
}
|
||||
|
||||
{ // DisableAutoCompactions test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setDisableAutoCompactions(boolValue);
|
||||
assert (opt.disableAutoCompactions() == boolValue);
|
||||
}
|
||||
|
||||
{ // PurgeRedundantKvsWhileFlush test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setPurgeRedundantKvsWhileFlush(boolValue);
|
||||
assert (opt.purgeRedundantKvsWhileFlush() == boolValue);
|
||||
}
|
||||
|
||||
{ // VerifyChecksumsInCompaction test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setVerifyChecksumsInCompaction(boolValue);
|
||||
assert (opt.verifyChecksumsInCompaction() == boolValue);
|
||||
}
|
||||
|
||||
{ // FilterDeletes test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setFilterDeletes(boolValue);
|
||||
assert (opt.filterDeletes() == boolValue);
|
||||
}
|
||||
|
||||
{ // MaxSequentialSkipInIterations test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setMaxSequentialSkipInIterations(longValue);
|
||||
assert (opt.maxSequentialSkipInIterations() == longValue);
|
||||
}
|
||||
|
||||
{ // InplaceUpdateSupport test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setInplaceUpdateSupport(boolValue);
|
||||
assert (opt.inplaceUpdateSupport() == boolValue);
|
||||
}
|
||||
|
||||
{ // InplaceUpdateNumLocks test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setInplaceUpdateNumLocks(longValue);
|
||||
assert (opt.inplaceUpdateNumLocks() == longValue);
|
||||
}
|
||||
|
||||
{ // MemtablePrefixBloomBits test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMemtablePrefixBloomBits(intValue);
|
||||
assert (opt.memtablePrefixBloomBits() == intValue);
|
||||
}
|
||||
|
||||
{ // MemtablePrefixBloomProbes test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMemtablePrefixBloomProbes(intValue);
|
||||
assert (opt.memtablePrefixBloomProbes() == intValue);
|
||||
}
|
||||
|
||||
{ // BloomLocality test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setBloomLocality(intValue);
|
||||
assert (opt.bloomLocality() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxSuccessiveMerges test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setMaxSuccessiveMerges(longValue);
|
||||
assert (opt.maxSuccessiveMerges() == longValue);
|
||||
}
|
||||
|
||||
{ // MinPartialMergeOperands test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMinPartialMergeOperands(intValue);
|
||||
assert (opt.minPartialMergeOperands() == intValue);
|
||||
}
|
||||
} finally {
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{ // MaxWriteBufferNumber test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxWriteBufferNumber(intValue);
|
||||
assert(opt.maxWriteBufferNumber() == intValue);
|
||||
@Test
|
||||
public void rocksEnv() {
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
RocksEnv rocksEnv = RocksEnv.getDefault();
|
||||
options.setEnv(rocksEnv);
|
||||
assertThat(options.getEnv()).isSameAs(rocksEnv);
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
{ // MinWriteBufferNumberToMerge test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMinWriteBufferNumberToMerge(intValue);
|
||||
assert(opt.minWriteBufferNumberToMerge() == intValue);
|
||||
}
|
||||
|
||||
{ // NumLevels test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setNumLevels(intValue);
|
||||
assert(opt.numLevels() == intValue);
|
||||
}
|
||||
|
||||
{ // LevelFileNumCompactionTrigger test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setLevelZeroFileNumCompactionTrigger(intValue);
|
||||
assert(opt.levelZeroFileNumCompactionTrigger() == intValue);
|
||||
}
|
||||
|
||||
{ // LevelSlowdownWritesTrigger test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setLevelZeroSlowdownWritesTrigger(intValue);
|
||||
assert(opt.levelZeroSlowdownWritesTrigger() == intValue);
|
||||
}
|
||||
|
||||
{ // LevelStopWritesTrigger test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setLevelZeroStopWritesTrigger(intValue);
|
||||
assert(opt.levelZeroStopWritesTrigger() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxMemCompactionLevel test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxMemCompactionLevel(intValue);
|
||||
assert(opt.maxMemCompactionLevel() == intValue);
|
||||
}
|
||||
|
||||
{ // TargetFileSizeBase test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setTargetFileSizeBase(longValue);
|
||||
assert(opt.targetFileSizeBase() == longValue);
|
||||
}
|
||||
|
||||
{ // TargetFileSizeMultiplier test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setTargetFileSizeMultiplier(intValue);
|
||||
assert(opt.targetFileSizeMultiplier() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxBytesForLevelBase test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setMaxBytesForLevelBase(longValue);
|
||||
assert(opt.maxBytesForLevelBase() == longValue);
|
||||
}
|
||||
|
||||
{ // MaxBytesForLevelMultiplier test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxBytesForLevelMultiplier(intValue);
|
||||
assert(opt.maxBytesForLevelMultiplier() == intValue);
|
||||
}
|
||||
|
||||
{ // ExpandedCompactionFactor test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setExpandedCompactionFactor(intValue);
|
||||
assert(opt.expandedCompactionFactor() == intValue);
|
||||
}
|
||||
|
||||
{ // SourceCompactionFactor test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setSourceCompactionFactor(intValue);
|
||||
assert(opt.sourceCompactionFactor() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxGrandparentOverlapFactor test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMaxGrandparentOverlapFactor(intValue);
|
||||
assert(opt.maxGrandparentOverlapFactor() == intValue);
|
||||
}
|
||||
|
||||
{ // SoftRateLimit test
|
||||
double doubleValue = rand.nextDouble();
|
||||
opt.setSoftRateLimit(doubleValue);
|
||||
assert(opt.softRateLimit() == doubleValue);
|
||||
}
|
||||
|
||||
{ // HardRateLimit test
|
||||
double doubleValue = rand.nextDouble();
|
||||
opt.setHardRateLimit(doubleValue);
|
||||
assert(opt.hardRateLimit() == doubleValue);
|
||||
}
|
||||
|
||||
{ // RateLimitDelayMaxMilliseconds test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setRateLimitDelayMaxMilliseconds(intValue);
|
||||
assert(opt.rateLimitDelayMaxMilliseconds() == intValue);
|
||||
}
|
||||
|
||||
{ // ArenaBlockSize test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setArenaBlockSize(longValue);
|
||||
assert(opt.arenaBlockSize() == longValue);
|
||||
}
|
||||
|
||||
{ // DisableAutoCompactions test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setDisableAutoCompactions(boolValue);
|
||||
assert(opt.disableAutoCompactions() == boolValue);
|
||||
}
|
||||
|
||||
{ // PurgeRedundantKvsWhileFlush test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setPurgeRedundantKvsWhileFlush(boolValue);
|
||||
assert(opt.purgeRedundantKvsWhileFlush() == boolValue);
|
||||
}
|
||||
|
||||
{ // VerifyChecksumsInCompaction test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setVerifyChecksumsInCompaction(boolValue);
|
||||
assert(opt.verifyChecksumsInCompaction() == boolValue);
|
||||
}
|
||||
|
||||
{ // FilterDeletes test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setFilterDeletes(boolValue);
|
||||
assert(opt.filterDeletes() == boolValue);
|
||||
}
|
||||
|
||||
{ // MaxSequentialSkipInIterations test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setMaxSequentialSkipInIterations(longValue);
|
||||
assert(opt.maxSequentialSkipInIterations() == longValue);
|
||||
}
|
||||
|
||||
{ // InplaceUpdateSupport test
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setInplaceUpdateSupport(boolValue);
|
||||
assert(opt.inplaceUpdateSupport() == boolValue);
|
||||
}
|
||||
|
||||
{ // InplaceUpdateNumLocks test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setInplaceUpdateNumLocks(longValue);
|
||||
assert(opt.inplaceUpdateNumLocks() == longValue);
|
||||
}
|
||||
|
||||
{ // MemtablePrefixBloomBits test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMemtablePrefixBloomBits(intValue);
|
||||
assert(opt.memtablePrefixBloomBits() == intValue);
|
||||
}
|
||||
|
||||
{ // MemtablePrefixBloomProbes test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMemtablePrefixBloomProbes(intValue);
|
||||
assert(opt.memtablePrefixBloomProbes() == intValue);
|
||||
}
|
||||
|
||||
{ // BloomLocality test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setBloomLocality(intValue);
|
||||
assert(opt.bloomLocality() == intValue);
|
||||
}
|
||||
|
||||
{ // MaxSuccessiveMerges test
|
||||
long longValue = rand.nextLong();
|
||||
opt.setMaxSuccessiveMerges(longValue);
|
||||
assert(opt.maxSuccessiveMerges() == longValue);
|
||||
}
|
||||
|
||||
{ // MinPartialMergeOperands test
|
||||
int intValue = rand.nextInt();
|
||||
opt.setMinPartialMergeOperands(intValue);
|
||||
assert(opt.minPartialMergeOperands() == intValue);
|
||||
}
|
||||
|
||||
opt.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void linkageOfPrepMethods() {
|
||||
Options options = new Options();
|
||||
options.optimizeUniversalStyleCompaction();
|
||||
options.optimizeUniversalStyleCompaction(4000);
|
||||
options.optimizeLevelStyleCompaction();
|
||||
options.optimizeLevelStyleCompaction(3000);
|
||||
options.optimizeForPointLookup(10);
|
||||
options.prepareForBulkLoad();
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.optimizeUniversalStyleCompaction();
|
||||
options.optimizeUniversalStyleCompaction(4000);
|
||||
options.optimizeLevelStyleCompaction();
|
||||
options.optimizeLevelStyleCompaction(3000);
|
||||
options.optimizeForPointLookup(10);
|
||||
options.prepareForBulkLoad();
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void compressionTypes() {
|
||||
Options options = new Options();
|
||||
for(CompressionType compressionType :
|
||||
CompressionType.values()) {
|
||||
options.setCompressionType(compressionType);
|
||||
assertThat(options.compressionType()).
|
||||
isEqualTo(compressionType);
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
for (CompressionType compressionType :
|
||||
CompressionType.values()) {
|
||||
options.setCompressionType(compressionType);
|
||||
assertThat(options.compressionType()).
|
||||
isEqualTo(compressionType);
|
||||
}
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
options.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void compactionStyles() {
|
||||
Options options = new Options();
|
||||
for (CompactionStyle compactionStyle :
|
||||
CompactionStyle.values()) {
|
||||
options.setCompactionStyle(compactionStyle);
|
||||
assertThat(options.compactionStyle()).
|
||||
isEqualTo(compactionStyle);
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
for (CompactionStyle compactionStyle :
|
||||
CompactionStyle.values()) {
|
||||
options.setCompactionStyle(compactionStyle);
|
||||
assertThat(options.compactionStyle()).
|
||||
isEqualTo(compactionStyle);
|
||||
}
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
options.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rateLimiterConfig() {
|
||||
Options options = new Options();
|
||||
RateLimiterConfig rateLimiterConfig =
|
||||
new GenericRateLimiterConfig(1000, 0, 1);
|
||||
options.setRateLimiterConfig(rateLimiterConfig);
|
||||
options.dispose();
|
||||
// Test with parameter initialization
|
||||
Options anotherOptions = new Options();
|
||||
anotherOptions.setRateLimiterConfig(
|
||||
new GenericRateLimiterConfig(1000));
|
||||
anotherOptions.dispose();
|
||||
Options options = null;
|
||||
Options anotherOptions = null;
|
||||
RateLimiterConfig rateLimiterConfig;
|
||||
try {
|
||||
options = new Options();
|
||||
rateLimiterConfig = new GenericRateLimiterConfig(1000, 0, 1);
|
||||
options.setRateLimiterConfig(rateLimiterConfig);
|
||||
// Test with parameter initialization
|
||||
anotherOptions = new Options();
|
||||
anotherOptions.setRateLimiterConfig(
|
||||
new GenericRateLimiterConfig(1000));
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
if (anotherOptions != null) {
|
||||
anotherOptions.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldSetTestPrefixExtractor() {
|
||||
Options options = new Options();
|
||||
options.useFixedLengthPrefixExtractor(100);
|
||||
options.useFixedLengthPrefixExtractor(10);
|
||||
options.dispose();
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.useFixedLengthPrefixExtractor(100);
|
||||
options.useFixedLengthPrefixExtractor(10);
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldTestMemTableFactoryName()
|
||||
throws RocksDBException {
|
||||
Options options = new Options();
|
||||
options.setMemTableConfig(new VectorMemTableConfig());
|
||||
assertThat(options.memTableFactoryName()).
|
||||
isEqualTo("VectorRepFactory");
|
||||
options.setMemTableConfig(
|
||||
new HashLinkedListMemTableConfig());
|
||||
assertThat(options.memTableFactoryName()).
|
||||
isEqualTo("HashLinkedListRepFactory");
|
||||
options.dispose();
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.setMemTableConfig(new VectorMemTableConfig());
|
||||
assertThat(options.memTableFactoryName()).
|
||||
isEqualTo("VectorRepFactory");
|
||||
options.setMemTableConfig(
|
||||
new HashLinkedListMemTableConfig());
|
||||
assertThat(options.memTableFactoryName()).
|
||||
isEqualTo("HashLinkedListRepFactory");
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void statistics() {
|
||||
Options options = new Options();
|
||||
Statistics statistics = options.createStatistics().
|
||||
statisticsPtr();
|
||||
assertThat(statistics).isNotNull();
|
||||
|
||||
Options anotherOptions = new Options();
|
||||
statistics = anotherOptions.statisticsPtr();
|
||||
assertThat(statistics).isNotNull();
|
||||
Options options = null;
|
||||
Options anotherOptions = null;
|
||||
try {
|
||||
options = new Options();
|
||||
Statistics statistics = options.createStatistics().
|
||||
statisticsPtr();
|
||||
assertThat(statistics).isNotNull();
|
||||
anotherOptions = new Options();
|
||||
statistics = anotherOptions.statisticsPtr();
|
||||
assertThat(statistics).isNotNull();
|
||||
} finally {
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
if (anotherOptions != null) {
|
||||
anotherOptions.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,203 +26,308 @@ public class ReadOnlyTest {
|
||||
|
||||
@Test
|
||||
public void readOnlyOpen() throws RocksDBException {
|
||||
RocksDB db, db2, db3;
|
||||
RocksDB db = null;
|
||||
RocksDB db2 = null;
|
||||
RocksDB db3 = null;
|
||||
Options options = null;
|
||||
List<ColumnFamilyHandle> columnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList2 =
|
||||
new ArrayList<>();
|
||||
try {
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
db2 = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
assertThat("value").
|
||||
isEqualTo(new String(db2.get("key".getBytes())));
|
||||
db.close();
|
||||
db2.close();
|
||||
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
db2 = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
assertThat("value").
|
||||
isEqualTo(new String(db2.get("key".getBytes())));
|
||||
db.close();
|
||||
db2.close();
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
db = RocksDB.open(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors, columnFamilyHandleList);
|
||||
columnFamilyHandleList.add(db.createColumnFamily(
|
||||
new ColumnFamilyDescriptor("new_cf", new ColumnFamilyOptions())));
|
||||
columnFamilyHandleList.add(db.createColumnFamily(
|
||||
new ColumnFamilyDescriptor("new_cf2", new ColumnFamilyOptions())));
|
||||
db.put(columnFamilyHandleList.get(2), "key2".getBytes(),
|
||||
"value2".getBytes());
|
||||
|
||||
db = RocksDB.open(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors, columnFamilyHandleList);
|
||||
columnFamilyHandleList.add(db.createColumnFamily(
|
||||
new ColumnFamilyDescriptor("new_cf", new ColumnFamilyOptions())));
|
||||
columnFamilyHandleList.add(db.createColumnFamily(
|
||||
new ColumnFamilyDescriptor("new_cf2", new ColumnFamilyOptions())));
|
||||
db.put(columnFamilyHandleList.get(2), "key2".getBytes(),
|
||||
"value2".getBytes());
|
||||
|
||||
db2 = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
assertThat(db2.get("key2".getBytes())).isNull();
|
||||
assertThat(db2.get(readOnlyColumnFamilyHandleList.get(0), "key2".getBytes())).
|
||||
isNull();
|
||||
|
||||
cfDescriptors.clear();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor("new_cf2", new ColumnFamilyOptions()));
|
||||
db3 = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList2);
|
||||
assertThat(new String(db3.get(readOnlyColumnFamilyHandleList2.get(1),
|
||||
"key2".getBytes()))).isEqualTo("value2");
|
||||
db.close();
|
||||
db2.close();
|
||||
db3.close();
|
||||
options.dispose();
|
||||
db2 = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
assertThat(db2.get("key2".getBytes())).isNull();
|
||||
assertThat(db2.get(readOnlyColumnFamilyHandleList.get(0), "key2".getBytes())).
|
||||
isNull();
|
||||
cfDescriptors.clear();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor("new_cf2", new ColumnFamilyOptions()));
|
||||
db3 = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors, readOnlyColumnFamilyHandleList2);
|
||||
assertThat(new String(db3.get(readOnlyColumnFamilyHandleList2.get(1),
|
||||
"key2".getBytes()))).isEqualTo("value2");
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (db2 != null) {
|
||||
db2.close();
|
||||
}
|
||||
if (db3 != null) {
|
||||
db3.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = RocksDBException.class)
|
||||
public void failToWriteInReadOnly() throws RocksDBException {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
RocksDB db = null;
|
||||
RocksDB rDb = null;
|
||||
Options options = null;
|
||||
try {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
RocksDB db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
RocksDB rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
// test that put fails in readonly mode
|
||||
rDb.put("key".getBytes(), "value".getBytes());
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
// test that put fails in readonly mode
|
||||
rDb.put("key".getBytes(), "value".getBytes());
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (rDb != null) {
|
||||
rDb.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = RocksDBException.class)
|
||||
public void failToCFWriteInReadOnly() throws RocksDBException {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
RocksDB db = null;
|
||||
RocksDB rDb = null;
|
||||
Options options = null;
|
||||
try {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
RocksDB db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
RocksDB rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
rDb.put(readOnlyColumnFamilyHandleList.get(0),
|
||||
"key".getBytes(), "value".getBytes());
|
||||
rDb.put(readOnlyColumnFamilyHandleList.get(0),
|
||||
"key".getBytes(), "value".getBytes());
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (rDb != null) {
|
||||
rDb.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = RocksDBException.class)
|
||||
public void failToRemoveInReadOnly() throws RocksDBException {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
RocksDB db = null;
|
||||
RocksDB rDb = null;
|
||||
Options options = null;
|
||||
try {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
RocksDB db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
RocksDB rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
rDb.remove("key".getBytes());
|
||||
rDb.remove("key".getBytes());
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (rDb != null) {
|
||||
rDb.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = RocksDBException.class)
|
||||
public void failToCFRemoveInReadOnly() throws RocksDBException {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
RocksDB db = null;
|
||||
RocksDB rDb = null;
|
||||
Options options = null;
|
||||
try {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
RocksDB db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
|
||||
RocksDB rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
rDb.remove(readOnlyColumnFamilyHandleList.get(0),
|
||||
"key".getBytes());
|
||||
rDb.remove(readOnlyColumnFamilyHandleList.get(0),
|
||||
"key".getBytes());
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (rDb != null) {
|
||||
rDb.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = RocksDBException.class)
|
||||
public void failToWriteBatchReadOnly() throws RocksDBException {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
RocksDB db = null;
|
||||
RocksDB rDb = null;
|
||||
Options options = null;
|
||||
try {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
RocksDB db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
|
||||
RocksDB rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
WriteBatch wb = new WriteBatch();
|
||||
wb.put("key".getBytes(), "value".getBytes());
|
||||
rDb.write(new WriteOptions(), wb);
|
||||
WriteBatch wb = new WriteBatch();
|
||||
wb.put("key".getBytes(), "value".getBytes());
|
||||
rDb.write(new WriteOptions(), wb);
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (rDb != null) {
|
||||
rDb.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(expected = RocksDBException.class)
|
||||
public void failToCFWriteBatchReadOnly() throws RocksDBException {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
RocksDB db = null;
|
||||
RocksDB rDb = null;
|
||||
Options options = null;
|
||||
WriteBatch wb = null;
|
||||
try {
|
||||
List<ColumnFamilyDescriptor> cfDescriptors = new ArrayList<>();
|
||||
cfDescriptors.add(
|
||||
new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY,
|
||||
new ColumnFamilyOptions()));
|
||||
List<ColumnFamilyHandle> readOnlyColumnFamilyHandleList =
|
||||
new ArrayList<>();
|
||||
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
RocksDB db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.close();
|
||||
|
||||
RocksDB rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
rDb = RocksDB.openReadOnly(
|
||||
dbFolder.getRoot().getAbsolutePath(), cfDescriptors,
|
||||
readOnlyColumnFamilyHandleList);
|
||||
|
||||
WriteBatch wb = new WriteBatch();
|
||||
wb.put(readOnlyColumnFamilyHandleList.get(0),
|
||||
"key".getBytes(), "value".getBytes());
|
||||
rDb.write(new WriteOptions(), wb);
|
||||
wb = new WriteBatch();
|
||||
wb.put(readOnlyColumnFamilyHandleList.get(0),
|
||||
"key".getBytes(), "value".getBytes());
|
||||
rDb.write(new WriteOptions(), wb);
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (rDb != null) {
|
||||
rDb.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
if (wb != null) {
|
||||
wb.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,32 +25,66 @@ public class ReadOptionsTest {
|
||||
public ExpectedException exception = ExpectedException.none();
|
||||
|
||||
@Test
|
||||
public void readOptions() {
|
||||
ReadOptions opt = new ReadOptions();
|
||||
Random rand = new Random();
|
||||
{ // VerifyChecksums test
|
||||
public void verifyChecksum(){
|
||||
ReadOptions opt = null;
|
||||
try {
|
||||
opt = new ReadOptions();
|
||||
Random rand = new Random();
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setVerifyChecksums(boolValue);
|
||||
assertThat(opt.verifyChecksums()).isEqualTo(boolValue);
|
||||
} finally {
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{ // FillCache test
|
||||
@Test
|
||||
public void fillCache(){
|
||||
ReadOptions opt = null;
|
||||
try {
|
||||
opt = new ReadOptions();
|
||||
Random rand = new Random();
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setFillCache(boolValue);
|
||||
assertThat(opt.fillCache()).isEqualTo(boolValue);
|
||||
} finally {
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{ // Tailing test
|
||||
@Test
|
||||
public void tailing(){
|
||||
ReadOptions opt = null;
|
||||
try {
|
||||
opt = new ReadOptions();
|
||||
Random rand = new Random();
|
||||
boolean boolValue = rand.nextBoolean();
|
||||
opt.setTailing(boolValue);
|
||||
assertThat(opt.tailing()).isEqualTo(boolValue);
|
||||
} finally {
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{ // Snapshot null test
|
||||
@Test
|
||||
public void snapshot(){
|
||||
ReadOptions opt = null;
|
||||
try {
|
||||
opt = new ReadOptions();
|
||||
Random rand = new Random();
|
||||
opt.setSnapshot(null);
|
||||
assertThat(opt.snapshot()).isNull();
|
||||
} finally {
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
opt.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
39
java/org/rocksdb/test/RocksEnvTest.java
Normal file
39
java/org/rocksdb/test/RocksEnvTest.java
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright (c) 2014, Facebook, Inc. All rights reserved.
|
||||
// This source code is licensed under the BSD-style license found in the
|
||||
// LICENSE file in the root directory of this source tree. An additional grant
|
||||
// of patent rights can be found in the PATENTS file in the same directory.
|
||||
|
||||
package org.rocksdb.test;
|
||||
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Test;
|
||||
import org.rocksdb.RocksEnv;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class RocksEnvTest {
|
||||
|
||||
@ClassRule
|
||||
public static final RocksMemoryResource rocksMemoryResource =
|
||||
new RocksMemoryResource();
|
||||
|
||||
@Test
|
||||
public void rocksEnv(){
|
||||
RocksEnv rocksEnv = RocksEnv.getDefault();
|
||||
rocksEnv.setBackgroundThreads(5);
|
||||
// default rocksenv will always return zero for flush pool
|
||||
// no matter what was set via setBackgroundThreads
|
||||
assertThat(rocksEnv.getThreadPoolQueueLen(RocksEnv.FLUSH_POOL)).
|
||||
isEqualTo(0);
|
||||
rocksEnv.setBackgroundThreads(5, RocksEnv.FLUSH_POOL);
|
||||
// default rocksenv will always return zero for flush pool
|
||||
// no matter what was set via setBackgroundThreads
|
||||
assertThat(rocksEnv.getThreadPoolQueueLen(RocksEnv.FLUSH_POOL)).
|
||||
isEqualTo(0);
|
||||
rocksEnv.setBackgroundThreads(5, RocksEnv.COMPACTION_POOL);
|
||||
// default rocksenv will always return zero for compaction pool
|
||||
// no matter what was set via setBackgroundThreads
|
||||
assertThat(rocksEnv.getThreadPoolQueueLen(RocksEnv.COMPACTION_POOL)).
|
||||
isEqualTo(0);
|
||||
}
|
||||
}
|
@ -26,61 +26,83 @@ public class RocksIteratorTest {
|
||||
|
||||
@Test
|
||||
public void rocksIterator() throws RocksDBException {
|
||||
RocksDB db;
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true)
|
||||
.setCreateMissingColumnFamilies(true);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key1".getBytes(), "value1".getBytes());
|
||||
db.put("key2".getBytes(), "value2".getBytes());
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
RocksIterator iterator = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true)
|
||||
.setCreateMissingColumnFamilies(true);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key1".getBytes(), "value1".getBytes());
|
||||
db.put("key2".getBytes(), "value2".getBytes());
|
||||
|
||||
RocksIterator iterator = db.newIterator();
|
||||
iterator = db.newIterator();
|
||||
|
||||
iterator.seekToFirst();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key1".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value1".getBytes());
|
||||
iterator.next();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key2".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value2".getBytes());
|
||||
iterator.next();
|
||||
assertThat(iterator.isValid()).isFalse();
|
||||
iterator.seekToLast();
|
||||
iterator.prev();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key1".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value1".getBytes());
|
||||
iterator.seekToFirst();
|
||||
iterator.seekToLast();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key2".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value2".getBytes());
|
||||
iterator.status();
|
||||
iterator.seekToFirst();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key1".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value1".getBytes());
|
||||
iterator.next();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key2".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value2".getBytes());
|
||||
iterator.next();
|
||||
assertThat(iterator.isValid()).isFalse();
|
||||
iterator.seekToLast();
|
||||
iterator.prev();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key1".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value1".getBytes());
|
||||
iterator.seekToFirst();
|
||||
iterator.seekToLast();
|
||||
assertThat(iterator.isValid()).isTrue();
|
||||
assertThat(iterator.key()).isEqualTo("key2".getBytes());
|
||||
assertThat(iterator.value()).isEqualTo("value2".getBytes());
|
||||
iterator.status();
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
if (iterator != null) {
|
||||
iterator.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rocksIteratorGc()
|
||||
throws RocksDBException {
|
||||
RocksDB db;
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true)
|
||||
.setCreateMissingColumnFamilies(true);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
RocksIterator iter = db.newIterator();
|
||||
RocksIterator iter2 = db.newIterator();
|
||||
RocksIterator iter3 = db.newIterator();
|
||||
iter = null;
|
||||
db.close();
|
||||
db = null;
|
||||
iter2 = null;
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
iter3.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true)
|
||||
.setCreateMissingColumnFamilies(true);
|
||||
db = RocksDB.open(options,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
db.newIterator();
|
||||
db.newIterator();
|
||||
RocksIterator iter3 = db.newIterator();
|
||||
db.close();
|
||||
db = null;
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
iter3.dispose();
|
||||
System.gc();
|
||||
System.runFinalization();
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,58 +27,71 @@ public class SnapshotTest {
|
||||
|
||||
@Test
|
||||
public void snapshots() throws RocksDBException {
|
||||
RocksDB db;
|
||||
Options options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
ReadOptions readOptions = null;
|
||||
try {
|
||||
|
||||
db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
// Get new Snapshot of database
|
||||
Snapshot snapshot = db.getSnapshot();
|
||||
ReadOptions readOptions = new ReadOptions();
|
||||
// set snapshot in ReadOptions
|
||||
readOptions.setSnapshot(snapshot);
|
||||
// retrieve key value pair
|
||||
assertThat(new String(db.get("key".getBytes()))).
|
||||
isEqualTo("value");
|
||||
// retrieve key value pair created before
|
||||
// the snapshot was made
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"key".getBytes()))).isEqualTo("value");
|
||||
// add new key/value pair
|
||||
db.put("newkey".getBytes(), "newvalue".getBytes());
|
||||
// using no snapshot the latest db entries
|
||||
// will be taken into account
|
||||
assertThat(new String(db.get("newkey".getBytes()))).
|
||||
isEqualTo("newvalue");
|
||||
// snapshopot was created before newkey
|
||||
assertThat(db.get(readOptions, "newkey".getBytes())).
|
||||
isNull();
|
||||
// Retrieve snapshot from read options
|
||||
Snapshot sameSnapshot = readOptions.snapshot();
|
||||
readOptions.setSnapshot(sameSnapshot);
|
||||
// results must be the same with new Snapshot
|
||||
// instance using the same native pointer
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"key".getBytes()))).isEqualTo("value");
|
||||
// update key value pair to newvalue
|
||||
db.put("key".getBytes(), "newvalue".getBytes());
|
||||
// read with previously created snapshot will
|
||||
// read previous version of key value pair
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"key".getBytes()))).isEqualTo("value");
|
||||
// read for newkey using the snapshot must be
|
||||
// null
|
||||
assertThat(db.get(readOptions, "newkey".getBytes())).
|
||||
isNull();
|
||||
// setting null to snapshot in ReadOptions leads
|
||||
// to no Snapshot being used.
|
||||
readOptions.setSnapshot(null);
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"newkey".getBytes()))).isEqualTo("newvalue");
|
||||
// release Snapshot
|
||||
db.releaseSnapshot(snapshot);
|
||||
// Close database
|
||||
db.close();
|
||||
options = new Options();
|
||||
options.setCreateIfMissing(true);
|
||||
|
||||
db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath());
|
||||
db.put("key".getBytes(), "value".getBytes());
|
||||
// Get new Snapshot of database
|
||||
Snapshot snapshot = db.getSnapshot();
|
||||
readOptions = new ReadOptions();
|
||||
// set snapshot in ReadOptions
|
||||
readOptions.setSnapshot(snapshot);
|
||||
// retrieve key value pair
|
||||
assertThat(new String(db.get("key".getBytes()))).
|
||||
isEqualTo("value");
|
||||
// retrieve key value pair created before
|
||||
// the snapshot was made
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"key".getBytes()))).isEqualTo("value");
|
||||
// add new key/value pair
|
||||
db.put("newkey".getBytes(), "newvalue".getBytes());
|
||||
// using no snapshot the latest db entries
|
||||
// will be taken into account
|
||||
assertThat(new String(db.get("newkey".getBytes()))).
|
||||
isEqualTo("newvalue");
|
||||
// snapshopot was created before newkey
|
||||
assertThat(db.get(readOptions, "newkey".getBytes())).
|
||||
isNull();
|
||||
// Retrieve snapshot from read options
|
||||
Snapshot sameSnapshot = readOptions.snapshot();
|
||||
readOptions.setSnapshot(sameSnapshot);
|
||||
// results must be the same with new Snapshot
|
||||
// instance using the same native pointer
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"key".getBytes()))).isEqualTo("value");
|
||||
// update key value pair to newvalue
|
||||
db.put("key".getBytes(), "newvalue".getBytes());
|
||||
// read with previously created snapshot will
|
||||
// read previous version of key value pair
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"key".getBytes()))).isEqualTo("value");
|
||||
// read for newkey using the snapshot must be
|
||||
// null
|
||||
assertThat(db.get(readOptions, "newkey".getBytes())).
|
||||
isNull();
|
||||
// setting null to snapshot in ReadOptions leads
|
||||
// to no Snapshot being used.
|
||||
readOptions.setSnapshot(null);
|
||||
assertThat(new String(db.get(readOptions,
|
||||
"newkey".getBytes()))).isEqualTo("newvalue");
|
||||
// release Snapshot
|
||||
db.releaseSnapshot(snapshot);
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
if (readOptions != null) {
|
||||
readOptions.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,27 +27,35 @@ public class StatisticsCollectorTest {
|
||||
@Test
|
||||
public void statisticsCollector()
|
||||
throws InterruptedException, RocksDBException {
|
||||
Options opt = new Options().createStatistics().setCreateIfMissing(true);
|
||||
Statistics stats = opt.statisticsPtr();
|
||||
Options opt = null;
|
||||
RocksDB db = null;
|
||||
try {
|
||||
opt = new Options().createStatistics().setCreateIfMissing(true);
|
||||
Statistics stats = opt.statisticsPtr();
|
||||
|
||||
RocksDB db = RocksDB.open(opt,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
db = RocksDB.open(opt,
|
||||
dbFolder.getRoot().getAbsolutePath());
|
||||
|
||||
StatsCallbackMock callback = new StatsCallbackMock();
|
||||
StatsCollectorInput statsInput = new StatsCollectorInput(stats, callback);
|
||||
StatsCallbackMock callback = new StatsCallbackMock();
|
||||
StatsCollectorInput statsInput = new StatsCollectorInput(stats, callback);
|
||||
|
||||
StatisticsCollector statsCollector = new StatisticsCollector(
|
||||
Collections.singletonList(statsInput), 100);
|
||||
statsCollector.start();
|
||||
StatisticsCollector statsCollector = new StatisticsCollector(
|
||||
Collections.singletonList(statsInput), 100);
|
||||
statsCollector.start();
|
||||
|
||||
Thread.sleep(1000);
|
||||
Thread.sleep(1000);
|
||||
|
||||
assertThat(callback.tickerCallbackCount).isGreaterThan(0);
|
||||
assertThat(callback.histCallbackCount).isGreaterThan(0);
|
||||
assertThat(callback.tickerCallbackCount).isGreaterThan(0);
|
||||
assertThat(callback.histCallbackCount).isGreaterThan(0);
|
||||
|
||||
statsCollector.shutDown(1000);
|
||||
|
||||
db.close();
|
||||
opt.dispose();
|
||||
statsCollector.shutDown(1000);
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (opt != null) {
|
||||
opt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ void Java_org_rocksdb_BackupableDBOptions_newBackupableDBOptions(
|
||||
* Signature: (J)Ljava/lang/String;
|
||||
*/
|
||||
jstring Java_org_rocksdb_BackupableDBOptions_backupDir(
|
||||
JNIEnv* env, jobject jopt, jlong jhandle, jstring jpath) {
|
||||
JNIEnv* env, jobject jopt, jlong jhandle) {
|
||||
auto bopt = reinterpret_cast<rocksdb::BackupableDBOptions*>(jhandle);
|
||||
return env->NewStringUTF(bopt->backup_dir.c_str());
|
||||
}
|
||||
|
@ -274,6 +274,17 @@ void Java_org_rocksdb_Options_setParanoidChecks(
|
||||
static_cast<bool>(paranoid_checks);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_Options
|
||||
* Method: setEnv
|
||||
* Signature: (JJ)V
|
||||
*/
|
||||
void Java_org_rocksdb_Options_setEnv(
|
||||
JNIEnv* env, jobject jobj, jlong jhandle, jlong jenv) {
|
||||
reinterpret_cast<rocksdb::Options*>(jhandle)->env =
|
||||
reinterpret_cast<rocksdb::Env*>(jenv);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_Options
|
||||
* Method: setMaxTotalWalSize
|
||||
|
Loading…
Reference in New Issue
Block a user