]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/java/rocksjni/env.cc
f450c560bb965519022406d1ea6610e1e8ad6dd6
[ceph.git] / ceph / src / rocksdb / java / rocksjni / env.cc
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).
5 //
6 // This file implements the "bridge" between Java and C++ and enables
7 // calling c++ ROCKSDB_NAMESPACE::Env methods from Java side.
8
9 #include <jni.h>
10 #include <vector>
11
12 #include "portal.h"
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"
19
20 /*
21 * Class: org_rocksdb_Env
22 * Method: getDefaultEnvInternal
23 * Signature: ()J
24 */
25 jlong Java_org_rocksdb_Env_getDefaultEnvInternal(
26 JNIEnv*, jclass) {
27 return reinterpret_cast<jlong>(ROCKSDB_NAMESPACE::Env::Default());
28 }
29
30 /*
31 * Class: org_rocksdb_RocksEnv
32 * Method: disposeInternal
33 * Signature: (J)V
34 */
35 void Java_org_rocksdb_RocksEnv_disposeInternal(
36 JNIEnv*, jobject, jlong jhandle) {
37 auto* e = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
38 assert(e != nullptr);
39 delete e;
40 }
41
42 /*
43 * Class: org_rocksdb_Env
44 * Method: setBackgroundThreads
45 * Signature: (JIB)V
46 */
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));
53 }
54
55 /*
56 * Class: org_rocksdb_Env
57 * Method: getBackgroundThreads
58 * Signature: (JB)I
59 */
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);
66 }
67
68 /*
69 * Class: org_rocksdb_Env
70 * Method: getThreadPoolQueueLen
71 * Signature: (JB)I
72 */
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);
79 }
80
81 /*
82 * Class: org_rocksdb_Env
83 * Method: incBackgroundThreadsIfNeeded
84 * Signature: (JIB)V
85 */
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));
92 }
93
94 /*
95 * Class: org_rocksdb_Env
96 * Method: lowerThreadPoolIOPriority
97 * Signature: (JB)V
98 */
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));
104 }
105
106 /*
107 * Class: org_rocksdb_Env
108 * Method: lowerThreadPoolCPUPriority
109 * Signature: (JB)V
110 */
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));
116 }
117
118 /*
119 * Class: org_rocksdb_Env
120 * Method: getThreadList
121 * Signature: (J)[Lorg/rocksdb/ThreadStatus;
122 */
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);
128 if (!s.ok()) {
129 // error, throw exception
130 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
131 return nullptr;
132 }
133
134 // object[]
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
140 return nullptr;
141 }
142 for (jsize i = 0; i < len; ++i) {
143 jobject jts =
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);
149 return nullptr;
150 }
151 }
152
153 return jthread_status;
154 }
155
156 /*
157 * Class: org_rocksdb_RocksMemEnv
158 * Method: createMemEnv
159 * Signature: (J)J
160 */
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));
165 }
166
167 /*
168 * Class: org_rocksdb_RocksMemEnv
169 * Method: disposeInternal
170 * Signature: (J)V
171 */
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);
176 delete e;
177 }
178
179 /*
180 * Class: org_rocksdb_HdfsEnv
181 * Method: createHdfsEnv
182 * Signature: (Ljava/lang/String;)J
183 */
184 jlong Java_org_rocksdb_HdfsEnv_createHdfsEnv(
185 JNIEnv* env, jclass, jstring jfsname) {
186 jboolean has_exception = JNI_FALSE;
187 auto fsname =
188 ROCKSDB_NAMESPACE::JniUtil::copyStdString(env, jfsname, &has_exception);
189 if (has_exception == JNI_TRUE) {
190 // exception occurred
191 return 0;
192 }
193 ROCKSDB_NAMESPACE::Env* hdfs_env;
194 ROCKSDB_NAMESPACE::Status s =
195 ROCKSDB_NAMESPACE::NewHdfsEnv(&hdfs_env, fsname);
196 if (!s.ok()) {
197 // error occurred
198 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
199 return 0;
200 }
201 return reinterpret_cast<jlong>(hdfs_env);
202 }
203
204 /*
205 * Class: org_rocksdb_HdfsEnv
206 * Method: disposeInternal
207 * Signature: (J)V
208 */
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);
213 delete e;
214 }
215
216 /*
217 * Class: org_rocksdb_TimedEnv
218 * Method: createTimedEnv
219 * Signature: (J)J
220 */
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));
225 }
226
227 /*
228 * Class: org_rocksdb_TimedEnv
229 * Method: disposeInternal
230 * Signature: (J)V
231 */
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);
236 delete e;
237 }
238