]>
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 | |
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 |
25 | jlong 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 | */ | |
35 | void 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 |
47 | void 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 | */ | |
59 | jint 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 | */ | |
72 | jint 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 | */ | |
85 | void 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 | */ | |
97 | void 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 | */ | |
109 | void 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 |
121 | jobjectArray 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 |
159 | jlong 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 |
170 | void 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 | */ | |
182 | jlong 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 | */ | |
205 | void 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 | */ | |
217 | jlong 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 | */ | |
228 | void 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 |