]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/java/rocksjni/env.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / java / rocksjni / env.cc
CommitLineData
7c673cae 1// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
11fdf7f2
TL
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).
7c673cae
FG
5//
6// This file implements the "bridge" between Java and C++ and enables
f67539c2 7// calling c++ ROCKSDB_NAMESPACE::Env methods from Java side.
7c673cae 8
494da23a
TL
9#include <jni.h>
10#include <vector>
11
12#include "portal.h"
11fdf7f2 13#include "rocksdb/env.h"
7c673cae 14#include "include/org_rocksdb_Env.h"
494da23a 15#include "include/org_rocksdb_HdfsEnv.h"
7c673cae
FG
16#include "include/org_rocksdb_RocksEnv.h"
17#include "include/org_rocksdb_RocksMemEnv.h"
494da23a 18#include "include/org_rocksdb_TimedEnv.h"
7c673cae
FG
19
20/*
21 * Class: org_rocksdb_Env
22 * Method: getDefaultEnvInternal
23 * Signature: ()J
24 */
494da23a
TL
25jlong Java_org_rocksdb_Env_getDefaultEnvInternal(
26 JNIEnv*, jclass) {
f67539c2 27 return reinterpret_cast<jlong>(ROCKSDB_NAMESPACE::Env::Default());
7c673cae
FG
28}
29
494da23a
TL
30/*
31 * Class: org_rocksdb_RocksEnv
32 * Method: disposeInternal
33 * Signature: (J)V
34 */
35void Java_org_rocksdb_RocksEnv_disposeInternal(
36 JNIEnv*, jobject, jlong jhandle) {
f67539c2 37 auto* e = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a
TL
38 assert(e != nullptr);
39 delete e;
40}
41
7c673cae
FG
42/*
43 * Class: org_rocksdb_Env
44 * Method: setBackgroundThreads
494da23a 45 * Signature: (JIB)V
7c673cae 46 */
494da23a
TL
47void Java_org_rocksdb_Env_setBackgroundThreads(
48 JNIEnv*, jobject, jlong jhandle, jint jnum, jbyte jpriority_value) {
f67539c2
TL
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));
7c673cae
FG
53}
54
55/*
494da23a
TL
56 * Class: org_rocksdb_Env
57 * Method: getBackgroundThreads
58 * Signature: (JB)I
59 */
60jint Java_org_rocksdb_Env_getBackgroundThreads(
61 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
f67539c2 62 auto* rocks_env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a 63 const int num = rocks_env->GetBackgroundThreads(
f67539c2 64 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value));
494da23a
TL
65 return static_cast<jint>(num);
66}
67
68/*
69 * Class: org_rocksdb_Env
7c673cae 70 * Method: getThreadPoolQueueLen
494da23a
TL
71 * Signature: (JB)I
72 */
73jint Java_org_rocksdb_Env_getThreadPoolQueueLen(
74 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
f67539c2 75 auto* rocks_env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a 76 const int queue_len = rocks_env->GetThreadPoolQueueLen(
f67539c2 77 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value));
494da23a
TL
78 return static_cast<jint>(queue_len);
79}
80
81/*
82 * Class: org_rocksdb_Env
83 * Method: incBackgroundThreadsIfNeeded
84 * Signature: (JIB)V
85 */
86void Java_org_rocksdb_Env_incBackgroundThreadsIfNeeded(
87 JNIEnv*, jobject, jlong jhandle, jint jnum, jbyte jpriority_value) {
f67539c2
TL
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));
494da23a
TL
92}
93
94/*
95 * Class: org_rocksdb_Env
96 * Method: lowerThreadPoolIOPriority
97 * Signature: (JB)V
98 */
99void Java_org_rocksdb_Env_lowerThreadPoolIOPriority(
100 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
f67539c2 101 auto* rocks_env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a 102 rocks_env->LowerThreadPoolIOPriority(
f67539c2 103 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value));
494da23a
TL
104}
105
106/*
107 * Class: org_rocksdb_Env
108 * Method: lowerThreadPoolCPUPriority
109 * Signature: (JB)V
110 */
111void Java_org_rocksdb_Env_lowerThreadPoolCPUPriority(
112 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
f67539c2 113 auto* rocks_env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a 114 rocks_env->LowerThreadPoolCPUPriority(
f67539c2 115 ROCKSDB_NAMESPACE::PriorityJni::toCppPriority(jpriority_value));
494da23a
TL
116}
117
118/*
119 * Class: org_rocksdb_Env
120 * Method: getThreadList
121 * Signature: (J)[Lorg/rocksdb/ThreadStatus;
7c673cae 122 */
494da23a
TL
123jobjectArray Java_org_rocksdb_Env_getThreadList(
124 JNIEnv* env, jobject, jlong jhandle) {
f67539c2
TL
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);
494da23a
TL
128 if (!s.ok()) {
129 // error, throw exception
f67539c2 130 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
494da23a
TL
131 return nullptr;
132 }
133
134 // object[]
135 const jsize len = static_cast<jsize>(thread_status.size());
f67539c2
TL
136 jobjectArray jthread_status = env->NewObjectArray(
137 len, ROCKSDB_NAMESPACE::ThreadStatusJni::getJClass(env), nullptr);
494da23a
TL
138 if (jthread_status == nullptr) {
139 // an exception occurred
140 return nullptr;
141 }
142 for (jsize i = 0; i < len; ++i) {
143 jobject jts =
f67539c2 144 ROCKSDB_NAMESPACE::ThreadStatusJni::construct(env, &(thread_status[i]));
494da23a
TL
145 env->SetObjectArrayElement(jthread_status, i, jts);
146 if (env->ExceptionCheck()) {
147 // exception occurred
148 env->DeleteLocalRef(jthread_status);
149 return nullptr;
150 }
7c673cae 151 }
494da23a
TL
152
153 return jthread_status;
7c673cae
FG
154}
155
156/*
157 * Class: org_rocksdb_RocksMemEnv
158 * Method: createMemEnv
494da23a 159 * Signature: (J)J
7c673cae 160 */
494da23a
TL
161jlong Java_org_rocksdb_RocksMemEnv_createMemEnv(
162 JNIEnv*, jclass, jlong jbase_env_handle) {
f67539c2
TL
163 auto* base_env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jbase_env_handle);
164 return reinterpret_cast<jlong>(ROCKSDB_NAMESPACE::NewMemEnv(base_env));
7c673cae
FG
165}
166
167/*
168 * Class: org_rocksdb_RocksMemEnv
169 * Method: disposeInternal
170 * Signature: (J)V
171 */
494da23a
TL
172void Java_org_rocksdb_RocksMemEnv_disposeInternal(
173 JNIEnv*, jobject, jlong jhandle) {
f67539c2 174 auto* e = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a
TL
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 */
184jlong Java_org_rocksdb_HdfsEnv_createHdfsEnv(
185 JNIEnv* env, jclass, jstring jfsname) {
186 jboolean has_exception = JNI_FALSE;
f67539c2
TL
187 auto fsname =
188 ROCKSDB_NAMESPACE::JniUtil::copyStdString(env, jfsname, &has_exception);
494da23a
TL
189 if (has_exception == JNI_TRUE) {
190 // exception occurred
191 return 0;
192 }
f67539c2
TL
193 ROCKSDB_NAMESPACE::Env* hdfs_env;
194 ROCKSDB_NAMESPACE::Status s =
195 ROCKSDB_NAMESPACE::NewHdfsEnv(&hdfs_env, fsname);
494da23a
TL
196 if (!s.ok()) {
197 // error occurred
f67539c2 198 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(env, s);
494da23a
TL
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 */
209void Java_org_rocksdb_HdfsEnv_disposeInternal(
210 JNIEnv*, jobject, jlong jhandle) {
f67539c2 211 auto* e = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
7c673cae
FG
212 assert(e != nullptr);
213 delete e;
214}
494da23a
TL
215
216/*
217 * Class: org_rocksdb_TimedEnv
218 * Method: createTimedEnv
219 * Signature: (J)J
220 */
221jlong Java_org_rocksdb_TimedEnv_createTimedEnv(
222 JNIEnv*, jclass, jlong jbase_env_handle) {
f67539c2
TL
223 auto* base_env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jbase_env_handle);
224 return reinterpret_cast<jlong>(ROCKSDB_NAMESPACE::NewTimedEnv(base_env));
494da23a
TL
225}
226
227/*
228 * Class: org_rocksdb_TimedEnv
229 * Method: disposeInternal
230 * Signature: (J)V
231 */
232void Java_org_rocksdb_TimedEnv_disposeInternal(
233 JNIEnv*, jobject, jlong jhandle) {
f67539c2 234 auto* e = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jhandle);
494da23a
TL
235 assert(e != nullptr);
236 delete e;
237}
238