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