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:
Chen, You 2018-09-19 17:44:12 -07:00 committed by Facebook Github Bot
parent 519f8b145f
commit 02dc074916
3 changed files with 57 additions and 0 deletions

View file

@ -1844,6 +1844,32 @@ jlong Java_org_rocksdb_RocksDB_getLongProperty__JJLjava_lang_String_2I(
return 0; 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 // rocksdb::DB::Flush

View file

@ -1518,6 +1518,31 @@ public class RocksDB extends RocksObject {
property, property.length()); 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 * <p>Return a heap-allocated iterator over the contents of the
* database. The result of newIterator() is initially invalid * database. The result of newIterator() is initially invalid
@ -2383,6 +2408,8 @@ public class RocksDB extends RocksObject {
int propertyLength) throws RocksDBException; int propertyLength) throws RocksDBException;
protected native long getLongProperty(long nativeHandle, long cfHandle, protected native long getLongProperty(long nativeHandle, long cfHandle,
String property, int propertyLength) throws RocksDBException; 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);
protected native long iterator(long handle, long readOptHandle); protected native long iterator(long handle, long readOptHandle);
protected native long iteratorCF(long handle, long cfHandle); protected native long iteratorCF(long handle, long cfHandle);

View file

@ -404,6 +404,10 @@ public class ColumnFamilyTest {
"rocksdb.stats")).isNotNull(); "rocksdb.stats")).isNotNull();
assertThat(db.getProperty(columnFamilyHandleList.get(1), assertThat(db.getProperty(columnFamilyHandleList.get(1),
"rocksdb.sstables")).isNotNull(); "rocksdb.sstables")).isNotNull();
assertThat(db.getAggregatedLongProperty("rocksdb.estimate-num-keys")).
isNotNull();
assertThat(db.getAggregatedLongProperty("rocksdb.estimate-num-keys")).
isGreaterThanOrEqualTo(0);
} finally { } finally {
for (final ColumnFamilyHandle columnFamilyHandle : for (final ColumnFamilyHandle columnFamilyHandle :
columnFamilyHandleList) { columnFamilyHandleList) {