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_NAMESPACE::BackupEnginge and
8 // ROCKSDB_NAMESPACE::BackupableDBOptions methods from Java side.
9 
10 #include <jni.h>
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string>
14 #include <vector>
15 
16 #include "include/org_rocksdb_BackupableDBOptions.h"
17 #include "rocksdb/utilities/backupable_db.h"
18 #include "rocksjni/portal.h"
19 
20 ///////////////////////////////////////////////////////////////////////////
21 // BackupDBOptions
22 
23 /*
24  * Class:     org_rocksdb_BackupableDBOptions
25  * Method:    newBackupableDBOptions
26  * Signature: (Ljava/lang/String;)J
27  */
Java_org_rocksdb_BackupableDBOptions_newBackupableDBOptions(JNIEnv * env,jclass,jstring jpath)28 jlong Java_org_rocksdb_BackupableDBOptions_newBackupableDBOptions(
29     JNIEnv* env, jclass /*jcls*/, jstring jpath) {
30   const char* cpath = env->GetStringUTFChars(jpath, nullptr);
31   if (cpath == nullptr) {
32     // exception thrown: OutOfMemoryError
33     return 0;
34   }
35   auto* bopt = new ROCKSDB_NAMESPACE::BackupableDBOptions(cpath);
36   env->ReleaseStringUTFChars(jpath, cpath);
37   return reinterpret_cast<jlong>(bopt);
38 }
39 
40 /*
41  * Class:     org_rocksdb_BackupableDBOptions
42  * Method:    backupDir
43  * Signature: (J)Ljava/lang/String;
44  */
Java_org_rocksdb_BackupableDBOptions_backupDir(JNIEnv * env,jobject,jlong jhandle)45 jstring Java_org_rocksdb_BackupableDBOptions_backupDir(JNIEnv* env,
46                                                        jobject /*jopt*/,
47                                                        jlong jhandle) {
48   auto* bopt =
49       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
50   return env->NewStringUTF(bopt->backup_dir.c_str());
51 }
52 
53 /*
54  * Class:     org_rocksdb_BackupableDBOptions
55  * Method:    setBackupEnv
56  * Signature: (JJ)V
57  */
Java_org_rocksdb_BackupableDBOptions_setBackupEnv(JNIEnv *,jobject,jlong jhandle,jlong jrocks_env_handle)58 void Java_org_rocksdb_BackupableDBOptions_setBackupEnv(
59     JNIEnv* /*env*/, jobject /*jopt*/, jlong jhandle, jlong jrocks_env_handle) {
60   auto* bopt =
61       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
62   auto* rocks_env =
63       reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jrocks_env_handle);
64   bopt->backup_env = rocks_env;
65 }
66 
67 /*
68  * Class:     org_rocksdb_BackupableDBOptions
69  * Method:    setShareTableFiles
70  * Signature: (JZ)V
71  */
Java_org_rocksdb_BackupableDBOptions_setShareTableFiles(JNIEnv *,jobject,jlong jhandle,jboolean flag)72 void Java_org_rocksdb_BackupableDBOptions_setShareTableFiles(JNIEnv* /*env*/,
73                                                              jobject /*jobj*/,
74                                                              jlong jhandle,
75                                                              jboolean flag) {
76   auto* bopt =
77       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
78   bopt->share_table_files = flag;
79 }
80 
81 /*
82  * Class:     org_rocksdb_BackupableDBOptions
83  * Method:    shareTableFiles
84  * Signature: (J)Z
85  */
Java_org_rocksdb_BackupableDBOptions_shareTableFiles(JNIEnv *,jobject,jlong jhandle)86 jboolean Java_org_rocksdb_BackupableDBOptions_shareTableFiles(JNIEnv* /*env*/,
87                                                               jobject /*jobj*/,
88                                                               jlong jhandle) {
89   auto* bopt =
90       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
91   return bopt->share_table_files;
92 }
93 
94 /*
95  * Class:     org_rocksdb_BackupableDBOptions
96  * Method:    setInfoLog
97  * Signature: (JJ)V
98  */
Java_org_rocksdb_BackupableDBOptions_setInfoLog(JNIEnv *,jobject,jlong jhandle,jlong)99 void Java_org_rocksdb_BackupableDBOptions_setInfoLog(JNIEnv* /*env*/,
100                                                      jobject /*jobj*/,
101                                                      jlong jhandle,
102                                                      jlong /*jlogger_handle*/) {
103   auto* bopt =
104       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
105   auto* sptr_logger =
106       reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::LoggerJniCallback>*>(
107           jhandle);
108   bopt->info_log = sptr_logger->get();
109 }
110 
111 /*
112  * Class:     org_rocksdb_BackupableDBOptions
113  * Method:    setSync
114  * Signature: (JZ)V
115  */
Java_org_rocksdb_BackupableDBOptions_setSync(JNIEnv *,jobject,jlong jhandle,jboolean flag)116 void Java_org_rocksdb_BackupableDBOptions_setSync(JNIEnv* /*env*/,
117                                                   jobject /*jobj*/,
118                                                   jlong jhandle,
119                                                   jboolean flag) {
120   auto* bopt =
121       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
122   bopt->sync = flag;
123 }
124 
125 /*
126  * Class:     org_rocksdb_BackupableDBOptions
127  * Method:    sync
128  * Signature: (J)Z
129  */
Java_org_rocksdb_BackupableDBOptions_sync(JNIEnv *,jobject,jlong jhandle)130 jboolean Java_org_rocksdb_BackupableDBOptions_sync(JNIEnv* /*env*/,
131                                                    jobject /*jobj*/,
132                                                    jlong jhandle) {
133   auto* bopt =
134       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
135   return bopt->sync;
136 }
137 
138 /*
139  * Class:     org_rocksdb_BackupableDBOptions
140  * Method:    setDestroyOldData
141  * Signature: (JZ)V
142  */
Java_org_rocksdb_BackupableDBOptions_setDestroyOldData(JNIEnv *,jobject,jlong jhandle,jboolean flag)143 void Java_org_rocksdb_BackupableDBOptions_setDestroyOldData(JNIEnv* /*env*/,
144                                                             jobject /*jobj*/,
145                                                             jlong jhandle,
146                                                             jboolean flag) {
147   auto* bopt =
148       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
149   bopt->destroy_old_data = flag;
150 }
151 
152 /*
153  * Class:     org_rocksdb_BackupableDBOptions
154  * Method:    destroyOldData
155  * Signature: (J)Z
156  */
Java_org_rocksdb_BackupableDBOptions_destroyOldData(JNIEnv *,jobject,jlong jhandle)157 jboolean Java_org_rocksdb_BackupableDBOptions_destroyOldData(JNIEnv* /*env*/,
158                                                              jobject /*jobj*/,
159                                                              jlong jhandle) {
160   auto* bopt =
161       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
162   return bopt->destroy_old_data;
163 }
164 
165 /*
166  * Class:     org_rocksdb_BackupableDBOptions
167  * Method:    setBackupLogFiles
168  * Signature: (JZ)V
169  */
Java_org_rocksdb_BackupableDBOptions_setBackupLogFiles(JNIEnv *,jobject,jlong jhandle,jboolean flag)170 void Java_org_rocksdb_BackupableDBOptions_setBackupLogFiles(JNIEnv* /*env*/,
171                                                             jobject /*jobj*/,
172                                                             jlong jhandle,
173                                                             jboolean flag) {
174   auto* bopt =
175       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
176   bopt->backup_log_files = flag;
177 }
178 
179 /*
180  * Class:     org_rocksdb_BackupableDBOptions
181  * Method:    backupLogFiles
182  * Signature: (J)Z
183  */
Java_org_rocksdb_BackupableDBOptions_backupLogFiles(JNIEnv *,jobject,jlong jhandle)184 jboolean Java_org_rocksdb_BackupableDBOptions_backupLogFiles(JNIEnv* /*env*/,
185                                                              jobject /*jobj*/,
186                                                              jlong jhandle) {
187   auto* bopt =
188       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
189   return bopt->backup_log_files;
190 }
191 
192 /*
193  * Class:     org_rocksdb_BackupableDBOptions
194  * Method:    setBackupRateLimit
195  * Signature: (JJ)V
196  */
Java_org_rocksdb_BackupableDBOptions_setBackupRateLimit(JNIEnv *,jobject,jlong jhandle,jlong jbackup_rate_limit)197 void Java_org_rocksdb_BackupableDBOptions_setBackupRateLimit(
198     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
199     jlong jbackup_rate_limit) {
200   auto* bopt =
201       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
202   bopt->backup_rate_limit = jbackup_rate_limit;
203 }
204 
205 /*
206  * Class:     org_rocksdb_BackupableDBOptions
207  * Method:    backupRateLimit
208  * Signature: (J)J
209  */
Java_org_rocksdb_BackupableDBOptions_backupRateLimit(JNIEnv *,jobject,jlong jhandle)210 jlong Java_org_rocksdb_BackupableDBOptions_backupRateLimit(JNIEnv* /*env*/,
211                                                            jobject /*jobj*/,
212                                                            jlong jhandle) {
213   auto* bopt =
214       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
215   return bopt->backup_rate_limit;
216 }
217 
218 /*
219  * Class:     org_rocksdb_BackupableDBOptions
220  * Method:    setBackupRateLimiter
221  * Signature: (JJ)V
222  */
Java_org_rocksdb_BackupableDBOptions_setBackupRateLimiter(JNIEnv *,jobject,jlong jhandle,jlong jrate_limiter_handle)223 void Java_org_rocksdb_BackupableDBOptions_setBackupRateLimiter(
224     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
225     jlong jrate_limiter_handle) {
226   auto* bopt =
227       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
228   auto* sptr_rate_limiter =
229       reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
230           jrate_limiter_handle);
231   bopt->backup_rate_limiter = *sptr_rate_limiter;
232 }
233 
234 /*
235  * Class:     org_rocksdb_BackupableDBOptions
236  * Method:    setRestoreRateLimit
237  * Signature: (JJ)V
238  */
Java_org_rocksdb_BackupableDBOptions_setRestoreRateLimit(JNIEnv *,jobject,jlong jhandle,jlong jrestore_rate_limit)239 void Java_org_rocksdb_BackupableDBOptions_setRestoreRateLimit(
240     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
241     jlong jrestore_rate_limit) {
242   auto* bopt =
243       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
244   bopt->restore_rate_limit = jrestore_rate_limit;
245 }
246 
247 /*
248  * Class:     org_rocksdb_BackupableDBOptions
249  * Method:    restoreRateLimit
250  * Signature: (J)J
251  */
Java_org_rocksdb_BackupableDBOptions_restoreRateLimit(JNIEnv *,jobject,jlong jhandle)252 jlong Java_org_rocksdb_BackupableDBOptions_restoreRateLimit(JNIEnv* /*env*/,
253                                                             jobject /*jobj*/,
254                                                             jlong jhandle) {
255   auto* bopt =
256       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
257   return bopt->restore_rate_limit;
258 }
259 
260 /*
261  * Class:     org_rocksdb_BackupableDBOptions
262  * Method:    setRestoreRateLimiter
263  * Signature: (JJ)V
264  */
Java_org_rocksdb_BackupableDBOptions_setRestoreRateLimiter(JNIEnv *,jobject,jlong jhandle,jlong jrate_limiter_handle)265 void Java_org_rocksdb_BackupableDBOptions_setRestoreRateLimiter(
266     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
267     jlong jrate_limiter_handle) {
268   auto* bopt =
269       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
270   auto* sptr_rate_limiter =
271       reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
272           jrate_limiter_handle);
273   bopt->restore_rate_limiter = *sptr_rate_limiter;
274 }
275 
276 /*
277  * Class:     org_rocksdb_BackupableDBOptions
278  * Method:    setShareFilesWithChecksum
279  * Signature: (JZ)V
280  */
Java_org_rocksdb_BackupableDBOptions_setShareFilesWithChecksum(JNIEnv *,jobject,jlong jhandle,jboolean flag)281 void Java_org_rocksdb_BackupableDBOptions_setShareFilesWithChecksum(
282     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle, jboolean flag) {
283   auto* bopt =
284       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
285   bopt->share_files_with_checksum = flag;
286 }
287 
288 /*
289  * Class:     org_rocksdb_BackupableDBOptions
290  * Method:    shareFilesWithChecksum
291  * Signature: (J)Z
292  */
Java_org_rocksdb_BackupableDBOptions_shareFilesWithChecksum(JNIEnv *,jobject,jlong jhandle)293 jboolean Java_org_rocksdb_BackupableDBOptions_shareFilesWithChecksum(
294     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle) {
295   auto* bopt =
296       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
297   return bopt->share_files_with_checksum;
298 }
299 
300 /*
301  * Class:     org_rocksdb_BackupableDBOptions
302  * Method:    setMaxBackgroundOperations
303  * Signature: (JI)V
304  */
Java_org_rocksdb_BackupableDBOptions_setMaxBackgroundOperations(JNIEnv *,jobject,jlong jhandle,jint max_background_operations)305 void Java_org_rocksdb_BackupableDBOptions_setMaxBackgroundOperations(
306     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
307     jint max_background_operations) {
308   auto* bopt =
309       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
310   bopt->max_background_operations = static_cast<int>(max_background_operations);
311 }
312 
313 /*
314  * Class:     org_rocksdb_BackupableDBOptions
315  * Method:    maxBackgroundOperations
316  * Signature: (J)I
317  */
Java_org_rocksdb_BackupableDBOptions_maxBackgroundOperations(JNIEnv *,jobject,jlong jhandle)318 jint Java_org_rocksdb_BackupableDBOptions_maxBackgroundOperations(
319     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle) {
320   auto* bopt =
321       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
322   return static_cast<jint>(bopt->max_background_operations);
323 }
324 
325 /*
326  * Class:     org_rocksdb_BackupableDBOptions
327  * Method:    setCallbackTriggerIntervalSize
328  * Signature: (JJ)V
329  */
Java_org_rocksdb_BackupableDBOptions_setCallbackTriggerIntervalSize(JNIEnv *,jobject,jlong jhandle,jlong jcallback_trigger_interval_size)330 void Java_org_rocksdb_BackupableDBOptions_setCallbackTriggerIntervalSize(
331     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
332     jlong jcallback_trigger_interval_size) {
333   auto* bopt =
334       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
335   bopt->callback_trigger_interval_size =
336       static_cast<uint64_t>(jcallback_trigger_interval_size);
337 }
338 
339 /*
340  * Class:     org_rocksdb_BackupableDBOptions
341  * Method:    callbackTriggerIntervalSize
342  * Signature: (J)J
343  */
Java_org_rocksdb_BackupableDBOptions_callbackTriggerIntervalSize(JNIEnv *,jobject,jlong jhandle)344 jlong Java_org_rocksdb_BackupableDBOptions_callbackTriggerIntervalSize(
345     JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle) {
346   auto* bopt =
347       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
348   return static_cast<jlong>(bopt->callback_trigger_interval_size);
349 }
350 
351 /*
352  * Class:     org_rocksdb_BackupableDBOptions
353  * Method:    disposeInternal
354  * Signature: (J)V
355  */
Java_org_rocksdb_BackupableDBOptions_disposeInternal(JNIEnv *,jobject,jlong jhandle)356 void Java_org_rocksdb_BackupableDBOptions_disposeInternal(JNIEnv* /*env*/,
357                                                           jobject /*jopt*/,
358                                                           jlong jhandle) {
359   auto* bopt =
360       reinterpret_cast<ROCKSDB_NAMESPACE::BackupableDBOptions*>(jhandle);
361   assert(bopt != nullptr);
362   delete bopt;
363 }
364