compact_range_options.cc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  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++ for
  7. // ROCKSDB_NAMESPACE::CompactRangeOptions.
  8. #include <jni.h>
  9. #include "include/org_rocksdb_CompactRangeOptions.h"
  10. #include "rocksdb/options.h"
  11. #include "rocksjni/cplusplus_to_java_convert.h"
  12. #include "rocksjni/portal.h"
  13. #include "util/coding.h"
  14. /**
  15. * @brief Class containing compact range options for Java API
  16. *
  17. * An object of this class is returned as the native handle for
  18. * ROCKSDB_NAMESPACE::CompactRangeOptions It contains objects for various
  19. * parameters which are passed by reference/pointer in CompactRangeOptions. We
  20. * maintain the lifetime of these parameters (`full_history_ts_low`, `canceled`)
  21. * by including their values in this class.
  22. */
  23. class Java_org_rocksdb_CompactRangeOptions {
  24. public:
  25. ROCKSDB_NAMESPACE::CompactRangeOptions compactRangeOptions;
  26. private:
  27. std::string full_history_ts_low;
  28. std::atomic<bool> canceled;
  29. public:
  30. void set_full_history_ts_low(uint64_t start, uint64_t range) {
  31. full_history_ts_low = "";
  32. ROCKSDB_NAMESPACE::PutFixed64(&full_history_ts_low, start);
  33. ROCKSDB_NAMESPACE::PutFixed64(&full_history_ts_low, range);
  34. compactRangeOptions.full_history_ts_low =
  35. new ROCKSDB_NAMESPACE::Slice(full_history_ts_low);
  36. }
  37. bool read_full_history_ts_low(uint64_t* start, uint64_t* range) {
  38. if (compactRangeOptions.full_history_ts_low == nullptr) return false;
  39. ROCKSDB_NAMESPACE::Slice read_slice(
  40. compactRangeOptions.full_history_ts_low->ToStringView());
  41. if (!ROCKSDB_NAMESPACE::GetFixed64(&read_slice, start)) return false;
  42. return ROCKSDB_NAMESPACE::GetFixed64(&read_slice, range);
  43. }
  44. void set_canceled(bool value) {
  45. if (compactRangeOptions.canceled == nullptr) {
  46. canceled.store(value, std::memory_order_seq_cst);
  47. compactRangeOptions.canceled = &canceled;
  48. } else {
  49. compactRangeOptions.canceled->store(value, std::memory_order_seq_cst);
  50. }
  51. }
  52. bool get_canceled() {
  53. return compactRangeOptions.canceled &&
  54. compactRangeOptions.canceled->load(std::memory_order_seq_cst);
  55. }
  56. };
  57. /*
  58. * Class: org_rocksdb_CompactRangeOptions
  59. * Method: newCompactRangeOptions
  60. * Signature: ()J
  61. */
  62. jlong Java_org_rocksdb_CompactRangeOptions_newCompactRangeOptions(
  63. JNIEnv* /*env*/, jclass /*jclazz*/) {
  64. auto* options = new Java_org_rocksdb_CompactRangeOptions();
  65. return GET_CPLUSPLUS_POINTER(&options->compactRangeOptions);
  66. }
  67. /*
  68. * Class: org_rocksdb_CompactRangeOptions
  69. * Method: exclusiveManualCompaction
  70. * Signature: (J)Z
  71. */
  72. jboolean Java_org_rocksdb_CompactRangeOptions_exclusiveManualCompaction(
  73. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle) {
  74. auto* options =
  75. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  76. return static_cast<jboolean>(
  77. options->compactRangeOptions.exclusive_manual_compaction);
  78. }
  79. /*
  80. * Class: org_rocksdb_CompactRangeOptions
  81. * Method: setExclusiveManualCompaction
  82. * Signature: (JZ)V
  83. */
  84. void Java_org_rocksdb_CompactRangeOptions_setExclusiveManualCompaction(
  85. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle,
  86. jboolean exclusive_manual_compaction) {
  87. auto* options =
  88. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  89. options->compactRangeOptions.exclusive_manual_compaction =
  90. static_cast<bool>(exclusive_manual_compaction);
  91. }
  92. /*
  93. * Class: org_rocksdb_CompactRangeOptions
  94. * Method: bottommostLevelCompaction
  95. * Signature: (J)I
  96. */
  97. jint Java_org_rocksdb_CompactRangeOptions_bottommostLevelCompaction(
  98. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle) {
  99. auto* options =
  100. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  101. return ROCKSDB_NAMESPACE::BottommostLevelCompactionJni::
  102. toJavaBottommostLevelCompaction(
  103. options->compactRangeOptions.bottommost_level_compaction);
  104. }
  105. /*
  106. * Class: org_rocksdb_CompactRangeOptions
  107. * Method: setBottommostLevelCompaction
  108. * Signature: (JI)V
  109. */
  110. void Java_org_rocksdb_CompactRangeOptions_setBottommostLevelCompaction(
  111. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle,
  112. jint bottommost_level_compaction) {
  113. auto* options =
  114. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  115. options->compactRangeOptions.bottommost_level_compaction =
  116. ROCKSDB_NAMESPACE::BottommostLevelCompactionJni::
  117. toCppBottommostLevelCompaction(bottommost_level_compaction);
  118. }
  119. /*
  120. * Class: org_rocksdb_CompactRangeOptions
  121. * Method: changeLevel
  122. * Signature: (J)Z
  123. */
  124. jboolean Java_org_rocksdb_CompactRangeOptions_changeLevel(JNIEnv* /*env*/,
  125. jclass /*jobj*/,
  126. jlong jhandle) {
  127. auto* options =
  128. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  129. return static_cast<jboolean>(options->compactRangeOptions.change_level);
  130. }
  131. /*
  132. * Class: org_rocksdb_CompactRangeOptions
  133. * Method: setChangeLevel
  134. * Signature: (JZ)V
  135. */
  136. void Java_org_rocksdb_CompactRangeOptions_setChangeLevel(
  137. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle, jboolean change_level) {
  138. auto* options =
  139. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  140. options->compactRangeOptions.change_level = static_cast<bool>(change_level);
  141. }
  142. /*
  143. * Class: org_rocksdb_CompactRangeOptions
  144. * Method: targetLevel
  145. * Signature: (J)I
  146. */
  147. jint Java_org_rocksdb_CompactRangeOptions_targetLevel(JNIEnv* /*env*/,
  148. jclass /*jobj*/,
  149. jlong jhandle) {
  150. auto* options =
  151. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  152. return static_cast<jint>(options->compactRangeOptions.target_level);
  153. }
  154. /*
  155. * Class: org_rocksdb_CompactRangeOptions
  156. * Method: setTargetLevel
  157. * Signature: (JI)V
  158. */
  159. void Java_org_rocksdb_CompactRangeOptions_setTargetLevel(JNIEnv* /*env*/,
  160. jclass /*jobj*/,
  161. jlong jhandle,
  162. jint target_level) {
  163. auto* options =
  164. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  165. options->compactRangeOptions.target_level = static_cast<int>(target_level);
  166. }
  167. /*
  168. * Class: org_rocksdb_CompactRangeOptions
  169. * Method: targetPathId
  170. * Signature: (J)I
  171. */
  172. jint Java_org_rocksdb_CompactRangeOptions_targetPathId(JNIEnv* /*env*/,
  173. jclass /*jobj*/,
  174. jlong jhandle) {
  175. auto* options =
  176. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  177. return static_cast<jint>(options->compactRangeOptions.target_path_id);
  178. }
  179. /*
  180. * Class: org_rocksdb_CompactRangeOptions
  181. * Method: setTargetPathId
  182. * Signature: (JI)V
  183. */
  184. void Java_org_rocksdb_CompactRangeOptions_setTargetPathId(JNIEnv* /*env*/,
  185. jclass /*jobj*/,
  186. jlong jhandle,
  187. jint target_path_id) {
  188. auto* options =
  189. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  190. options->compactRangeOptions.target_path_id =
  191. static_cast<uint32_t>(target_path_id);
  192. }
  193. /*
  194. * Class: org_rocksdb_CompactRangeOptions
  195. * Method: allowWriteStall
  196. * Signature: (J)Z
  197. */
  198. jboolean Java_org_rocksdb_CompactRangeOptions_allowWriteStall(JNIEnv* /*env*/,
  199. jclass /*jobj*/,
  200. jlong jhandle) {
  201. auto* options =
  202. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  203. return static_cast<jboolean>(options->compactRangeOptions.allow_write_stall);
  204. }
  205. /*
  206. * Class: org_rocksdb_CompactRangeOptions
  207. * Method: setAllowWriteStall
  208. * Signature: (JZ)V
  209. */
  210. void Java_org_rocksdb_CompactRangeOptions_setAllowWriteStall(
  211. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle,
  212. jboolean allow_write_stall) {
  213. auto* options =
  214. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  215. options->compactRangeOptions.allow_write_stall =
  216. static_cast<bool>(allow_write_stall);
  217. }
  218. /*
  219. * Class: org_rocksdb_CompactRangeOptions
  220. * Method: maxSubcompactions
  221. * Signature: (J)I
  222. */
  223. jint Java_org_rocksdb_CompactRangeOptions_maxSubcompactions(JNIEnv* /*env*/,
  224. jclass /*jobj*/,
  225. jlong jhandle) {
  226. auto* options =
  227. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  228. return static_cast<jint>(options->compactRangeOptions.max_subcompactions);
  229. }
  230. /*
  231. * Class: org_rocksdb_CompactRangeOptions
  232. * Method: setMaxSubcompactions
  233. * Signature: (JI)V
  234. */
  235. void Java_org_rocksdb_CompactRangeOptions_setMaxSubcompactions(
  236. JNIEnv* /*env*/, jclass /*jobj*/, jlong jhandle, jint max_subcompactions) {
  237. auto* options =
  238. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  239. options->compactRangeOptions.max_subcompactions =
  240. static_cast<uint32_t>(max_subcompactions);
  241. }
  242. /*
  243. * Class: org_rocksdb_CompactRangeOptions
  244. * Method: setFullHistoryTSLow
  245. * Signature: (JJJ)V
  246. */
  247. void Java_org_rocksdb_CompactRangeOptions_setFullHistoryTSLow(JNIEnv*, jclass,
  248. jlong jhandle,
  249. jlong start,
  250. jlong range) {
  251. auto* options =
  252. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  253. options->set_full_history_ts_low(start, range);
  254. }
  255. /*
  256. * Class: org_rocksdb_CompactRangeOptions
  257. * Method: fullHistoryTSLow
  258. * Signature: (J)Lorg/rocksdb/CompactRangeOptions/Timestamp;
  259. */
  260. jobject Java_org_rocksdb_CompactRangeOptions_fullHistoryTSLow(JNIEnv* env,
  261. jclass,
  262. jlong jhandle) {
  263. auto* options =
  264. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  265. uint64_t start;
  266. uint64_t range;
  267. jobject result = nullptr;
  268. if (options->read_full_history_ts_low(&start, &range)) {
  269. result =
  270. ROCKSDB_NAMESPACE::CompactRangeOptionsTimestampJni::fromCppTimestamp(
  271. env, start, range);
  272. }
  273. return result;
  274. }
  275. /*
  276. * Class: org_rocksdb_CompactRangeOptions
  277. * Method: setCanceled
  278. * Signature: (JZ)V
  279. */
  280. void Java_org_rocksdb_CompactRangeOptions_setCanceled(JNIEnv*, jclass,
  281. jlong jhandle,
  282. jboolean jcanceled) {
  283. auto* options =
  284. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  285. options->set_canceled(jcanceled);
  286. }
  287. /*
  288. * Class: org_rocksdb_CompactRangeOptions
  289. * Method: canceled
  290. * Signature: (J)Z
  291. */
  292. jboolean Java_org_rocksdb_CompactRangeOptions_canceled(JNIEnv*, jclass,
  293. jlong jhandle) {
  294. auto* options =
  295. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  296. return options->get_canceled();
  297. }
  298. /*
  299. * Class: org_rocksdb_CompactRangeOptions
  300. * Method: disposeInternal
  301. * Signature: (J)V
  302. */
  303. void Java_org_rocksdb_CompactRangeOptions_disposeInternalJni(JNIEnv* /*env*/,
  304. jclass /*jcls*/,
  305. jlong jhandle) {
  306. auto* options =
  307. reinterpret_cast<Java_org_rocksdb_CompactRangeOptions*>(jhandle);
  308. delete options;
  309. }