Summary: Add basic Java binding for rocksdb::Env. Test Plan: make rocksdbjava make jtest cd java ./jdb_bench.sh --max_background_compactions=1 ./jdb_bench.sh --max_background_compactions=10 Reviewers: sdong, ankgup87, haobo Reviewed By: haobo Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D18903main
parent
b92a19a431
commit
e72b02e3c2
@ -0,0 +1,98 @@ |
|||||||
|
// 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; |
||||||
|
|
||||||
|
/** |
||||||
|
* A RocksEnv is an interface used by the rocksdb implementation to access |
||||||
|
* operating system functionality like the filesystem etc. |
||||||
|
* |
||||||
|
* All Env implementations are safe for concurrent access from |
||||||
|
* multiple threads without any external synchronization. |
||||||
|
*/ |
||||||
|
public class RocksEnv extends RocksObject { |
||||||
|
public static final int FLUSH_POOL = 0; |
||||||
|
public static final int COMPACTION_POOL = 1; |
||||||
|
|
||||||
|
static { |
||||||
|
default_env_ = new RocksEnv(getDefaultEnvInternal()); |
||||||
|
} |
||||||
|
private static native long getDefaultEnvInternal(); |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns a default environment suitable for the current operating |
||||||
|
* system. |
||||||
|
* |
||||||
|
* The result of getDefault() belongs to rocksdb c++, and calling its |
||||||
|
* dispose() will be no-op. |
||||||
|
*/ |
||||||
|
public static RocksEnv getDefault() { |
||||||
|
return default_env_; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Sets the number of background worker threads of the flush pool |
||||||
|
* for this environment. |
||||||
|
* default number: 1 |
||||||
|
*/ |
||||||
|
public RocksEnv setBackgroundThreads(int num) { |
||||||
|
return setBackgroundThreads(num, FLUSH_POOL); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Sets the number of background worker threads of the specified thread |
||||||
|
* pool for this environment. |
||||||
|
* |
||||||
|
* @param num the number of threads |
||||||
|
* @param poolID the id to specified a thread pool. Should be either |
||||||
|
* FLUSH_POOL or COMPACTION_POOL. |
||||||
|
* Default number: 1 |
||||||
|
*/ |
||||||
|
public RocksEnv setBackgroundThreads(int num, int poolID) { |
||||||
|
setBackgroundThreads(nativeHandle_, num, poolID); |
||||||
|
return this; |
||||||
|
} |
||||||
|
private native void setBackgroundThreads( |
||||||
|
long handle, int num, int priority); |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the length of the queue associated with the specified |
||||||
|
* thread pool. |
||||||
|
* |
||||||
|
* @param poolID the id to specified a thread pool. Should be either |
||||||
|
* FLUSH_POOL or COMPACTION_POOL. |
||||||
|
*/ |
||||||
|
public int getThreadPoolQueueLen(int poolID) { |
||||||
|
return getThreadPoolQueueLen(nativeHandle_, poolID); |
||||||
|
} |
||||||
|
private native int getThreadPoolQueueLen(long handle, int poolID); |
||||||
|
|
||||||
|
/** |
||||||
|
* Package-private constructor that uses the specified native handle |
||||||
|
* to construct a RocksEnv. Note that the newly created RocksEnv |
||||||
|
* will not take the ownership of the input handle. |
||||||
|
*/ |
||||||
|
RocksEnv(long handle) { |
||||||
|
super(); |
||||||
|
nativeHandle_ = handle; |
||||||
|
disOwnNativeHandle(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* The helper function of dispose() which all subclasses of RocksObject |
||||||
|
* must implement to release their associated C++ resource. |
||||||
|
*/ |
||||||
|
protected void disposeInternal() { |
||||||
|
disposeInternal(nativeHandle_); |
||||||
|
} |
||||||
|
private native void disposeInternal(long handle); |
||||||
|
|
||||||
|
/** |
||||||
|
* The static default RocksEnv. The ownership of its native handle |
||||||
|
* belongs to rocksdb c++ and is not able to be released on the Java |
||||||
|
* side. |
||||||
|
*/ |
||||||
|
static RocksEnv default_env_; |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
// 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.
|
||||||
|
//
|
||||||
|
// This file implements the "bridge" between Java and C++ and enables
|
||||||
|
// calling c++ rocksdb::Env methods from Java side.
|
||||||
|
|
||||||
|
#include "include/org_rocksdb_RocksEnv.h" |
||||||
|
#include "rocksdb/env.h" |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_RocksEnv |
||||||
|
* Method: getDefaultEnvInternal |
||||||
|
* Signature: ()J |
||||||
|
*/ |
||||||
|
jlong Java_org_rocksdb_RocksEnv_getDefaultEnvInternal( |
||||||
|
JNIEnv* env, jclass jclass) { |
||||||
|
return reinterpret_cast<jlong>(rocksdb::Env::Default()); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_RocksEnv |
||||||
|
* Method: setBackgroundThreads |
||||||
|
* Signature: (JII)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_RocksEnv_setBackgroundThreads( |
||||||
|
JNIEnv* env, jobject jobj, jlong jhandle, |
||||||
|
jint num, jint priority) { |
||||||
|
auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle); |
||||||
|
switch (priority) { |
||||||
|
case org_rocksdb_RocksEnv_FLUSH_POOL: |
||||||
|
rocks_env->SetBackgroundThreads(num, rocksdb::Env::Priority::LOW); |
||||||
|
break; |
||||||
|
case org_rocksdb_RocksEnv_COMPACTION_POOL: |
||||||
|
rocks_env->SetBackgroundThreads(num, rocksdb::Env::Priority::HIGH); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_RocksEnv |
||||||
|
* Method: getThreadPoolQueueLen |
||||||
|
* Signature: (JI)I |
||||||
|
*/ |
||||||
|
jint Java_org_rocksdb_RocksEnv_getThreadPoolQueueLen( |
||||||
|
JNIEnv* env, jobject jobj, jlong jhandle, jint pool_id) { |
||||||
|
auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle); |
||||||
|
switch (pool_id) { |
||||||
|
case org_rocksdb_RocksEnv_FLUSH_POOL: |
||||||
|
return rocks_env->GetThreadPoolQueueLen(rocksdb::Env::Priority::LOW); |
||||||
|
case org_rocksdb_RocksEnv_COMPACTION_POOL: |
||||||
|
return rocks_env->GetThreadPoolQueueLen(rocksdb::Env::Priority::HIGH); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_rocksdb_RocksEnv |
||||||
|
* Method: disposeInternal |
||||||
|
* Signature: (J)V |
||||||
|
*/ |
||||||
|
void Java_org_rocksdb_RocksEnv_disposeInternal( |
||||||
|
JNIEnv* env, jobject jobj, jlong jhandle) { |
||||||
|
delete reinterpret_cast<rocksdb::Env*>(jhandle); |
||||||
|
} |
Loading…
Reference in new issue