]>
Commit | Line | Data |
---|---|---|
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 |
25 | jlong 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 | */ | |
35 | void 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 |
47 | void 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 | */ | |
60 | jint 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 | */ | |
73 | jint 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 | */ | |
86 | void 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 | */ | |
99 | void 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 | */ | |
111 | void 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 |
123 | jobjectArray 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 |
161 | jlong 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 |
172 | void 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 | */ | |
184 | jlong 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 | */ | |
209 | void 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 | */ | |
221 | jlong 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 | */ | |
232 | void 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 |