add GetAggregatedLongProperty for Java API (#4379)
Summary: Add Java API `getAggregatedLongProperty(final String property)` Pull Request resolved: https://github.com/facebook/rocksdb/pull/4379 Differential Revision: D9921463 Pulled By: sagar0 fbshipit-source-id: a02512e1b2aff4765a10b77de9a7bf7b1909d954
This commit is contained in:
parent
519f8b145f
commit
02dc074916
@ -1844,6 +1844,32 @@ jlong Java_org_rocksdb_RocksDB_getLongProperty__JJLjava_lang_String_2I(
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_RocksDB
|
||||
* Method: getAggregatedLongProperty
|
||||
* Signature: (JLjava/lang/String;I)J
|
||||
*/
|
||||
jlong Java_org_rocksdb_RocksDB_getAggregatedLongProperty(
|
||||
JNIEnv* env, jobject, jlong db_handle, jstring jproperty, jint jproperty_len) {
|
||||
const char* property = env->GetStringUTFChars(jproperty, nullptr);
|
||||
if (property == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
rocksdb::Slice property_slice(property, jproperty_len);
|
||||
auto* db = reinterpret_cast<rocksdb::DB*>(db_handle);
|
||||
uint64_t property_value = 0;
|
||||
bool retCode = db->GetAggregatedIntProperty(property_slice, &property_value);
|
||||
env->ReleaseStringUTFChars(jproperty, property);
|
||||
|
||||
if (retCode) {
|
||||
return property_value;
|
||||
}
|
||||
|
||||
rocksdb::RocksDBExceptionJni::ThrowNew(env, rocksdb::Status::NotFound());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// rocksdb::DB::Flush
|
||||
|
||||
|
@ -1518,6 +1518,31 @@ public class RocksDB extends RocksObject {
|
||||
property, property.length());
|
||||
}
|
||||
|
||||
/**
|
||||
* <p> Return sum of the getLongProperty of all the column families</p>
|
||||
*
|
||||
* <p><strong>Note</strong>: As the returned property is of type
|
||||
* {@code uint64_t} on C++ side the returning value can be negative
|
||||
* because Java supports in Java 7 only signed long values.</p>
|
||||
*
|
||||
* <p><strong>Java 7</strong>: To mitigate the problem of the non
|
||||
* existent unsigned long tpye, values should be encapsulated using
|
||||
* {@link java.math.BigInteger} to reflect the correct value. The correct
|
||||
* behavior is guaranteed if {@code 2^64} is added to negative values.</p>
|
||||
*
|
||||
* <p><strong>Java 8</strong>: In Java 8 the value should be treated as
|
||||
* unsigned long using provided methods of type {@link Long}.</p>
|
||||
*
|
||||
* @param property to be fetched.
|
||||
*
|
||||
* @return numerical property value
|
||||
*
|
||||
* @throws RocksDBException if an error happens in the underlying native code.
|
||||
*/
|
||||
public long getAggregatedLongProperty(final String property) throws RocksDBException {
|
||||
return getAggregatedLongProperty(nativeHandle_, property, property.length());
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Return a heap-allocated iterator over the contents of the
|
||||
* database. The result of newIterator() is initially invalid
|
||||
@ -2383,6 +2408,8 @@ public class RocksDB extends RocksObject {
|
||||
int propertyLength) throws RocksDBException;
|
||||
protected native long getLongProperty(long nativeHandle, long cfHandle,
|
||||
String property, int propertyLength) throws RocksDBException;
|
||||
protected native long getAggregatedLongProperty(long nativeHandle, String property,
|
||||
int propertyLength) throws RocksDBException;
|
||||
protected native long iterator(long handle);
|
||||
protected native long iterator(long handle, long readOptHandle);
|
||||
protected native long iteratorCF(long handle, long cfHandle);
|
||||
|
@ -404,6 +404,10 @@ public class ColumnFamilyTest {
|
||||
"rocksdb.stats")).isNotNull();
|
||||
assertThat(db.getProperty(columnFamilyHandleList.get(1),
|
||||
"rocksdb.sstables")).isNotNull();
|
||||
assertThat(db.getAggregatedLongProperty("rocksdb.estimate-num-keys")).
|
||||
isNotNull();
|
||||
assertThat(db.getAggregatedLongProperty("rocksdb.estimate-num-keys")).
|
||||
isGreaterThanOrEqualTo(0);
|
||||
} finally {
|
||||
for (final ColumnFamilyHandle columnFamilyHandle :
|
||||
columnFamilyHandleList) {
|
||||
|
Loading…
Reference in New Issue
Block a user