[RocksJava] GetIntProperty in RocksDB
Expose GetIntProperty methods to RocksJava. As the integer(64-Bit) value is no integer in Java the method is aligned with the return type which is long.
This commit is contained in:
parent
db59eeb613
commit
5529c1ad1b
@ -1032,6 +1032,38 @@ public class RocksDB extends RocksObject {
|
||||
return getProperty0(nativeHandle_, property, property.length());
|
||||
}
|
||||
|
||||
/**
|
||||
* <p> Similar to GetProperty(), but only works for a subset of properties whose
|
||||
* return value is a numerical value. Return the value as long.</p>
|
||||
*
|
||||
* @param property to be fetched.
|
||||
*
|
||||
* @return property value
|
||||
*
|
||||
* @throws RocksDBException if an error happens in the underlying native code.
|
||||
*/
|
||||
public long getLongProperty(String property) throws RocksDBException {
|
||||
return getLongProperty(nativeHandle_, property, property.length());
|
||||
}
|
||||
|
||||
/**
|
||||
* <p> Similar to GetProperty(), but only works for a subset of properties whose
|
||||
* return value is a numerical value. Return the value as long.</p>
|
||||
*
|
||||
* @param columnFamilyHandle {@link org.rocksdb.ColumnFamilyHandle}
|
||||
* instance
|
||||
* @param property to be fetched.
|
||||
*
|
||||
* @return property value
|
||||
*
|
||||
* @throws RocksDBException if an error happens in the underlying native code.
|
||||
*/
|
||||
public long getLongProperty(ColumnFamilyHandle columnFamilyHandle, String property)
|
||||
throws RocksDBException {
|
||||
return getLongProperty(nativeHandle_, columnFamilyHandle.nativeHandle_, property,
|
||||
property.length());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a heap-allocated iterator over the contents of the database.
|
||||
* The result of newIterator() is initially invalid (caller must
|
||||
@ -1297,6 +1329,10 @@ public class RocksDB extends RocksObject {
|
||||
String property, int propertyLength) throws RocksDBException;
|
||||
protected native String getProperty0(long nativeHandle, long cfHandle,
|
||||
String property, int propertyLength) throws RocksDBException;
|
||||
protected native long getLongProperty(long nativeHandle,
|
||||
String property, int propertyLength) throws RocksDBException;
|
||||
protected native long getLongProperty(long nativeHandle, long cfHandle,
|
||||
String property, int propertyLength) throws RocksDBException;
|
||||
protected native long iterator0(long handle);
|
||||
protected native long iterator0(long handle, long cfHandle);
|
||||
protected native long[] iterators(long handle,
|
||||
|
@ -351,7 +351,6 @@ public class ColumnFamilyTest {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void properties() throws RocksDBException {
|
||||
RocksDB db = null;
|
||||
@ -371,6 +370,8 @@ public class ColumnFamilyTest {
|
||||
cfNames, columnFamilyHandleList);
|
||||
assertThat(db.getProperty("rocksdb.estimate-num-keys")).
|
||||
isNotNull();
|
||||
assertThat(db.getLongProperty(columnFamilyHandleList.get(0),
|
||||
"rocksdb.estimate-num-keys")).isGreaterThanOrEqualTo(0);
|
||||
assertThat(db.getProperty("rocksdb.stats")).isNotNull();
|
||||
assertThat(db.getProperty(columnFamilyHandleList.get(0),
|
||||
"rocksdb.sstables")).isNotNull();
|
||||
|
@ -279,4 +279,37 @@ public class RocksDBTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getIntProperty() throws RocksDBException {
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
WriteOptions wOpt = null;
|
||||
try {
|
||||
options = new Options();
|
||||
wOpt = new WriteOptions();
|
||||
// Setup options
|
||||
options.setCreateIfMissing(true);
|
||||
options.setMaxWriteBufferNumber(10);
|
||||
options.setMinWriteBufferNumberToMerge(10);
|
||||
wOpt.setDisableWAL(true);
|
||||
db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath());
|
||||
db.put(wOpt, "key1".getBytes(), "value1".getBytes());
|
||||
db.put(wOpt, "key2".getBytes(), "value2".getBytes());
|
||||
db.put(wOpt, "key3".getBytes(), "value3".getBytes());
|
||||
db.put(wOpt, "key4".getBytes(), "value4".getBytes());
|
||||
assertThat(db.getLongProperty("rocksdb.num-entries-active-mem-table")).isGreaterThan(0);
|
||||
assertThat(db.getLongProperty("rocksdb.cur-size-active-mem-table")).isGreaterThan(0);
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
if (wOpt != null) {
|
||||
wOpt.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1289,6 +1289,53 @@ jstring Java_org_rocksdb_RocksDB_getProperty0__JJLjava_lang_String_2I(
|
||||
return env->NewStringUTF(property_value.data());
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_RocksDB
|
||||
* Method: getLongProperty
|
||||
* Signature: (JLjava/lang/String;I)L;
|
||||
*/
|
||||
jlong Java_org_rocksdb_RocksDB_getLongProperty__JLjava_lang_String_2I(
|
||||
JNIEnv* env, jobject jdb, jlong db_handle, jstring jproperty,
|
||||
jint jproperty_len) {
|
||||
auto db = reinterpret_cast<rocksdb::DB*>(db_handle);
|
||||
|
||||
const char* property = env->GetStringUTFChars(jproperty, 0);
|
||||
rocksdb::Slice property_slice(property, jproperty_len);
|
||||
|
||||
uint64_t property_value = 0;
|
||||
bool retCode = db->GetIntProperty(property_slice, &property_value);
|
||||
env->ReleaseStringUTFChars(jproperty, property);
|
||||
|
||||
if (!retCode) {
|
||||
rocksdb::RocksDBExceptionJni::ThrowNew(env, rocksdb::Status::NotFound());
|
||||
}
|
||||
return property_value;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_RocksDB
|
||||
* Method: getLongProperty
|
||||
* Signature: (JJLjava/lang/String;I)L;
|
||||
*/
|
||||
jlong Java_org_rocksdb_RocksDB_getLongProperty__JJLjava_lang_String_2I(
|
||||
JNIEnv* env, jobject jdb, jlong db_handle, jlong jcf_handle,
|
||||
jstring jproperty, jint jproperty_len) {
|
||||
auto db = reinterpret_cast<rocksdb::DB*>(db_handle);
|
||||
auto cf_handle = reinterpret_cast<rocksdb::ColumnFamilyHandle*>(jcf_handle);
|
||||
|
||||
const char* property = env->GetStringUTFChars(jproperty, 0);
|
||||
rocksdb::Slice property_slice(property, jproperty_len);
|
||||
|
||||
uint64_t property_value;
|
||||
bool retCode = db->GetIntProperty(cf_handle, property_slice, &property_value);
|
||||
env->ReleaseStringUTFChars(jproperty, property);
|
||||
|
||||
if (!retCode) {
|
||||
rocksdb::RocksDBExceptionJni::ThrowNew(env, rocksdb::Status::NotFound());
|
||||
}
|
||||
return property_value;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// rocksdb::DB::Flush
|
||||
|
||||
@ -1332,4 +1379,3 @@ void Java_org_rocksdb_RocksDB_flush__JJJ(
|
||||
auto cf_handle = reinterpret_cast<rocksdb::ColumnFamilyHandle*>(jcf_handle);
|
||||
rocksdb_flush_helper(env, db, *flush_options, cf_handle);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user