]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/java/rocksjni/env.cc
import 14.2.4 nautilus point release
[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
7// calling c++ rocksdb::Env methods from Java side.
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) {
7c673cae
FG
27 return reinterpret_cast<jlong>(rocksdb::Env::Default());
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) {
37 auto* e = reinterpret_cast<rocksdb::Env*>(jhandle);
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) {
7c673cae 49 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
494da23a
TL
50 rocks_env->SetBackgroundThreads(static_cast<int>(jnum),
51 rocksdb::PriorityJni::toCppPriority(jpriority_value));
7c673cae
FG
52}
53
54/*
494da23a
TL
55 * Class: org_rocksdb_Env
56 * Method: getBackgroundThreads
57 * Signature: (JB)I
58 */
59jint Java_org_rocksdb_Env_getBackgroundThreads(
60 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
61 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
62 const int num = rocks_env->GetBackgroundThreads(
63 rocksdb::PriorityJni::toCppPriority(jpriority_value));
64 return static_cast<jint>(num);
65}
66
67/*
68 * Class: org_rocksdb_Env
7c673cae 69 * Method: getThreadPoolQueueLen
494da23a
TL
70 * Signature: (JB)I
71 */
72jint Java_org_rocksdb_Env_getThreadPoolQueueLen(
73 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
74 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
75 const int queue_len = rocks_env->GetThreadPoolQueueLen(
76 rocksdb::PriorityJni::toCppPriority(jpriority_value));
77 return static_cast<jint>(queue_len);
78}
79
80/*
81 * Class: org_rocksdb_Env
82 * Method: incBackgroundThreadsIfNeeded
83 * Signature: (JIB)V
84 */
85void Java_org_rocksdb_Env_incBackgroundThreadsIfNeeded(
86 JNIEnv*, jobject, jlong jhandle, jint jnum, jbyte jpriority_value) {
87 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
88 rocks_env->IncBackgroundThreadsIfNeeded(static_cast<int>(jnum),
89 rocksdb::PriorityJni::toCppPriority(jpriority_value));
90}
91
92/*
93 * Class: org_rocksdb_Env
94 * Method: lowerThreadPoolIOPriority
95 * Signature: (JB)V
96 */
97void Java_org_rocksdb_Env_lowerThreadPoolIOPriority(
98 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
99 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
100 rocks_env->LowerThreadPoolIOPriority(
101 rocksdb::PriorityJni::toCppPriority(jpriority_value));
102}
103
104/*
105 * Class: org_rocksdb_Env
106 * Method: lowerThreadPoolCPUPriority
107 * Signature: (JB)V
108 */
109void Java_org_rocksdb_Env_lowerThreadPoolCPUPriority(
110 JNIEnv*, jobject, jlong jhandle, jbyte jpriority_value) {
111 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
112 rocks_env->LowerThreadPoolCPUPriority(
113 rocksdb::PriorityJni::toCppPriority(jpriority_value));
114}
115
116/*
117 * Class: org_rocksdb_Env
118 * Method: getThreadList
119 * Signature: (J)[Lorg/rocksdb/ThreadStatus;
7c673cae 120 */
494da23a
TL
121jobjectArray Java_org_rocksdb_Env_getThreadList(
122 JNIEnv* env, jobject, jlong jhandle) {
7c673cae 123 auto* rocks_env = reinterpret_cast<rocksdb::Env*>(jhandle);
494da23a
TL
124 std::vector<rocksdb::ThreadStatus> thread_status;
125 rocksdb::Status s = rocks_env->GetThreadList(&thread_status);
126 if (!s.ok()) {
127 // error, throw exception
128 rocksdb::RocksDBExceptionJni::ThrowNew(env, s);
129 return nullptr;
130 }
131
132 // object[]
133 const jsize len = static_cast<jsize>(thread_status.size());
134 jobjectArray jthread_status =
135 env->NewObjectArray(len, rocksdb::ThreadStatusJni::getJClass(env), nullptr);
136 if (jthread_status == nullptr) {
137 // an exception occurred
138 return nullptr;
139 }
140 for (jsize i = 0; i < len; ++i) {
141 jobject jts =
142 rocksdb::ThreadStatusJni::construct(env, &(thread_status[i]));
143 env->SetObjectArrayElement(jthread_status, i, jts);
144 if (env->ExceptionCheck()) {
145 // exception occurred
146 env->DeleteLocalRef(jthread_status);
147 return nullptr;
148 }
7c673cae 149 }
494da23a
TL
150
151 return jthread_status;
7c673cae
FG
152}
153
154/*
155 * Class: org_rocksdb_RocksMemEnv
156 * Method: createMemEnv
494da23a 157 * Signature: (J)J
7c673cae 158 */
494da23a
TL
159jlong Java_org_rocksdb_RocksMemEnv_createMemEnv(
160 JNIEnv*, jclass, jlong jbase_env_handle) {
161 auto* base_env = reinterpret_cast<rocksdb::Env*>(jbase_env_handle);
162 return reinterpret_cast<jlong>(rocksdb::NewMemEnv(base_env));
7c673cae
FG
163}
164
165/*
166 * Class: org_rocksdb_RocksMemEnv
167 * Method: disposeInternal
168 * Signature: (J)V
169 */
494da23a
TL
170void Java_org_rocksdb_RocksMemEnv_disposeInternal(
171 JNIEnv*, jobject, jlong jhandle) {
172 auto* e = reinterpret_cast<rocksdb::Env*>(jhandle);
173 assert(e != nullptr);
174 delete e;
175}
176
177/*
178 * Class: org_rocksdb_HdfsEnv
179 * Method: createHdfsEnv
180 * Signature: (Ljava/lang/String;)J
181 */
182jlong Java_org_rocksdb_HdfsEnv_createHdfsEnv(
183 JNIEnv* env, jclass, jstring jfsname) {
184 jboolean has_exception = JNI_FALSE;
185 auto fsname = rocksdb::JniUtil::copyStdString(env, jfsname, &has_exception);
186 if (has_exception == JNI_TRUE) {
187 // exception occurred
188 return 0;
189 }
190 rocksdb::Env* hdfs_env;
191 rocksdb::Status s = rocksdb::NewHdfsEnv(&hdfs_env, fsname);
192 if (!s.ok()) {
193 // error occurred
194 rocksdb::RocksDBExceptionJni::ThrowNew(env, s);
195 return 0;
196 }
197 return reinterpret_cast<jlong>(hdfs_env);
198}
199
200/*
201 * Class: org_rocksdb_HdfsEnv
202 * Method: disposeInternal
203 * Signature: (J)V
204 */
205void Java_org_rocksdb_HdfsEnv_disposeInternal(
206 JNIEnv*, jobject, jlong jhandle) {
7c673cae
FG
207 auto* e = reinterpret_cast<rocksdb::Env*>(jhandle);
208 assert(e != nullptr);
209 delete e;
210}
494da23a
TL
211
212/*
213 * Class: org_rocksdb_TimedEnv
214 * Method: createTimedEnv
215 * Signature: (J)J
216 */
217jlong Java_org_rocksdb_TimedEnv_createTimedEnv(
218 JNIEnv*, jclass, jlong jbase_env_handle) {
219 auto* base_env = reinterpret_cast<rocksdb::Env*>(jbase_env_handle);
220 return reinterpret_cast<jlong>(rocksdb::NewTimedEnv(base_env));
221}
222
223/*
224 * Class: org_rocksdb_TimedEnv
225 * Method: disposeInternal
226 * Signature: (J)V
227 */
228void Java_org_rocksdb_TimedEnv_disposeInternal(
229 JNIEnv*, jobject, jlong jhandle) {
230 auto* e = reinterpret_cast<rocksdb::Env*>(jhandle);
231 assert(e != nullptr);
232 delete e;
233}
234