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::EnvOptions methods
8 // from Java side.
9 
10 #include <jni.h>
11 
12 #include "include/org_rocksdb_EnvOptions.h"
13 #include "rocksdb/env.h"
14 
15 #define ENV_OPTIONS_SET_BOOL(_jhandle, _opt)                \
16   reinterpret_cast<rocksdb::EnvOptions *>(_jhandle)->_opt = \
17       static_cast<bool>(_opt)
18 
19 #define ENV_OPTIONS_SET_SIZE_T(_jhandle, _opt)              \
20   reinterpret_cast<rocksdb::EnvOptions *>(_jhandle)->_opt = \
21       static_cast<size_t>(_opt)
22 
23 #define ENV_OPTIONS_SET_UINT64_T(_jhandle, _opt)            \
24   reinterpret_cast<rocksdb::EnvOptions *>(_jhandle)->_opt = \
25       static_cast<uint64_t>(_opt)
26 
27 #define ENV_OPTIONS_GET(_jhandle, _opt) \
28   reinterpret_cast<rocksdb::EnvOptions *>(_jhandle)->_opt
29 
30 /*
31  * Class:     org_rocksdb_EnvOptions
32  * Method:    newEnvOptions
33  * Signature: ()J
34  */
Java_org_rocksdb_EnvOptions_newEnvOptions__(JNIEnv *,jclass)35 jlong Java_org_rocksdb_EnvOptions_newEnvOptions__(
36     JNIEnv*, jclass) {
37   auto *env_opt = new rocksdb::EnvOptions();
38   return reinterpret_cast<jlong>(env_opt);
39 }
40 
41 /*
42  * Class:     org_rocksdb_EnvOptions
43  * Method:    newEnvOptions
44  * Signature: (J)J
45  */
Java_org_rocksdb_EnvOptions_newEnvOptions__J(JNIEnv *,jclass,jlong jdboptions_handle)46 jlong Java_org_rocksdb_EnvOptions_newEnvOptions__J(
47     JNIEnv*, jclass, jlong jdboptions_handle) {
48   auto* db_options =
49       reinterpret_cast<rocksdb::DBOptions*>(jdboptions_handle);
50   auto* env_opt = new rocksdb::EnvOptions(*db_options);
51   return reinterpret_cast<jlong>(env_opt);
52 }
53 
54 /*
55  * Class:     org_rocksdb_EnvOptions
56  * Method:    disposeInternal
57  * Signature: (J)V
58  */
Java_org_rocksdb_EnvOptions_disposeInternal(JNIEnv *,jobject,jlong jhandle)59 void Java_org_rocksdb_EnvOptions_disposeInternal(
60     JNIEnv*, jobject, jlong jhandle) {
61   auto *eo = reinterpret_cast<rocksdb::EnvOptions *>(jhandle);
62   assert(eo != nullptr);
63   delete eo;
64 }
65 
66 /*
67  * Class:     org_rocksdb_EnvOptions
68  * Method:    setUseMmapReads
69  * Signature: (JZ)V
70  */
Java_org_rocksdb_EnvOptions_setUseMmapReads(JNIEnv *,jobject,jlong jhandle,jboolean use_mmap_reads)71 void Java_org_rocksdb_EnvOptions_setUseMmapReads(
72     JNIEnv*, jobject, jlong jhandle, jboolean use_mmap_reads) {
73   ENV_OPTIONS_SET_BOOL(jhandle, use_mmap_reads);
74 }
75 
76 /*
77  * Class:     org_rocksdb_EnvOptions
78  * Method:    useMmapReads
79  * Signature: (J)Z
80  */
Java_org_rocksdb_EnvOptions_useMmapReads(JNIEnv *,jobject,jlong jhandle)81 jboolean Java_org_rocksdb_EnvOptions_useMmapReads(
82     JNIEnv*, jobject, jlong jhandle) {
83   return ENV_OPTIONS_GET(jhandle, use_mmap_reads);
84 }
85 
86 /*
87  * Class:     org_rocksdb_EnvOptions
88  * Method:    setUseMmapWrites
89  * Signature: (JZ)V
90  */
Java_org_rocksdb_EnvOptions_setUseMmapWrites(JNIEnv *,jobject,jlong jhandle,jboolean use_mmap_writes)91 void Java_org_rocksdb_EnvOptions_setUseMmapWrites(
92     JNIEnv*, jobject, jlong jhandle, jboolean use_mmap_writes) {
93   ENV_OPTIONS_SET_BOOL(jhandle, use_mmap_writes);
94 }
95 
96 /*
97  * Class:     org_rocksdb_EnvOptions
98  * Method:    useMmapWrites
99  * Signature: (J)Z
100  */
Java_org_rocksdb_EnvOptions_useMmapWrites(JNIEnv *,jobject,jlong jhandle)101 jboolean Java_org_rocksdb_EnvOptions_useMmapWrites(
102     JNIEnv*, jobject, jlong jhandle) {
103   return ENV_OPTIONS_GET(jhandle, use_mmap_writes);
104 }
105 
106 /*
107  * Class:     org_rocksdb_EnvOptions
108  * Method:    setUseDirectReads
109  * Signature: (JZ)V
110  */
Java_org_rocksdb_EnvOptions_setUseDirectReads(JNIEnv *,jobject,jlong jhandle,jboolean use_direct_reads)111 void Java_org_rocksdb_EnvOptions_setUseDirectReads(
112     JNIEnv*, jobject, jlong jhandle, jboolean use_direct_reads) {
113   ENV_OPTIONS_SET_BOOL(jhandle, use_direct_reads);
114 }
115 
116 /*
117  * Class:     org_rocksdb_EnvOptions
118  * Method:    useDirectReads
119  * Signature: (J)Z
120  */
Java_org_rocksdb_EnvOptions_useDirectReads(JNIEnv *,jobject,jlong jhandle)121 jboolean Java_org_rocksdb_EnvOptions_useDirectReads(
122     JNIEnv*, jobject, jlong jhandle) {
123   return ENV_OPTIONS_GET(jhandle, use_direct_reads);
124 }
125 
126 /*
127  * Class:     org_rocksdb_EnvOptions
128  * Method:    setUseDirectWrites
129  * Signature: (JZ)V
130  */
Java_org_rocksdb_EnvOptions_setUseDirectWrites(JNIEnv *,jobject,jlong jhandle,jboolean use_direct_writes)131 void Java_org_rocksdb_EnvOptions_setUseDirectWrites(
132     JNIEnv*, jobject, jlong jhandle, jboolean use_direct_writes) {
133   ENV_OPTIONS_SET_BOOL(jhandle, use_direct_writes);
134 }
135 
136 /*
137  * Class:     org_rocksdb_EnvOptions
138  * Method:    useDirectWrites
139  * Signature: (J)Z
140  */
Java_org_rocksdb_EnvOptions_useDirectWrites(JNIEnv *,jobject,jlong jhandle)141 jboolean Java_org_rocksdb_EnvOptions_useDirectWrites(
142     JNIEnv*,  jobject, jlong jhandle) {
143   return ENV_OPTIONS_GET(jhandle, use_direct_writes);
144 }
145 
146 /*
147  * Class:     org_rocksdb_EnvOptions
148  * Method:    setAllowFallocate
149  * Signature: (JZ)V
150  */
Java_org_rocksdb_EnvOptions_setAllowFallocate(JNIEnv *,jobject,jlong jhandle,jboolean allow_fallocate)151 void Java_org_rocksdb_EnvOptions_setAllowFallocate(
152     JNIEnv*, jobject, jlong jhandle, jboolean allow_fallocate) {
153   ENV_OPTIONS_SET_BOOL(jhandle, allow_fallocate);
154 }
155 
156 /*
157  * Class:     org_rocksdb_EnvOptions
158  * Method:    allowFallocate
159  * Signature: (J)Z
160  */
Java_org_rocksdb_EnvOptions_allowFallocate(JNIEnv *,jobject,jlong jhandle)161 jboolean Java_org_rocksdb_EnvOptions_allowFallocate(
162     JNIEnv*, jobject, jlong jhandle) {
163   return ENV_OPTIONS_GET(jhandle, allow_fallocate);
164 }
165 
166 /*
167  * Class:     org_rocksdb_EnvOptions
168  * Method:    setSetFdCloexec
169  * Signature: (JZ)V
170  */
Java_org_rocksdb_EnvOptions_setSetFdCloexec(JNIEnv *,jobject,jlong jhandle,jboolean set_fd_cloexec)171 void Java_org_rocksdb_EnvOptions_setSetFdCloexec(
172     JNIEnv*, jobject, jlong jhandle, jboolean set_fd_cloexec) {
173   ENV_OPTIONS_SET_BOOL(jhandle, set_fd_cloexec);
174 }
175 
176 /*
177  * Class:     org_rocksdb_EnvOptions
178  * Method:    setFdCloexec
179  * Signature: (J)Z
180  */
Java_org_rocksdb_EnvOptions_setFdCloexec(JNIEnv *,jobject,jlong jhandle)181 jboolean Java_org_rocksdb_EnvOptions_setFdCloexec(
182     JNIEnv*, jobject, jlong jhandle) {
183   return ENV_OPTIONS_GET(jhandle, set_fd_cloexec);
184 }
185 
186 /*
187  * Class:     org_rocksdb_EnvOptions
188  * Method:    setBytesPerSync
189  * Signature: (JJ)V
190  */
Java_org_rocksdb_EnvOptions_setBytesPerSync(JNIEnv *,jobject,jlong jhandle,jlong bytes_per_sync)191 void Java_org_rocksdb_EnvOptions_setBytesPerSync(
192     JNIEnv*, jobject, jlong jhandle, jlong bytes_per_sync) {
193   ENV_OPTIONS_SET_UINT64_T(jhandle, bytes_per_sync);
194 }
195 
196 /*
197  * Class:     org_rocksdb_EnvOptions
198  * Method:    bytesPerSync
199  * Signature: (J)J
200  */
Java_org_rocksdb_EnvOptions_bytesPerSync(JNIEnv *,jobject,jlong jhandle)201 jlong Java_org_rocksdb_EnvOptions_bytesPerSync(
202     JNIEnv*,  jobject,  jlong jhandle) {
203   return ENV_OPTIONS_GET(jhandle, bytes_per_sync);
204 }
205 
206 /*
207  * Class:     org_rocksdb_EnvOptions
208  * Method:    setFallocateWithKeepSize
209  * Signature: (JZ)V
210  */
Java_org_rocksdb_EnvOptions_setFallocateWithKeepSize(JNIEnv *,jobject,jlong jhandle,jboolean fallocate_with_keep_size)211 void Java_org_rocksdb_EnvOptions_setFallocateWithKeepSize(
212     JNIEnv*, jobject, jlong jhandle, jboolean fallocate_with_keep_size) {
213   ENV_OPTIONS_SET_BOOL(jhandle, fallocate_with_keep_size);
214 }
215 
216 /*
217  * Class:     org_rocksdb_EnvOptions
218  * Method:    fallocateWithKeepSize
219  * Signature: (J)Z
220  */
Java_org_rocksdb_EnvOptions_fallocateWithKeepSize(JNIEnv *,jobject,jlong jhandle)221 jboolean Java_org_rocksdb_EnvOptions_fallocateWithKeepSize(
222     JNIEnv*, jobject, jlong jhandle) {
223   return ENV_OPTIONS_GET(jhandle, fallocate_with_keep_size);
224 }
225 
226 /*
227  * Class:     org_rocksdb_EnvOptions
228  * Method:    setCompactionReadaheadSize
229  * Signature: (JJ)V
230  */
Java_org_rocksdb_EnvOptions_setCompactionReadaheadSize(JNIEnv *,jobject,jlong jhandle,jlong compaction_readahead_size)231 void Java_org_rocksdb_EnvOptions_setCompactionReadaheadSize(
232     JNIEnv*, jobject, jlong jhandle, jlong compaction_readahead_size) {
233   ENV_OPTIONS_SET_SIZE_T(jhandle, compaction_readahead_size);
234 }
235 
236 /*
237  * Class:     org_rocksdb_EnvOptions
238  * Method:    compactionReadaheadSize
239  * Signature: (J)J
240  */
Java_org_rocksdb_EnvOptions_compactionReadaheadSize(JNIEnv *,jobject,jlong jhandle)241 jlong Java_org_rocksdb_EnvOptions_compactionReadaheadSize(
242     JNIEnv*, jobject, jlong jhandle) {
243   return ENV_OPTIONS_GET(jhandle, compaction_readahead_size);
244 }
245 
246 /*
247  * Class:     org_rocksdb_EnvOptions
248  * Method:    setRandomAccessMaxBufferSize
249  * Signature: (JJ)V
250  */
Java_org_rocksdb_EnvOptions_setRandomAccessMaxBufferSize(JNIEnv *,jobject,jlong jhandle,jlong random_access_max_buffer_size)251 void Java_org_rocksdb_EnvOptions_setRandomAccessMaxBufferSize(
252     JNIEnv*, jobject, jlong jhandle, jlong random_access_max_buffer_size) {
253   ENV_OPTIONS_SET_SIZE_T(jhandle, random_access_max_buffer_size);
254 }
255 
256 /*
257  * Class:     org_rocksdb_EnvOptions
258  * Method:    randomAccessMaxBufferSize
259  * Signature: (J)J
260  */
Java_org_rocksdb_EnvOptions_randomAccessMaxBufferSize(JNIEnv *,jobject,jlong jhandle)261 jlong Java_org_rocksdb_EnvOptions_randomAccessMaxBufferSize(
262     JNIEnv*, jobject, jlong jhandle) {
263   return ENV_OPTIONS_GET(jhandle, random_access_max_buffer_size);
264 }
265 
266 /*
267  * Class:     org_rocksdb_EnvOptions
268  * Method:    setWritableFileMaxBufferSize
269  * Signature: (JJ)V
270  */
Java_org_rocksdb_EnvOptions_setWritableFileMaxBufferSize(JNIEnv *,jobject,jlong jhandle,jlong writable_file_max_buffer_size)271 void Java_org_rocksdb_EnvOptions_setWritableFileMaxBufferSize(
272     JNIEnv*, jobject, jlong jhandle, jlong writable_file_max_buffer_size) {
273   ENV_OPTIONS_SET_SIZE_T(jhandle, writable_file_max_buffer_size);
274 }
275 
276 /*
277  * Class:     org_rocksdb_EnvOptions
278  * Method:    writableFileMaxBufferSize
279  * Signature: (J)J
280  */
Java_org_rocksdb_EnvOptions_writableFileMaxBufferSize(JNIEnv *,jobject,jlong jhandle)281 jlong Java_org_rocksdb_EnvOptions_writableFileMaxBufferSize(
282     JNIEnv*, jobject, jlong jhandle) {
283   return ENV_OPTIONS_GET(jhandle, writable_file_max_buffer_size);
284 }
285 
286 /*
287  * Class:     org_rocksdb_EnvOptions
288  * Method:    setRateLimiter
289  * Signature: (JJ)V
290  */
Java_org_rocksdb_EnvOptions_setRateLimiter(JNIEnv *,jobject,jlong jhandle,jlong rl_handle)291 void Java_org_rocksdb_EnvOptions_setRateLimiter(
292     JNIEnv*, jobject, jlong jhandle, jlong rl_handle) {
293   auto *sptr_rate_limiter =
294       reinterpret_cast<std::shared_ptr<rocksdb::RateLimiter> *>(rl_handle);
295   auto *env_opt = reinterpret_cast<rocksdb::EnvOptions *>(jhandle);
296   env_opt->rate_limiter = sptr_rate_limiter->get();
297 }
298