1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
6 // This file implements the "bridge" between Java and C++ and enables
7 // calling c++ ROCKSDB_NAMESPACE::Env methods from Java side.
13 #include "rocksdb/env.h"
14 #include "include/org_rocksdb_Env.h"
15 #include "include/org_rocksdb_HdfsEnv.h"
16 #include "include/org_rocksdb_RocksEnv.h"
17 #include "include/org_rocksdb_RocksMemEnv.h"
18 #include "include/org_rocksdb_TimedEnv.h"
21 * Class: org_rocksdb_Env
22 * Method: getDefaultEnvInternal
25 jlong
Java_org_rocksdb_Env_getDefaultEnvInternal(
27 return reinterpret_cast<jlong
>(ROCKSDB_NAMESPACE::Env::Default());
31 * Class: org_rocksdb_RocksEnv
32 * Method: disposeInternal
35 void Java_org_rocksdb_RocksEnv_disposeInternal(
36 JNIEnv
*, jobject
, jlong jhandle
) {
37 auto* e
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
43 * Class: org_rocksdb_Env
44 * Method: setBackgroundThreads
47 void Java_org_rocksdb_Env_setBackgroundThreads(
48 JNIEnv
*, jobject
, jlong jhandle
, jint jnum
, jbyte jpriority_value
) {
49 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
50 rocks_env
->SetBackgroundThreads(
51 static_cast<int>(jnum
),
52 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value
));
56 * Class: org_rocksdb_Env
57 * Method: getBackgroundThreads
60 jint
Java_org_rocksdb_Env_getBackgroundThreads(
61 JNIEnv
*, jobject
, jlong jhandle
, jbyte jpriority_value
) {
62 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
63 const int num
= rocks_env
->GetBackgroundThreads(
64 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value
));
65 return static_cast<jint
>(num
);
69 * Class: org_rocksdb_Env
70 * Method: getThreadPoolQueueLen
73 jint
Java_org_rocksdb_Env_getThreadPoolQueueLen(
74 JNIEnv
*, jobject
, jlong jhandle
, jbyte jpriority_value
) {
75 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
76 const int queue_len
= rocks_env
->GetThreadPoolQueueLen(
77 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value
));
78 return static_cast<jint
>(queue_len
);
82 * Class: org_rocksdb_Env
83 * Method: incBackgroundThreadsIfNeeded
86 void Java_org_rocksdb_Env_incBackgroundThreadsIfNeeded(
87 JNIEnv
*, jobject
, jlong jhandle
, jint jnum
, jbyte jpriority_value
) {
88 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
89 rocks_env
->IncBackgroundThreadsIfNeeded(
90 static_cast<int>(jnum
),
91 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value
));
95 * Class: org_rocksdb_Env
96 * Method: lowerThreadPoolIOPriority
99 void Java_org_rocksdb_Env_lowerThreadPoolIOPriority(
100 JNIEnv
*, jobject
, jlong jhandle
, jbyte jpriority_value
) {
101 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
102 rocks_env
->LowerThreadPoolIOPriority(
103 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value
));
107 * Class: org_rocksdb_Env
108 * Method: lowerThreadPoolCPUPriority
111 void Java_org_rocksdb_Env_lowerThreadPoolCPUPriority(
112 JNIEnv
*, jobject
, jlong jhandle
, jbyte jpriority_value
) {
113 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
114 rocks_env
->LowerThreadPoolCPUPriority(
115 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value
));
119 * Class: org_rocksdb_Env
120 * Method: getThreadList
121 * Signature: (J)[Lorg/rocksdb/ThreadStatus;
123 jobjectArray
Java_org_rocksdb_Env_getThreadList(
124 JNIEnv
* env
, jobject
, jlong jhandle
) {
125 auto* rocks_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
126 std::vector
<ROCKSDB_NAMESPACE::ThreadStatus
> thread_status
;
127 ROCKSDB_NAMESPACE::Status s
= rocks_env
->GetThreadList(&thread_status
);
129 // error, throw exception
130 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, s
);
135 const jsize len
= static_cast<jsize
>(thread_status
.size());
136 jobjectArray jthread_status
= env
->NewObjectArray(
137 len
, ROCKSDB_NAMESPACE::ThreadStatusJni::getJClass(env
), nullptr);
138 if (jthread_status
== nullptr) {
139 // an exception occurred
142 for (jsize i
= 0; i
< len
; ++i
) {
144 ROCKSDB_NAMESPACE::ThreadStatusJni::construct(env
, &(thread_status
[i
]));
145 env
->SetObjectArrayElement(jthread_status
, i
, jts
);
146 if (env
->ExceptionCheck()) {
147 // exception occurred
148 env
->DeleteLocalRef(jthread_status
);
153 return jthread_status
;
157 * Class: org_rocksdb_RocksMemEnv
158 * Method: createMemEnv
161 jlong
Java_org_rocksdb_RocksMemEnv_createMemEnv(
162 JNIEnv
*, jclass
, jlong jbase_env_handle
) {
163 auto* base_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jbase_env_handle
);
164 return reinterpret_cast<jlong
>(ROCKSDB_NAMESPACE::NewMemEnv(base_env
));
168 * Class: org_rocksdb_RocksMemEnv
169 * Method: disposeInternal
172 void Java_org_rocksdb_RocksMemEnv_disposeInternal(
173 JNIEnv
*, jobject
, jlong jhandle
) {
174 auto* e
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
175 assert(e
!= nullptr);
180 * Class: org_rocksdb_HdfsEnv
181 * Method: createHdfsEnv
182 * Signature: (Ljava/lang/String;)J
184 jlong
Java_org_rocksdb_HdfsEnv_createHdfsEnv(
185 JNIEnv
* env
, jclass
, jstring jfsname
) {
186 jboolean has_exception
= JNI_FALSE
;
188 ROCKSDB_NAMESPACE::JniUtil::copyStdString(env
, jfsname
, &has_exception
);
189 if (has_exception
== JNI_TRUE
) {
190 // exception occurred
193 ROCKSDB_NAMESPACE::Env
* hdfs_env
;
194 ROCKSDB_NAMESPACE::Status s
=
195 ROCKSDB_NAMESPACE::NewHdfsEnv(&hdfs_env
, fsname
);
198 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env
, s
);
201 return reinterpret_cast<jlong
>(hdfs_env
);
205 * Class: org_rocksdb_HdfsEnv
206 * Method: disposeInternal
209 void Java_org_rocksdb_HdfsEnv_disposeInternal(
210 JNIEnv
*, jobject
, jlong jhandle
) {
211 auto* e
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
212 assert(e
!= nullptr);
217 * Class: org_rocksdb_TimedEnv
218 * Method: createTimedEnv
221 jlong
Java_org_rocksdb_TimedEnv_createTimedEnv(
222 JNIEnv
*, jclass
, jlong jbase_env_handle
) {
223 auto* base_env
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jbase_env_handle
);
224 return reinterpret_cast<jlong
>(ROCKSDB_NAMESPACE::NewTimedEnv(base_env
));
228 * Class: org_rocksdb_TimedEnv
229 * Method: disposeInternal
232 void Java_org_rocksdb_TimedEnv_disposeInternal(
233 JNIEnv
*, jobject
, jlong jhandle
) {
234 auto* e
= reinterpret_cast<ROCKSDB_NAMESPACE::Env
*>(jhandle
);
235 assert(e
!= nullptr);