rocksdb-native 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1951) hide show
  1. package/.clang-format +15 -0
  2. package/.github/workflows/test-node.yml +23 -0
  3. package/.gitmodules +4 -0
  4. package/CMakeLists.txt +33 -0
  5. package/LICENSE +201 -0
  6. package/NOTICE +13 -0
  7. package/README.md +15 -0
  8. package/binding.c +470 -0
  9. package/binding.js +1 -0
  10. package/index.js +276 -0
  11. package/package.json +19 -0
  12. package/vendor/rocksdb/.circleci/config.yml +892 -0
  13. package/vendor/rocksdb/.circleci/ubsan_suppression_list.txt +6 -0
  14. package/vendor/rocksdb/.clang-format +5 -0
  15. package/vendor/rocksdb/.github/workflows/sanity_check.yml +47 -0
  16. package/vendor/rocksdb/.lgtm.yml +4 -0
  17. package/vendor/rocksdb/AUTHORS +12 -0
  18. package/vendor/rocksdb/CMakeLists.txt +1591 -0
  19. package/vendor/rocksdb/CODE_OF_CONDUCT.md +77 -0
  20. package/vendor/rocksdb/CONTRIBUTING.md +17 -0
  21. package/vendor/rocksdb/COPYING +339 -0
  22. package/vendor/rocksdb/DEFAULT_OPTIONS_HISTORY.md +24 -0
  23. package/vendor/rocksdb/DUMP_FORMAT.md +16 -0
  24. package/vendor/rocksdb/HISTORY.md +2399 -0
  25. package/vendor/rocksdb/INSTALL.md +220 -0
  26. package/vendor/rocksdb/LANGUAGE-BINDINGS.md +26 -0
  27. package/vendor/rocksdb/LICENSE.Apache +202 -0
  28. package/vendor/rocksdb/LICENSE.leveldb +29 -0
  29. package/vendor/rocksdb/Makefile +2579 -0
  30. package/vendor/rocksdb/PLUGINS.md +8 -0
  31. package/vendor/rocksdb/README.md +29 -0
  32. package/vendor/rocksdb/TARGETS +5599 -0
  33. package/vendor/rocksdb/USERS.md +165 -0
  34. package/vendor/rocksdb/Vagrantfile +39 -0
  35. package/vendor/rocksdb/WINDOWS_PORT.md +228 -0
  36. package/vendor/rocksdb/buckifier/bench-slow.json +6163 -0
  37. package/vendor/rocksdb/buckifier/bench.json +1594 -0
  38. package/vendor/rocksdb/buckifier/buckify_rocksdb.py +333 -0
  39. package/vendor/rocksdb/buckifier/check_buck_targets.sh +32 -0
  40. package/vendor/rocksdb/buckifier/rocks_test_runner.sh +6 -0
  41. package/vendor/rocksdb/buckifier/targets_builder.py +150 -0
  42. package/vendor/rocksdb/buckifier/targets_cfg.py +41 -0
  43. package/vendor/rocksdb/buckifier/util.py +118 -0
  44. package/vendor/rocksdb/build_tools/amalgamate.py +168 -0
  45. package/vendor/rocksdb/build_tools/benchmark_log_tool.py +238 -0
  46. package/vendor/rocksdb/build_tools/build_detect_platform +804 -0
  47. package/vendor/rocksdb/build_tools/check-sources.sh +48 -0
  48. package/vendor/rocksdb/build_tools/dependencies_platform010.sh +22 -0
  49. package/vendor/rocksdb/build_tools/dockerbuild.sh +3 -0
  50. package/vendor/rocksdb/build_tools/error_filter.py +181 -0
  51. package/vendor/rocksdb/build_tools/fb_compile_mongo.sh +55 -0
  52. package/vendor/rocksdb/build_tools/fbcode_config.sh +175 -0
  53. package/vendor/rocksdb/build_tools/fbcode_config_platform010.sh +175 -0
  54. package/vendor/rocksdb/build_tools/format-diff.sh +203 -0
  55. package/vendor/rocksdb/build_tools/gnu_parallel +7971 -0
  56. package/vendor/rocksdb/build_tools/make_package.sh +129 -0
  57. package/vendor/rocksdb/build_tools/ps_with_stack +38 -0
  58. package/vendor/rocksdb/build_tools/regression_build_test.sh +396 -0
  59. package/vendor/rocksdb/build_tools/run_ci_db_test.ps1 +493 -0
  60. package/vendor/rocksdb/build_tools/setup_centos7.sh +45 -0
  61. package/vendor/rocksdb/build_tools/ubuntu20_image/Dockerfile +57 -0
  62. package/vendor/rocksdb/build_tools/update_dependencies.sh +106 -0
  63. package/vendor/rocksdb/build_tools/version.sh +23 -0
  64. package/vendor/rocksdb/cache/cache.cc +158 -0
  65. package/vendor/rocksdb/cache/cache_bench.cc +20 -0
  66. package/vendor/rocksdb/cache/cache_bench_tool.cc +969 -0
  67. package/vendor/rocksdb/cache/cache_entry_roles.cc +104 -0
  68. package/vendor/rocksdb/cache/cache_entry_roles.h +20 -0
  69. package/vendor/rocksdb/cache/cache_entry_stats.h +182 -0
  70. package/vendor/rocksdb/cache/cache_helpers.cc +40 -0
  71. package/vendor/rocksdb/cache/cache_helpers.h +139 -0
  72. package/vendor/rocksdb/cache/cache_key.cc +364 -0
  73. package/vendor/rocksdb/cache/cache_key.h +143 -0
  74. package/vendor/rocksdb/cache/cache_reservation_manager.cc +184 -0
  75. package/vendor/rocksdb/cache/cache_reservation_manager.h +317 -0
  76. package/vendor/rocksdb/cache/cache_reservation_manager_test.cc +469 -0
  77. package/vendor/rocksdb/cache/cache_test.cc +1061 -0
  78. package/vendor/rocksdb/cache/charged_cache.cc +109 -0
  79. package/vendor/rocksdb/cache/charged_cache.h +59 -0
  80. package/vendor/rocksdb/cache/clock_cache.cc +1482 -0
  81. package/vendor/rocksdb/cache/clock_cache.h +707 -0
  82. package/vendor/rocksdb/cache/compressed_secondary_cache.cc +304 -0
  83. package/vendor/rocksdb/cache/compressed_secondary_cache.h +132 -0
  84. package/vendor/rocksdb/cache/compressed_secondary_cache_test.cc +983 -0
  85. package/vendor/rocksdb/cache/lru_cache.cc +723 -0
  86. package/vendor/rocksdb/cache/lru_cache.h +467 -0
  87. package/vendor/rocksdb/cache/lru_cache_test.cc +2559 -0
  88. package/vendor/rocksdb/cache/secondary_cache.cc +44 -0
  89. package/vendor/rocksdb/cache/secondary_cache_adapter.cc +295 -0
  90. package/vendor/rocksdb/cache/secondary_cache_adapter.h +52 -0
  91. package/vendor/rocksdb/cache/sharded_cache.cc +137 -0
  92. package/vendor/rocksdb/cache/sharded_cache.h +309 -0
  93. package/vendor/rocksdb/cache/typed_cache.h +375 -0
  94. package/vendor/rocksdb/cmake/RocksDBConfig.cmake.in +54 -0
  95. package/vendor/rocksdb/common.mk +30 -0
  96. package/vendor/rocksdb/crash_test.mk +107 -0
  97. package/vendor/rocksdb/db/arena_wrapped_db_iter.cc +163 -0
  98. package/vendor/rocksdb/db/arena_wrapped_db_iter.h +127 -0
  99. package/vendor/rocksdb/db/blob/blob_constants.h +16 -0
  100. package/vendor/rocksdb/db/blob/blob_contents.cc +42 -0
  101. package/vendor/rocksdb/db/blob/blob_contents.h +59 -0
  102. package/vendor/rocksdb/db/blob/blob_counting_iterator.h +150 -0
  103. package/vendor/rocksdb/db/blob/blob_counting_iterator_test.cc +327 -0
  104. package/vendor/rocksdb/db/blob/blob_fetcher.cc +34 -0
  105. package/vendor/rocksdb/db/blob/blob_fetcher.h +37 -0
  106. package/vendor/rocksdb/db/blob/blob_file_addition.cc +156 -0
  107. package/vendor/rocksdb/db/blob/blob_file_addition.h +67 -0
  108. package/vendor/rocksdb/db/blob/blob_file_addition_test.cc +211 -0
  109. package/vendor/rocksdb/db/blob/blob_file_builder.cc +426 -0
  110. package/vendor/rocksdb/db/blob/blob_file_builder.h +112 -0
  111. package/vendor/rocksdb/db/blob/blob_file_builder_test.cc +680 -0
  112. package/vendor/rocksdb/db/blob/blob_file_cache.cc +101 -0
  113. package/vendor/rocksdb/db/blob/blob_file_cache.h +56 -0
  114. package/vendor/rocksdb/db/blob/blob_file_cache_test.cc +278 -0
  115. package/vendor/rocksdb/db/blob/blob_file_completion_callback.h +84 -0
  116. package/vendor/rocksdb/db/blob/blob_file_garbage.cc +134 -0
  117. package/vendor/rocksdb/db/blob/blob_file_garbage.h +57 -0
  118. package/vendor/rocksdb/db/blob/blob_file_garbage_test.cc +174 -0
  119. package/vendor/rocksdb/db/blob/blob_file_meta.cc +62 -0
  120. package/vendor/rocksdb/db/blob/blob_file_meta.h +170 -0
  121. package/vendor/rocksdb/db/blob/blob_file_reader.cc +624 -0
  122. package/vendor/rocksdb/db/blob/blob_file_reader.h +112 -0
  123. package/vendor/rocksdb/db/blob/blob_file_reader_test.cc +1023 -0
  124. package/vendor/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  125. package/vendor/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  126. package/vendor/rocksdb/db/blob/blob_garbage_meter_test.cc +197 -0
  127. package/vendor/rocksdb/db/blob/blob_index.h +187 -0
  128. package/vendor/rocksdb/db/blob/blob_log_format.cc +143 -0
  129. package/vendor/rocksdb/db/blob/blob_log_format.h +164 -0
  130. package/vendor/rocksdb/db/blob/blob_log_sequential_reader.cc +134 -0
  131. package/vendor/rocksdb/db/blob/blob_log_sequential_reader.h +83 -0
  132. package/vendor/rocksdb/db/blob/blob_log_writer.cc +178 -0
  133. package/vendor/rocksdb/db/blob/blob_log_writer.h +83 -0
  134. package/vendor/rocksdb/db/blob/blob_read_request.h +58 -0
  135. package/vendor/rocksdb/db/blob/blob_source.cc +459 -0
  136. package/vendor/rocksdb/db/blob/blob_source.h +161 -0
  137. package/vendor/rocksdb/db/blob/blob_source_test.cc +1611 -0
  138. package/vendor/rocksdb/db/blob/db_blob_basic_test.cc +2237 -0
  139. package/vendor/rocksdb/db/blob/db_blob_compaction_test.cc +899 -0
  140. package/vendor/rocksdb/db/blob/db_blob_corruption_test.cc +80 -0
  141. package/vendor/rocksdb/db/blob/db_blob_index_test.cc +596 -0
  142. package/vendor/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  143. package/vendor/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  144. package/vendor/rocksdb/db/builder.cc +447 -0
  145. package/vendor/rocksdb/db/builder.h +78 -0
  146. package/vendor/rocksdb/db/c.cc +6559 -0
  147. package/vendor/rocksdb/db/c_test.c +3609 -0
  148. package/vendor/rocksdb/db/column_family.cc +1708 -0
  149. package/vendor/rocksdb/db/column_family.h +851 -0
  150. package/vendor/rocksdb/db/column_family_test.cc +3382 -0
  151. package/vendor/rocksdb/db/compact_files_test.cc +492 -0
  152. package/vendor/rocksdb/db/compaction/clipping_iterator.h +281 -0
  153. package/vendor/rocksdb/db/compaction/clipping_iterator_test.cc +259 -0
  154. package/vendor/rocksdb/db/compaction/compaction.cc +857 -0
  155. package/vendor/rocksdb/db/compaction/compaction.h +565 -0
  156. package/vendor/rocksdb/db/compaction/compaction_iteration_stats.h +49 -0
  157. package/vendor/rocksdb/db/compaction/compaction_iterator.cc +1445 -0
  158. package/vendor/rocksdb/db/compaction/compaction_iterator.h +530 -0
  159. package/vendor/rocksdb/db/compaction/compaction_iterator_test.cc +1618 -0
  160. package/vendor/rocksdb/db/compaction/compaction_job.cc +2054 -0
  161. package/vendor/rocksdb/db/compaction/compaction_job.h +504 -0
  162. package/vendor/rocksdb/db/compaction/compaction_job_stats_test.cc +965 -0
  163. package/vendor/rocksdb/db/compaction/compaction_job_test.cc +2444 -0
  164. package/vendor/rocksdb/db/compaction/compaction_outputs.cc +784 -0
  165. package/vendor/rocksdb/db/compaction/compaction_outputs.h +403 -0
  166. package/vendor/rocksdb/db/compaction/compaction_picker.cc +1225 -0
  167. package/vendor/rocksdb/db/compaction/compaction_picker.h +318 -0
  168. package/vendor/rocksdb/db/compaction/compaction_picker_fifo.cc +471 -0
  169. package/vendor/rocksdb/db/compaction/compaction_picker_fifo.h +60 -0
  170. package/vendor/rocksdb/db/compaction/compaction_picker_level.cc +888 -0
  171. package/vendor/rocksdb/db/compaction/compaction_picker_level.h +33 -0
  172. package/vendor/rocksdb/db/compaction/compaction_picker_test.cc +4074 -0
  173. package/vendor/rocksdb/db/compaction/compaction_picker_universal.cc +1452 -0
  174. package/vendor/rocksdb/db/compaction/compaction_picker_universal.h +30 -0
  175. package/vendor/rocksdb/db/compaction/compaction_service_job.cc +833 -0
  176. package/vendor/rocksdb/db/compaction/compaction_service_test.cc +954 -0
  177. package/vendor/rocksdb/db/compaction/compaction_state.cc +46 -0
  178. package/vendor/rocksdb/db/compaction/compaction_state.h +42 -0
  179. package/vendor/rocksdb/db/compaction/file_pri.h +92 -0
  180. package/vendor/rocksdb/db/compaction/sst_partitioner.cc +83 -0
  181. package/vendor/rocksdb/db/compaction/subcompaction_state.cc +106 -0
  182. package/vendor/rocksdb/db/compaction/subcompaction_state.h +220 -0
  183. package/vendor/rocksdb/db/compaction/tiered_compaction_test.cc +2149 -0
  184. package/vendor/rocksdb/db/comparator_db_test.cc +678 -0
  185. package/vendor/rocksdb/db/convenience.cc +81 -0
  186. package/vendor/rocksdb/db/corruption_test.cc +1670 -0
  187. package/vendor/rocksdb/db/cuckoo_table_db_test.cc +351 -0
  188. package/vendor/rocksdb/db/db_basic_test.cc +4777 -0
  189. package/vendor/rocksdb/db/db_block_cache_test.cc +1972 -0
  190. package/vendor/rocksdb/db/db_bloom_filter_test.cc +3513 -0
  191. package/vendor/rocksdb/db/db_clip_test.cc +142 -0
  192. package/vendor/rocksdb/db/db_compaction_filter_test.cc +1030 -0
  193. package/vendor/rocksdb/db/db_compaction_test.cc +9424 -0
  194. package/vendor/rocksdb/db/db_dynamic_level_test.cc +499 -0
  195. package/vendor/rocksdb/db/db_encryption_test.cc +126 -0
  196. package/vendor/rocksdb/db/db_filesnapshot.cc +436 -0
  197. package/vendor/rocksdb/db/db_flush_test.cc +3202 -0
  198. package/vendor/rocksdb/db/db_impl/compacted_db_impl.cc +260 -0
  199. package/vendor/rocksdb/db/db_impl/compacted_db_impl.h +157 -0
  200. package/vendor/rocksdb/db/db_impl/db_impl.cc +6132 -0
  201. package/vendor/rocksdb/db/db_impl/db_impl.h +2841 -0
  202. package/vendor/rocksdb/db/db_impl/db_impl_compaction_flush.cc +3980 -0
  203. package/vendor/rocksdb/db/db_impl/db_impl_debug.cc +314 -0
  204. package/vendor/rocksdb/db/db_impl/db_impl_experimental.cc +159 -0
  205. package/vendor/rocksdb/db/db_impl/db_impl_files.cc +1014 -0
  206. package/vendor/rocksdb/db/db_impl/db_impl_open.cc +2202 -0
  207. package/vendor/rocksdb/db/db_impl/db_impl_readonly.cc +334 -0
  208. package/vendor/rocksdb/db/db_impl/db_impl_readonly.h +173 -0
  209. package/vendor/rocksdb/db/db_impl/db_impl_secondary.cc +964 -0
  210. package/vendor/rocksdb/db/db_impl/db_impl_secondary.h +406 -0
  211. package/vendor/rocksdb/db/db_impl/db_impl_write.cc +2487 -0
  212. package/vendor/rocksdb/db/db_info_dumper.cc +147 -0
  213. package/vendor/rocksdb/db/db_info_dumper.h +15 -0
  214. package/vendor/rocksdb/db/db_inplace_update_test.cc +262 -0
  215. package/vendor/rocksdb/db/db_io_failure_test.cc +589 -0
  216. package/vendor/rocksdb/db/db_iter.cc +1708 -0
  217. package/vendor/rocksdb/db/db_iter.h +411 -0
  218. package/vendor/rocksdb/db/db_iter_stress_test.cc +658 -0
  219. package/vendor/rocksdb/db/db_iter_test.cc +3195 -0
  220. package/vendor/rocksdb/db/db_iterator_test.cc +3304 -0
  221. package/vendor/rocksdb/db/db_kv_checksum_test.cc +885 -0
  222. package/vendor/rocksdb/db/db_log_iter_test.cc +297 -0
  223. package/vendor/rocksdb/db/db_logical_block_size_cache_test.cc +505 -0
  224. package/vendor/rocksdb/db/db_memtable_test.cc +344 -0
  225. package/vendor/rocksdb/db/db_merge_operand_test.cc +488 -0
  226. package/vendor/rocksdb/db/db_merge_operator_test.cc +866 -0
  227. package/vendor/rocksdb/db/db_options_test.cc +1330 -0
  228. package/vendor/rocksdb/db/db_properties_test.cc +2377 -0
  229. package/vendor/rocksdb/db/db_range_del_test.cc +3414 -0
  230. package/vendor/rocksdb/db/db_rate_limiter_test.cc +437 -0
  231. package/vendor/rocksdb/db/db_readonly_with_timestamp_test.cc +956 -0
  232. package/vendor/rocksdb/db/db_secondary_test.cc +1691 -0
  233. package/vendor/rocksdb/db/db_sst_test.cc +1865 -0
  234. package/vendor/rocksdb/db/db_statistics_test.cc +292 -0
  235. package/vendor/rocksdb/db/db_table_properties_test.cc +623 -0
  236. package/vendor/rocksdb/db/db_tailing_iter_test.cc +595 -0
  237. package/vendor/rocksdb/db/db_test.cc +7359 -0
  238. package/vendor/rocksdb/db/db_test2.cc +7679 -0
  239. package/vendor/rocksdb/db/db_test_util.cc +1759 -0
  240. package/vendor/rocksdb/db/db_test_util.h +1340 -0
  241. package/vendor/rocksdb/db/db_universal_compaction_test.cc +2227 -0
  242. package/vendor/rocksdb/db/db_wal_test.cc +2433 -0
  243. package/vendor/rocksdb/db/db_with_timestamp_basic_test.cc +4016 -0
  244. package/vendor/rocksdb/db/db_with_timestamp_compaction_test.cc +353 -0
  245. package/vendor/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  246. package/vendor/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  247. package/vendor/rocksdb/db/db_write_buffer_manager_test.cc +927 -0
  248. package/vendor/rocksdb/db/db_write_test.cc +795 -0
  249. package/vendor/rocksdb/db/dbformat.cc +213 -0
  250. package/vendor/rocksdb/db/dbformat.h +869 -0
  251. package/vendor/rocksdb/db/dbformat_test.cc +214 -0
  252. package/vendor/rocksdb/db/deletefile_test.cc +603 -0
  253. package/vendor/rocksdb/db/error_handler.cc +792 -0
  254. package/vendor/rocksdb/db/error_handler.h +124 -0
  255. package/vendor/rocksdb/db/error_handler_fs_test.cc +2862 -0
  256. package/vendor/rocksdb/db/event_helpers.cc +323 -0
  257. package/vendor/rocksdb/db/event_helpers.h +78 -0
  258. package/vendor/rocksdb/db/experimental.cc +144 -0
  259. package/vendor/rocksdb/db/external_sst_file_basic_test.cc +2084 -0
  260. package/vendor/rocksdb/db/external_sst_file_ingestion_job.cc +1104 -0
  261. package/vendor/rocksdb/db/external_sst_file_ingestion_job.h +238 -0
  262. package/vendor/rocksdb/db/external_sst_file_test.cc +2859 -0
  263. package/vendor/rocksdb/db/fault_injection_test.cc +637 -0
  264. package/vendor/rocksdb/db/file_indexer.cc +218 -0
  265. package/vendor/rocksdb/db/file_indexer.h +140 -0
  266. package/vendor/rocksdb/db/file_indexer_test.cc +352 -0
  267. package/vendor/rocksdb/db/filename_test.cc +241 -0
  268. package/vendor/rocksdb/db/flush_job.cc +1097 -0
  269. package/vendor/rocksdb/db/flush_job.h +200 -0
  270. package/vendor/rocksdb/db/flush_job_test.cc +743 -0
  271. package/vendor/rocksdb/db/flush_scheduler.cc +86 -0
  272. package/vendor/rocksdb/db/flush_scheduler.h +55 -0
  273. package/vendor/rocksdb/db/forward_iterator.cc +1070 -0
  274. package/vendor/rocksdb/db/forward_iterator.h +166 -0
  275. package/vendor/rocksdb/db/forward_iterator_bench.cc +378 -0
  276. package/vendor/rocksdb/db/history_trimming_iterator.h +95 -0
  277. package/vendor/rocksdb/db/import_column_family_job.cc +364 -0
  278. package/vendor/rocksdb/db/import_column_family_job.h +82 -0
  279. package/vendor/rocksdb/db/import_column_family_test.cc +748 -0
  280. package/vendor/rocksdb/db/internal_stats.cc +2121 -0
  281. package/vendor/rocksdb/db/internal_stats.h +875 -0
  282. package/vendor/rocksdb/db/job_context.h +237 -0
  283. package/vendor/rocksdb/db/kv_checksum.h +484 -0
  284. package/vendor/rocksdb/db/listener_test.cc +1598 -0
  285. package/vendor/rocksdb/db/log_format.h +55 -0
  286. package/vendor/rocksdb/db/log_reader.cc +934 -0
  287. package/vendor/rocksdb/db/log_reader.h +241 -0
  288. package/vendor/rocksdb/db/log_test.cc +1216 -0
  289. package/vendor/rocksdb/db/log_writer.cc +279 -0
  290. package/vendor/rocksdb/db/log_writer.h +144 -0
  291. package/vendor/rocksdb/db/logs_with_prep_tracker.cc +67 -0
  292. package/vendor/rocksdb/db/logs_with_prep_tracker.h +62 -0
  293. package/vendor/rocksdb/db/lookup_key.h +68 -0
  294. package/vendor/rocksdb/db/malloc_stats.cc +53 -0
  295. package/vendor/rocksdb/db/malloc_stats.h +22 -0
  296. package/vendor/rocksdb/db/manual_compaction_test.cc +308 -0
  297. package/vendor/rocksdb/db/memtable.cc +1675 -0
  298. package/vendor/rocksdb/db/memtable.h +660 -0
  299. package/vendor/rocksdb/db/memtable_list.cc +987 -0
  300. package/vendor/rocksdb/db/memtable_list.h +471 -0
  301. package/vendor/rocksdb/db/memtable_list_test.cc +1037 -0
  302. package/vendor/rocksdb/db/merge_context.h +147 -0
  303. package/vendor/rocksdb/db/merge_helper.cc +606 -0
  304. package/vendor/rocksdb/db/merge_helper.h +224 -0
  305. package/vendor/rocksdb/db/merge_helper_test.cc +298 -0
  306. package/vendor/rocksdb/db/merge_operator.cc +85 -0
  307. package/vendor/rocksdb/db/merge_test.cc +621 -0
  308. package/vendor/rocksdb/db/obsolete_files_test.cc +317 -0
  309. package/vendor/rocksdb/db/options_file_test.cc +110 -0
  310. package/vendor/rocksdb/db/output_validator.cc +33 -0
  311. package/vendor/rocksdb/db/output_validator.h +48 -0
  312. package/vendor/rocksdb/db/perf_context_test.cc +1158 -0
  313. package/vendor/rocksdb/db/periodic_task_scheduler.cc +111 -0
  314. package/vendor/rocksdb/db/periodic_task_scheduler.h +108 -0
  315. package/vendor/rocksdb/db/periodic_task_scheduler_test.cc +229 -0
  316. package/vendor/rocksdb/db/pinned_iterators_manager.h +92 -0
  317. package/vendor/rocksdb/db/plain_table_db_test.cc +1348 -0
  318. package/vendor/rocksdb/db/post_memtable_callback.h +25 -0
  319. package/vendor/rocksdb/db/pre_release_callback.h +37 -0
  320. package/vendor/rocksdb/db/prefix_test.cc +894 -0
  321. package/vendor/rocksdb/db/range_del_aggregator.cc +555 -0
  322. package/vendor/rocksdb/db/range_del_aggregator.h +478 -0
  323. package/vendor/rocksdb/db/range_del_aggregator_bench.cc +280 -0
  324. package/vendor/rocksdb/db/range_del_aggregator_test.cc +713 -0
  325. package/vendor/rocksdb/db/range_tombstone_fragmenter.cc +502 -0
  326. package/vendor/rocksdb/db/range_tombstone_fragmenter.h +356 -0
  327. package/vendor/rocksdb/db/range_tombstone_fragmenter_test.cc +555 -0
  328. package/vendor/rocksdb/db/read_callback.h +54 -0
  329. package/vendor/rocksdb/db/repair.cc +839 -0
  330. package/vendor/rocksdb/db/repair_test.cc +484 -0
  331. package/vendor/rocksdb/db/seqno_time_test.cc +994 -0
  332. package/vendor/rocksdb/db/seqno_to_time_mapping.cc +341 -0
  333. package/vendor/rocksdb/db/seqno_to_time_mapping.h +189 -0
  334. package/vendor/rocksdb/db/snapshot_checker.h +58 -0
  335. package/vendor/rocksdb/db/snapshot_impl.cc +25 -0
  336. package/vendor/rocksdb/db/snapshot_impl.h +239 -0
  337. package/vendor/rocksdb/db/table_cache.cc +710 -0
  338. package/vendor/rocksdb/db/table_cache.h +283 -0
  339. package/vendor/rocksdb/db/table_cache_sync_and_async.h +130 -0
  340. package/vendor/rocksdb/db/table_properties_collector.cc +74 -0
  341. package/vendor/rocksdb/db/table_properties_collector.h +177 -0
  342. package/vendor/rocksdb/db/table_properties_collector_test.cc +512 -0
  343. package/vendor/rocksdb/db/transaction_log_impl.cc +296 -0
  344. package/vendor/rocksdb/db/transaction_log_impl.h +128 -0
  345. package/vendor/rocksdb/db/trim_history_scheduler.cc +54 -0
  346. package/vendor/rocksdb/db/trim_history_scheduler.h +46 -0
  347. package/vendor/rocksdb/db/version_builder.cc +1426 -0
  348. package/vendor/rocksdb/db/version_builder.h +93 -0
  349. package/vendor/rocksdb/db/version_builder_test.cc +1840 -0
  350. package/vendor/rocksdb/db/version_edit.cc +1059 -0
  351. package/vendor/rocksdb/db/version_edit.h +702 -0
  352. package/vendor/rocksdb/db/version_edit_handler.cc +1017 -0
  353. package/vendor/rocksdb/db/version_edit_handler.h +334 -0
  354. package/vendor/rocksdb/db/version_edit_test.cc +732 -0
  355. package/vendor/rocksdb/db/version_set.cc +7286 -0
  356. package/vendor/rocksdb/db/version_set.h +1714 -0
  357. package/vendor/rocksdb/db/version_set_sync_and_async.h +172 -0
  358. package/vendor/rocksdb/db/version_set_test.cc +3659 -0
  359. package/vendor/rocksdb/db/version_util.h +72 -0
  360. package/vendor/rocksdb/db/wal_edit.cc +211 -0
  361. package/vendor/rocksdb/db/wal_edit.h +177 -0
  362. package/vendor/rocksdb/db/wal_edit_test.cc +213 -0
  363. package/vendor/rocksdb/db/wal_manager.cc +527 -0
  364. package/vendor/rocksdb/db/wal_manager.h +136 -0
  365. package/vendor/rocksdb/db/wal_manager_test.cc +336 -0
  366. package/vendor/rocksdb/db/wide/db_wide_basic_test.cc +1042 -0
  367. package/vendor/rocksdb/db/wide/wide_column_serialization.cc +182 -0
  368. package/vendor/rocksdb/db/wide/wide_column_serialization.h +77 -0
  369. package/vendor/rocksdb/db/wide/wide_column_serialization_test.cc +338 -0
  370. package/vendor/rocksdb/db/wide/wide_columns.cc +22 -0
  371. package/vendor/rocksdb/db/write_batch.cc +3142 -0
  372. package/vendor/rocksdb/db/write_batch_base.cc +94 -0
  373. package/vendor/rocksdb/db/write_batch_internal.h +401 -0
  374. package/vendor/rocksdb/db/write_batch_test.cc +1112 -0
  375. package/vendor/rocksdb/db/write_callback.h +27 -0
  376. package/vendor/rocksdb/db/write_callback_test.cc +454 -0
  377. package/vendor/rocksdb/db/write_controller.cc +121 -0
  378. package/vendor/rocksdb/db/write_controller.h +148 -0
  379. package/vendor/rocksdb/db/write_controller_test.cc +248 -0
  380. package/vendor/rocksdb/db/write_stall_stats.cc +179 -0
  381. package/vendor/rocksdb/db/write_stall_stats.h +47 -0
  382. package/vendor/rocksdb/db/write_thread.cc +844 -0
  383. package/vendor/rocksdb/db/write_thread.h +464 -0
  384. package/vendor/rocksdb/db_stress_tool/CMakeLists.txt +18 -0
  385. package/vendor/rocksdb/db_stress_tool/batched_ops_stress.cc +593 -0
  386. package/vendor/rocksdb/db_stress_tool/cf_consistency_stress.cc +892 -0
  387. package/vendor/rocksdb/db_stress_tool/db_stress.cc +25 -0
  388. package/vendor/rocksdb/db_stress_tool/db_stress_common.cc +491 -0
  389. package/vendor/rocksdb/db_stress_tool/db_stress_common.h +674 -0
  390. package/vendor/rocksdb/db_stress_tool/db_stress_compaction_filter.h +96 -0
  391. package/vendor/rocksdb/db_stress_tool/db_stress_driver.cc +216 -0
  392. package/vendor/rocksdb/db_stress_tool/db_stress_driver.h +18 -0
  393. package/vendor/rocksdb/db_stress_tool/db_stress_env_wrapper.h +78 -0
  394. package/vendor/rocksdb/db_stress_tool/db_stress_gflags.cc +1094 -0
  395. package/vendor/rocksdb/db_stress_tool/db_stress_listener.cc +189 -0
  396. package/vendor/rocksdb/db_stress_tool/db_stress_listener.h +269 -0
  397. package/vendor/rocksdb/db_stress_tool/db_stress_shared_state.cc +17 -0
  398. package/vendor/rocksdb/db_stress_tool/db_stress_shared_state.h +437 -0
  399. package/vendor/rocksdb/db_stress_tool/db_stress_stat.cc +17 -0
  400. package/vendor/rocksdb/db_stress_tool/db_stress_stat.h +219 -0
  401. package/vendor/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +65 -0
  402. package/vendor/rocksdb/db_stress_tool/db_stress_test_base.cc +3294 -0
  403. package/vendor/rocksdb/db_stress_tool/db_stress_test_base.h +327 -0
  404. package/vendor/rocksdb/db_stress_tool/db_stress_tool.cc +371 -0
  405. package/vendor/rocksdb/db_stress_tool/expected_state.cc +780 -0
  406. package/vendor/rocksdb/db_stress_tool/expected_state.h +329 -0
  407. package/vendor/rocksdb/db_stress_tool/expected_value.cc +122 -0
  408. package/vendor/rocksdb/db_stress_tool/expected_value.h +206 -0
  409. package/vendor/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1761 -0
  410. package/vendor/rocksdb/db_stress_tool/multi_ops_txns_stress.h +446 -0
  411. package/vendor/rocksdb/db_stress_tool/no_batched_ops_stress.cc +1906 -0
  412. package/vendor/rocksdb/docs/CNAME +1 -0
  413. package/vendor/rocksdb/docs/CONTRIBUTING.md +115 -0
  414. package/vendor/rocksdb/docs/Gemfile +4 -0
  415. package/vendor/rocksdb/docs/LICENSE-DOCUMENTATION +385 -0
  416. package/vendor/rocksdb/docs/README.md +80 -0
  417. package/vendor/rocksdb/docs/TEMPLATE-INFORMATION.md +17 -0
  418. package/vendor/rocksdb/docs/_config.yml +85 -0
  419. package/vendor/rocksdb/docs/_data/authors.yml +81 -0
  420. package/vendor/rocksdb/docs/_data/features.yml +19 -0
  421. package/vendor/rocksdb/docs/_data/nav.yml +30 -0
  422. package/vendor/rocksdb/docs/_data/nav_docs.yml +3 -0
  423. package/vendor/rocksdb/docs/_data/powered_by.yml +1 -0
  424. package/vendor/rocksdb/docs/_data/powered_by_highlight.yml +1 -0
  425. package/vendor/rocksdb/docs/_data/promo.yml +6 -0
  426. package/vendor/rocksdb/docs/_docs/faq.md +48 -0
  427. package/vendor/rocksdb/docs/_docs/getting-started.md +78 -0
  428. package/vendor/rocksdb/docs/_includes/blog_pagination.html +28 -0
  429. package/vendor/rocksdb/docs/_includes/content/gridblocks.html +5 -0
  430. package/vendor/rocksdb/docs/_includes/content/items/gridblock.html +37 -0
  431. package/vendor/rocksdb/docs/_includes/doc.html +25 -0
  432. package/vendor/rocksdb/docs/_includes/doc_paging.html +0 -0
  433. package/vendor/rocksdb/docs/_includes/footer.html +34 -0
  434. package/vendor/rocksdb/docs/_includes/head.html +23 -0
  435. package/vendor/rocksdb/docs/_includes/header.html +19 -0
  436. package/vendor/rocksdb/docs/_includes/hero.html +0 -0
  437. package/vendor/rocksdb/docs/_includes/home_header.html +22 -0
  438. package/vendor/rocksdb/docs/_includes/katex_import.html +3 -0
  439. package/vendor/rocksdb/docs/_includes/katex_render.html +210 -0
  440. package/vendor/rocksdb/docs/_includes/nav/collection_nav.html +64 -0
  441. package/vendor/rocksdb/docs/_includes/nav/collection_nav_group.html +19 -0
  442. package/vendor/rocksdb/docs/_includes/nav/collection_nav_group_item.html +1 -0
  443. package/vendor/rocksdb/docs/_includes/nav/header_nav.html +30 -0
  444. package/vendor/rocksdb/docs/_includes/nav.html +37 -0
  445. package/vendor/rocksdb/docs/_includes/nav_search.html +15 -0
  446. package/vendor/rocksdb/docs/_includes/plugins/all_share.html +3 -0
  447. package/vendor/rocksdb/docs/_includes/plugins/ascii_cinema.html +2 -0
  448. package/vendor/rocksdb/docs/_includes/plugins/button.html +6 -0
  449. package/vendor/rocksdb/docs/_includes/plugins/github_star.html +4 -0
  450. package/vendor/rocksdb/docs/_includes/plugins/github_watch.html +4 -0
  451. package/vendor/rocksdb/docs/_includes/plugins/google_share.html +5 -0
  452. package/vendor/rocksdb/docs/_includes/plugins/iframe.html +6 -0
  453. package/vendor/rocksdb/docs/_includes/plugins/like_button.html +18 -0
  454. package/vendor/rocksdb/docs/_includes/plugins/plugin_row.html +5 -0
  455. package/vendor/rocksdb/docs/_includes/plugins/post_social_plugins.html +41 -0
  456. package/vendor/rocksdb/docs/_includes/plugins/slideshow.html +88 -0
  457. package/vendor/rocksdb/docs/_includes/plugins/twitter_follow.html +12 -0
  458. package/vendor/rocksdb/docs/_includes/plugins/twitter_share.html +11 -0
  459. package/vendor/rocksdb/docs/_includes/post.html +40 -0
  460. package/vendor/rocksdb/docs/_includes/powered_by.html +28 -0
  461. package/vendor/rocksdb/docs/_includes/social_plugins.html +31 -0
  462. package/vendor/rocksdb/docs/_includes/ui/button.html +1 -0
  463. package/vendor/rocksdb/docs/_layouts/basic.html +12 -0
  464. package/vendor/rocksdb/docs/_layouts/blog.html +11 -0
  465. package/vendor/rocksdb/docs/_layouts/blog_default.html +14 -0
  466. package/vendor/rocksdb/docs/_layouts/default.html +12 -0
  467. package/vendor/rocksdb/docs/_layouts/doc_default.html +14 -0
  468. package/vendor/rocksdb/docs/_layouts/doc_page.html +10 -0
  469. package/vendor/rocksdb/docs/_layouts/docs.html +5 -0
  470. package/vendor/rocksdb/docs/_layouts/home.html +26 -0
  471. package/vendor/rocksdb/docs/_layouts/page.html +3 -0
  472. package/vendor/rocksdb/docs/_layouts/plain.html +10 -0
  473. package/vendor/rocksdb/docs/_layouts/post.html +8 -0
  474. package/vendor/rocksdb/docs/_layouts/redirect.html +6 -0
  475. package/vendor/rocksdb/docs/_layouts/top-level.html +10 -0
  476. package/vendor/rocksdb/docs/_posts/2014-03-27-how-to-backup-rocksdb.markdown +135 -0
  477. package/vendor/rocksdb/docs/_posts/2014-03-27-how-to-persist-in-memory-rocksdb-database.markdown +54 -0
  478. package/vendor/rocksdb/docs/_posts/2014-04-02-the-1st-rocksdb-local-meetup-held-on-march-27-2014.markdown +53 -0
  479. package/vendor/rocksdb/docs/_posts/2014-04-07-rocksdb-2-8-release.markdown +40 -0
  480. package/vendor/rocksdb/docs/_posts/2014-04-21-indexing-sst-files-for-better-lookup-performance.markdown +28 -0
  481. package/vendor/rocksdb/docs/_posts/2014-05-14-lock.markdown +88 -0
  482. package/vendor/rocksdb/docs/_posts/2014-05-19-rocksdb-3-0-release.markdown +24 -0
  483. package/vendor/rocksdb/docs/_posts/2014-05-22-rocksdb-3-1-release.markdown +20 -0
  484. package/vendor/rocksdb/docs/_posts/2014-06-23-plaintable-a-new-file-format.markdown +47 -0
  485. package/vendor/rocksdb/docs/_posts/2014-06-27-avoid-expensive-locks-in-get.markdown +89 -0
  486. package/vendor/rocksdb/docs/_posts/2014-06-27-rocksdb-3-2-release.markdown +30 -0
  487. package/vendor/rocksdb/docs/_posts/2014-07-29-rocksdb-3-3-release.markdown +34 -0
  488. package/vendor/rocksdb/docs/_posts/2014-09-12-cuckoo.markdown +74 -0
  489. package/vendor/rocksdb/docs/_posts/2014-09-12-new-bloom-filter-format.markdown +52 -0
  490. package/vendor/rocksdb/docs/_posts/2014-09-15-rocksdb-3-5-release.markdown +38 -0
  491. package/vendor/rocksdb/docs/_posts/2015-01-16-migrating-from-leveldb-to-rocksdb-2.markdown +112 -0
  492. package/vendor/rocksdb/docs/_posts/2015-02-24-reading-rocksdb-options-from-a-file.markdown +41 -0
  493. package/vendor/rocksdb/docs/_posts/2015-02-27-write-batch-with-index.markdown +20 -0
  494. package/vendor/rocksdb/docs/_posts/2015-04-22-integrating-rocksdb-with-mongodb-2.markdown +16 -0
  495. package/vendor/rocksdb/docs/_posts/2015-06-12-rocksdb-in-osquery.markdown +10 -0
  496. package/vendor/rocksdb/docs/_posts/2015-07-15-rocksdb-2015-h2-roadmap.markdown +92 -0
  497. package/vendor/rocksdb/docs/_posts/2015-07-17-spatial-indexing-in-rocksdb.markdown +78 -0
  498. package/vendor/rocksdb/docs/_posts/2015-07-22-rocksdb-is-now-available-in-windows-platform.markdown +30 -0
  499. package/vendor/rocksdb/docs/_posts/2015-07-23-dynamic-level.markdown +29 -0
  500. package/vendor/rocksdb/docs/_posts/2015-10-27-getthreadlist.markdown +193 -0
  501. package/vendor/rocksdb/docs/_posts/2015-11-10-use-checkpoints-for-efficient-snapshots.markdown +45 -0
  502. package/vendor/rocksdb/docs/_posts/2015-11-16-analysis-file-read-latency-by-level.markdown +244 -0
  503. package/vendor/rocksdb/docs/_posts/2016-01-29-compaction_pri.markdown +51 -0
  504. package/vendor/rocksdb/docs/_posts/2016-02-24-rocksdb-4-2-release.markdown +41 -0
  505. package/vendor/rocksdb/docs/_posts/2016-02-25-rocksdb-ama.markdown +20 -0
  506. package/vendor/rocksdb/docs/_posts/2016-03-07-rocksdb-options-file.markdown +24 -0
  507. package/vendor/rocksdb/docs/_posts/2016-04-26-rocksdb-4-5-1-released.markdown +60 -0
  508. package/vendor/rocksdb/docs/_posts/2016-07-26-rocksdb-4-8-released.markdown +48 -0
  509. package/vendor/rocksdb/docs/_posts/2016-09-28-rocksdb-4-11-2-released.markdown +49 -0
  510. package/vendor/rocksdb/docs/_posts/2017-01-06-rocksdb-5-0-1-released.markdown +26 -0
  511. package/vendor/rocksdb/docs/_posts/2017-02-07-rocksdb-5-1-2-released.markdown +15 -0
  512. package/vendor/rocksdb/docs/_posts/2017-02-17-bulkoad-ingest-sst-file.markdown +50 -0
  513. package/vendor/rocksdb/docs/_posts/2017-03-02-rocksdb-5-2-1-released.markdown +22 -0
  514. package/vendor/rocksdb/docs/_posts/2017-05-12-partitioned-index-filter.markdown +34 -0
  515. package/vendor/rocksdb/docs/_posts/2017-05-14-core-local-stats.markdown +106 -0
  516. package/vendor/rocksdb/docs/_posts/2017-05-26-rocksdb-5-4-5-released.markdown +39 -0
  517. package/vendor/rocksdb/docs/_posts/2017-06-26-17-level-based-changes.markdown +60 -0
  518. package/vendor/rocksdb/docs/_posts/2017-06-29-rocksdb-5-5-1-released.markdown +22 -0
  519. package/vendor/rocksdb/docs/_posts/2017-07-25-rocksdb-5-6-1-released.markdown +22 -0
  520. package/vendor/rocksdb/docs/_posts/2017-08-24-pinnableslice.markdown +37 -0
  521. package/vendor/rocksdb/docs/_posts/2017-08-25-flushwal.markdown +26 -0
  522. package/vendor/rocksdb/docs/_posts/2017-09-28-rocksdb-5-8-released.markdown +25 -0
  523. package/vendor/rocksdb/docs/_posts/2017-12-18-17-auto-tuned-rate-limiter.markdown +28 -0
  524. package/vendor/rocksdb/docs/_posts/2017-12-19-write-prepared-txn.markdown +41 -0
  525. package/vendor/rocksdb/docs/_posts/2018-02-05-rocksdb-5-10-2-released.markdown +22 -0
  526. package/vendor/rocksdb/docs/_posts/2018-08-01-rocksdb-tuning-advisor.markdown +58 -0
  527. package/vendor/rocksdb/docs/_posts/2018-08-23-data-block-hash-index.markdown +118 -0
  528. package/vendor/rocksdb/docs/_posts/2018-11-21-delete-range.markdown +292 -0
  529. package/vendor/rocksdb/docs/_posts/2019-03-08-format-version-4.markdown +36 -0
  530. package/vendor/rocksdb/docs/_posts/2019-08-15-unordered-write.markdown +56 -0
  531. package/vendor/rocksdb/docs/_posts/2021-04-12-universal-improvements.markdown +46 -0
  532. package/vendor/rocksdb/docs/_posts/2021-05-26-integrated-blob-db.markdown +101 -0
  533. package/vendor/rocksdb/docs/_posts/2021-05-26-online-validation.markdown +17 -0
  534. package/vendor/rocksdb/docs/_posts/2021-05-27-rocksdb-secondary-cache.markdown +195 -0
  535. package/vendor/rocksdb/docs/_posts/2021-05-31-dictionary-compression.markdown +157 -0
  536. package/vendor/rocksdb/docs/_posts/2021-12-29-ribbon-filter.markdown +281 -0
  537. package/vendor/rocksdb/docs/_posts/2022-07-18-per-key-value-checksum.markdown +142 -0
  538. package/vendor/rocksdb/docs/_posts/2022-10-05-lost-buffered-write-recovery.markdown +123 -0
  539. package/vendor/rocksdb/docs/_posts/2022-10-07-asynchronous-io-in-rocksdb.markdown +133 -0
  540. package/vendor/rocksdb/docs/_posts/2022-10-31-align-compaction-output-file.markdown +107 -0
  541. package/vendor/rocksdb/docs/_posts/2022-11-09-time-aware-tiered-storage.markdown +121 -0
  542. package/vendor/rocksdb/docs/_sass/_base.scss +492 -0
  543. package/vendor/rocksdb/docs/_sass/_blog.scss +47 -0
  544. package/vendor/rocksdb/docs/_sass/_buttons.scss +47 -0
  545. package/vendor/rocksdb/docs/_sass/_footer.scss +82 -0
  546. package/vendor/rocksdb/docs/_sass/_gridBlock.scss +115 -0
  547. package/vendor/rocksdb/docs/_sass/_header.scss +139 -0
  548. package/vendor/rocksdb/docs/_sass/_poweredby.scss +69 -0
  549. package/vendor/rocksdb/docs/_sass/_promo.scss +55 -0
  550. package/vendor/rocksdb/docs/_sass/_react_docs_nav.scss +332 -0
  551. package/vendor/rocksdb/docs/_sass/_react_header_nav.scss +141 -0
  552. package/vendor/rocksdb/docs/_sass/_reset.scss +43 -0
  553. package/vendor/rocksdb/docs/_sass/_search.scss +142 -0
  554. package/vendor/rocksdb/docs/_sass/_slideshow.scss +48 -0
  555. package/vendor/rocksdb/docs/_sass/_syntax-highlighting.scss +129 -0
  556. package/vendor/rocksdb/docs/_sass/_tables.scss +47 -0
  557. package/vendor/rocksdb/docs/_top-level/support.md +22 -0
  558. package/vendor/rocksdb/docs/blog/all.html +20 -0
  559. package/vendor/rocksdb/docs/blog/index.html +12 -0
  560. package/vendor/rocksdb/docs/css/main.scss +159 -0
  561. package/vendor/rocksdb/docs/doc-type-examples/2016-04-07-blog-post-example.md +21 -0
  562. package/vendor/rocksdb/docs/doc-type-examples/docs-hello-world.md +12 -0
  563. package/vendor/rocksdb/docs/doc-type-examples/top-level-example.md +8 -0
  564. package/vendor/rocksdb/docs/docs/index.html +6 -0
  565. package/vendor/rocksdb/docs/feed.xml +30 -0
  566. package/vendor/rocksdb/docs/index.md +9 -0
  567. package/vendor/rocksdb/docs/static/favicon.png +0 -0
  568. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Black.woff +0 -0
  569. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Black.woff2 +0 -0
  570. package/vendor/rocksdb/docs/static/fonts/LatoLatin-BlackItalic.woff +0 -0
  571. package/vendor/rocksdb/docs/static/fonts/LatoLatin-BlackItalic.woff2 +0 -0
  572. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Italic.woff +0 -0
  573. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Italic.woff2 +0 -0
  574. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Light.woff +0 -0
  575. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Light.woff2 +0 -0
  576. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Regular.woff +0 -0
  577. package/vendor/rocksdb/docs/static/fonts/LatoLatin-Regular.woff2 +0 -0
  578. package/vendor/rocksdb/docs/static/images/Resize-of-20140327_200754-300x225.jpg +0 -0
  579. package/vendor/rocksdb/docs/static/images/align-compaction-output/compaction_output_file_size_compare.png +0 -0
  580. package/vendor/rocksdb/docs/static/images/align-compaction-output/file_cut_align.png +0 -0
  581. package/vendor/rocksdb/docs/static/images/align-compaction-output/file_cut_normal.png +0 -0
  582. package/vendor/rocksdb/docs/static/images/align-compaction-output/file_cut_trival_move.png +0 -0
  583. package/vendor/rocksdb/docs/static/images/align-compaction-output/file_size_compare.png +0 -0
  584. package/vendor/rocksdb/docs/static/images/align-compaction-output/write_amp_compare.png +0 -0
  585. package/vendor/rocksdb/docs/static/images/asynchronous-io/mget_async.png +0 -0
  586. package/vendor/rocksdb/docs/static/images/asynchronous-io/scan_async.png +0 -0
  587. package/vendor/rocksdb/docs/static/images/binaryseek.png +0 -0
  588. package/vendor/rocksdb/docs/static/images/bloom_fp_vs_bpk.png +0 -0
  589. package/vendor/rocksdb/docs/static/images/compaction/full-range.png +0 -0
  590. package/vendor/rocksdb/docs/static/images/compaction/l0-l1-contend.png +0 -0
  591. package/vendor/rocksdb/docs/static/images/compaction/l1-l2-contend.png +0 -0
  592. package/vendor/rocksdb/docs/static/images/compaction/part-range-old.png +0 -0
  593. package/vendor/rocksdb/docs/static/images/data-block-hash-index/block-format-binary-seek.png +0 -0
  594. package/vendor/rocksdb/docs/static/images/data-block-hash-index/block-format-hash-index.png +0 -0
  595. package/vendor/rocksdb/docs/static/images/data-block-hash-index/hash-index-data-structure.png +0 -0
  596. package/vendor/rocksdb/docs/static/images/data-block-hash-index/perf-cache-miss.png +0 -0
  597. package/vendor/rocksdb/docs/static/images/data-block-hash-index/perf-throughput.png +0 -0
  598. package/vendor/rocksdb/docs/static/images/delrange/delrange_collapsed.png +0 -0
  599. package/vendor/rocksdb/docs/static/images/delrange/delrange_key_schema.png +0 -0
  600. package/vendor/rocksdb/docs/static/images/delrange/delrange_sst_blocks.png +0 -0
  601. package/vendor/rocksdb/docs/static/images/delrange/delrange_uncollapsed.png +0 -0
  602. package/vendor/rocksdb/docs/static/images/delrange/delrange_write_path.png +0 -0
  603. package/vendor/rocksdb/docs/static/images/dictcmp/dictcmp_raw_sampled.png +0 -0
  604. package/vendor/rocksdb/docs/static/images/dictcmp/dictcmp_sst_blocks.png +0 -0
  605. package/vendor/rocksdb/docs/static/images/dictcmp/dictcmp_zstd_trained.png +0 -0
  606. package/vendor/rocksdb/docs/static/images/integrated-blob-db/BlobDB_Benchmarks_Legacy_Vs_Integrated.png +0 -0
  607. package/vendor/rocksdb/docs/static/images/integrated-blob-db/BlobDB_Benchmarks_RW_RO_Perf.png +0 -0
  608. package/vendor/rocksdb/docs/static/images/integrated-blob-db/BlobDB_Benchmarks_Write_Amp.png +0 -0
  609. package/vendor/rocksdb/docs/static/images/integrated-blob-db/BlobDB_Benchmarks_Write_Perf.png +0 -0
  610. package/vendor/rocksdb/docs/static/images/kv-checksum/Memtable-entry.png +0 -0
  611. package/vendor/rocksdb/docs/static/images/kv-checksum/Memtable-write.png +0 -0
  612. package/vendor/rocksdb/docs/static/images/kv-checksum/ProtInfo-Memtable.png +0 -0
  613. package/vendor/rocksdb/docs/static/images/kv-checksum/ProtInfo-Writebatch-to-Memtable.png +0 -0
  614. package/vendor/rocksdb/docs/static/images/kv-checksum/ProtInfo-Writebatch.png +0 -0
  615. package/vendor/rocksdb/docs/static/images/kv-checksum/WAL-fragment.png +0 -0
  616. package/vendor/rocksdb/docs/static/images/kv-checksum/WAL-read.png +0 -0
  617. package/vendor/rocksdb/docs/static/images/kv-checksum/WAL-write.png +0 -0
  618. package/vendor/rocksdb/docs/static/images/kv-checksum/Write-batch.png +0 -0
  619. package/vendor/rocksdb/docs/static/images/kv-checksum/Writebatch-write.png +0 -0
  620. package/vendor/rocksdb/docs/static/images/lost-buffered-write-recovery/angry-cat.png +0 -0
  621. package/vendor/rocksdb/docs/static/images/lost-buffered-write-recovery/basic-setup.png +0 -0
  622. package/vendor/rocksdb/docs/static/images/lost-buffered-write-recovery/happy-cat.png +0 -0
  623. package/vendor/rocksdb/docs/static/images/lost-buffered-write-recovery/replay-extension.png +0 -0
  624. package/vendor/rocksdb/docs/static/images/lost-buffered-write-recovery/test-fs-writable-file.png +0 -0
  625. package/vendor/rocksdb/docs/static/images/lost-buffered-write-recovery/trace-extension.png +0 -0
  626. package/vendor/rocksdb/docs/static/images/pcache-blockindex.jpg +0 -0
  627. package/vendor/rocksdb/docs/static/images/pcache-fileindex.jpg +0 -0
  628. package/vendor/rocksdb/docs/static/images/pcache-filelayout.jpg +0 -0
  629. package/vendor/rocksdb/docs/static/images/pcache-readiopath.jpg +0 -0
  630. package/vendor/rocksdb/docs/static/images/pcache-tieredstorage.jpg +0 -0
  631. package/vendor/rocksdb/docs/static/images/pcache-writeiopath.jpg +0 -0
  632. package/vendor/rocksdb/docs/static/images/promo-adapt.svg +8 -0
  633. package/vendor/rocksdb/docs/static/images/promo-flash.svg +28 -0
  634. package/vendor/rocksdb/docs/static/images/promo-operations.svg +6 -0
  635. package/vendor/rocksdb/docs/static/images/promo-performance.svg +134 -0
  636. package/vendor/rocksdb/docs/static/images/rate-limiter/auto-tuned-write-KBps-series.png +0 -0
  637. package/vendor/rocksdb/docs/static/images/rate-limiter/write-KBps-cdf.png +0 -0
  638. package/vendor/rocksdb/docs/static/images/rate-limiter/write-KBps-series.png +0 -0
  639. package/vendor/rocksdb/docs/static/images/rocksdb-secondary-cache/Mixgraph_hit_rate.png +0 -0
  640. package/vendor/rocksdb/docs/static/images/rocksdb-secondary-cache/Mixgraph_throughput.png +0 -0
  641. package/vendor/rocksdb/docs/static/images/rocksdb-secondary-cache/arch_diagram.png +0 -0
  642. package/vendor/rocksdb/docs/static/images/rocksdb-secondary-cache/insert_flow.png +0 -0
  643. package/vendor/rocksdb/docs/static/images/rocksdb-secondary-cache/lookup_flow.png +0 -0
  644. package/vendor/rocksdb/docs/static/images/time-aware-tiered-storage/compaction_moving_up_conflict.png +0 -0
  645. package/vendor/rocksdb/docs/static/images/time-aware-tiered-storage/per_key_placement_compaction.png +0 -0
  646. package/vendor/rocksdb/docs/static/images/time-aware-tiered-storage/tiered_storage_design.png +0 -0
  647. package/vendor/rocksdb/docs/static/images/time-aware-tiered-storage/tiered_storage_overview.png +0 -0
  648. package/vendor/rocksdb/docs/static/images/time-aware-tiered-storage/tiered_storage_problem.png +0 -0
  649. package/vendor/rocksdb/docs/static/images/tree_example1.png +0 -0
  650. package/vendor/rocksdb/docs/static/logo.svg +76 -0
  651. package/vendor/rocksdb/docs/static/og_image.png +0 -0
  652. package/vendor/rocksdb/env/composite_env.cc +534 -0
  653. package/vendor/rocksdb/env/composite_env_wrapper.h +378 -0
  654. package/vendor/rocksdb/env/emulated_clock.h +114 -0
  655. package/vendor/rocksdb/env/env.cc +1233 -0
  656. package/vendor/rocksdb/env/env_basic_test.cc +397 -0
  657. package/vendor/rocksdb/env/env_chroot.cc +148 -0
  658. package/vendor/rocksdb/env/env_chroot.h +55 -0
  659. package/vendor/rocksdb/env/env_encryption.cc +1346 -0
  660. package/vendor/rocksdb/env/env_encryption_ctr.h +114 -0
  661. package/vendor/rocksdb/env/env_posix.cc +524 -0
  662. package/vendor/rocksdb/env/env_test.cc +3577 -0
  663. package/vendor/rocksdb/env/file_system.cc +277 -0
  664. package/vendor/rocksdb/env/file_system_tracer.cc +564 -0
  665. package/vendor/rocksdb/env/file_system_tracer.h +461 -0
  666. package/vendor/rocksdb/env/fs_posix.cc +1284 -0
  667. package/vendor/rocksdb/env/fs_readonly.h +105 -0
  668. package/vendor/rocksdb/env/fs_remap.cc +341 -0
  669. package/vendor/rocksdb/env/fs_remap.h +137 -0
  670. package/vendor/rocksdb/env/io_posix.cc +1733 -0
  671. package/vendor/rocksdb/env/io_posix.h +523 -0
  672. package/vendor/rocksdb/env/io_posix_test.cc +141 -0
  673. package/vendor/rocksdb/env/mock_env.cc +1058 -0
  674. package/vendor/rocksdb/env/mock_env.h +144 -0
  675. package/vendor/rocksdb/env/mock_env_test.cc +84 -0
  676. package/vendor/rocksdb/env/unique_id_gen.cc +164 -0
  677. package/vendor/rocksdb/env/unique_id_gen.h +85 -0
  678. package/vendor/rocksdb/examples/CMakeLists.txt +45 -0
  679. package/vendor/rocksdb/examples/Makefile +58 -0
  680. package/vendor/rocksdb/examples/README.md +2 -0
  681. package/vendor/rocksdb/examples/c_simple_example.c +96 -0
  682. package/vendor/rocksdb/examples/column_families_example.cc +88 -0
  683. package/vendor/rocksdb/examples/compact_files_example.cc +177 -0
  684. package/vendor/rocksdb/examples/compaction_filter_example.cc +96 -0
  685. package/vendor/rocksdb/examples/multi_processes_example.cc +393 -0
  686. package/vendor/rocksdb/examples/optimistic_transaction_example.cc +190 -0
  687. package/vendor/rocksdb/examples/options_file_example.cc +132 -0
  688. package/vendor/rocksdb/examples/rocksdb_backup_restore_example.cc +99 -0
  689. package/vendor/rocksdb/examples/rocksdb_option_file_example.ini +142 -0
  690. package/vendor/rocksdb/examples/simple_example.cc +93 -0
  691. package/vendor/rocksdb/examples/transaction_example.cc +196 -0
  692. package/vendor/rocksdb/file/delete_scheduler.cc +409 -0
  693. package/vendor/rocksdb/file/delete_scheduler.h +147 -0
  694. package/vendor/rocksdb/file/delete_scheduler_test.cc +717 -0
  695. package/vendor/rocksdb/file/file_prefetch_buffer.cc +955 -0
  696. package/vendor/rocksdb/file/file_prefetch_buffer.h +471 -0
  697. package/vendor/rocksdb/file/file_util.cc +277 -0
  698. package/vendor/rocksdb/file/file_util.h +91 -0
  699. package/vendor/rocksdb/file/filename.cc +523 -0
  700. package/vendor/rocksdb/file/filename.h +188 -0
  701. package/vendor/rocksdb/file/line_file_reader.cc +73 -0
  702. package/vendor/rocksdb/file/line_file_reader.h +60 -0
  703. package/vendor/rocksdb/file/prefetch_test.cc +2374 -0
  704. package/vendor/rocksdb/file/random_access_file_reader.cc +599 -0
  705. package/vendor/rocksdb/file/random_access_file_reader.h +210 -0
  706. package/vendor/rocksdb/file/random_access_file_reader_test.cc +479 -0
  707. package/vendor/rocksdb/file/read_write_util.cc +33 -0
  708. package/vendor/rocksdb/file/read_write_util.h +31 -0
  709. package/vendor/rocksdb/file/readahead_file_info.h +33 -0
  710. package/vendor/rocksdb/file/readahead_raf.cc +169 -0
  711. package/vendor/rocksdb/file/readahead_raf.h +29 -0
  712. package/vendor/rocksdb/file/sequence_file_reader.cc +320 -0
  713. package/vendor/rocksdb/file/sequence_file_reader.h +119 -0
  714. package/vendor/rocksdb/file/sst_file_manager_impl.cc +507 -0
  715. package/vendor/rocksdb/file/sst_file_manager_impl.h +193 -0
  716. package/vendor/rocksdb/file/writable_file_writer.cc +989 -0
  717. package/vendor/rocksdb/file/writable_file_writer.h +320 -0
  718. package/vendor/rocksdb/fuzz/Makefile +67 -0
  719. package/vendor/rocksdb/fuzz/README.md +165 -0
  720. package/vendor/rocksdb/fuzz/db_fuzzer.cc +172 -0
  721. package/vendor/rocksdb/fuzz/db_map_fuzzer.cc +107 -0
  722. package/vendor/rocksdb/fuzz/proto/db_operation.proto +28 -0
  723. package/vendor/rocksdb/fuzz/sst_file_writer_fuzzer.cc +210 -0
  724. package/vendor/rocksdb/fuzz/util.h +29 -0
  725. package/vendor/rocksdb/include/rocksdb/advanced_cache.h +623 -0
  726. package/vendor/rocksdb/include/rocksdb/advanced_options.h +1177 -0
  727. package/vendor/rocksdb/include/rocksdb/block_cache_trace_writer.h +149 -0
  728. package/vendor/rocksdb/include/rocksdb/c.h +2864 -0
  729. package/vendor/rocksdb/include/rocksdb/cache.h +442 -0
  730. package/vendor/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  731. package/vendor/rocksdb/include/rocksdb/cleanable.h +128 -0
  732. package/vendor/rocksdb/include/rocksdb/compaction_filter.h +363 -0
  733. package/vendor/rocksdb/include/rocksdb/compaction_job_stats.h +109 -0
  734. package/vendor/rocksdb/include/rocksdb/comparator.h +164 -0
  735. package/vendor/rocksdb/include/rocksdb/compression_type.h +40 -0
  736. package/vendor/rocksdb/include/rocksdb/concurrent_task_limiter.h +51 -0
  737. package/vendor/rocksdb/include/rocksdb/configurable.h +390 -0
  738. package/vendor/rocksdb/include/rocksdb/convenience.h +466 -0
  739. package/vendor/rocksdb/include/rocksdb/customizable.h +229 -0
  740. package/vendor/rocksdb/include/rocksdb/data_structure.h +186 -0
  741. package/vendor/rocksdb/include/rocksdb/db.h +1980 -0
  742. package/vendor/rocksdb/include/rocksdb/db_bench_tool.h +11 -0
  743. package/vendor/rocksdb/include/rocksdb/db_dump_tool.h +43 -0
  744. package/vendor/rocksdb/include/rocksdb/db_stress_tool.h +11 -0
  745. package/vendor/rocksdb/include/rocksdb/env.h +1882 -0
  746. package/vendor/rocksdb/include/rocksdb/env_encryption.h +463 -0
  747. package/vendor/rocksdb/include/rocksdb/experimental.h +56 -0
  748. package/vendor/rocksdb/include/rocksdb/file_checksum.h +146 -0
  749. package/vendor/rocksdb/include/rocksdb/file_system.h +1849 -0
  750. package/vendor/rocksdb/include/rocksdb/filter_policy.h +206 -0
  751. package/vendor/rocksdb/include/rocksdb/flush_block_policy.h +75 -0
  752. package/vendor/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  753. package/vendor/rocksdb/include/rocksdb/io_status.h +244 -0
  754. package/vendor/rocksdb/include/rocksdb/iostats_context.h +98 -0
  755. package/vendor/rocksdb/include/rocksdb/iterator.h +144 -0
  756. package/vendor/rocksdb/include/rocksdb/ldb_tool.h +42 -0
  757. package/vendor/rocksdb/include/rocksdb/listener.h +840 -0
  758. package/vendor/rocksdb/include/rocksdb/memory_allocator.h +87 -0
  759. package/vendor/rocksdb/include/rocksdb/memtablerep.h +421 -0
  760. package/vendor/rocksdb/include/rocksdb/merge_operator.h +286 -0
  761. package/vendor/rocksdb/include/rocksdb/metadata.h +258 -0
  762. package/vendor/rocksdb/include/rocksdb/options.h +2083 -0
  763. package/vendor/rocksdb/include/rocksdb/perf_context.h +314 -0
  764. package/vendor/rocksdb/include/rocksdb/perf_level.h +36 -0
  765. package/vendor/rocksdb/include/rocksdb/persistent_cache.h +74 -0
  766. package/vendor/rocksdb/include/rocksdb/port_defs.h +22 -0
  767. package/vendor/rocksdb/include/rocksdb/rate_limiter.h +159 -0
  768. package/vendor/rocksdb/include/rocksdb/rocksdb_namespace.h +16 -0
  769. package/vendor/rocksdb/include/rocksdb/secondary_cache.h +139 -0
  770. package/vendor/rocksdb/include/rocksdb/slice.h +264 -0
  771. package/vendor/rocksdb/include/rocksdb/slice_transform.h +135 -0
  772. package/vendor/rocksdb/include/rocksdb/snapshot.h +53 -0
  773. package/vendor/rocksdb/include/rocksdb/sst_dump_tool.h +17 -0
  774. package/vendor/rocksdb/include/rocksdb/sst_file_manager.h +136 -0
  775. package/vendor/rocksdb/include/rocksdb/sst_file_reader.h +45 -0
  776. package/vendor/rocksdb/include/rocksdb/sst_file_writer.h +189 -0
  777. package/vendor/rocksdb/include/rocksdb/sst_partitioner.h +142 -0
  778. package/vendor/rocksdb/include/rocksdb/statistics.h +757 -0
  779. package/vendor/rocksdb/include/rocksdb/stats_history.h +70 -0
  780. package/vendor/rocksdb/include/rocksdb/status.h +574 -0
  781. package/vendor/rocksdb/include/rocksdb/system_clock.h +114 -0
  782. package/vendor/rocksdb/include/rocksdb/table.h +927 -0
  783. package/vendor/rocksdb/include/rocksdb/table_properties.h +332 -0
  784. package/vendor/rocksdb/include/rocksdb/table_reader_caller.h +41 -0
  785. package/vendor/rocksdb/include/rocksdb/thread_status.h +190 -0
  786. package/vendor/rocksdb/include/rocksdb/threadpool.h +67 -0
  787. package/vendor/rocksdb/include/rocksdb/trace_reader_writer.h +52 -0
  788. package/vendor/rocksdb/include/rocksdb/trace_record.h +248 -0
  789. package/vendor/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  790. package/vendor/rocksdb/include/rocksdb/transaction_log.h +122 -0
  791. package/vendor/rocksdb/include/rocksdb/types.h +94 -0
  792. package/vendor/rocksdb/include/rocksdb/unique_id.h +55 -0
  793. package/vendor/rocksdb/include/rocksdb/universal_compaction.h +96 -0
  794. package/vendor/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  795. package/vendor/rocksdb/include/rocksdb/utilities/backup_engine.h +689 -0
  796. package/vendor/rocksdb/include/rocksdb/utilities/cache_dump_load.h +140 -0
  797. package/vendor/rocksdb/include/rocksdb/utilities/checkpoint.h +63 -0
  798. package/vendor/rocksdb/include/rocksdb/utilities/convenience.h +10 -0
  799. package/vendor/rocksdb/include/rocksdb/utilities/customizable_util.h +322 -0
  800. package/vendor/rocksdb/include/rocksdb/utilities/db_ttl.h +70 -0
  801. package/vendor/rocksdb/include/rocksdb/utilities/debug.h +46 -0
  802. package/vendor/rocksdb/include/rocksdb/utilities/env_mirror.h +179 -0
  803. package/vendor/rocksdb/include/rocksdb/utilities/info_log_finder.h +19 -0
  804. package/vendor/rocksdb/include/rocksdb/utilities/ldb_cmd.h +316 -0
  805. package/vendor/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +75 -0
  806. package/vendor/rocksdb/include/rocksdb/utilities/leveldb_options.h +145 -0
  807. package/vendor/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +43 -0
  808. package/vendor/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +55 -0
  809. package/vendor/rocksdb/include/rocksdb/utilities/memory_util.h +48 -0
  810. package/vendor/rocksdb/include/rocksdb/utilities/object_registry.h +583 -0
  811. package/vendor/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +98 -0
  812. package/vendor/rocksdb/include/rocksdb/utilities/option_change_migration.h +24 -0
  813. package/vendor/rocksdb/include/rocksdb/utilities/options_type.h +1221 -0
  814. package/vendor/rocksdb/include/rocksdb/utilities/options_util.h +105 -0
  815. package/vendor/rocksdb/include/rocksdb/utilities/replayer.h +85 -0
  816. package/vendor/rocksdb/include/rocksdb/utilities/sim_cache.h +93 -0
  817. package/vendor/rocksdb/include/rocksdb/utilities/stackable_db.h +587 -0
  818. package/vendor/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +88 -0
  819. package/vendor/rocksdb/include/rocksdb/utilities/transaction.h +683 -0
  820. package/vendor/rocksdb/include/rocksdb/utilities/transaction_db.h +506 -0
  821. package/vendor/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +89 -0
  822. package/vendor/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +307 -0
  823. package/vendor/rocksdb/include/rocksdb/version.h +43 -0
  824. package/vendor/rocksdb/include/rocksdb/wal_filter.h +111 -0
  825. package/vendor/rocksdb/include/rocksdb/wide_columns.h +210 -0
  826. package/vendor/rocksdb/include/rocksdb/write_batch.h +494 -0
  827. package/vendor/rocksdb/include/rocksdb/write_batch_base.h +144 -0
  828. package/vendor/rocksdb/include/rocksdb/write_buffer_manager.h +183 -0
  829. package/vendor/rocksdb/issue_template.md +7 -0
  830. package/vendor/rocksdb/java/CMakeLists.txt +549 -0
  831. package/vendor/rocksdb/java/GetBenchmarks.md +161 -0
  832. package/vendor/rocksdb/java/HISTORY-JAVA.md +86 -0
  833. package/vendor/rocksdb/java/Makefile +453 -0
  834. package/vendor/rocksdb/java/RELEASE.md +59 -0
  835. package/vendor/rocksdb/java/benchmark/src/main/java/org/rocksdb/benchmark/DbBenchmark.java +1640 -0
  836. package/vendor/rocksdb/java/crossbuild/Vagrantfile +51 -0
  837. package/vendor/rocksdb/java/crossbuild/build-linux-alpine.sh +70 -0
  838. package/vendor/rocksdb/java/crossbuild/build-linux-centos.sh +38 -0
  839. package/vendor/rocksdb/java/crossbuild/build-linux.sh +15 -0
  840. package/vendor/rocksdb/java/crossbuild/docker-build-linux-alpine.sh +17 -0
  841. package/vendor/rocksdb/java/crossbuild/docker-build-linux-centos.sh +38 -0
  842. package/vendor/rocksdb/java/jdb_bench.sh +13 -0
  843. package/vendor/rocksdb/java/jmh/LICENSE-HEADER.txt +5 -0
  844. package/vendor/rocksdb/java/jmh/README.md +24 -0
  845. package/vendor/rocksdb/java/jmh/pom.xml +138 -0
  846. package/vendor/rocksdb/java/jmh/src/main/java/org/rocksdb/jmh/ComparatorBenchmarks.java +139 -0
  847. package/vendor/rocksdb/java/jmh/src/main/java/org/rocksdb/jmh/GetBenchmarks.java +215 -0
  848. package/vendor/rocksdb/java/jmh/src/main/java/org/rocksdb/jmh/MultiGetBenchmarks.java +214 -0
  849. package/vendor/rocksdb/java/jmh/src/main/java/org/rocksdb/jmh/PutBenchmarks.java +112 -0
  850. package/vendor/rocksdb/java/jmh/src/main/java/org/rocksdb/util/FileUtils.java +59 -0
  851. package/vendor/rocksdb/java/jmh/src/main/java/org/rocksdb/util/KVUtils.java +72 -0
  852. package/vendor/rocksdb/java/pom.xml.template +178 -0
  853. package/vendor/rocksdb/java/rocksjni/backup_engine_options.cc +365 -0
  854. package/vendor/rocksdb/java/rocksjni/backupenginejni.cc +279 -0
  855. package/vendor/rocksdb/java/rocksjni/cache.cc +34 -0
  856. package/vendor/rocksdb/java/rocksjni/cassandra_compactionfilterjni.cc +25 -0
  857. package/vendor/rocksdb/java/rocksjni/cassandra_value_operator.cc +50 -0
  858. package/vendor/rocksdb/java/rocksjni/checkpoint.cc +71 -0
  859. package/vendor/rocksdb/java/rocksjni/clock_cache.cc +42 -0
  860. package/vendor/rocksdb/java/rocksjni/columnfamilyhandle.cc +72 -0
  861. package/vendor/rocksdb/java/rocksjni/compact_range_options.cc +222 -0
  862. package/vendor/rocksdb/java/rocksjni/compaction_filter.cc +29 -0
  863. package/vendor/rocksdb/java/rocksjni/compaction_filter_factory.cc +42 -0
  864. package/vendor/rocksdb/java/rocksjni/compaction_filter_factory_jnicallback.cc +79 -0
  865. package/vendor/rocksdb/java/rocksjni/compaction_filter_factory_jnicallback.h +37 -0
  866. package/vendor/rocksdb/java/rocksjni/compaction_job_info.cc +230 -0
  867. package/vendor/rocksdb/java/rocksjni/compaction_job_stats.cc +345 -0
  868. package/vendor/rocksdb/java/rocksjni/compaction_options.cc +112 -0
  869. package/vendor/rocksdb/java/rocksjni/compaction_options_fifo.cc +83 -0
  870. package/vendor/rocksdb/java/rocksjni/compaction_options_universal.cc +209 -0
  871. package/vendor/rocksdb/java/rocksjni/comparator.cc +60 -0
  872. package/vendor/rocksdb/java/rocksjni/comparatorjnicallback.cc +647 -0
  873. package/vendor/rocksdb/java/rocksjni/comparatorjnicallback.h +137 -0
  874. package/vendor/rocksdb/java/rocksjni/compression_options.cc +214 -0
  875. package/vendor/rocksdb/java/rocksjni/concurrent_task_limiter.cc +97 -0
  876. package/vendor/rocksdb/java/rocksjni/config_options.cc +103 -0
  877. package/vendor/rocksdb/java/rocksjni/cplusplus_to_java_convert.h +37 -0
  878. package/vendor/rocksdb/java/rocksjni/env.cc +205 -0
  879. package/vendor/rocksdb/java/rocksjni/env_options.cc +305 -0
  880. package/vendor/rocksdb/java/rocksjni/event_listener.cc +44 -0
  881. package/vendor/rocksdb/java/rocksjni/event_listener_jnicallback.cc +502 -0
  882. package/vendor/rocksdb/java/rocksjni/event_listener_jnicallback.h +122 -0
  883. package/vendor/rocksdb/java/rocksjni/filter.cc +46 -0
  884. package/vendor/rocksdb/java/rocksjni/ingest_external_file_options.cc +199 -0
  885. package/vendor/rocksdb/java/rocksjni/iterator.cc +340 -0
  886. package/vendor/rocksdb/java/rocksjni/jnicallback.cc +54 -0
  887. package/vendor/rocksdb/java/rocksjni/jnicallback.h +32 -0
  888. package/vendor/rocksdb/java/rocksjni/loggerjnicallback.cc +299 -0
  889. package/vendor/rocksdb/java/rocksjni/loggerjnicallback.h +51 -0
  890. package/vendor/rocksdb/java/rocksjni/lru_cache.cc +49 -0
  891. package/vendor/rocksdb/java/rocksjni/memory_util.cc +100 -0
  892. package/vendor/rocksdb/java/rocksjni/memtablejni.cc +94 -0
  893. package/vendor/rocksdb/java/rocksjni/merge_operator.cc +98 -0
  894. package/vendor/rocksdb/java/rocksjni/native_comparator_wrapper_test.cc +45 -0
  895. package/vendor/rocksdb/java/rocksjni/optimistic_transaction_db.cc +270 -0
  896. package/vendor/rocksdb/java/rocksjni/optimistic_transaction_options.cc +78 -0
  897. package/vendor/rocksdb/java/rocksjni/options.cc +8695 -0
  898. package/vendor/rocksdb/java/rocksjni/options_util.cc +139 -0
  899. package/vendor/rocksdb/java/rocksjni/persistent_cache.cc +60 -0
  900. package/vendor/rocksdb/java/rocksjni/portal.h +8706 -0
  901. package/vendor/rocksdb/java/rocksjni/ratelimiterjni.cc +128 -0
  902. package/vendor/rocksdb/java/rocksjni/remove_emptyvalue_compactionfilterjni.cc +24 -0
  903. package/vendor/rocksdb/java/rocksjni/restorejni.cc +42 -0
  904. package/vendor/rocksdb/java/rocksjni/rocks_callback_object.cc +30 -0
  905. package/vendor/rocksdb/java/rocksjni/rocksdb_exception_test.cc +81 -0
  906. package/vendor/rocksdb/java/rocksjni/rocksjni.cc +3957 -0
  907. package/vendor/rocksdb/java/rocksjni/slice.cc +374 -0
  908. package/vendor/rocksdb/java/rocksjni/snapshot.cc +27 -0
  909. package/vendor/rocksdb/java/rocksjni/sst_file_manager.cc +250 -0
  910. package/vendor/rocksdb/java/rocksjni/sst_file_reader_iterator.cc +373 -0
  911. package/vendor/rocksdb/java/rocksjni/sst_file_readerjni.cc +118 -0
  912. package/vendor/rocksdb/java/rocksjni/sst_file_writerjni.cc +310 -0
  913. package/vendor/rocksdb/java/rocksjni/sst_partitioner.cc +43 -0
  914. package/vendor/rocksdb/java/rocksjni/statistics.cc +268 -0
  915. package/vendor/rocksdb/java/rocksjni/statisticsjni.cc +31 -0
  916. package/vendor/rocksdb/java/rocksjni/statisticsjni.h +34 -0
  917. package/vendor/rocksdb/java/rocksjni/table.cc +145 -0
  918. package/vendor/rocksdb/java/rocksjni/table_filter.cc +27 -0
  919. package/vendor/rocksdb/java/rocksjni/table_filter_jnicallback.cc +66 -0
  920. package/vendor/rocksdb/java/rocksjni/table_filter_jnicallback.h +36 -0
  921. package/vendor/rocksdb/java/rocksjni/testable_event_listener.cc +219 -0
  922. package/vendor/rocksdb/java/rocksjni/thread_status.cc +125 -0
  923. package/vendor/rocksdb/java/rocksjni/trace_writer.cc +24 -0
  924. package/vendor/rocksdb/java/rocksjni/trace_writer_jnicallback.cc +118 -0
  925. package/vendor/rocksdb/java/rocksjni/trace_writer_jnicallback.h +36 -0
  926. package/vendor/rocksdb/java/rocksjni/transaction.cc +1655 -0
  927. package/vendor/rocksdb/java/rocksjni/transaction_db.cc +451 -0
  928. package/vendor/rocksdb/java/rocksjni/transaction_db_options.cc +169 -0
  929. package/vendor/rocksdb/java/rocksjni/transaction_log.cc +80 -0
  930. package/vendor/rocksdb/java/rocksjni/transaction_notifier.cc +44 -0
  931. package/vendor/rocksdb/java/rocksjni/transaction_notifier_jnicallback.cc +42 -0
  932. package/vendor/rocksdb/java/rocksjni/transaction_notifier_jnicallback.h +42 -0
  933. package/vendor/rocksdb/java/rocksjni/transaction_options.cc +191 -0
  934. package/vendor/rocksdb/java/rocksjni/ttl.cc +212 -0
  935. package/vendor/rocksdb/java/rocksjni/wal_filter.cc +24 -0
  936. package/vendor/rocksdb/java/rocksjni/wal_filter_jnicallback.cc +139 -0
  937. package/vendor/rocksdb/java/rocksjni/wal_filter_jnicallback.h +42 -0
  938. package/vendor/rocksdb/java/rocksjni/write_batch.cc +676 -0
  939. package/vendor/rocksdb/java/rocksjni/write_batch_test.cc +199 -0
  940. package/vendor/rocksdb/java/rocksjni/write_batch_with_index.cc +953 -0
  941. package/vendor/rocksdb/java/rocksjni/write_buffer_manager.cc +47 -0
  942. package/vendor/rocksdb/java/rocksjni/writebatchhandlerjnicallback.cc +519 -0
  943. package/vendor/rocksdb/java/rocksjni/writebatchhandlerjnicallback.h +92 -0
  944. package/vendor/rocksdb/java/samples/src/main/java/OptimisticTransactionSample.java +184 -0
  945. package/vendor/rocksdb/java/samples/src/main/java/RocksDBColumnFamilySample.java +78 -0
  946. package/vendor/rocksdb/java/samples/src/main/java/RocksDBSample.java +295 -0
  947. package/vendor/rocksdb/java/samples/src/main/java/TransactionSample.java +183 -0
  948. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractCompactionFilter.java +59 -0
  949. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractCompactionFilterFactory.java +77 -0
  950. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractComparator.java +124 -0
  951. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractComparatorJniBridge.java +119 -0
  952. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractEventListener.java +334 -0
  953. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractImmutableNativeReference.java +65 -0
  954. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractMutableOptions.java +368 -0
  955. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractNativeReference.java +49 -0
  956. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractRocksIterator.java +146 -0
  957. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractSlice.java +191 -0
  958. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractTableFilter.java +20 -0
  959. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractTraceWriter.java +70 -0
  960. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractTransactionNotifier.java +54 -0
  961. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractWalFilter.java +49 -0
  962. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AbstractWriteBatch.java +203 -0
  963. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AccessHint.java +53 -0
  964. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AdvancedColumnFamilyOptionsInterface.java +463 -0
  965. package/vendor/rocksdb/java/src/main/java/org/rocksdb/AdvancedMutableColumnFamilyOptionsInterface.java +830 -0
  966. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BackgroundErrorReason.java +46 -0
  967. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BackupEngine.java +259 -0
  968. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BackupEngineOptions.java +458 -0
  969. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BackupInfo.java +76 -0
  970. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BlockBasedTableConfig.java +951 -0
  971. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BloomFilter.java +73 -0
  972. package/vendor/rocksdb/java/src/main/java/org/rocksdb/BuiltinComparator.java +20 -0
  973. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ByteBufferGetStatus.java +50 -0
  974. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Cache.java +40 -0
  975. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CassandraCompactionFilter.java +20 -0
  976. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CassandraValueMergeOperator.java +25 -0
  977. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Checkpoint.java +62 -0
  978. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ChecksumType.java +45 -0
  979. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ClockCache.java +59 -0
  980. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ColumnFamilyDescriptor.java +84 -0
  981. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ColumnFamilyHandle.java +151 -0
  982. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ColumnFamilyMetaData.java +70 -0
  983. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ColumnFamilyOptions.java +1543 -0
  984. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ColumnFamilyOptionsInterface.java +536 -0
  985. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactRangeOptions.java +245 -0
  986. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionJobInfo.java +161 -0
  987. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionJobStats.java +295 -0
  988. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionOptions.java +121 -0
  989. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionOptionsFIFO.java +87 -0
  990. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionOptionsUniversal.java +273 -0
  991. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionPriority.java +81 -0
  992. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionReason.java +141 -0
  993. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionStopStyle.java +55 -0
  994. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompactionStyle.java +81 -0
  995. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ComparatorOptions.java +133 -0
  996. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ComparatorType.java +48 -0
  997. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompressionOptions.java +150 -0
  998. package/vendor/rocksdb/java/src/main/java/org/rocksdb/CompressionType.java +121 -0
  999. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ConcurrentTaskLimiter.java +44 -0
  1000. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ConcurrentTaskLimiterImpl.java +48 -0
  1001. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ConfigOptions.java +53 -0
  1002. package/vendor/rocksdb/java/src/main/java/org/rocksdb/DBOptions.java +1496 -0
  1003. package/vendor/rocksdb/java/src/main/java/org/rocksdb/DBOptionsInterface.java +1756 -0
  1004. package/vendor/rocksdb/java/src/main/java/org/rocksdb/DataBlockIndexType.java +32 -0
  1005. package/vendor/rocksdb/java/src/main/java/org/rocksdb/DbPath.java +47 -0
  1006. package/vendor/rocksdb/java/src/main/java/org/rocksdb/DirectSlice.java +136 -0
  1007. package/vendor/rocksdb/java/src/main/java/org/rocksdb/EncodingType.java +55 -0
  1008. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Env.java +167 -0
  1009. package/vendor/rocksdb/java/src/main/java/org/rocksdb/EnvOptions.java +366 -0
  1010. package/vendor/rocksdb/java/src/main/java/org/rocksdb/EventListener.java +335 -0
  1011. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Experimental.java +23 -0
  1012. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ExternalFileIngestionInfo.java +103 -0
  1013. package/vendor/rocksdb/java/src/main/java/org/rocksdb/FileOperationInfo.java +112 -0
  1014. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Filter.java +36 -0
  1015. package/vendor/rocksdb/java/src/main/java/org/rocksdb/FlushJobInfo.java +186 -0
  1016. package/vendor/rocksdb/java/src/main/java/org/rocksdb/FlushOptions.java +90 -0
  1017. package/vendor/rocksdb/java/src/main/java/org/rocksdb/FlushReason.java +53 -0
  1018. package/vendor/rocksdb/java/src/main/java/org/rocksdb/HashLinkedListMemTableConfig.java +174 -0
  1019. package/vendor/rocksdb/java/src/main/java/org/rocksdb/HashSkipListMemTableConfig.java +106 -0
  1020. package/vendor/rocksdb/java/src/main/java/org/rocksdb/HistogramData.java +75 -0
  1021. package/vendor/rocksdb/java/src/main/java/org/rocksdb/HistogramType.java +214 -0
  1022. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Holder.java +46 -0
  1023. package/vendor/rocksdb/java/src/main/java/org/rocksdb/IndexShorteningMode.java +60 -0
  1024. package/vendor/rocksdb/java/src/main/java/org/rocksdb/IndexType.java +55 -0
  1025. package/vendor/rocksdb/java/src/main/java/org/rocksdb/InfoLogLevel.java +49 -0
  1026. package/vendor/rocksdb/java/src/main/java/org/rocksdb/IngestExternalFileOptions.java +227 -0
  1027. package/vendor/rocksdb/java/src/main/java/org/rocksdb/KeyMayExist.java +35 -0
  1028. package/vendor/rocksdb/java/src/main/java/org/rocksdb/LRUCache.java +106 -0
  1029. package/vendor/rocksdb/java/src/main/java/org/rocksdb/LevelMetaData.java +56 -0
  1030. package/vendor/rocksdb/java/src/main/java/org/rocksdb/LiveFileMetaData.java +55 -0
  1031. package/vendor/rocksdb/java/src/main/java/org/rocksdb/LogFile.java +75 -0
  1032. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Logger.java +121 -0
  1033. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MemTableConfig.java +29 -0
  1034. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MemTableInfo.java +103 -0
  1035. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MemoryUsageType.java +72 -0
  1036. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MemoryUtil.java +60 -0
  1037. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MergeOperator.java +18 -0
  1038. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MutableColumnFamilyOptions.java +621 -0
  1039. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MutableColumnFamilyOptionsInterface.java +156 -0
  1040. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MutableDBOptions.java +292 -0
  1041. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MutableDBOptionsInterface.java +440 -0
  1042. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MutableOptionKey.java +16 -0
  1043. package/vendor/rocksdb/java/src/main/java/org/rocksdb/MutableOptionValue.java +368 -0
  1044. package/vendor/rocksdb/java/src/main/java/org/rocksdb/NativeComparatorWrapper.java +59 -0
  1045. package/vendor/rocksdb/java/src/main/java/org/rocksdb/NativeLibraryLoader.java +172 -0
  1046. package/vendor/rocksdb/java/src/main/java/org/rocksdb/OperationStage.java +59 -0
  1047. package/vendor/rocksdb/java/src/main/java/org/rocksdb/OperationType.java +55 -0
  1048. package/vendor/rocksdb/java/src/main/java/org/rocksdb/OptimisticTransactionDB.java +224 -0
  1049. package/vendor/rocksdb/java/src/main/java/org/rocksdb/OptimisticTransactionOptions.java +53 -0
  1050. package/vendor/rocksdb/java/src/main/java/org/rocksdb/OptionString.java +261 -0
  1051. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Options.java +2574 -0
  1052. package/vendor/rocksdb/java/src/main/java/org/rocksdb/OptionsUtil.java +101 -0
  1053. package/vendor/rocksdb/java/src/main/java/org/rocksdb/PersistentCache.java +26 -0
  1054. package/vendor/rocksdb/java/src/main/java/org/rocksdb/PlainTableConfig.java +251 -0
  1055. package/vendor/rocksdb/java/src/main/java/org/rocksdb/PrepopulateBlobCache.java +117 -0
  1056. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Priority.java +49 -0
  1057. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Range.java +19 -0
  1058. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RateLimiter.java +227 -0
  1059. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RateLimiterMode.java +52 -0
  1060. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ReadOptions.java +822 -0
  1061. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ReadTier.java +49 -0
  1062. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RemoveEmptyValueCompactionFilter.java +18 -0
  1063. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RestoreOptions.java +32 -0
  1064. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ReusedSynchronisationType.java +65 -0
  1065. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksCallbackObject.java +73 -0
  1066. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksDB.java +4688 -0
  1067. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksDBException.java +44 -0
  1068. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksEnv.java +31 -0
  1069. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksIterator.java +140 -0
  1070. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksIteratorInterface.java +127 -0
  1071. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksMemEnv.java +31 -0
  1072. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksMutableObject.java +87 -0
  1073. package/vendor/rocksdb/java/src/main/java/org/rocksdb/RocksObject.java +45 -0
  1074. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SanityLevel.java +47 -0
  1075. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SizeApproximationFlag.java +31 -0
  1076. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SkipListMemTableConfig.java +51 -0
  1077. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Slice.java +135 -0
  1078. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Snapshot.java +41 -0
  1079. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstFileManager.java +249 -0
  1080. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstFileMetaData.java +162 -0
  1081. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstFileReader.java +82 -0
  1082. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstFileReaderIterator.java +140 -0
  1083. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstFileWriter.java +237 -0
  1084. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstPartitionerFactory.java +15 -0
  1085. package/vendor/rocksdb/java/src/main/java/org/rocksdb/SstPartitionerFixedPrefixFactory.java +19 -0
  1086. package/vendor/rocksdb/java/src/main/java/org/rocksdb/StateType.java +53 -0
  1087. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Statistics.java +153 -0
  1088. package/vendor/rocksdb/java/src/main/java/org/rocksdb/StatisticsCollector.java +102 -0
  1089. package/vendor/rocksdb/java/src/main/java/org/rocksdb/StatisticsCollectorCallback.java +32 -0
  1090. package/vendor/rocksdb/java/src/main/java/org/rocksdb/StatsCollectorInput.java +35 -0
  1091. package/vendor/rocksdb/java/src/main/java/org/rocksdb/StatsLevel.java +65 -0
  1092. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Status.java +155 -0
  1093. package/vendor/rocksdb/java/src/main/java/org/rocksdb/StringAppendOperator.java +29 -0
  1094. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableFileCreationBriefInfo.java +107 -0
  1095. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableFileCreationInfo.java +86 -0
  1096. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableFileCreationReason.java +46 -0
  1097. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableFileDeletionInfo.java +86 -0
  1098. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableFilter.java +21 -0
  1099. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableFormatConfig.java +22 -0
  1100. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TableProperties.java +426 -0
  1101. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ThreadStatus.java +224 -0
  1102. package/vendor/rocksdb/java/src/main/java/org/rocksdb/ThreadType.java +65 -0
  1103. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TickerType.java +802 -0
  1104. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TimedEnv.java +30 -0
  1105. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TraceOptions.java +32 -0
  1106. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TraceWriter.java +36 -0
  1107. package/vendor/rocksdb/java/src/main/java/org/rocksdb/Transaction.java +2162 -0
  1108. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TransactionDB.java +401 -0
  1109. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TransactionDBOptions.java +216 -0
  1110. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TransactionLogIterator.java +112 -0
  1111. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TransactionOptions.java +189 -0
  1112. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TransactionalDB.java +65 -0
  1113. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TransactionalOptions.java +31 -0
  1114. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TtlDB.java +242 -0
  1115. package/vendor/rocksdb/java/src/main/java/org/rocksdb/TxnDBWritePolicy.java +62 -0
  1116. package/vendor/rocksdb/java/src/main/java/org/rocksdb/UInt64AddOperator.java +19 -0
  1117. package/vendor/rocksdb/java/src/main/java/org/rocksdb/VectorMemTableConfig.java +46 -0
  1118. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WALRecoveryMode.java +82 -0
  1119. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WBWIRocksIterator.java +203 -0
  1120. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WalFileType.java +55 -0
  1121. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WalFilter.java +86 -0
  1122. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WalProcessingOption.java +54 -0
  1123. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteBatch.java +394 -0
  1124. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteBatchInterface.java +283 -0
  1125. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteBatchWithIndex.java +358 -0
  1126. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteBufferManager.java +50 -0
  1127. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteOptions.java +255 -0
  1128. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteStallCondition.java +44 -0
  1129. package/vendor/rocksdb/java/src/main/java/org/rocksdb/WriteStallInfo.java +75 -0
  1130. package/vendor/rocksdb/java/src/main/java/org/rocksdb/util/ByteUtil.java +52 -0
  1131. package/vendor/rocksdb/java/src/main/java/org/rocksdb/util/BytewiseComparator.java +121 -0
  1132. package/vendor/rocksdb/java/src/main/java/org/rocksdb/util/Environment.java +245 -0
  1133. package/vendor/rocksdb/java/src/main/java/org/rocksdb/util/IntComparator.java +67 -0
  1134. package/vendor/rocksdb/java/src/main/java/org/rocksdb/util/ReverseBytewiseComparator.java +88 -0
  1135. package/vendor/rocksdb/java/src/main/java/org/rocksdb/util/SizeUnit.java +16 -0
  1136. package/vendor/rocksdb/java/src/test/java/org/rocksdb/AbstractTransactionTest.java +979 -0
  1137. package/vendor/rocksdb/java/src/test/java/org/rocksdb/BackupEngineOptionsTest.java +297 -0
  1138. package/vendor/rocksdb/java/src/test/java/org/rocksdb/BackupEngineTest.java +261 -0
  1139. package/vendor/rocksdb/java/src/test/java/org/rocksdb/BlobOptionsTest.java +353 -0
  1140. package/vendor/rocksdb/java/src/test/java/org/rocksdb/BlockBasedTableConfigTest.java +415 -0
  1141. package/vendor/rocksdb/java/src/test/java/org/rocksdb/BuiltinComparatorTest.java +145 -0
  1142. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ByteBufferUnsupportedOperationTest.java +132 -0
  1143. package/vendor/rocksdb/java/src/test/java/org/rocksdb/BytewiseComparatorRegressionTest.java +132 -0
  1144. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CheckPointTest.java +82 -0
  1145. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ClockCacheTest.java +25 -0
  1146. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ColumnFamilyOptionsTest.java +712 -0
  1147. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ColumnFamilyTest.java +562 -0
  1148. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactRangeOptionsTest.java +102 -0
  1149. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionFilterFactoryTest.java +61 -0
  1150. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionJobInfoTest.java +114 -0
  1151. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionJobStatsTest.java +196 -0
  1152. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionOptionsFIFOTest.java +35 -0
  1153. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionOptionsTest.java +52 -0
  1154. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionOptionsUniversalTest.java +80 -0
  1155. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionPriorityTest.java +31 -0
  1156. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompactionStopStyleTest.java +31 -0
  1157. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ComparatorOptionsTest.java +58 -0
  1158. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompressionOptionsTest.java +71 -0
  1159. package/vendor/rocksdb/java/src/test/java/org/rocksdb/CompressionTypesTest.java +25 -0
  1160. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ConcurrentTaskLimiterTest.java +56 -0
  1161. package/vendor/rocksdb/java/src/test/java/org/rocksdb/DBOptionsTest.java +902 -0
  1162. package/vendor/rocksdb/java/src/test/java/org/rocksdb/DefaultEnvTest.java +113 -0
  1163. package/vendor/rocksdb/java/src/test/java/org/rocksdb/DirectSliceTest.java +93 -0
  1164. package/vendor/rocksdb/java/src/test/java/org/rocksdb/EnvOptionsTest.java +145 -0
  1165. package/vendor/rocksdb/java/src/test/java/org/rocksdb/EventListenerTest.java +725 -0
  1166. package/vendor/rocksdb/java/src/test/java/org/rocksdb/FilterTest.java +39 -0
  1167. package/vendor/rocksdb/java/src/test/java/org/rocksdb/FlushOptionsTest.java +31 -0
  1168. package/vendor/rocksdb/java/src/test/java/org/rocksdb/FlushTest.java +49 -0
  1169. package/vendor/rocksdb/java/src/test/java/org/rocksdb/InfoLogLevelTest.java +109 -0
  1170. package/vendor/rocksdb/java/src/test/java/org/rocksdb/IngestExternalFileOptionsTest.java +107 -0
  1171. package/vendor/rocksdb/java/src/test/java/org/rocksdb/KeyMayExistTest.java +528 -0
  1172. package/vendor/rocksdb/java/src/test/java/org/rocksdb/LRUCacheTest.java +32 -0
  1173. package/vendor/rocksdb/java/src/test/java/org/rocksdb/LoggerTest.java +235 -0
  1174. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MemTableTest.java +108 -0
  1175. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MemoryUtilTest.java +136 -0
  1176. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MergeTest.java +465 -0
  1177. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MixedOptionsTest.java +85 -0
  1178. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MultiColumnRegressionTest.java +145 -0
  1179. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MultiGetManyKeysTest.java +241 -0
  1180. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MultiGetTest.java +530 -0
  1181. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MutableColumnFamilyOptionsTest.java +167 -0
  1182. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MutableDBOptionsTest.java +85 -0
  1183. package/vendor/rocksdb/java/src/test/java/org/rocksdb/MutableOptionsGetSetTest.java +429 -0
  1184. package/vendor/rocksdb/java/src/test/java/org/rocksdb/NativeComparatorWrapperTest.java +90 -0
  1185. package/vendor/rocksdb/java/src/test/java/org/rocksdb/NativeLibraryLoaderTest.java +41 -0
  1186. package/vendor/rocksdb/java/src/test/java/org/rocksdb/OptimisticTransactionDBTest.java +131 -0
  1187. package/vendor/rocksdb/java/src/test/java/org/rocksdb/OptimisticTransactionOptionsTest.java +38 -0
  1188. package/vendor/rocksdb/java/src/test/java/org/rocksdb/OptimisticTransactionTest.java +446 -0
  1189. package/vendor/rocksdb/java/src/test/java/org/rocksdb/OptionsTest.java +1488 -0
  1190. package/vendor/rocksdb/java/src/test/java/org/rocksdb/OptionsUtilTest.java +129 -0
  1191. package/vendor/rocksdb/java/src/test/java/org/rocksdb/PlainTableConfigTest.java +89 -0
  1192. package/vendor/rocksdb/java/src/test/java/org/rocksdb/PlatformRandomHelper.java +58 -0
  1193. package/vendor/rocksdb/java/src/test/java/org/rocksdb/PutMultiplePartsTest.java +164 -0
  1194. package/vendor/rocksdb/java/src/test/java/org/rocksdb/RateLimiterTest.java +65 -0
  1195. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ReadOnlyTest.java +222 -0
  1196. package/vendor/rocksdb/java/src/test/java/org/rocksdb/ReadOptionsTest.java +374 -0
  1197. package/vendor/rocksdb/java/src/test/java/org/rocksdb/RocksDBExceptionTest.java +115 -0
  1198. package/vendor/rocksdb/java/src/test/java/org/rocksdb/RocksDBTest.java +1692 -0
  1199. package/vendor/rocksdb/java/src/test/java/org/rocksdb/RocksIteratorTest.java +289 -0
  1200. package/vendor/rocksdb/java/src/test/java/org/rocksdb/RocksMemEnvTest.java +137 -0
  1201. package/vendor/rocksdb/java/src/test/java/org/rocksdb/RocksNativeLibraryResource.java +18 -0
  1202. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SecondaryDBTest.java +135 -0
  1203. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SliceTest.java +80 -0
  1204. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SnapshotTest.java +169 -0
  1205. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SstFileManagerTest.java +66 -0
  1206. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SstFileReaderTest.java +222 -0
  1207. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SstFileWriterTest.java +239 -0
  1208. package/vendor/rocksdb/java/src/test/java/org/rocksdb/SstPartitionerTest.java +72 -0
  1209. package/vendor/rocksdb/java/src/test/java/org/rocksdb/StatisticsCollectorTest.java +55 -0
  1210. package/vendor/rocksdb/java/src/test/java/org/rocksdb/StatisticsTest.java +168 -0
  1211. package/vendor/rocksdb/java/src/test/java/org/rocksdb/StatsCallbackMock.java +19 -0
  1212. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TableFilterTest.java +106 -0
  1213. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TimedEnvTest.java +40 -0
  1214. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TransactionDBOptionsTest.java +64 -0
  1215. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TransactionDBTest.java +177 -0
  1216. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TransactionLogIteratorTest.java +139 -0
  1217. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TransactionOptionsTest.java +72 -0
  1218. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TransactionTest.java +488 -0
  1219. package/vendor/rocksdb/java/src/test/java/org/rocksdb/TtlDBTest.java +112 -0
  1220. package/vendor/rocksdb/java/src/test/java/org/rocksdb/Types.java +43 -0
  1221. package/vendor/rocksdb/java/src/test/java/org/rocksdb/VerifyChecksumsTest.java +213 -0
  1222. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WALRecoveryModeTest.java +22 -0
  1223. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WalFilterTest.java +165 -0
  1224. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WriteBatchHandlerTest.java +76 -0
  1225. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WriteBatchTest.java +528 -0
  1226. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WriteBatchThreadedTest.java +101 -0
  1227. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WriteBatchWithIndexTest.java +1068 -0
  1228. package/vendor/rocksdb/java/src/test/java/org/rocksdb/WriteOptionsTest.java +75 -0
  1229. package/vendor/rocksdb/java/src/test/java/org/rocksdb/test/RemoveEmptyValueCompactionFilterFactory.java +21 -0
  1230. package/vendor/rocksdb/java/src/test/java/org/rocksdb/test/RocksJunitRunner.java +174 -0
  1231. package/vendor/rocksdb/java/src/test/java/org/rocksdb/test/TestableEventListener.java +23 -0
  1232. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/ByteBufferAllocator.java +16 -0
  1233. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/BytewiseComparatorIntTest.java +267 -0
  1234. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/BytewiseComparatorTest.java +531 -0
  1235. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/CapturingWriteBatchHandler.java +190 -0
  1236. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/DirectByteBufferAllocator.java +18 -0
  1237. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/EnvironmentTest.java +304 -0
  1238. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/HeapByteBufferAllocator.java +18 -0
  1239. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/IntComparatorTest.java +266 -0
  1240. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/JNIComparatorTest.java +180 -0
  1241. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/ReverseBytewiseComparatorIntTest.java +270 -0
  1242. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/SizeUnitTest.java +27 -0
  1243. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/TestUtil.java +72 -0
  1244. package/vendor/rocksdb/java/src/test/java/org/rocksdb/util/WriteBatchGetter.java +139 -0
  1245. package/vendor/rocksdb/java/understanding_options.md +79 -0
  1246. package/vendor/rocksdb/logging/auto_roll_logger.cc +368 -0
  1247. package/vendor/rocksdb/logging/auto_roll_logger.h +166 -0
  1248. package/vendor/rocksdb/logging/auto_roll_logger_test.cc +731 -0
  1249. package/vendor/rocksdb/logging/env_logger.h +195 -0
  1250. package/vendor/rocksdb/logging/env_logger_test.cc +163 -0
  1251. package/vendor/rocksdb/logging/event_logger.cc +68 -0
  1252. package/vendor/rocksdb/logging/event_logger.h +202 -0
  1253. package/vendor/rocksdb/logging/event_logger_test.cc +45 -0
  1254. package/vendor/rocksdb/logging/log_buffer.cc +91 -0
  1255. package/vendor/rocksdb/logging/log_buffer.h +57 -0
  1256. package/vendor/rocksdb/logging/logging.h +62 -0
  1257. package/vendor/rocksdb/memory/allocator.h +58 -0
  1258. package/vendor/rocksdb/memory/arena.cc +170 -0
  1259. package/vendor/rocksdb/memory/arena.h +135 -0
  1260. package/vendor/rocksdb/memory/arena_test.cc +295 -0
  1261. package/vendor/rocksdb/memory/concurrent_arena.cc +45 -0
  1262. package/vendor/rocksdb/memory/concurrent_arena.h +215 -0
  1263. package/vendor/rocksdb/memory/jemalloc_nodump_allocator.cc +303 -0
  1264. package/vendor/rocksdb/memory/jemalloc_nodump_allocator.h +99 -0
  1265. package/vendor/rocksdb/memory/memkind_kmem_allocator.cc +44 -0
  1266. package/vendor/rocksdb/memory/memkind_kmem_allocator.h +43 -0
  1267. package/vendor/rocksdb/memory/memory_allocator.cc +80 -0
  1268. package/vendor/rocksdb/memory/memory_allocator_impl.h +47 -0
  1269. package/vendor/rocksdb/memory/memory_allocator_test.cc +236 -0
  1270. package/vendor/rocksdb/memory/memory_usage.h +38 -0
  1271. package/vendor/rocksdb/memtable/alloc_tracker.cc +63 -0
  1272. package/vendor/rocksdb/memtable/hash_linklist_rep.cc +924 -0
  1273. package/vendor/rocksdb/memtable/hash_skiplist_rep.cc +391 -0
  1274. package/vendor/rocksdb/memtable/inlineskiplist.h +1051 -0
  1275. package/vendor/rocksdb/memtable/inlineskiplist_test.cc +665 -0
  1276. package/vendor/rocksdb/memtable/memtablerep_bench.cc +687 -0
  1277. package/vendor/rocksdb/memtable/skiplist.h +498 -0
  1278. package/vendor/rocksdb/memtable/skiplist_test.cc +388 -0
  1279. package/vendor/rocksdb/memtable/skiplistrep.cc +368 -0
  1280. package/vendor/rocksdb/memtable/stl_wrappers.h +33 -0
  1281. package/vendor/rocksdb/memtable/vectorrep.cc +307 -0
  1282. package/vendor/rocksdb/memtable/write_buffer_manager.cc +185 -0
  1283. package/vendor/rocksdb/memtable/write_buffer_manager_test.cc +304 -0
  1284. package/vendor/rocksdb/microbench/CMakeLists.txt +17 -0
  1285. package/vendor/rocksdb/microbench/README.md +60 -0
  1286. package/vendor/rocksdb/microbench/db_basic_bench.cc +1583 -0
  1287. package/vendor/rocksdb/microbench/ribbon_bench.cc +155 -0
  1288. package/vendor/rocksdb/monitoring/file_read_sample.h +23 -0
  1289. package/vendor/rocksdb/monitoring/histogram.cc +270 -0
  1290. package/vendor/rocksdb/monitoring/histogram.h +143 -0
  1291. package/vendor/rocksdb/monitoring/histogram_test.cc +254 -0
  1292. package/vendor/rocksdb/monitoring/histogram_windowing.cc +194 -0
  1293. package/vendor/rocksdb/monitoring/histogram_windowing.h +84 -0
  1294. package/vendor/rocksdb/monitoring/in_memory_stats_history.cc +50 -0
  1295. package/vendor/rocksdb/monitoring/in_memory_stats_history.h +74 -0
  1296. package/vendor/rocksdb/monitoring/instrumented_mutex.cc +90 -0
  1297. package/vendor/rocksdb/monitoring/instrumented_mutex.h +126 -0
  1298. package/vendor/rocksdb/monitoring/iostats_context.cc +78 -0
  1299. package/vendor/rocksdb/monitoring/iostats_context_imp.h +62 -0
  1300. package/vendor/rocksdb/monitoring/iostats_context_test.cc +31 -0
  1301. package/vendor/rocksdb/monitoring/perf_context.cc +313 -0
  1302. package/vendor/rocksdb/monitoring/perf_context_imp.h +96 -0
  1303. package/vendor/rocksdb/monitoring/perf_level.cc +23 -0
  1304. package/vendor/rocksdb/monitoring/perf_level_imp.h +14 -0
  1305. package/vendor/rocksdb/monitoring/perf_step_timer.h +77 -0
  1306. package/vendor/rocksdb/monitoring/persistent_stats_history.cc +170 -0
  1307. package/vendor/rocksdb/monitoring/persistent_stats_history.h +83 -0
  1308. package/vendor/rocksdb/monitoring/statistics.cc +534 -0
  1309. package/vendor/rocksdb/monitoring/statistics_impl.h +144 -0
  1310. package/vendor/rocksdb/monitoring/statistics_test.cc +88 -0
  1311. package/vendor/rocksdb/monitoring/stats_history_test.cc +662 -0
  1312. package/vendor/rocksdb/monitoring/thread_status_impl.cc +163 -0
  1313. package/vendor/rocksdb/monitoring/thread_status_updater.cc +328 -0
  1314. package/vendor/rocksdb/monitoring/thread_status_updater.h +226 -0
  1315. package/vendor/rocksdb/monitoring/thread_status_updater_debug.cc +43 -0
  1316. package/vendor/rocksdb/monitoring/thread_status_util.cc +208 -0
  1317. package/vendor/rocksdb/monitoring/thread_status_util.h +139 -0
  1318. package/vendor/rocksdb/monitoring/thread_status_util_debug.cc +46 -0
  1319. package/vendor/rocksdb/options/cf_options.cc +1196 -0
  1320. package/vendor/rocksdb/options/cf_options.h +347 -0
  1321. package/vendor/rocksdb/options/configurable.cc +712 -0
  1322. package/vendor/rocksdb/options/configurable_helper.h +185 -0
  1323. package/vendor/rocksdb/options/configurable_test.cc +861 -0
  1324. package/vendor/rocksdb/options/configurable_test.h +116 -0
  1325. package/vendor/rocksdb/options/customizable.cc +133 -0
  1326. package/vendor/rocksdb/options/customizable_test.cc +2116 -0
  1327. package/vendor/rocksdb/options/db_options.cc +1079 -0
  1328. package/vendor/rocksdb/options/db_options.h +152 -0
  1329. package/vendor/rocksdb/options/options.cc +692 -0
  1330. package/vendor/rocksdb/options/options_helper.cc +1424 -0
  1331. package/vendor/rocksdb/options/options_helper.h +116 -0
  1332. package/vendor/rocksdb/options/options_parser.cc +736 -0
  1333. package/vendor/rocksdb/options/options_parser.h +149 -0
  1334. package/vendor/rocksdb/options/options_settable_test.cc +655 -0
  1335. package/vendor/rocksdb/options/options_test.cc +5060 -0
  1336. package/vendor/rocksdb/plugin/README.md +43 -0
  1337. package/vendor/rocksdb/port/README +10 -0
  1338. package/vendor/rocksdb/port/jemalloc_helper.h +107 -0
  1339. package/vendor/rocksdb/port/lang.h +97 -0
  1340. package/vendor/rocksdb/port/likely.h +18 -0
  1341. package/vendor/rocksdb/port/malloc.h +17 -0
  1342. package/vendor/rocksdb/port/mmap.cc +98 -0
  1343. package/vendor/rocksdb/port/mmap.h +70 -0
  1344. package/vendor/rocksdb/port/port.h +21 -0
  1345. package/vendor/rocksdb/port/port_dirent.h +44 -0
  1346. package/vendor/rocksdb/port/port_example.h +101 -0
  1347. package/vendor/rocksdb/port/port_posix.cc +300 -0
  1348. package/vendor/rocksdb/port/port_posix.h +243 -0
  1349. package/vendor/rocksdb/port/stack_trace.cc +336 -0
  1350. package/vendor/rocksdb/port/stack_trace.h +31 -0
  1351. package/vendor/rocksdb/port/sys_time.h +63 -0
  1352. package/vendor/rocksdb/port/util_logger.h +18 -0
  1353. package/vendor/rocksdb/port/win/env_default.cc +45 -0
  1354. package/vendor/rocksdb/port/win/env_win.cc +1437 -0
  1355. package/vendor/rocksdb/port/win/env_win.h +305 -0
  1356. package/vendor/rocksdb/port/win/io_win.cc +1101 -0
  1357. package/vendor/rocksdb/port/win/io_win.h +508 -0
  1358. package/vendor/rocksdb/port/win/port_win.cc +303 -0
  1359. package/vendor/rocksdb/port/win/port_win.h +379 -0
  1360. package/vendor/rocksdb/port/win/win_jemalloc.cc +80 -0
  1361. package/vendor/rocksdb/port/win/win_logger.cc +192 -0
  1362. package/vendor/rocksdb/port/win/win_logger.h +64 -0
  1363. package/vendor/rocksdb/port/win/win_thread.cc +170 -0
  1364. package/vendor/rocksdb/port/win/win_thread.h +117 -0
  1365. package/vendor/rocksdb/port/win/xpress_win.cc +210 -0
  1366. package/vendor/rocksdb/port/win/xpress_win.h +26 -0
  1367. package/vendor/rocksdb/port/xpress.h +17 -0
  1368. package/vendor/rocksdb/rocksdb.pc.in +10 -0
  1369. package/vendor/rocksdb/src.mk +713 -0
  1370. package/vendor/rocksdb/table/adaptive/adaptive_table_factory.cc +125 -0
  1371. package/vendor/rocksdb/table/adaptive/adaptive_table_factory.h +56 -0
  1372. package/vendor/rocksdb/table/block_based/binary_search_index_reader.cc +73 -0
  1373. package/vendor/rocksdb/table/block_based/binary_search_index_reader.h +48 -0
  1374. package/vendor/rocksdb/table/block_based/block.cc +1291 -0
  1375. package/vendor/rocksdb/table/block_based/block.h +921 -0
  1376. package/vendor/rocksdb/table/block_based/block_based_table_builder.cc +2027 -0
  1377. package/vendor/rocksdb/table/block_based/block_based_table_builder.h +209 -0
  1378. package/vendor/rocksdb/table/block_based/block_based_table_factory.cc +962 -0
  1379. package/vendor/rocksdb/table/block_based/block_based_table_factory.h +102 -0
  1380. package/vendor/rocksdb/table/block_based/block_based_table_iterator.cc +500 -0
  1381. package/vendor/rocksdb/table/block_based/block_based_table_iterator.h +310 -0
  1382. package/vendor/rocksdb/table/block_based/block_based_table_reader.cc +3043 -0
  1383. package/vendor/rocksdb/table/block_based/block_based_table_reader.h +745 -0
  1384. package/vendor/rocksdb/table/block_based/block_based_table_reader_impl.h +203 -0
  1385. package/vendor/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +758 -0
  1386. package/vendor/rocksdb/table/block_based/block_based_table_reader_test.cc +567 -0
  1387. package/vendor/rocksdb/table/block_based/block_builder.cc +234 -0
  1388. package/vendor/rocksdb/table/block_based/block_builder.h +104 -0
  1389. package/vendor/rocksdb/table/block_based/block_cache.cc +106 -0
  1390. package/vendor/rocksdb/table/block_based/block_cache.h +140 -0
  1391. package/vendor/rocksdb/table/block_based/block_prefetcher.cc +120 -0
  1392. package/vendor/rocksdb/table/block_based/block_prefetcher.h +72 -0
  1393. package/vendor/rocksdb/table/block_based/block_prefix_index.cc +226 -0
  1394. package/vendor/rocksdb/table/block_based/block_prefix_index.h +70 -0
  1395. package/vendor/rocksdb/table/block_based/block_test.cc +1543 -0
  1396. package/vendor/rocksdb/table/block_based/block_type.h +34 -0
  1397. package/vendor/rocksdb/table/block_based/cachable_entry.h +244 -0
  1398. package/vendor/rocksdb/table/block_based/data_block_footer.cc +59 -0
  1399. package/vendor/rocksdb/table/block_based/data_block_footer.h +25 -0
  1400. package/vendor/rocksdb/table/block_based/data_block_hash_index.cc +94 -0
  1401. package/vendor/rocksdb/table/block_based/data_block_hash_index.h +137 -0
  1402. package/vendor/rocksdb/table/block_based/data_block_hash_index_test.cc +718 -0
  1403. package/vendor/rocksdb/table/block_based/filter_block.h +183 -0
  1404. package/vendor/rocksdb/table/block_based/filter_block_reader_common.cc +163 -0
  1405. package/vendor/rocksdb/table/block_based/filter_block_reader_common.h +76 -0
  1406. package/vendor/rocksdb/table/block_based/filter_policy.cc +1966 -0
  1407. package/vendor/rocksdb/table/block_based/filter_policy_internal.h +340 -0
  1408. package/vendor/rocksdb/table/block_based/flush_block_policy.cc +132 -0
  1409. package/vendor/rocksdb/table/block_based/flush_block_policy_impl.h +40 -0
  1410. package/vendor/rocksdb/table/block_based/full_filter_block.cc +290 -0
  1411. package/vendor/rocksdb/table/block_based/full_filter_block.h +147 -0
  1412. package/vendor/rocksdb/table/block_based/full_filter_block_test.cc +323 -0
  1413. package/vendor/rocksdb/table/block_based/hash_index_reader.cc +147 -0
  1414. package/vendor/rocksdb/table/block_based/hash_index_reader.h +49 -0
  1415. package/vendor/rocksdb/table/block_based/index_builder.cc +282 -0
  1416. package/vendor/rocksdb/table/block_based/index_builder.h +455 -0
  1417. package/vendor/rocksdb/table/block_based/index_reader_common.cc +57 -0
  1418. package/vendor/rocksdb/table/block_based/index_reader_common.h +85 -0
  1419. package/vendor/rocksdb/table/block_based/mock_block_based_table.h +62 -0
  1420. package/vendor/rocksdb/table/block_based/parsed_full_filter_block.cc +23 -0
  1421. package/vendor/rocksdb/table/block_based/parsed_full_filter_block.h +47 -0
  1422. package/vendor/rocksdb/table/block_based/partitioned_filter_block.cc +554 -0
  1423. package/vendor/rocksdb/table/block_based/partitioned_filter_block.h +182 -0
  1424. package/vendor/rocksdb/table/block_based/partitioned_filter_block_test.cc +436 -0
  1425. package/vendor/rocksdb/table/block_based/partitioned_index_iterator.cc +163 -0
  1426. package/vendor/rocksdb/table/block_based/partitioned_index_iterator.h +160 -0
  1427. package/vendor/rocksdb/table/block_based/partitioned_index_reader.cc +224 -0
  1428. package/vendor/rocksdb/table/block_based/partitioned_index_reader.h +56 -0
  1429. package/vendor/rocksdb/table/block_based/reader_common.cc +52 -0
  1430. package/vendor/rocksdb/table/block_based/reader_common.h +34 -0
  1431. package/vendor/rocksdb/table/block_based/uncompression_dict_reader.cc +126 -0
  1432. package/vendor/rocksdb/table/block_based/uncompression_dict_reader.h +61 -0
  1433. package/vendor/rocksdb/table/block_fetcher.cc +405 -0
  1434. package/vendor/rocksdb/table/block_fetcher.h +142 -0
  1435. package/vendor/rocksdb/table/block_fetcher_test.cc +520 -0
  1436. package/vendor/rocksdb/table/cleanable_test.cc +390 -0
  1437. package/vendor/rocksdb/table/compaction_merging_iterator.cc +370 -0
  1438. package/vendor/rocksdb/table/compaction_merging_iterator.h +44 -0
  1439. package/vendor/rocksdb/table/cuckoo/cuckoo_table_builder.cc +551 -0
  1440. package/vendor/rocksdb/table/cuckoo/cuckoo_table_builder.h +136 -0
  1441. package/vendor/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +631 -0
  1442. package/vendor/rocksdb/table/cuckoo/cuckoo_table_factory.cc +100 -0
  1443. package/vendor/rocksdb/table/cuckoo/cuckoo_table_factory.h +80 -0
  1444. package/vendor/rocksdb/table/cuckoo/cuckoo_table_reader.cc +412 -0
  1445. package/vendor/rocksdb/table/cuckoo/cuckoo_table_reader.h +100 -0
  1446. package/vendor/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +574 -0
  1447. package/vendor/rocksdb/table/format.cc +573 -0
  1448. package/vendor/rocksdb/table/format.h +378 -0
  1449. package/vendor/rocksdb/table/get_context.cc +616 -0
  1450. package/vendor/rocksdb/table/get_context.h +245 -0
  1451. package/vendor/rocksdb/table/internal_iterator.h +224 -0
  1452. package/vendor/rocksdb/table/iter_heap.h +44 -0
  1453. package/vendor/rocksdb/table/iterator.cc +130 -0
  1454. package/vendor/rocksdb/table/iterator_wrapper.h +190 -0
  1455. package/vendor/rocksdb/table/merger_test.cc +182 -0
  1456. package/vendor/rocksdb/table/merging_iterator.cc +1725 -0
  1457. package/vendor/rocksdb/table/merging_iterator.h +97 -0
  1458. package/vendor/rocksdb/table/meta_blocks.cc +564 -0
  1459. package/vendor/rocksdb/table/meta_blocks.h +172 -0
  1460. package/vendor/rocksdb/table/mock_table.cc +346 -0
  1461. package/vendor/rocksdb/table/mock_table.h +94 -0
  1462. package/vendor/rocksdb/table/multiget_context.h +405 -0
  1463. package/vendor/rocksdb/table/persistent_cache_helper.cc +111 -0
  1464. package/vendor/rocksdb/table/persistent_cache_helper.h +46 -0
  1465. package/vendor/rocksdb/table/persistent_cache_options.h +34 -0
  1466. package/vendor/rocksdb/table/plain/plain_table_bloom.cc +78 -0
  1467. package/vendor/rocksdb/table/plain/plain_table_bloom.h +132 -0
  1468. package/vendor/rocksdb/table/plain/plain_table_builder.cc +335 -0
  1469. package/vendor/rocksdb/table/plain/plain_table_builder.h +152 -0
  1470. package/vendor/rocksdb/table/plain/plain_table_factory.cc +296 -0
  1471. package/vendor/rocksdb/table/plain/plain_table_factory.h +180 -0
  1472. package/vendor/rocksdb/table/plain/plain_table_index.cc +211 -0
  1473. package/vendor/rocksdb/table/plain/plain_table_index.h +246 -0
  1474. package/vendor/rocksdb/table/plain/plain_table_key_coding.cc +507 -0
  1475. package/vendor/rocksdb/table/plain/plain_table_key_coding.h +199 -0
  1476. package/vendor/rocksdb/table/plain/plain_table_reader.cc +771 -0
  1477. package/vendor/rocksdb/table/plain/plain_table_reader.h +243 -0
  1478. package/vendor/rocksdb/table/scoped_arena_iterator.h +57 -0
  1479. package/vendor/rocksdb/table/sst_file_dumper.cc +520 -0
  1480. package/vendor/rocksdb/table/sst_file_dumper.h +99 -0
  1481. package/vendor/rocksdb/table/sst_file_reader.cc +101 -0
  1482. package/vendor/rocksdb/table/sst_file_reader_test.cc +423 -0
  1483. package/vendor/rocksdb/table/sst_file_writer.cc +436 -0
  1484. package/vendor/rocksdb/table/sst_file_writer_collectors.h +95 -0
  1485. package/vendor/rocksdb/table/table_builder.h +228 -0
  1486. package/vendor/rocksdb/table/table_factory.cc +52 -0
  1487. package/vendor/rocksdb/table/table_properties.cc +351 -0
  1488. package/vendor/rocksdb/table/table_properties_internal.h +14 -0
  1489. package/vendor/rocksdb/table/table_reader.h +187 -0
  1490. package/vendor/rocksdb/table/table_reader_bench.cc +339 -0
  1491. package/vendor/rocksdb/table/table_test.cc +5882 -0
  1492. package/vendor/rocksdb/table/two_level_iterator.cc +220 -0
  1493. package/vendor/rocksdb/table/two_level_iterator.h +43 -0
  1494. package/vendor/rocksdb/table/unique_id.cc +223 -0
  1495. package/vendor/rocksdb/table/unique_id_impl.h +93 -0
  1496. package/vendor/rocksdb/test_util/mock_time_env.cc +38 -0
  1497. package/vendor/rocksdb/test_util/mock_time_env.h +78 -0
  1498. package/vendor/rocksdb/test_util/secondary_cache_test_util.cc +96 -0
  1499. package/vendor/rocksdb/test_util/secondary_cache_test_util.h +119 -0
  1500. package/vendor/rocksdb/test_util/sync_point.cc +82 -0
  1501. package/vendor/rocksdb/test_util/sync_point.h +180 -0
  1502. package/vendor/rocksdb/test_util/sync_point_impl.cc +152 -0
  1503. package/vendor/rocksdb/test_util/sync_point_impl.h +96 -0
  1504. package/vendor/rocksdb/test_util/testharness.cc +107 -0
  1505. package/vendor/rocksdb/test_util/testharness.h +124 -0
  1506. package/vendor/rocksdb/test_util/testutil.cc +722 -0
  1507. package/vendor/rocksdb/test_util/testutil.h +860 -0
  1508. package/vendor/rocksdb/test_util/testutil_test.cc +43 -0
  1509. package/vendor/rocksdb/test_util/transaction_test_util.cc +400 -0
  1510. package/vendor/rocksdb/test_util/transaction_test_util.h +147 -0
  1511. package/vendor/rocksdb/third-party/gcc/ppc-asm.h +390 -0
  1512. package/vendor/rocksdb/third-party/gtest-1.8.1/fused-src/gtest/CMakeLists.txt +4 -0
  1513. package/vendor/rocksdb/third-party/gtest-1.8.1/fused-src/gtest/gtest-all.cc +11394 -0
  1514. package/vendor/rocksdb/third-party/gtest-1.8.1/fused-src/gtest/gtest.h +22115 -0
  1515. package/vendor/rocksdb/third-party/gtest-1.8.1/fused-src/gtest/gtest_main.cc +37 -0
  1516. package/vendor/rocksdb/thirdparty.inc +268 -0
  1517. package/vendor/rocksdb/tools/CMakeLists.txt +30 -0
  1518. package/vendor/rocksdb/tools/Dockerfile +5 -0
  1519. package/vendor/rocksdb/tools/advisor/README.md +96 -0
  1520. package/vendor/rocksdb/tools/advisor/advisor/__init__.py +0 -0
  1521. package/vendor/rocksdb/tools/advisor/advisor/bench_runner.py +39 -0
  1522. package/vendor/rocksdb/tools/advisor/advisor/config_optimizer_example.py +140 -0
  1523. package/vendor/rocksdb/tools/advisor/advisor/db_bench_runner.py +237 -0
  1524. package/vendor/rocksdb/tools/advisor/advisor/db_config_optimizer.py +293 -0
  1525. package/vendor/rocksdb/tools/advisor/advisor/db_log_parser.py +134 -0
  1526. package/vendor/rocksdb/tools/advisor/advisor/db_options_parser.py +348 -0
  1527. package/vendor/rocksdb/tools/advisor/advisor/db_stats_fetcher.py +346 -0
  1528. package/vendor/rocksdb/tools/advisor/advisor/db_timeseries_parser.py +203 -0
  1529. package/vendor/rocksdb/tools/advisor/advisor/ini_parser.py +76 -0
  1530. package/vendor/rocksdb/tools/advisor/advisor/rule_parser.py +510 -0
  1531. package/vendor/rocksdb/tools/advisor/advisor/rule_parser_example.py +98 -0
  1532. package/vendor/rocksdb/tools/advisor/advisor/rules.ini +214 -0
  1533. package/vendor/rocksdb/tools/advisor/test/__init__.py +0 -0
  1534. package/vendor/rocksdb/tools/advisor/test/input_files/LOG-0 +30 -0
  1535. package/vendor/rocksdb/tools/advisor/test/input_files/LOG-1 +25 -0
  1536. package/vendor/rocksdb/tools/advisor/test/input_files/OPTIONS-000005 +49 -0
  1537. package/vendor/rocksdb/tools/advisor/test/input_files/log_stats_parser_keys_ts +3 -0
  1538. package/vendor/rocksdb/tools/advisor/test/input_files/rules_err1.ini +56 -0
  1539. package/vendor/rocksdb/tools/advisor/test/input_files/rules_err2.ini +15 -0
  1540. package/vendor/rocksdb/tools/advisor/test/input_files/rules_err3.ini +15 -0
  1541. package/vendor/rocksdb/tools/advisor/test/input_files/rules_err4.ini +15 -0
  1542. package/vendor/rocksdb/tools/advisor/test/input_files/test_rules.ini +47 -0
  1543. package/vendor/rocksdb/tools/advisor/test/input_files/triggered_rules.ini +83 -0
  1544. package/vendor/rocksdb/tools/advisor/test/test_db_bench_runner.py +141 -0
  1545. package/vendor/rocksdb/tools/advisor/test/test_db_log_parser.py +96 -0
  1546. package/vendor/rocksdb/tools/advisor/test/test_db_options_parser.py +214 -0
  1547. package/vendor/rocksdb/tools/advisor/test/test_db_stats_fetcher.py +121 -0
  1548. package/vendor/rocksdb/tools/advisor/test/test_rule_parser.py +226 -0
  1549. package/vendor/rocksdb/tools/analyze_txn_stress_test.sh +77 -0
  1550. package/vendor/rocksdb/tools/auto_sanity_test.sh +93 -0
  1551. package/vendor/rocksdb/tools/backup_db.sh +15 -0
  1552. package/vendor/rocksdb/tools/benchmark.sh +1173 -0
  1553. package/vendor/rocksdb/tools/benchmark_ci.py +182 -0
  1554. package/vendor/rocksdb/tools/benchmark_compare.sh +342 -0
  1555. package/vendor/rocksdb/tools/benchmark_leveldb.sh +187 -0
  1556. package/vendor/rocksdb/tools/blob_dump.cc +103 -0
  1557. package/vendor/rocksdb/tools/block_cache_analyzer/__init__.py +2 -0
  1558. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +2000 -0
  1559. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_pysim.sh +156 -0
  1560. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +734 -0
  1561. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +2314 -0
  1562. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +397 -0
  1563. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +729 -0
  1564. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +791 -0
  1565. package/vendor/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc +17 -0
  1566. package/vendor/rocksdb/tools/check_all_python.py +22 -0
  1567. package/vendor/rocksdb/tools/check_format_compatible.sh +379 -0
  1568. package/vendor/rocksdb/tools/db_bench.cc +21 -0
  1569. package/vendor/rocksdb/tools/db_bench_tool.cc +8604 -0
  1570. package/vendor/rocksdb/tools/db_bench_tool_test.cc +342 -0
  1571. package/vendor/rocksdb/tools/db_crashtest.py +1018 -0
  1572. package/vendor/rocksdb/tools/db_repl_stress.cc +132 -0
  1573. package/vendor/rocksdb/tools/db_sanity_test.cc +296 -0
  1574. package/vendor/rocksdb/tools/dbench_monitor +102 -0
  1575. package/vendor/rocksdb/tools/dump/db_dump_tool.cc +258 -0
  1576. package/vendor/rocksdb/tools/dump/rocksdb_dump.cc +60 -0
  1577. package/vendor/rocksdb/tools/dump/rocksdb_undump.cc +59 -0
  1578. package/vendor/rocksdb/tools/generate_random_db.sh +31 -0
  1579. package/vendor/rocksdb/tools/ingest_external_sst.sh +18 -0
  1580. package/vendor/rocksdb/tools/io_tracer_parser.cc +17 -0
  1581. package/vendor/rocksdb/tools/io_tracer_parser_test.cc +182 -0
  1582. package/vendor/rocksdb/tools/io_tracer_parser_tool.cc +142 -0
  1583. package/vendor/rocksdb/tools/io_tracer_parser_tool.h +38 -0
  1584. package/vendor/rocksdb/tools/ldb.cc +13 -0
  1585. package/vendor/rocksdb/tools/ldb_cmd.cc +4263 -0
  1586. package/vendor/rocksdb/tools/ldb_cmd_impl.h +744 -0
  1587. package/vendor/rocksdb/tools/ldb_cmd_test.cc +1216 -0
  1588. package/vendor/rocksdb/tools/ldb_test.py +955 -0
  1589. package/vendor/rocksdb/tools/ldb_tool.cc +182 -0
  1590. package/vendor/rocksdb/tools/pflag +217 -0
  1591. package/vendor/rocksdb/tools/reduce_levels_test.cc +212 -0
  1592. package/vendor/rocksdb/tools/regression_test.sh +525 -0
  1593. package/vendor/rocksdb/tools/restore_db.sh +15 -0
  1594. package/vendor/rocksdb/tools/rocksdb_dump_test.sh +9 -0
  1595. package/vendor/rocksdb/tools/run_blob_bench.sh +223 -0
  1596. package/vendor/rocksdb/tools/run_flash_bench.sh +359 -0
  1597. package/vendor/rocksdb/tools/run_leveldb.sh +175 -0
  1598. package/vendor/rocksdb/tools/sample-dump.dmp +0 -0
  1599. package/vendor/rocksdb/tools/simulated_hybrid_file_system.cc +243 -0
  1600. package/vendor/rocksdb/tools/simulated_hybrid_file_system.h +124 -0
  1601. package/vendor/rocksdb/tools/sst_dump.cc +12 -0
  1602. package/vendor/rocksdb/tools/sst_dump_test.cc +471 -0
  1603. package/vendor/rocksdb/tools/sst_dump_tool.cc +582 -0
  1604. package/vendor/rocksdb/tools/trace_analyzer.cc +17 -0
  1605. package/vendor/rocksdb/tools/trace_analyzer_test.cc +880 -0
  1606. package/vendor/rocksdb/tools/trace_analyzer_tool.cc +1929 -0
  1607. package/vendor/rocksdb/tools/trace_analyzer_tool.h +329 -0
  1608. package/vendor/rocksdb/tools/verify_random_db.sh +41 -0
  1609. package/vendor/rocksdb/tools/write_external_sst.sh +26 -0
  1610. package/vendor/rocksdb/tools/write_stress.cc +305 -0
  1611. package/vendor/rocksdb/tools/write_stress_runner.py +83 -0
  1612. package/vendor/rocksdb/trace_replay/block_cache_tracer.cc +509 -0
  1613. package/vendor/rocksdb/trace_replay/block_cache_tracer.h +239 -0
  1614. package/vendor/rocksdb/trace_replay/block_cache_tracer_test.cc +421 -0
  1615. package/vendor/rocksdb/trace_replay/io_tracer.cc +303 -0
  1616. package/vendor/rocksdb/trace_replay/io_tracer.h +185 -0
  1617. package/vendor/rocksdb/trace_replay/io_tracer_test.cc +353 -0
  1618. package/vendor/rocksdb/trace_replay/trace_record.cc +206 -0
  1619. package/vendor/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  1620. package/vendor/rocksdb/trace_replay/trace_record_handler.h +46 -0
  1621. package/vendor/rocksdb/trace_replay/trace_record_result.cc +146 -0
  1622. package/vendor/rocksdb/trace_replay/trace_replay.cc +622 -0
  1623. package/vendor/rocksdb/trace_replay/trace_replay.h +183 -0
  1624. package/vendor/rocksdb/util/aligned_buffer.h +235 -0
  1625. package/vendor/rocksdb/util/async_file_reader.cc +81 -0
  1626. package/vendor/rocksdb/util/async_file_reader.h +144 -0
  1627. package/vendor/rocksdb/util/autovector.h +393 -0
  1628. package/vendor/rocksdb/util/autovector_test.cc +324 -0
  1629. package/vendor/rocksdb/util/bloom_impl.h +489 -0
  1630. package/vendor/rocksdb/util/bloom_test.cc +1175 -0
  1631. package/vendor/rocksdb/util/build_version.cc.in +79 -0
  1632. package/vendor/rocksdb/util/cast_util.h +42 -0
  1633. package/vendor/rocksdb/util/channel.h +69 -0
  1634. package/vendor/rocksdb/util/cleanable.cc +181 -0
  1635. package/vendor/rocksdb/util/coding.cc +90 -0
  1636. package/vendor/rocksdb/util/coding.h +389 -0
  1637. package/vendor/rocksdb/util/coding_lean.h +101 -0
  1638. package/vendor/rocksdb/util/coding_test.cc +217 -0
  1639. package/vendor/rocksdb/util/compaction_job_stats_impl.cc +92 -0
  1640. package/vendor/rocksdb/util/comparator.cc +383 -0
  1641. package/vendor/rocksdb/util/compression.cc +122 -0
  1642. package/vendor/rocksdb/util/compression.h +1795 -0
  1643. package/vendor/rocksdb/util/compression_context_cache.cc +106 -0
  1644. package/vendor/rocksdb/util/compression_context_cache.h +47 -0
  1645. package/vendor/rocksdb/util/concurrent_task_limiter_impl.cc +64 -0
  1646. package/vendor/rocksdb/util/concurrent_task_limiter_impl.h +67 -0
  1647. package/vendor/rocksdb/util/core_local.h +84 -0
  1648. package/vendor/rocksdb/util/coro_utils.h +112 -0
  1649. package/vendor/rocksdb/util/crc32c.cc +1292 -0
  1650. package/vendor/rocksdb/util/crc32c.h +56 -0
  1651. package/vendor/rocksdb/util/crc32c_arm64.cc +213 -0
  1652. package/vendor/rocksdb/util/crc32c_arm64.h +52 -0
  1653. package/vendor/rocksdb/util/crc32c_ppc.c +94 -0
  1654. package/vendor/rocksdb/util/crc32c_ppc.h +22 -0
  1655. package/vendor/rocksdb/util/crc32c_ppc_asm.S +756 -0
  1656. package/vendor/rocksdb/util/crc32c_ppc_constants.h +900 -0
  1657. package/vendor/rocksdb/util/crc32c_test.cc +213 -0
  1658. package/vendor/rocksdb/util/data_structure.cc +18 -0
  1659. package/vendor/rocksdb/util/defer.h +82 -0
  1660. package/vendor/rocksdb/util/defer_test.cc +51 -0
  1661. package/vendor/rocksdb/util/distributed_mutex.h +50 -0
  1662. package/vendor/rocksdb/util/duplicate_detector.h +69 -0
  1663. package/vendor/rocksdb/util/dynamic_bloom.cc +70 -0
  1664. package/vendor/rocksdb/util/dynamic_bloom.h +214 -0
  1665. package/vendor/rocksdb/util/dynamic_bloom_test.cc +325 -0
  1666. package/vendor/rocksdb/util/fastrange.h +114 -0
  1667. package/vendor/rocksdb/util/file_checksum_helper.cc +170 -0
  1668. package/vendor/rocksdb/util/file_checksum_helper.h +101 -0
  1669. package/vendor/rocksdb/util/file_reader_writer_test.cc +1058 -0
  1670. package/vendor/rocksdb/util/filelock_test.cc +148 -0
  1671. package/vendor/rocksdb/util/filter_bench.cc +840 -0
  1672. package/vendor/rocksdb/util/gflags_compat.h +29 -0
  1673. package/vendor/rocksdb/util/hash.cc +201 -0
  1674. package/vendor/rocksdb/util/hash.h +137 -0
  1675. package/vendor/rocksdb/util/hash128.h +26 -0
  1676. package/vendor/rocksdb/util/hash_containers.h +51 -0
  1677. package/vendor/rocksdb/util/hash_map.h +67 -0
  1678. package/vendor/rocksdb/util/hash_test.cc +853 -0
  1679. package/vendor/rocksdb/util/heap.h +174 -0
  1680. package/vendor/rocksdb/util/heap_test.cc +131 -0
  1681. package/vendor/rocksdb/util/kv_map.h +33 -0
  1682. package/vendor/rocksdb/util/log_write_bench.cc +88 -0
  1683. package/vendor/rocksdb/util/math.h +299 -0
  1684. package/vendor/rocksdb/util/math128.h +316 -0
  1685. package/vendor/rocksdb/util/murmurhash.cc +196 -0
  1686. package/vendor/rocksdb/util/murmurhash.h +43 -0
  1687. package/vendor/rocksdb/util/mutexlock.h +181 -0
  1688. package/vendor/rocksdb/util/ppc-opcode.h +27 -0
  1689. package/vendor/rocksdb/util/random.cc +63 -0
  1690. package/vendor/rocksdb/util/random.h +190 -0
  1691. package/vendor/rocksdb/util/random_test.cc +107 -0
  1692. package/vendor/rocksdb/util/rate_limiter.cc +376 -0
  1693. package/vendor/rocksdb/util/rate_limiter_impl.h +146 -0
  1694. package/vendor/rocksdb/util/rate_limiter_test.cc +520 -0
  1695. package/vendor/rocksdb/util/repeatable_thread.h +149 -0
  1696. package/vendor/rocksdb/util/repeatable_thread_test.cc +111 -0
  1697. package/vendor/rocksdb/util/ribbon_alg.h +1225 -0
  1698. package/vendor/rocksdb/util/ribbon_config.cc +506 -0
  1699. package/vendor/rocksdb/util/ribbon_config.h +182 -0
  1700. package/vendor/rocksdb/util/ribbon_impl.h +1137 -0
  1701. package/vendor/rocksdb/util/ribbon_test.cc +1308 -0
  1702. package/vendor/rocksdb/util/set_comparator.h +24 -0
  1703. package/vendor/rocksdb/util/single_thread_executor.h +56 -0
  1704. package/vendor/rocksdb/util/slice.cc +367 -0
  1705. package/vendor/rocksdb/util/slice_test.cc +252 -0
  1706. package/vendor/rocksdb/util/slice_transform_test.cc +159 -0
  1707. package/vendor/rocksdb/util/status.cc +162 -0
  1708. package/vendor/rocksdb/util/stderr_logger.cc +30 -0
  1709. package/vendor/rocksdb/util/stderr_logger.h +31 -0
  1710. package/vendor/rocksdb/util/stop_watch.h +136 -0
  1711. package/vendor/rocksdb/util/string_util.cc +502 -0
  1712. package/vendor/rocksdb/util/string_util.h +175 -0
  1713. package/vendor/rocksdb/util/thread_guard.h +41 -0
  1714. package/vendor/rocksdb/util/thread_list_test.cc +362 -0
  1715. package/vendor/rocksdb/util/thread_local.cc +521 -0
  1716. package/vendor/rocksdb/util/thread_local.h +100 -0
  1717. package/vendor/rocksdb/util/thread_local_test.cc +578 -0
  1718. package/vendor/rocksdb/util/thread_operation.h +113 -0
  1719. package/vendor/rocksdb/util/threadpool_imp.cc +551 -0
  1720. package/vendor/rocksdb/util/threadpool_imp.h +120 -0
  1721. package/vendor/rocksdb/util/timer.h +340 -0
  1722. package/vendor/rocksdb/util/timer_queue.h +231 -0
  1723. package/vendor/rocksdb/util/timer_queue_test.cc +73 -0
  1724. package/vendor/rocksdb/util/timer_test.cc +402 -0
  1725. package/vendor/rocksdb/util/udt_util.h +77 -0
  1726. package/vendor/rocksdb/util/user_comparator_wrapper.h +64 -0
  1727. package/vendor/rocksdb/util/vector_iterator.h +118 -0
  1728. package/vendor/rocksdb/util/work_queue.h +150 -0
  1729. package/vendor/rocksdb/util/work_queue_test.cc +272 -0
  1730. package/vendor/rocksdb/util/xxhash.cc +48 -0
  1731. package/vendor/rocksdb/util/xxhash.h +6360 -0
  1732. package/vendor/rocksdb/util/xxph3.h +1764 -0
  1733. package/vendor/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  1734. package/vendor/rocksdb/utilities/agg_merge/agg_merge_impl.h +49 -0
  1735. package/vendor/rocksdb/utilities/agg_merge/agg_merge_test.cc +135 -0
  1736. package/vendor/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  1737. package/vendor/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  1738. package/vendor/rocksdb/utilities/backup/backup_engine.cc +3355 -0
  1739. package/vendor/rocksdb/utilities/backup/backup_engine_impl.h +34 -0
  1740. package/vendor/rocksdb/utilities/backup/backup_engine_test.cc +4414 -0
  1741. package/vendor/rocksdb/utilities/blob_db/blob_compaction_filter.cc +488 -0
  1742. package/vendor/rocksdb/utilities/blob_db/blob_compaction_filter.h +202 -0
  1743. package/vendor/rocksdb/utilities/blob_db/blob_db.cc +112 -0
  1744. package/vendor/rocksdb/utilities/blob_db/blob_db.h +264 -0
  1745. package/vendor/rocksdb/utilities/blob_db/blob_db_gc_stats.h +54 -0
  1746. package/vendor/rocksdb/utilities/blob_db/blob_db_impl.cc +2185 -0
  1747. package/vendor/rocksdb/utilities/blob_db/blob_db_impl.h +501 -0
  1748. package/vendor/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +111 -0
  1749. package/vendor/rocksdb/utilities/blob_db/blob_db_iterator.h +148 -0
  1750. package/vendor/rocksdb/utilities/blob_db/blob_db_listener.h +69 -0
  1751. package/vendor/rocksdb/utilities/blob_db/blob_db_test.cc +2430 -0
  1752. package/vendor/rocksdb/utilities/blob_db/blob_dump_tool.cc +280 -0
  1753. package/vendor/rocksdb/utilities/blob_db/blob_dump_tool.h +56 -0
  1754. package/vendor/rocksdb/utilities/blob_db/blob_file.cc +316 -0
  1755. package/vendor/rocksdb/utilities/blob_db/blob_file.h +244 -0
  1756. package/vendor/rocksdb/utilities/cache_dump_load.cc +67 -0
  1757. package/vendor/rocksdb/utilities/cache_dump_load_impl.cc +369 -0
  1758. package/vendor/rocksdb/utilities/cache_dump_load_impl.h +356 -0
  1759. package/vendor/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +106 -0
  1760. package/vendor/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +57 -0
  1761. package/vendor/rocksdb/utilities/cassandra/cassandra_format_test.cc +377 -0
  1762. package/vendor/rocksdb/utilities/cassandra/cassandra_functional_test.cc +444 -0
  1763. package/vendor/rocksdb/utilities/cassandra/cassandra_options.h +41 -0
  1764. package/vendor/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +98 -0
  1765. package/vendor/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +164 -0
  1766. package/vendor/rocksdb/utilities/cassandra/format.cc +367 -0
  1767. package/vendor/rocksdb/utilities/cassandra/format.h +183 -0
  1768. package/vendor/rocksdb/utilities/cassandra/merge_operator.cc +80 -0
  1769. package/vendor/rocksdb/utilities/cassandra/merge_operator.h +44 -0
  1770. package/vendor/rocksdb/utilities/cassandra/serialize.h +81 -0
  1771. package/vendor/rocksdb/utilities/cassandra/test_utils.cc +69 -0
  1772. package/vendor/rocksdb/utilities/cassandra/test_utils.h +42 -0
  1773. package/vendor/rocksdb/utilities/checkpoint/checkpoint_impl.cc +470 -0
  1774. package/vendor/rocksdb/utilities/checkpoint/checkpoint_impl.h +64 -0
  1775. package/vendor/rocksdb/utilities/checkpoint/checkpoint_test.cc +988 -0
  1776. package/vendor/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +41 -0
  1777. package/vendor/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +24 -0
  1778. package/vendor/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +26 -0
  1779. package/vendor/rocksdb/utilities/compaction_filters.cc +52 -0
  1780. package/vendor/rocksdb/utilities/convenience/info_log_finder.cc +26 -0
  1781. package/vendor/rocksdb/utilities/counted_fs.cc +379 -0
  1782. package/vendor/rocksdb/utilities/counted_fs.h +158 -0
  1783. package/vendor/rocksdb/utilities/debug.cc +118 -0
  1784. package/vendor/rocksdb/utilities/env_mirror.cc +273 -0
  1785. package/vendor/rocksdb/utilities/env_mirror_test.cc +216 -0
  1786. package/vendor/rocksdb/utilities/env_timed.cc +181 -0
  1787. package/vendor/rocksdb/utilities/env_timed.h +95 -0
  1788. package/vendor/rocksdb/utilities/env_timed_test.cc +34 -0
  1789. package/vendor/rocksdb/utilities/fault_injection_env.cc +555 -0
  1790. package/vendor/rocksdb/utilities/fault_injection_env.h +258 -0
  1791. package/vendor/rocksdb/utilities/fault_injection_fs.cc +1071 -0
  1792. package/vendor/rocksdb/utilities/fault_injection_fs.h +593 -0
  1793. package/vendor/rocksdb/utilities/fault_injection_secondary_cache.cc +136 -0
  1794. package/vendor/rocksdb/utilities/fault_injection_secondary_cache.h +109 -0
  1795. package/vendor/rocksdb/utilities/leveldb_options/leveldb_options.cc +57 -0
  1796. package/vendor/rocksdb/utilities/memory/memory_test.cc +269 -0
  1797. package/vendor/rocksdb/utilities/memory/memory_util.cc +50 -0
  1798. package/vendor/rocksdb/utilities/memory_allocators.h +103 -0
  1799. package/vendor/rocksdb/utilities/merge_operators/bytesxor.cc +57 -0
  1800. package/vendor/rocksdb/utilities/merge_operators/bytesxor.h +40 -0
  1801. package/vendor/rocksdb/utilities/merge_operators/max.cc +64 -0
  1802. package/vendor/rocksdb/utilities/merge_operators/max_operator.h +35 -0
  1803. package/vendor/rocksdb/utilities/merge_operators/put.cc +74 -0
  1804. package/vendor/rocksdb/utilities/merge_operators/put_operator.h +56 -0
  1805. package/vendor/rocksdb/utilities/merge_operators/sortlist.cc +95 -0
  1806. package/vendor/rocksdb/utilities/merge_operators/sortlist.h +42 -0
  1807. package/vendor/rocksdb/utilities/merge_operators/string_append/stringappend.cc +76 -0
  1808. package/vendor/rocksdb/utilities/merge_operators/string_append/stringappend.h +32 -0
  1809. package/vendor/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +130 -0
  1810. package/vendor/rocksdb/utilities/merge_operators/string_append/stringappend2.h +52 -0
  1811. package/vendor/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +636 -0
  1812. package/vendor/rocksdb/utilities/merge_operators/uint64add.cc +56 -0
  1813. package/vendor/rocksdb/utilities/merge_operators/uint64add.h +35 -0
  1814. package/vendor/rocksdb/utilities/merge_operators.cc +115 -0
  1815. package/vendor/rocksdb/utilities/merge_operators.h +36 -0
  1816. package/vendor/rocksdb/utilities/object_registry.cc +381 -0
  1817. package/vendor/rocksdb/utilities/object_registry_test.cc +862 -0
  1818. package/vendor/rocksdb/utilities/option_change_migration/option_change_migration.cc +176 -0
  1819. package/vendor/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +548 -0
  1820. package/vendor/rocksdb/utilities/options/options_util.cc +117 -0
  1821. package/vendor/rocksdb/utilities/options/options_util_test.cc +782 -0
  1822. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier.cc +420 -0
  1823. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier.h +154 -0
  1824. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +608 -0
  1825. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +291 -0
  1826. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +127 -0
  1827. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +84 -0
  1828. package/vendor/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +122 -0
  1829. package/vendor/rocksdb/utilities/persistent_cache/hash_table.h +237 -0
  1830. package/vendor/rocksdb/utilities/persistent_cache/hash_table_bench.cc +310 -0
  1831. package/vendor/rocksdb/utilities/persistent_cache/hash_table_evictable.h +166 -0
  1832. package/vendor/rocksdb/utilities/persistent_cache/hash_table_test.cc +161 -0
  1833. package/vendor/rocksdb/utilities/persistent_cache/lrulist.h +172 -0
  1834. package/vendor/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +355 -0
  1835. package/vendor/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +413 -0
  1836. package/vendor/rocksdb/utilities/persistent_cache/persistent_cache_test.h +284 -0
  1837. package/vendor/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +165 -0
  1838. package/vendor/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +340 -0
  1839. package/vendor/rocksdb/utilities/persistent_cache/persistent_cache_util.h +67 -0
  1840. package/vendor/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +138 -0
  1841. package/vendor/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +139 -0
  1842. package/vendor/rocksdb/utilities/simulator_cache/cache_simulator.cc +287 -0
  1843. package/vendor/rocksdb/utilities/simulator_cache/cache_simulator.h +231 -0
  1844. package/vendor/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +497 -0
  1845. package/vendor/rocksdb/utilities/simulator_cache/sim_cache.cc +372 -0
  1846. package/vendor/rocksdb/utilities/simulator_cache/sim_cache_test.cc +226 -0
  1847. package/vendor/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +221 -0
  1848. package/vendor/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +68 -0
  1849. package/vendor/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +238 -0
  1850. package/vendor/rocksdb/utilities/trace/file_trace_reader_writer.cc +133 -0
  1851. package/vendor/rocksdb/utilities/trace/file_trace_reader_writer.h +48 -0
  1852. package/vendor/rocksdb/utilities/trace/replayer_impl.cc +314 -0
  1853. package/vendor/rocksdb/utilities/trace/replayer_impl.h +84 -0
  1854. package/vendor/rocksdb/utilities/transactions/lock/lock_manager.cc +27 -0
  1855. package/vendor/rocksdb/utilities/transactions/lock/lock_manager.h +80 -0
  1856. package/vendor/rocksdb/utilities/transactions/lock/lock_tracker.h +207 -0
  1857. package/vendor/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +719 -0
  1858. package/vendor/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +222 -0
  1859. package/vendor/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +170 -0
  1860. package/vendor/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +324 -0
  1861. package/vendor/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +255 -0
  1862. package/vendor/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +97 -0
  1863. package/vendor/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +34 -0
  1864. package/vendor/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +448 -0
  1865. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.AGPLv3 +661 -0
  1866. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.APACHEv2 +174 -0
  1867. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.GPLv2 +339 -0
  1868. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  1869. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +76 -0
  1870. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/comparator.h +138 -0
  1871. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/ft-status.h +102 -0
  1872. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc +137 -0
  1873. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.h +174 -0
  1874. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc +220 -0
  1875. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.h +141 -0
  1876. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +525 -0
  1877. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +255 -0
  1878. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1021 -0
  1879. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +580 -0
  1880. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +525 -0
  1881. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +263 -0
  1882. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.h +178 -0
  1883. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc +518 -0
  1884. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.h +302 -0
  1885. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc +118 -0
  1886. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.h +92 -0
  1887. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +211 -0
  1888. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.h +124 -0
  1889. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/memory.h +215 -0
  1890. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +39 -0
  1891. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_atomic.h +130 -0
  1892. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +83 -0
  1893. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_instrumentation.h +286 -0
  1894. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_portability.h +87 -0
  1895. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_pthread.h +520 -0
  1896. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_race_tools.h +179 -0
  1897. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +197 -0
  1898. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +27 -0
  1899. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +130 -0
  1900. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +151 -0
  1901. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.h +98 -0
  1902. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +144 -0
  1903. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.cc +199 -0
  1904. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.h +141 -0
  1905. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt.h +794 -0
  1906. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt_impl.h +1295 -0
  1907. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +165 -0
  1908. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/status.h +76 -0
  1909. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +501 -0
  1910. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +135 -0
  1911. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +154 -0
  1912. package/vendor/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +146 -0
  1913. package/vendor/rocksdb/utilities/transactions/optimistic_transaction.cc +194 -0
  1914. package/vendor/rocksdb/utilities/transactions/optimistic_transaction.h +99 -0
  1915. package/vendor/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +109 -0
  1916. package/vendor/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +86 -0
  1917. package/vendor/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1479 -0
  1918. package/vendor/rocksdb/utilities/transactions/pessimistic_transaction.cc +1177 -0
  1919. package/vendor/rocksdb/utilities/transactions/pessimistic_transaction.h +311 -0
  1920. package/vendor/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +780 -0
  1921. package/vendor/rocksdb/utilities/transactions/pessimistic_transaction_db.h +316 -0
  1922. package/vendor/rocksdb/utilities/transactions/snapshot_checker.cc +37 -0
  1923. package/vendor/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +457 -0
  1924. package/vendor/rocksdb/utilities/transactions/transaction_base.cc +757 -0
  1925. package/vendor/rocksdb/utilities/transactions/transaction_base.h +382 -0
  1926. package/vendor/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +133 -0
  1927. package/vendor/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +24 -0
  1928. package/vendor/rocksdb/utilities/transactions/transaction_test.cc +6751 -0
  1929. package/vendor/rocksdb/utilities/transactions/transaction_test.h +578 -0
  1930. package/vendor/rocksdb/utilities/transactions/transaction_util.cc +204 -0
  1931. package/vendor/rocksdb/utilities/transactions/transaction_util.h +83 -0
  1932. package/vendor/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +578 -0
  1933. package/vendor/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +4066 -0
  1934. package/vendor/rocksdb/utilities/transactions/write_prepared_txn.cc +515 -0
  1935. package/vendor/rocksdb/utilities/transactions/write_prepared_txn.h +117 -0
  1936. package/vendor/rocksdb/utilities/transactions/write_prepared_txn_db.cc +1038 -0
  1937. package/vendor/rocksdb/utilities/transactions/write_prepared_txn_db.h +1123 -0
  1938. package/vendor/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +779 -0
  1939. package/vendor/rocksdb/utilities/transactions/write_unprepared_txn.cc +1056 -0
  1940. package/vendor/rocksdb/utilities/transactions/write_unprepared_txn.h +339 -0
  1941. package/vendor/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +476 -0
  1942. package/vendor/rocksdb/utilities/transactions/write_unprepared_txn_db.h +106 -0
  1943. package/vendor/rocksdb/utilities/ttl/db_ttl_impl.cc +617 -0
  1944. package/vendor/rocksdb/utilities/ttl/db_ttl_impl.h +243 -0
  1945. package/vendor/rocksdb/utilities/ttl/ttl_test.cc +913 -0
  1946. package/vendor/rocksdb/utilities/util_merge_operators_test.cc +100 -0
  1947. package/vendor/rocksdb/utilities/wal_filter.cc +22 -0
  1948. package/vendor/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +694 -0
  1949. package/vendor/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +742 -0
  1950. package/vendor/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +342 -0
  1951. package/vendor/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +2409 -0
@@ -0,0 +1,2487 @@
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
+ // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7
+ // Use of this source code is governed by a BSD-style license that can be
8
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
+ #include <cinttypes>
10
+
11
+ #include "db/db_impl/db_impl.h"
12
+ #include "db/error_handler.h"
13
+ #include "db/event_helpers.h"
14
+ #include "logging/logging.h"
15
+ #include "monitoring/perf_context_imp.h"
16
+ #include "options/options_helper.h"
17
+ #include "test_util/sync_point.h"
18
+ #include "util/cast_util.h"
19
+
20
+ namespace ROCKSDB_NAMESPACE {
21
+ // Convenience methods
22
+ Status DBImpl::Put(const WriteOptions& o, ColumnFamilyHandle* column_family,
23
+ const Slice& key, const Slice& val) {
24
+ const Status s = FailIfCfHasTs(column_family);
25
+ if (!s.ok()) {
26
+ return s;
27
+ }
28
+ return DB::Put(o, column_family, key, val);
29
+ }
30
+
31
+ Status DBImpl::Put(const WriteOptions& o, ColumnFamilyHandle* column_family,
32
+ const Slice& key, const Slice& ts, const Slice& val) {
33
+ const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
34
+ if (!s.ok()) {
35
+ return s;
36
+ }
37
+ return DB::Put(o, column_family, key, ts, val);
38
+ }
39
+
40
+ Status DBImpl::PutEntity(const WriteOptions& options,
41
+ ColumnFamilyHandle* column_family, const Slice& key,
42
+ const WideColumns& columns) {
43
+ const Status s = FailIfCfHasTs(column_family);
44
+ if (!s.ok()) {
45
+ return s;
46
+ }
47
+
48
+ return DB::PutEntity(options, column_family, key, columns);
49
+ }
50
+
51
+ Status DBImpl::Merge(const WriteOptions& o, ColumnFamilyHandle* column_family,
52
+ const Slice& key, const Slice& val) {
53
+ const Status s = FailIfCfHasTs(column_family);
54
+ if (!s.ok()) {
55
+ return s;
56
+ }
57
+ auto cfh = static_cast_with_check<ColumnFamilyHandleImpl>(column_family);
58
+ if (!cfh->cfd()->ioptions()->merge_operator) {
59
+ return Status::NotSupported("Provide a merge_operator when opening DB");
60
+ } else {
61
+ return DB::Merge(o, column_family, key, val);
62
+ }
63
+ }
64
+
65
+ Status DBImpl::Merge(const WriteOptions& o, ColumnFamilyHandle* column_family,
66
+ const Slice& key, const Slice& ts, const Slice& val) {
67
+ const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
68
+ if (!s.ok()) {
69
+ return s;
70
+ }
71
+ return DB::Merge(o, column_family, key, ts, val);
72
+ }
73
+
74
+ Status DBImpl::Delete(const WriteOptions& write_options,
75
+ ColumnFamilyHandle* column_family, const Slice& key) {
76
+ const Status s = FailIfCfHasTs(column_family);
77
+ if (!s.ok()) {
78
+ return s;
79
+ }
80
+ return DB::Delete(write_options, column_family, key);
81
+ }
82
+
83
+ Status DBImpl::Delete(const WriteOptions& write_options,
84
+ ColumnFamilyHandle* column_family, const Slice& key,
85
+ const Slice& ts) {
86
+ const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
87
+ if (!s.ok()) {
88
+ return s;
89
+ }
90
+ return DB::Delete(write_options, column_family, key, ts);
91
+ }
92
+
93
+ Status DBImpl::SingleDelete(const WriteOptions& write_options,
94
+ ColumnFamilyHandle* column_family,
95
+ const Slice& key) {
96
+ const Status s = FailIfCfHasTs(column_family);
97
+ if (!s.ok()) {
98
+ return s;
99
+ }
100
+ return DB::SingleDelete(write_options, column_family, key);
101
+ }
102
+
103
+ Status DBImpl::SingleDelete(const WriteOptions& write_options,
104
+ ColumnFamilyHandle* column_family, const Slice& key,
105
+ const Slice& ts) {
106
+ const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
107
+ if (!s.ok()) {
108
+ return s;
109
+ }
110
+ return DB::SingleDelete(write_options, column_family, key, ts);
111
+ }
112
+
113
+ Status DBImpl::DeleteRange(const WriteOptions& write_options,
114
+ ColumnFamilyHandle* column_family,
115
+ const Slice& begin_key, const Slice& end_key) {
116
+ const Status s = FailIfCfHasTs(column_family);
117
+ if (!s.ok()) {
118
+ return s;
119
+ }
120
+ return DB::DeleteRange(write_options, column_family, begin_key, end_key);
121
+ }
122
+
123
+ Status DBImpl::DeleteRange(const WriteOptions& write_options,
124
+ ColumnFamilyHandle* column_family,
125
+ const Slice& begin_key, const Slice& end_key,
126
+ const Slice& ts) {
127
+ const Status s = FailIfTsMismatchCf(column_family, ts, /*ts_for_read=*/false);
128
+ if (!s.ok()) {
129
+ return s;
130
+ }
131
+ return DB::DeleteRange(write_options, column_family, begin_key, end_key, ts);
132
+ }
133
+
134
+ void DBImpl::SetRecoverableStatePreReleaseCallback(
135
+ PreReleaseCallback* callback) {
136
+ recoverable_state_pre_release_callback_.reset(callback);
137
+ }
138
+
139
+ Status DBImpl::Write(const WriteOptions& write_options, WriteBatch* my_batch) {
140
+ Status s;
141
+ if (write_options.protection_bytes_per_key > 0) {
142
+ s = WriteBatchInternal::UpdateProtectionInfo(
143
+ my_batch, write_options.protection_bytes_per_key);
144
+ }
145
+ if (s.ok()) {
146
+ s = WriteImpl(write_options, my_batch, /*callback=*/nullptr,
147
+ /*log_used=*/nullptr);
148
+ }
149
+ return s;
150
+ }
151
+
152
+ Status DBImpl::WriteWithCallback(const WriteOptions& write_options,
153
+ WriteBatch* my_batch,
154
+ WriteCallback* callback) {
155
+ Status s;
156
+ if (write_options.protection_bytes_per_key > 0) {
157
+ s = WriteBatchInternal::UpdateProtectionInfo(
158
+ my_batch, write_options.protection_bytes_per_key);
159
+ }
160
+ if (s.ok()) {
161
+ s = WriteImpl(write_options, my_batch, callback, nullptr);
162
+ }
163
+ return s;
164
+ }
165
+
166
+ // The main write queue. This is the only write queue that updates LastSequence.
167
+ // When using one write queue, the same sequence also indicates the last
168
+ // published sequence.
169
+ Status DBImpl::WriteImpl(const WriteOptions& write_options,
170
+ WriteBatch* my_batch, WriteCallback* callback,
171
+ uint64_t* log_used, uint64_t log_ref,
172
+ bool disable_memtable, uint64_t* seq_used,
173
+ size_t batch_cnt,
174
+ PreReleaseCallback* pre_release_callback,
175
+ PostMemTableCallback* post_memtable_callback) {
176
+ assert(!seq_per_batch_ || batch_cnt != 0);
177
+ assert(my_batch == nullptr || my_batch->Count() == 0 ||
178
+ write_options.protection_bytes_per_key == 0 ||
179
+ write_options.protection_bytes_per_key ==
180
+ my_batch->GetProtectionBytesPerKey());
181
+ if (my_batch == nullptr) {
182
+ return Status::InvalidArgument("Batch is nullptr!");
183
+ } else if (!disable_memtable &&
184
+ WriteBatchInternal::TimestampsUpdateNeeded(*my_batch)) {
185
+ // If writing to memtable, then we require the caller to set/update the
186
+ // timestamps for the keys in the write batch.
187
+ // Otherwise, it means we are just writing to the WAL, and we allow
188
+ // timestamps unset for the keys in the write batch. This can happen if we
189
+ // use TransactionDB with write-committed policy, and we currently do not
190
+ // support user-defined timestamp with other policies.
191
+ // In the prepare phase, a transaction can write the batch to the WAL
192
+ // without inserting to memtable. The keys in the batch do not have to be
193
+ // assigned timestamps because they will be used only during recovery if
194
+ // there is a commit marker which includes their commit timestamp.
195
+ return Status::InvalidArgument("write batch must have timestamp(s) set");
196
+ } else if (write_options.rate_limiter_priority != Env::IO_TOTAL &&
197
+ write_options.rate_limiter_priority != Env::IO_USER) {
198
+ return Status::InvalidArgument(
199
+ "WriteOptions::rate_limiter_priority only allows "
200
+ "Env::IO_TOTAL and Env::IO_USER due to implementation constraints");
201
+ } else if (write_options.rate_limiter_priority != Env::IO_TOTAL &&
202
+ (write_options.disableWAL || manual_wal_flush_)) {
203
+ return Status::InvalidArgument(
204
+ "WriteOptions::rate_limiter_priority currently only supports "
205
+ "rate-limiting automatic WAL flush, which requires "
206
+ "`WriteOptions::disableWAL` and "
207
+ "`DBOptions::manual_wal_flush` both set to false");
208
+ } else if (write_options.protection_bytes_per_key != 0 &&
209
+ write_options.protection_bytes_per_key != 8) {
210
+ return Status::InvalidArgument(
211
+ "`WriteOptions::protection_bytes_per_key` must be zero or eight");
212
+ }
213
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
214
+ // grabs but does not seem thread-safe.
215
+ if (tracer_) {
216
+ InstrumentedMutexLock lock(&trace_mutex_);
217
+ if (tracer_ && !tracer_->IsWriteOrderPreserved()) {
218
+ // We don't have to preserve write order so can trace anywhere. It's more
219
+ // efficient to trace here than to add latency to a phase of the log/apply
220
+ // pipeline.
221
+ // TODO: maybe handle the tracing status?
222
+ tracer_->Write(my_batch).PermitUncheckedError();
223
+ }
224
+ }
225
+ if (write_options.sync && write_options.disableWAL) {
226
+ return Status::InvalidArgument("Sync writes has to enable WAL.");
227
+ }
228
+ if (two_write_queues_ && immutable_db_options_.enable_pipelined_write) {
229
+ return Status::NotSupported(
230
+ "pipelined_writes is not compatible with concurrent prepares");
231
+ }
232
+ if (seq_per_batch_ && immutable_db_options_.enable_pipelined_write) {
233
+ // TODO(yiwu): update pipeline write with seq_per_batch and batch_cnt
234
+ return Status::NotSupported(
235
+ "pipelined_writes is not compatible with seq_per_batch");
236
+ }
237
+ if (immutable_db_options_.unordered_write &&
238
+ immutable_db_options_.enable_pipelined_write) {
239
+ return Status::NotSupported(
240
+ "pipelined_writes is not compatible with unordered_write");
241
+ }
242
+ if (immutable_db_options_.enable_pipelined_write &&
243
+ post_memtable_callback != nullptr) {
244
+ return Status::NotSupported(
245
+ "pipelined write currently does not honor post_memtable_callback");
246
+ }
247
+ if (seq_per_batch_ && post_memtable_callback != nullptr) {
248
+ return Status::NotSupported(
249
+ "seq_per_batch currently does not honor post_memtable_callback");
250
+ }
251
+ // Otherwise IsLatestPersistentState optimization does not make sense
252
+ assert(!WriteBatchInternal::IsLatestPersistentState(my_batch) ||
253
+ disable_memtable);
254
+
255
+ if (write_options.low_pri) {
256
+ Status s = ThrottleLowPriWritesIfNeeded(write_options, my_batch);
257
+ if (!s.ok()) {
258
+ return s;
259
+ }
260
+ }
261
+
262
+ if (two_write_queues_ && disable_memtable) {
263
+ AssignOrder assign_order =
264
+ seq_per_batch_ ? kDoAssignOrder : kDontAssignOrder;
265
+ // Otherwise it is WAL-only Prepare batches in WriteCommitted policy and
266
+ // they don't consume sequence.
267
+ return WriteImplWALOnly(&nonmem_write_thread_, write_options, my_batch,
268
+ callback, log_used, log_ref, seq_used, batch_cnt,
269
+ pre_release_callback, assign_order,
270
+ kDontPublishLastSeq, disable_memtable);
271
+ }
272
+
273
+ if (immutable_db_options_.unordered_write) {
274
+ const size_t sub_batch_cnt = batch_cnt != 0
275
+ ? batch_cnt
276
+ // every key is a sub-batch consuming a seq
277
+ : WriteBatchInternal::Count(my_batch);
278
+ uint64_t seq = 0;
279
+ // Use a write thread to i) optimize for WAL write, ii) publish last
280
+ // sequence in in increasing order, iii) call pre_release_callback serially
281
+ Status status = WriteImplWALOnly(
282
+ &write_thread_, write_options, my_batch, callback, log_used, log_ref,
283
+ &seq, sub_batch_cnt, pre_release_callback, kDoAssignOrder,
284
+ kDoPublishLastSeq, disable_memtable);
285
+ TEST_SYNC_POINT("DBImpl::WriteImpl:UnorderedWriteAfterWriteWAL");
286
+ if (!status.ok()) {
287
+ return status;
288
+ }
289
+ if (seq_used) {
290
+ *seq_used = seq;
291
+ }
292
+ if (!disable_memtable) {
293
+ TEST_SYNC_POINT("DBImpl::WriteImpl:BeforeUnorderedWriteMemtable");
294
+ status = UnorderedWriteMemtable(write_options, my_batch, callback,
295
+ log_ref, seq, sub_batch_cnt);
296
+ }
297
+ return status;
298
+ }
299
+
300
+ if (immutable_db_options_.enable_pipelined_write) {
301
+ return PipelinedWriteImpl(write_options, my_batch, callback, log_used,
302
+ log_ref, disable_memtable, seq_used);
303
+ }
304
+
305
+ PERF_TIMER_GUARD(write_pre_and_post_process_time);
306
+ WriteThread::Writer w(write_options, my_batch, callback, log_ref,
307
+ disable_memtable, batch_cnt, pre_release_callback,
308
+ post_memtable_callback);
309
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
310
+
311
+ write_thread_.JoinBatchGroup(&w);
312
+ if (w.state == WriteThread::STATE_PARALLEL_MEMTABLE_WRITER) {
313
+ // we are a non-leader in a parallel group
314
+
315
+ if (w.ShouldWriteToMemtable()) {
316
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
317
+ PERF_TIMER_GUARD(write_memtable_time);
318
+
319
+ ColumnFamilyMemTablesImpl column_family_memtables(
320
+ versions_->GetColumnFamilySet());
321
+ w.status = WriteBatchInternal::InsertInto(
322
+ &w, w.sequence, &column_family_memtables, &flush_scheduler_,
323
+ &trim_history_scheduler_,
324
+ write_options.ignore_missing_column_families, 0 /*log_number*/, this,
325
+ true /*concurrent_memtable_writes*/, seq_per_batch_, w.batch_cnt,
326
+ batch_per_txn_, write_options.memtable_insert_hint_per_batch);
327
+
328
+ PERF_TIMER_START(write_pre_and_post_process_time);
329
+ }
330
+
331
+ if (write_thread_.CompleteParallelMemTableWriter(&w)) {
332
+ // we're responsible for exit batch group
333
+ // TODO(myabandeh): propagate status to write_group
334
+ auto last_sequence = w.write_group->last_sequence;
335
+ for (auto* tmp_w : *(w.write_group)) {
336
+ assert(tmp_w);
337
+ if (tmp_w->post_memtable_callback) {
338
+ Status tmp_s =
339
+ (*tmp_w->post_memtable_callback)(last_sequence, disable_memtable);
340
+ // TODO: propagate the execution status of post_memtable_callback to
341
+ // caller.
342
+ assert(tmp_s.ok());
343
+ }
344
+ }
345
+ versions_->SetLastSequence(last_sequence);
346
+ MemTableInsertStatusCheck(w.status);
347
+ write_thread_.ExitAsBatchGroupFollower(&w);
348
+ }
349
+ assert(w.state == WriteThread::STATE_COMPLETED);
350
+ // STATE_COMPLETED conditional below handles exit
351
+ }
352
+ if (w.state == WriteThread::STATE_COMPLETED) {
353
+ if (log_used != nullptr) {
354
+ *log_used = w.log_used;
355
+ }
356
+ if (seq_used != nullptr) {
357
+ *seq_used = w.sequence;
358
+ }
359
+ // write is complete and leader has updated sequence
360
+ return w.FinalStatus();
361
+ }
362
+ // else we are the leader of the write batch group
363
+ assert(w.state == WriteThread::STATE_GROUP_LEADER);
364
+ Status status;
365
+ // Once reaches this point, the current writer "w" will try to do its write
366
+ // job. It may also pick up some of the remaining writers in the "writers_"
367
+ // when it finds suitable, and finish them in the same write batch.
368
+ // This is how a write job could be done by the other writer.
369
+ WriteContext write_context;
370
+ LogContext log_context(write_options.sync);
371
+ WriteThread::WriteGroup write_group;
372
+ bool in_parallel_group = false;
373
+ uint64_t last_sequence = kMaxSequenceNumber;
374
+
375
+ assert(!two_write_queues_ || !disable_memtable);
376
+ {
377
+ // With concurrent writes we do preprocess only in the write thread that
378
+ // also does write to memtable to avoid sync issue on shared data structure
379
+ // with the other thread
380
+
381
+ // PreprocessWrite does its own perf timing.
382
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
383
+
384
+ status = PreprocessWrite(write_options, &log_context, &write_context);
385
+ if (!two_write_queues_) {
386
+ // Assign it after ::PreprocessWrite since the sequence might advance
387
+ // inside it by WriteRecoverableState
388
+ last_sequence = versions_->LastSequence();
389
+ }
390
+
391
+ PERF_TIMER_START(write_pre_and_post_process_time);
392
+ }
393
+
394
+ // Add to log and apply to memtable. We can release the lock
395
+ // during this phase since &w is currently responsible for logging
396
+ // and protects against concurrent loggers and concurrent writes
397
+ // into memtables
398
+
399
+ TEST_SYNC_POINT("DBImpl::WriteImpl:BeforeLeaderEnters");
400
+ last_batch_group_size_ =
401
+ write_thread_.EnterAsBatchGroupLeader(&w, &write_group);
402
+
403
+ IOStatus io_s;
404
+ Status pre_release_cb_status;
405
+ if (status.ok()) {
406
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
407
+ // grabs but does not seem thread-safe.
408
+ if (tracer_) {
409
+ InstrumentedMutexLock lock(&trace_mutex_);
410
+ if (tracer_ && tracer_->IsWriteOrderPreserved()) {
411
+ for (auto* writer : write_group) {
412
+ // TODO: maybe handle the tracing status?
413
+ tracer_->Write(writer->batch).PermitUncheckedError();
414
+ }
415
+ }
416
+ }
417
+ // Rules for when we can update the memtable concurrently
418
+ // 1. supported by memtable
419
+ // 2. Puts are not okay if inplace_update_support
420
+ // 3. Merges are not okay
421
+ //
422
+ // Rules 1..2 are enforced by checking the options
423
+ // during startup (CheckConcurrentWritesSupported), so if
424
+ // options.allow_concurrent_memtable_write is true then they can be
425
+ // assumed to be true. Rule 3 is checked for each batch. We could
426
+ // relax rules 2 if we could prevent write batches from referring
427
+ // more than once to a particular key.
428
+ bool parallel = immutable_db_options_.allow_concurrent_memtable_write &&
429
+ write_group.size > 1;
430
+ size_t total_count = 0;
431
+ size_t valid_batches = 0;
432
+ size_t total_byte_size = 0;
433
+ size_t pre_release_callback_cnt = 0;
434
+ for (auto* writer : write_group) {
435
+ assert(writer);
436
+ if (writer->CheckCallback(this)) {
437
+ valid_batches += writer->batch_cnt;
438
+ if (writer->ShouldWriteToMemtable()) {
439
+ total_count += WriteBatchInternal::Count(writer->batch);
440
+ parallel = parallel && !writer->batch->HasMerge();
441
+ }
442
+ total_byte_size = WriteBatchInternal::AppendedByteSize(
443
+ total_byte_size, WriteBatchInternal::ByteSize(writer->batch));
444
+ if (writer->pre_release_callback) {
445
+ pre_release_callback_cnt++;
446
+ }
447
+ }
448
+ }
449
+ // Note about seq_per_batch_: either disableWAL is set for the entire write
450
+ // group or not. In either case we inc seq for each write batch with no
451
+ // failed callback. This means that there could be a batch with
452
+ // disalbe_memtable in between; although we do not write this batch to
453
+ // memtable it still consumes a seq. Otherwise, if !seq_per_batch_, we inc
454
+ // the seq per valid written key to mem.
455
+ size_t seq_inc = seq_per_batch_ ? valid_batches : total_count;
456
+
457
+ const bool concurrent_update = two_write_queues_;
458
+ // Update stats while we are an exclusive group leader, so we know
459
+ // that nobody else can be writing to these particular stats.
460
+ // We're optimistic, updating the stats before we successfully
461
+ // commit. That lets us release our leader status early.
462
+ auto stats = default_cf_internal_stats_;
463
+ stats->AddDBStats(InternalStats::kIntStatsNumKeysWritten, total_count,
464
+ concurrent_update);
465
+ RecordTick(stats_, NUMBER_KEYS_WRITTEN, total_count);
466
+ stats->AddDBStats(InternalStats::kIntStatsBytesWritten, total_byte_size,
467
+ concurrent_update);
468
+ RecordTick(stats_, BYTES_WRITTEN, total_byte_size);
469
+ stats->AddDBStats(InternalStats::kIntStatsWriteDoneBySelf, 1,
470
+ concurrent_update);
471
+ RecordTick(stats_, WRITE_DONE_BY_SELF);
472
+ auto write_done_by_other = write_group.size - 1;
473
+ if (write_done_by_other > 0) {
474
+ stats->AddDBStats(InternalStats::kIntStatsWriteDoneByOther,
475
+ write_done_by_other, concurrent_update);
476
+ RecordTick(stats_, WRITE_DONE_BY_OTHER, write_done_by_other);
477
+ }
478
+ RecordInHistogram(stats_, BYTES_PER_WRITE, total_byte_size);
479
+
480
+ if (write_options.disableWAL) {
481
+ has_unpersisted_data_.store(true, std::memory_order_relaxed);
482
+ }
483
+
484
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
485
+
486
+ if (!two_write_queues_) {
487
+ if (status.ok() && !write_options.disableWAL) {
488
+ assert(log_context.log_file_number_size);
489
+ LogFileNumberSize& log_file_number_size =
490
+ *(log_context.log_file_number_size);
491
+ PERF_TIMER_GUARD(write_wal_time);
492
+ io_s =
493
+ WriteToWAL(write_group, log_context.writer, log_used,
494
+ log_context.need_log_sync, log_context.need_log_dir_sync,
495
+ last_sequence + 1, log_file_number_size);
496
+ }
497
+ } else {
498
+ if (status.ok() && !write_options.disableWAL) {
499
+ PERF_TIMER_GUARD(write_wal_time);
500
+ // LastAllocatedSequence is increased inside WriteToWAL under
501
+ // wal_write_mutex_ to ensure ordered events in WAL
502
+ io_s = ConcurrentWriteToWAL(write_group, log_used, &last_sequence,
503
+ seq_inc);
504
+ } else {
505
+ // Otherwise we inc seq number for memtable writes
506
+ last_sequence = versions_->FetchAddLastAllocatedSequence(seq_inc);
507
+ }
508
+ }
509
+ status = io_s;
510
+ assert(last_sequence != kMaxSequenceNumber);
511
+ const SequenceNumber current_sequence = last_sequence + 1;
512
+ last_sequence += seq_inc;
513
+
514
+ // PreReleaseCallback is called after WAL write and before memtable write
515
+ if (status.ok()) {
516
+ SequenceNumber next_sequence = current_sequence;
517
+ size_t index = 0;
518
+ // Note: the logic for advancing seq here must be consistent with the
519
+ // logic in WriteBatchInternal::InsertInto(write_group...) as well as
520
+ // with WriteBatchInternal::InsertInto(write_batch...) that is called on
521
+ // the merged batch during recovery from the WAL.
522
+ for (auto* writer : write_group) {
523
+ if (writer->CallbackFailed()) {
524
+ continue;
525
+ }
526
+ writer->sequence = next_sequence;
527
+ if (writer->pre_release_callback) {
528
+ Status ws = writer->pre_release_callback->Callback(
529
+ writer->sequence, disable_memtable, writer->log_used, index++,
530
+ pre_release_callback_cnt);
531
+ if (!ws.ok()) {
532
+ status = pre_release_cb_status = ws;
533
+ break;
534
+ }
535
+ }
536
+ if (seq_per_batch_) {
537
+ assert(writer->batch_cnt);
538
+ next_sequence += writer->batch_cnt;
539
+ } else if (writer->ShouldWriteToMemtable()) {
540
+ next_sequence += WriteBatchInternal::Count(writer->batch);
541
+ }
542
+ }
543
+ }
544
+
545
+ if (status.ok()) {
546
+ PERF_TIMER_GUARD(write_memtable_time);
547
+
548
+ if (!parallel) {
549
+ // w.sequence will be set inside InsertInto
550
+ w.status = WriteBatchInternal::InsertInto(
551
+ write_group, current_sequence, column_family_memtables_.get(),
552
+ &flush_scheduler_, &trim_history_scheduler_,
553
+ write_options.ignore_missing_column_families,
554
+ 0 /*recovery_log_number*/, this, parallel, seq_per_batch_,
555
+ batch_per_txn_);
556
+ } else {
557
+ write_group.last_sequence = last_sequence;
558
+ write_thread_.LaunchParallelMemTableWriters(&write_group);
559
+ in_parallel_group = true;
560
+
561
+ // Each parallel follower is doing each own writes. The leader should
562
+ // also do its own.
563
+ if (w.ShouldWriteToMemtable()) {
564
+ ColumnFamilyMemTablesImpl column_family_memtables(
565
+ versions_->GetColumnFamilySet());
566
+ assert(w.sequence == current_sequence);
567
+ w.status = WriteBatchInternal::InsertInto(
568
+ &w, w.sequence, &column_family_memtables, &flush_scheduler_,
569
+ &trim_history_scheduler_,
570
+ write_options.ignore_missing_column_families, 0 /*log_number*/,
571
+ this, true /*concurrent_memtable_writes*/, seq_per_batch_,
572
+ w.batch_cnt, batch_per_txn_,
573
+ write_options.memtable_insert_hint_per_batch);
574
+ }
575
+ }
576
+ if (seq_used != nullptr) {
577
+ *seq_used = w.sequence;
578
+ }
579
+ }
580
+ }
581
+ PERF_TIMER_START(write_pre_and_post_process_time);
582
+
583
+ if (!io_s.ok()) {
584
+ // Check WriteToWAL status
585
+ IOStatusCheck(io_s);
586
+ }
587
+ if (!w.CallbackFailed()) {
588
+ if (!io_s.ok()) {
589
+ assert(pre_release_cb_status.ok());
590
+ } else {
591
+ WriteStatusCheck(pre_release_cb_status);
592
+ }
593
+ } else {
594
+ assert(pre_release_cb_status.ok());
595
+ }
596
+
597
+ if (log_context.need_log_sync) {
598
+ VersionEdit synced_wals;
599
+ log_write_mutex_.Lock();
600
+ if (status.ok()) {
601
+ MarkLogsSynced(logfile_number_, log_context.need_log_dir_sync,
602
+ &synced_wals);
603
+ } else {
604
+ MarkLogsNotSynced(logfile_number_);
605
+ }
606
+ log_write_mutex_.Unlock();
607
+ if (status.ok() && synced_wals.IsWalAddition()) {
608
+ InstrumentedMutexLock l(&mutex_);
609
+ // TODO: plumb Env::IOActivity
610
+ const ReadOptions read_options;
611
+ status = ApplyWALToManifest(read_options, &synced_wals);
612
+ }
613
+
614
+ // Requesting sync with two_write_queues_ is expected to be very rare. We
615
+ // hence provide a simple implementation that is not necessarily efficient.
616
+ if (two_write_queues_) {
617
+ if (manual_wal_flush_) {
618
+ status = FlushWAL(true);
619
+ } else {
620
+ status = SyncWAL();
621
+ }
622
+ }
623
+ }
624
+
625
+ bool should_exit_batch_group = true;
626
+ if (in_parallel_group) {
627
+ // CompleteParallelWorker returns true if this thread should
628
+ // handle exit, false means somebody else did
629
+ should_exit_batch_group = write_thread_.CompleteParallelMemTableWriter(&w);
630
+ }
631
+ if (should_exit_batch_group) {
632
+ if (status.ok()) {
633
+ for (auto* tmp_w : write_group) {
634
+ assert(tmp_w);
635
+ if (tmp_w->post_memtable_callback) {
636
+ Status tmp_s =
637
+ (*tmp_w->post_memtable_callback)(last_sequence, disable_memtable);
638
+ // TODO: propagate the execution status of post_memtable_callback to
639
+ // caller.
640
+ assert(tmp_s.ok());
641
+ }
642
+ }
643
+ // Note: if we are to resume after non-OK statuses we need to revisit how
644
+ // we reacts to non-OK statuses here.
645
+ versions_->SetLastSequence(last_sequence);
646
+ }
647
+ MemTableInsertStatusCheck(w.status);
648
+ write_thread_.ExitAsBatchGroupLeader(write_group, status);
649
+ }
650
+
651
+ if (status.ok()) {
652
+ status = w.FinalStatus();
653
+ }
654
+ return status;
655
+ }
656
+
657
+ Status DBImpl::PipelinedWriteImpl(const WriteOptions& write_options,
658
+ WriteBatch* my_batch, WriteCallback* callback,
659
+ uint64_t* log_used, uint64_t log_ref,
660
+ bool disable_memtable, uint64_t* seq_used) {
661
+ PERF_TIMER_GUARD(write_pre_and_post_process_time);
662
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
663
+
664
+ WriteContext write_context;
665
+
666
+ WriteThread::Writer w(write_options, my_batch, callback, log_ref,
667
+ disable_memtable, /*_batch_cnt=*/0,
668
+ /*_pre_release_callback=*/nullptr);
669
+ write_thread_.JoinBatchGroup(&w);
670
+ TEST_SYNC_POINT("DBImplWrite::PipelinedWriteImpl:AfterJoinBatchGroup");
671
+ if (w.state == WriteThread::STATE_GROUP_LEADER) {
672
+ WriteThread::WriteGroup wal_write_group;
673
+ if (w.callback && !w.callback->AllowWriteBatching()) {
674
+ write_thread_.WaitForMemTableWriters();
675
+ }
676
+ LogContext log_context(!write_options.disableWAL && write_options.sync);
677
+ // PreprocessWrite does its own perf timing.
678
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
679
+ w.status = PreprocessWrite(write_options, &log_context, &write_context);
680
+ PERF_TIMER_START(write_pre_and_post_process_time);
681
+
682
+ // This can set non-OK status if callback fail.
683
+ last_batch_group_size_ =
684
+ write_thread_.EnterAsBatchGroupLeader(&w, &wal_write_group);
685
+ const SequenceNumber current_sequence =
686
+ write_thread_.UpdateLastSequence(versions_->LastSequence()) + 1;
687
+ size_t total_count = 0;
688
+ size_t total_byte_size = 0;
689
+
690
+ if (w.status.ok()) {
691
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
692
+ // grabs but does not seem thread-safe.
693
+ if (tracer_) {
694
+ InstrumentedMutexLock lock(&trace_mutex_);
695
+ if (tracer_ != nullptr && tracer_->IsWriteOrderPreserved()) {
696
+ for (auto* writer : wal_write_group) {
697
+ // TODO: maybe handle the tracing status?
698
+ tracer_->Write(writer->batch).PermitUncheckedError();
699
+ }
700
+ }
701
+ }
702
+ SequenceNumber next_sequence = current_sequence;
703
+ for (auto* writer : wal_write_group) {
704
+ assert(writer);
705
+ if (writer->CheckCallback(this)) {
706
+ if (writer->ShouldWriteToMemtable()) {
707
+ writer->sequence = next_sequence;
708
+ size_t count = WriteBatchInternal::Count(writer->batch);
709
+ next_sequence += count;
710
+ total_count += count;
711
+ }
712
+ total_byte_size = WriteBatchInternal::AppendedByteSize(
713
+ total_byte_size, WriteBatchInternal::ByteSize(writer->batch));
714
+ }
715
+ }
716
+ if (w.disable_wal) {
717
+ has_unpersisted_data_.store(true, std::memory_order_relaxed);
718
+ }
719
+ write_thread_.UpdateLastSequence(current_sequence + total_count - 1);
720
+ }
721
+
722
+ auto stats = default_cf_internal_stats_;
723
+ stats->AddDBStats(InternalStats::kIntStatsNumKeysWritten, total_count);
724
+ RecordTick(stats_, NUMBER_KEYS_WRITTEN, total_count);
725
+ stats->AddDBStats(InternalStats::kIntStatsBytesWritten, total_byte_size);
726
+ RecordTick(stats_, BYTES_WRITTEN, total_byte_size);
727
+ RecordInHistogram(stats_, BYTES_PER_WRITE, total_byte_size);
728
+
729
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
730
+
731
+ IOStatus io_s;
732
+ io_s.PermitUncheckedError(); // Allow io_s to be uninitialized
733
+
734
+ if (w.status.ok() && !write_options.disableWAL) {
735
+ PERF_TIMER_GUARD(write_wal_time);
736
+ stats->AddDBStats(InternalStats::kIntStatsWriteDoneBySelf, 1);
737
+ RecordTick(stats_, WRITE_DONE_BY_SELF, 1);
738
+ if (wal_write_group.size > 1) {
739
+ stats->AddDBStats(InternalStats::kIntStatsWriteDoneByOther,
740
+ wal_write_group.size - 1);
741
+ RecordTick(stats_, WRITE_DONE_BY_OTHER, wal_write_group.size - 1);
742
+ }
743
+ assert(log_context.log_file_number_size);
744
+ LogFileNumberSize& log_file_number_size =
745
+ *(log_context.log_file_number_size);
746
+ io_s =
747
+ WriteToWAL(wal_write_group, log_context.writer, log_used,
748
+ log_context.need_log_sync, log_context.need_log_dir_sync,
749
+ current_sequence, log_file_number_size);
750
+ w.status = io_s;
751
+ }
752
+
753
+ if (!io_s.ok()) {
754
+ // Check WriteToWAL status
755
+ IOStatusCheck(io_s);
756
+ } else if (!w.CallbackFailed()) {
757
+ WriteStatusCheck(w.status);
758
+ }
759
+
760
+ VersionEdit synced_wals;
761
+ if (log_context.need_log_sync) {
762
+ InstrumentedMutexLock l(&log_write_mutex_);
763
+ if (w.status.ok()) {
764
+ MarkLogsSynced(logfile_number_, log_context.need_log_dir_sync,
765
+ &synced_wals);
766
+ } else {
767
+ MarkLogsNotSynced(logfile_number_);
768
+ }
769
+ }
770
+ if (w.status.ok() && synced_wals.IsWalAddition()) {
771
+ InstrumentedMutexLock l(&mutex_);
772
+ // TODO: plumb Env::IOActivity
773
+ const ReadOptions read_options;
774
+ w.status = ApplyWALToManifest(read_options, &synced_wals);
775
+ }
776
+ write_thread_.ExitAsBatchGroupLeader(wal_write_group, w.status);
777
+ }
778
+
779
+ // NOTE: the memtable_write_group is declared before the following
780
+ // `if` statement because its lifetime needs to be longer
781
+ // that the inner context of the `if` as a reference to it
782
+ // may be used further below within the outer _write_thread
783
+ WriteThread::WriteGroup memtable_write_group;
784
+
785
+ if (w.state == WriteThread::STATE_MEMTABLE_WRITER_LEADER) {
786
+ PERF_TIMER_GUARD(write_memtable_time);
787
+ assert(w.ShouldWriteToMemtable());
788
+ write_thread_.EnterAsMemTableWriter(&w, &memtable_write_group);
789
+ if (memtable_write_group.size > 1 &&
790
+ immutable_db_options_.allow_concurrent_memtable_write) {
791
+ write_thread_.LaunchParallelMemTableWriters(&memtable_write_group);
792
+ } else {
793
+ memtable_write_group.status = WriteBatchInternal::InsertInto(
794
+ memtable_write_group, w.sequence, column_family_memtables_.get(),
795
+ &flush_scheduler_, &trim_history_scheduler_,
796
+ write_options.ignore_missing_column_families, 0 /*log_number*/, this,
797
+ false /*concurrent_memtable_writes*/, seq_per_batch_, batch_per_txn_);
798
+ versions_->SetLastSequence(memtable_write_group.last_sequence);
799
+ write_thread_.ExitAsMemTableWriter(&w, memtable_write_group);
800
+ }
801
+ } else {
802
+ // NOTE: the memtable_write_group is never really used,
803
+ // so we need to set its status to pass ASSERT_STATUS_CHECKED
804
+ memtable_write_group.status.PermitUncheckedError();
805
+ }
806
+
807
+ if (w.state == WriteThread::STATE_PARALLEL_MEMTABLE_WRITER) {
808
+ assert(w.ShouldWriteToMemtable());
809
+ ColumnFamilyMemTablesImpl column_family_memtables(
810
+ versions_->GetColumnFamilySet());
811
+ w.status = WriteBatchInternal::InsertInto(
812
+ &w, w.sequence, &column_family_memtables, &flush_scheduler_,
813
+ &trim_history_scheduler_, write_options.ignore_missing_column_families,
814
+ 0 /*log_number*/, this, true /*concurrent_memtable_writes*/,
815
+ false /*seq_per_batch*/, 0 /*batch_cnt*/, true /*batch_per_txn*/,
816
+ write_options.memtable_insert_hint_per_batch);
817
+ if (write_thread_.CompleteParallelMemTableWriter(&w)) {
818
+ MemTableInsertStatusCheck(w.status);
819
+ versions_->SetLastSequence(w.write_group->last_sequence);
820
+ write_thread_.ExitAsMemTableWriter(&w, *w.write_group);
821
+ }
822
+ }
823
+ if (seq_used != nullptr) {
824
+ *seq_used = w.sequence;
825
+ }
826
+
827
+ assert(w.state == WriteThread::STATE_COMPLETED);
828
+ return w.FinalStatus();
829
+ }
830
+
831
+ Status DBImpl::UnorderedWriteMemtable(const WriteOptions& write_options,
832
+ WriteBatch* my_batch,
833
+ WriteCallback* callback, uint64_t log_ref,
834
+ SequenceNumber seq,
835
+ const size_t sub_batch_cnt) {
836
+ PERF_TIMER_GUARD(write_pre_and_post_process_time);
837
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
838
+
839
+ WriteThread::Writer w(write_options, my_batch, callback, log_ref,
840
+ false /*disable_memtable*/);
841
+
842
+ if (w.CheckCallback(this) && w.ShouldWriteToMemtable()) {
843
+ w.sequence = seq;
844
+ size_t total_count = WriteBatchInternal::Count(my_batch);
845
+ InternalStats* stats = default_cf_internal_stats_;
846
+ stats->AddDBStats(InternalStats::kIntStatsNumKeysWritten, total_count);
847
+ RecordTick(stats_, NUMBER_KEYS_WRITTEN, total_count);
848
+
849
+ ColumnFamilyMemTablesImpl column_family_memtables(
850
+ versions_->GetColumnFamilySet());
851
+ w.status = WriteBatchInternal::InsertInto(
852
+ &w, w.sequence, &column_family_memtables, &flush_scheduler_,
853
+ &trim_history_scheduler_, write_options.ignore_missing_column_families,
854
+ 0 /*log_number*/, this, true /*concurrent_memtable_writes*/,
855
+ seq_per_batch_, sub_batch_cnt, true /*batch_per_txn*/,
856
+ write_options.memtable_insert_hint_per_batch);
857
+ if (write_options.disableWAL) {
858
+ has_unpersisted_data_.store(true, std::memory_order_relaxed);
859
+ }
860
+ }
861
+
862
+ size_t pending_cnt = pending_memtable_writes_.fetch_sub(1) - 1;
863
+ if (pending_cnt == 0) {
864
+ // switch_cv_ waits until pending_memtable_writes_ = 0. Locking its mutex
865
+ // before notify ensures that cv is in waiting state when it is notified
866
+ // thus not missing the update to pending_memtable_writes_ even though it is
867
+ // not modified under the mutex.
868
+ std::lock_guard<std::mutex> lck(switch_mutex_);
869
+ switch_cv_.notify_all();
870
+ }
871
+ WriteStatusCheck(w.status);
872
+
873
+ if (!w.FinalStatus().ok()) {
874
+ return w.FinalStatus();
875
+ }
876
+ return Status::OK();
877
+ }
878
+
879
+ // The 2nd write queue. If enabled it will be used only for WAL-only writes.
880
+ // This is the only queue that updates LastPublishedSequence which is only
881
+ // applicable in a two-queue setting.
882
+ Status DBImpl::WriteImplWALOnly(
883
+ WriteThread* write_thread, const WriteOptions& write_options,
884
+ WriteBatch* my_batch, WriteCallback* callback, uint64_t* log_used,
885
+ const uint64_t log_ref, uint64_t* seq_used, const size_t sub_batch_cnt,
886
+ PreReleaseCallback* pre_release_callback, const AssignOrder assign_order,
887
+ const PublishLastSeq publish_last_seq, const bool disable_memtable) {
888
+ PERF_TIMER_GUARD(write_pre_and_post_process_time);
889
+ WriteThread::Writer w(write_options, my_batch, callback, log_ref,
890
+ disable_memtable, sub_batch_cnt, pre_release_callback);
891
+ StopWatch write_sw(immutable_db_options_.clock, stats_, DB_WRITE);
892
+
893
+ write_thread->JoinBatchGroup(&w);
894
+ assert(w.state != WriteThread::STATE_PARALLEL_MEMTABLE_WRITER);
895
+ if (w.state == WriteThread::STATE_COMPLETED) {
896
+ if (log_used != nullptr) {
897
+ *log_used = w.log_used;
898
+ }
899
+ if (seq_used != nullptr) {
900
+ *seq_used = w.sequence;
901
+ }
902
+ return w.FinalStatus();
903
+ }
904
+ // else we are the leader of the write batch group
905
+ assert(w.state == WriteThread::STATE_GROUP_LEADER);
906
+
907
+ if (publish_last_seq == kDoPublishLastSeq) {
908
+ Status status;
909
+
910
+ // Currently we only use kDoPublishLastSeq in unordered_write
911
+ assert(immutable_db_options_.unordered_write);
912
+ WriteContext write_context;
913
+ if (error_handler_.IsDBStopped()) {
914
+ status = error_handler_.GetBGError();
915
+ }
916
+ // TODO(myabandeh): Make preliminary checks thread-safe so we could do them
917
+ // without paying the cost of obtaining the mutex.
918
+ if (status.ok()) {
919
+ LogContext log_context;
920
+ status = PreprocessWrite(write_options, &log_context, &write_context);
921
+ WriteStatusCheckOnLocked(status);
922
+ }
923
+ if (!status.ok()) {
924
+ WriteThread::WriteGroup write_group;
925
+ write_thread->EnterAsBatchGroupLeader(&w, &write_group);
926
+ write_thread->ExitAsBatchGroupLeader(write_group, status);
927
+ return status;
928
+ }
929
+ } else {
930
+ InstrumentedMutexLock lock(&mutex_);
931
+ Status status =
932
+ DelayWrite(/*num_bytes=*/0ull, *write_thread, write_options);
933
+ if (!status.ok()) {
934
+ WriteThread::WriteGroup write_group;
935
+ write_thread->EnterAsBatchGroupLeader(&w, &write_group);
936
+ write_thread->ExitAsBatchGroupLeader(write_group, status);
937
+ return status;
938
+ }
939
+ }
940
+
941
+ WriteThread::WriteGroup write_group;
942
+ uint64_t last_sequence;
943
+ write_thread->EnterAsBatchGroupLeader(&w, &write_group);
944
+ // Note: no need to update last_batch_group_size_ here since the batch writes
945
+ // to WAL only
946
+ // TODO: this use of operator bool on `tracer_` can avoid unnecessary lock
947
+ // grabs but does not seem thread-safe.
948
+ if (tracer_) {
949
+ InstrumentedMutexLock lock(&trace_mutex_);
950
+ if (tracer_ != nullptr && tracer_->IsWriteOrderPreserved()) {
951
+ for (auto* writer : write_group) {
952
+ // TODO: maybe handle the tracing status?
953
+ tracer_->Write(writer->batch).PermitUncheckedError();
954
+ }
955
+ }
956
+ }
957
+
958
+ size_t pre_release_callback_cnt = 0;
959
+ size_t total_byte_size = 0;
960
+ for (auto* writer : write_group) {
961
+ assert(writer);
962
+ if (writer->CheckCallback(this)) {
963
+ total_byte_size = WriteBatchInternal::AppendedByteSize(
964
+ total_byte_size, WriteBatchInternal::ByteSize(writer->batch));
965
+ if (writer->pre_release_callback) {
966
+ pre_release_callback_cnt++;
967
+ }
968
+ }
969
+ }
970
+
971
+ const bool concurrent_update = true;
972
+ // Update stats while we are an exclusive group leader, so we know
973
+ // that nobody else can be writing to these particular stats.
974
+ // We're optimistic, updating the stats before we successfully
975
+ // commit. That lets us release our leader status early.
976
+ auto stats = default_cf_internal_stats_;
977
+ stats->AddDBStats(InternalStats::kIntStatsBytesWritten, total_byte_size,
978
+ concurrent_update);
979
+ RecordTick(stats_, BYTES_WRITTEN, total_byte_size);
980
+ stats->AddDBStats(InternalStats::kIntStatsWriteDoneBySelf, 1,
981
+ concurrent_update);
982
+ RecordTick(stats_, WRITE_DONE_BY_SELF);
983
+ auto write_done_by_other = write_group.size - 1;
984
+ if (write_done_by_other > 0) {
985
+ stats->AddDBStats(InternalStats::kIntStatsWriteDoneByOther,
986
+ write_done_by_other, concurrent_update);
987
+ RecordTick(stats_, WRITE_DONE_BY_OTHER, write_done_by_other);
988
+ }
989
+ RecordInHistogram(stats_, BYTES_PER_WRITE, total_byte_size);
990
+
991
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
992
+
993
+ PERF_TIMER_GUARD(write_wal_time);
994
+ // LastAllocatedSequence is increased inside WriteToWAL under
995
+ // wal_write_mutex_ to ensure ordered events in WAL
996
+ size_t seq_inc = 0 /* total_count */;
997
+ if (assign_order == kDoAssignOrder) {
998
+ size_t total_batch_cnt = 0;
999
+ for (auto* writer : write_group) {
1000
+ assert(writer->batch_cnt || !seq_per_batch_);
1001
+ if (!writer->CallbackFailed()) {
1002
+ total_batch_cnt += writer->batch_cnt;
1003
+ }
1004
+ }
1005
+ seq_inc = total_batch_cnt;
1006
+ }
1007
+ Status status;
1008
+ if (!write_options.disableWAL) {
1009
+ IOStatus io_s =
1010
+ ConcurrentWriteToWAL(write_group, log_used, &last_sequence, seq_inc);
1011
+ status = io_s;
1012
+ // last_sequence may not be set if there is an error
1013
+ // This error checking and return is moved up to avoid using uninitialized
1014
+ // last_sequence.
1015
+ if (!io_s.ok()) {
1016
+ IOStatusCheck(io_s);
1017
+ write_thread->ExitAsBatchGroupLeader(write_group, status);
1018
+ return status;
1019
+ }
1020
+ } else {
1021
+ // Otherwise we inc seq number to do solely the seq allocation
1022
+ last_sequence = versions_->FetchAddLastAllocatedSequence(seq_inc);
1023
+ }
1024
+
1025
+ size_t memtable_write_cnt = 0;
1026
+ auto curr_seq = last_sequence + 1;
1027
+ for (auto* writer : write_group) {
1028
+ if (writer->CallbackFailed()) {
1029
+ continue;
1030
+ }
1031
+ writer->sequence = curr_seq;
1032
+ if (assign_order == kDoAssignOrder) {
1033
+ assert(writer->batch_cnt || !seq_per_batch_);
1034
+ curr_seq += writer->batch_cnt;
1035
+ }
1036
+ if (!writer->disable_memtable) {
1037
+ memtable_write_cnt++;
1038
+ }
1039
+ // else seq advances only by memtable writes
1040
+ }
1041
+ if (status.ok() && write_options.sync) {
1042
+ assert(!write_options.disableWAL);
1043
+ // Requesting sync with two_write_queues_ is expected to be very rare. We
1044
+ // hance provide a simple implementation that is not necessarily efficient.
1045
+ if (manual_wal_flush_) {
1046
+ status = FlushWAL(true);
1047
+ } else {
1048
+ status = SyncWAL();
1049
+ }
1050
+ }
1051
+ PERF_TIMER_START(write_pre_and_post_process_time);
1052
+
1053
+ if (!w.CallbackFailed()) {
1054
+ WriteStatusCheck(status);
1055
+ }
1056
+ if (status.ok()) {
1057
+ size_t index = 0;
1058
+ for (auto* writer : write_group) {
1059
+ if (!writer->CallbackFailed() && writer->pre_release_callback) {
1060
+ assert(writer->sequence != kMaxSequenceNumber);
1061
+ Status ws = writer->pre_release_callback->Callback(
1062
+ writer->sequence, disable_memtable, writer->log_used, index++,
1063
+ pre_release_callback_cnt);
1064
+ if (!ws.ok()) {
1065
+ status = ws;
1066
+ break;
1067
+ }
1068
+ }
1069
+ }
1070
+ }
1071
+ if (publish_last_seq == kDoPublishLastSeq) {
1072
+ versions_->SetLastSequence(last_sequence + seq_inc);
1073
+ // Currently we only use kDoPublishLastSeq in unordered_write
1074
+ assert(immutable_db_options_.unordered_write);
1075
+ }
1076
+ if (immutable_db_options_.unordered_write && status.ok()) {
1077
+ pending_memtable_writes_ += memtable_write_cnt;
1078
+ }
1079
+ write_thread->ExitAsBatchGroupLeader(write_group, status);
1080
+ if (status.ok()) {
1081
+ status = w.FinalStatus();
1082
+ }
1083
+ if (seq_used != nullptr) {
1084
+ *seq_used = w.sequence;
1085
+ }
1086
+ return status;
1087
+ }
1088
+
1089
+ void DBImpl::WriteStatusCheckOnLocked(const Status& status) {
1090
+ // Is setting bg_error_ enough here? This will at least stop
1091
+ // compaction and fail any further writes.
1092
+ InstrumentedMutexLock l(&mutex_);
1093
+ assert(!status.IsIOFenced() || !error_handler_.GetBGError().ok());
1094
+ if (immutable_db_options_.paranoid_checks && !status.ok() &&
1095
+ !status.IsBusy() && !status.IsIncomplete()) {
1096
+ // Maybe change the return status to void?
1097
+ error_handler_.SetBGError(status, BackgroundErrorReason::kWriteCallback);
1098
+ }
1099
+ }
1100
+
1101
+ void DBImpl::WriteStatusCheck(const Status& status) {
1102
+ // Is setting bg_error_ enough here? This will at least stop
1103
+ // compaction and fail any further writes.
1104
+ assert(!status.IsIOFenced() || !error_handler_.GetBGError().ok());
1105
+ if (immutable_db_options_.paranoid_checks && !status.ok() &&
1106
+ !status.IsBusy() && !status.IsIncomplete()) {
1107
+ mutex_.Lock();
1108
+ // Maybe change the return status to void?
1109
+ error_handler_.SetBGError(status, BackgroundErrorReason::kWriteCallback);
1110
+ mutex_.Unlock();
1111
+ }
1112
+ }
1113
+
1114
+ void DBImpl::IOStatusCheck(const IOStatus& io_status) {
1115
+ // Is setting bg_error_ enough here? This will at least stop
1116
+ // compaction and fail any further writes.
1117
+ if ((immutable_db_options_.paranoid_checks && !io_status.ok() &&
1118
+ !io_status.IsBusy() && !io_status.IsIncomplete()) ||
1119
+ io_status.IsIOFenced()) {
1120
+ mutex_.Lock();
1121
+ // Maybe change the return status to void?
1122
+ error_handler_.SetBGError(io_status, BackgroundErrorReason::kWriteCallback);
1123
+ mutex_.Unlock();
1124
+ } else {
1125
+ // Force writable file to be continue writable.
1126
+ logs_.back().writer->file()->reset_seen_error();
1127
+ }
1128
+ }
1129
+
1130
+ void DBImpl::MemTableInsertStatusCheck(const Status& status) {
1131
+ // A non-OK status here indicates that the state implied by the
1132
+ // WAL has diverged from the in-memory state. This could be
1133
+ // because of a corrupt write_batch (very bad), or because the
1134
+ // client specified an invalid column family and didn't specify
1135
+ // ignore_missing_column_families.
1136
+ if (!status.ok()) {
1137
+ mutex_.Lock();
1138
+ assert(!error_handler_.IsBGWorkStopped());
1139
+ // Maybe change the return status to void?
1140
+ error_handler_.SetBGError(status, BackgroundErrorReason::kMemTable)
1141
+ .PermitUncheckedError();
1142
+ mutex_.Unlock();
1143
+ }
1144
+ }
1145
+
1146
+ Status DBImpl::PreprocessWrite(const WriteOptions& write_options,
1147
+ LogContext* log_context,
1148
+ WriteContext* write_context) {
1149
+ assert(write_context != nullptr && log_context != nullptr);
1150
+ Status status;
1151
+
1152
+ if (error_handler_.IsDBStopped()) {
1153
+ InstrumentedMutexLock l(&mutex_);
1154
+ status = error_handler_.GetBGError();
1155
+ }
1156
+
1157
+ PERF_TIMER_GUARD(write_scheduling_flushes_compactions_time);
1158
+
1159
+ if (UNLIKELY(status.ok() && total_log_size_ > GetMaxTotalWalSize())) {
1160
+ assert(versions_);
1161
+ InstrumentedMutexLock l(&mutex_);
1162
+ const ColumnFamilySet* const column_families =
1163
+ versions_->GetColumnFamilySet();
1164
+ assert(column_families);
1165
+ size_t num_cfs = column_families->NumberOfColumnFamilies();
1166
+ assert(num_cfs >= 1);
1167
+ if (num_cfs > 1) {
1168
+ WaitForPendingWrites();
1169
+ status = SwitchWAL(write_context);
1170
+ }
1171
+ }
1172
+
1173
+ if (UNLIKELY(status.ok() && write_buffer_manager_->ShouldFlush())) {
1174
+ // Before a new memtable is added in SwitchMemtable(),
1175
+ // write_buffer_manager_->ShouldFlush() will keep returning true. If another
1176
+ // thread is writing to another DB with the same write buffer, they may also
1177
+ // be flushed. We may end up with flushing much more DBs than needed. It's
1178
+ // suboptimal but still correct.
1179
+ InstrumentedMutexLock l(&mutex_);
1180
+ WaitForPendingWrites();
1181
+ status = HandleWriteBufferManagerFlush(write_context);
1182
+ }
1183
+
1184
+ if (UNLIKELY(status.ok() && !trim_history_scheduler_.Empty())) {
1185
+ InstrumentedMutexLock l(&mutex_);
1186
+ status = TrimMemtableHistory(write_context);
1187
+ }
1188
+
1189
+ if (UNLIKELY(status.ok() && !flush_scheduler_.Empty())) {
1190
+ InstrumentedMutexLock l(&mutex_);
1191
+ WaitForPendingWrites();
1192
+ status = ScheduleFlushes(write_context);
1193
+ }
1194
+
1195
+ PERF_TIMER_STOP(write_scheduling_flushes_compactions_time);
1196
+ PERF_TIMER_GUARD(write_pre_and_post_process_time);
1197
+
1198
+ if (UNLIKELY(status.ok() && (write_controller_.IsStopped() ||
1199
+ write_controller_.NeedsDelay()))) {
1200
+ PERF_TIMER_STOP(write_pre_and_post_process_time);
1201
+ PERF_TIMER_GUARD(write_delay_time);
1202
+ // We don't know size of curent batch so that we always use the size
1203
+ // for previous one. It might create a fairness issue that expiration
1204
+ // might happen for smaller writes but larger writes can go through.
1205
+ // Can optimize it if it is an issue.
1206
+ InstrumentedMutexLock l(&mutex_);
1207
+ status = DelayWrite(last_batch_group_size_, write_thread_, write_options);
1208
+ PERF_TIMER_START(write_pre_and_post_process_time);
1209
+ }
1210
+
1211
+ // If memory usage exceeded beyond a certain threshold,
1212
+ // write_buffer_manager_->ShouldStall() returns true to all threads writing to
1213
+ // all DBs and writers will be stalled.
1214
+ // It does soft checking because WriteBufferManager::buffer_limit_ has already
1215
+ // exceeded at this point so no new write (including current one) will go
1216
+ // through until memory usage is decreased.
1217
+ if (UNLIKELY(status.ok() && write_buffer_manager_->ShouldStall())) {
1218
+ default_cf_internal_stats_->AddDBStats(
1219
+ InternalStats::kIntStatsWriteBufferManagerLimitStopsCounts, 1,
1220
+ true /* concurrent */);
1221
+ if (write_options.no_slowdown) {
1222
+ status = Status::Incomplete("Write stall");
1223
+ } else {
1224
+ InstrumentedMutexLock l(&mutex_);
1225
+ WriteBufferManagerStallWrites();
1226
+ }
1227
+ }
1228
+ InstrumentedMutexLock l(&log_write_mutex_);
1229
+ if (status.ok() && log_context->need_log_sync) {
1230
+ // Wait until the parallel syncs are finished. Any sync process has to sync
1231
+ // the front log too so it is enough to check the status of front()
1232
+ // We do a while loop since log_sync_cv_ is signalled when any sync is
1233
+ // finished
1234
+ // Note: there does not seem to be a reason to wait for parallel sync at
1235
+ // this early step but it is not important since parallel sync (SyncWAL) and
1236
+ // need_log_sync are usually not used together.
1237
+ while (logs_.front().IsSyncing()) {
1238
+ log_sync_cv_.Wait();
1239
+ }
1240
+ for (auto& log : logs_) {
1241
+ // This is just to prevent the logs to be synced by a parallel SyncWAL
1242
+ // call. We will do the actual syncing later after we will write to the
1243
+ // WAL.
1244
+ // Note: there does not seem to be a reason to set this early before we
1245
+ // actually write to the WAL
1246
+ log.PrepareForSync();
1247
+ }
1248
+ } else {
1249
+ log_context->need_log_sync = false;
1250
+ }
1251
+ log_context->writer = logs_.back().writer;
1252
+ log_context->need_log_dir_sync =
1253
+ log_context->need_log_dir_sync && !log_dir_synced_;
1254
+ log_context->log_file_number_size = std::addressof(alive_log_files_.back());
1255
+
1256
+ return status;
1257
+ }
1258
+
1259
+ Status DBImpl::MergeBatch(const WriteThread::WriteGroup& write_group,
1260
+ WriteBatch* tmp_batch, WriteBatch** merged_batch,
1261
+ size_t* write_with_wal,
1262
+ WriteBatch** to_be_cached_state) {
1263
+ assert(write_with_wal != nullptr);
1264
+ assert(tmp_batch != nullptr);
1265
+ assert(*to_be_cached_state == nullptr);
1266
+ *write_with_wal = 0;
1267
+ auto* leader = write_group.leader;
1268
+ assert(!leader->disable_wal); // Same holds for all in the batch group
1269
+ if (write_group.size == 1 && !leader->CallbackFailed() &&
1270
+ leader->batch->GetWalTerminationPoint().is_cleared()) {
1271
+ // we simply write the first WriteBatch to WAL if the group only
1272
+ // contains one batch, that batch should be written to the WAL,
1273
+ // and the batch is not wanting to be truncated
1274
+ *merged_batch = leader->batch;
1275
+ if (WriteBatchInternal::IsLatestPersistentState(*merged_batch)) {
1276
+ *to_be_cached_state = *merged_batch;
1277
+ }
1278
+ *write_with_wal = 1;
1279
+ } else {
1280
+ // WAL needs all of the batches flattened into a single batch.
1281
+ // We could avoid copying here with an iov-like AddRecord
1282
+ // interface
1283
+ *merged_batch = tmp_batch;
1284
+ for (auto writer : write_group) {
1285
+ if (!writer->CallbackFailed()) {
1286
+ Status s = WriteBatchInternal::Append(*merged_batch, writer->batch,
1287
+ /*WAL_only*/ true);
1288
+ if (!s.ok()) {
1289
+ tmp_batch->Clear();
1290
+ return s;
1291
+ }
1292
+ if (WriteBatchInternal::IsLatestPersistentState(writer->batch)) {
1293
+ // We only need to cache the last of such write batch
1294
+ *to_be_cached_state = writer->batch;
1295
+ }
1296
+ (*write_with_wal)++;
1297
+ }
1298
+ }
1299
+ }
1300
+ // return merged_batch;
1301
+ return Status::OK();
1302
+ }
1303
+
1304
+ // When two_write_queues_ is disabled, this function is called from the only
1305
+ // write thread. Otherwise this must be called holding log_write_mutex_.
1306
+ IOStatus DBImpl::WriteToWAL(const WriteBatch& merged_batch,
1307
+ log::Writer* log_writer, uint64_t* log_used,
1308
+ uint64_t* log_size,
1309
+ Env::IOPriority rate_limiter_priority,
1310
+ LogFileNumberSize& log_file_number_size) {
1311
+ assert(log_size != nullptr);
1312
+
1313
+ Slice log_entry = WriteBatchInternal::Contents(&merged_batch);
1314
+ TEST_SYNC_POINT_CALLBACK("DBImpl::WriteToWAL:log_entry", &log_entry);
1315
+ auto s = merged_batch.VerifyChecksum();
1316
+ if (!s.ok()) {
1317
+ return status_to_io_status(std::move(s));
1318
+ }
1319
+ *log_size = log_entry.size();
1320
+ // When two_write_queues_ WriteToWAL has to be protected from concurretn calls
1321
+ // from the two queues anyway and log_write_mutex_ is already held. Otherwise
1322
+ // if manual_wal_flush_ is enabled we need to protect log_writer->AddRecord
1323
+ // from possible concurrent calls via the FlushWAL by the application.
1324
+ const bool needs_locking = manual_wal_flush_ && !two_write_queues_;
1325
+ // Due to performance cocerns of missed branch prediction penalize the new
1326
+ // manual_wal_flush_ feature (by UNLIKELY) instead of the more common case
1327
+ // when we do not need any locking.
1328
+ if (UNLIKELY(needs_locking)) {
1329
+ log_write_mutex_.Lock();
1330
+ }
1331
+ IOStatus io_s = log_writer->AddRecord(log_entry, rate_limiter_priority);
1332
+
1333
+ if (UNLIKELY(needs_locking)) {
1334
+ log_write_mutex_.Unlock();
1335
+ }
1336
+ if (log_used != nullptr) {
1337
+ *log_used = logfile_number_;
1338
+ }
1339
+ total_log_size_ += log_entry.size();
1340
+ log_file_number_size.AddSize(*log_size);
1341
+ log_empty_ = false;
1342
+ return io_s;
1343
+ }
1344
+
1345
+ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
1346
+ log::Writer* log_writer, uint64_t* log_used,
1347
+ bool need_log_sync, bool need_log_dir_sync,
1348
+ SequenceNumber sequence,
1349
+ LogFileNumberSize& log_file_number_size) {
1350
+ IOStatus io_s;
1351
+ assert(!two_write_queues_);
1352
+ assert(!write_group.leader->disable_wal);
1353
+ // Same holds for all in the batch group
1354
+ size_t write_with_wal = 0;
1355
+ WriteBatch* to_be_cached_state = nullptr;
1356
+ WriteBatch* merged_batch;
1357
+ io_s = status_to_io_status(MergeBatch(write_group, &tmp_batch_, &merged_batch,
1358
+ &write_with_wal, &to_be_cached_state));
1359
+ if (UNLIKELY(!io_s.ok())) {
1360
+ return io_s;
1361
+ }
1362
+
1363
+ if (merged_batch == write_group.leader->batch) {
1364
+ write_group.leader->log_used = logfile_number_;
1365
+ } else if (write_with_wal > 1) {
1366
+ for (auto writer : write_group) {
1367
+ writer->log_used = logfile_number_;
1368
+ }
1369
+ }
1370
+
1371
+ WriteBatchInternal::SetSequence(merged_batch, sequence);
1372
+
1373
+ uint64_t log_size;
1374
+ io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size,
1375
+ write_group.leader->rate_limiter_priority,
1376
+ log_file_number_size);
1377
+ if (to_be_cached_state) {
1378
+ cached_recoverable_state_ = *to_be_cached_state;
1379
+ cached_recoverable_state_empty_ = false;
1380
+ }
1381
+
1382
+ if (io_s.ok() && need_log_sync) {
1383
+ StopWatch sw(immutable_db_options_.clock, stats_, WAL_FILE_SYNC_MICROS);
1384
+ // It's safe to access logs_ with unlocked mutex_ here because:
1385
+ // - we've set getting_synced=true for all logs,
1386
+ // so other threads won't pop from logs_ while we're here,
1387
+ // - only writer thread can push to logs_, and we're in
1388
+ // writer thread, so no one will push to logs_,
1389
+ // - as long as other threads don't modify it, it's safe to read
1390
+ // from std::deque from multiple threads concurrently.
1391
+ //
1392
+ // Sync operation should work with locked log_write_mutex_, because:
1393
+ // when DBOptions.manual_wal_flush_ is set,
1394
+ // FlushWAL function will be invoked by another thread.
1395
+ // if without locked log_write_mutex_, the log file may get data
1396
+ // corruption
1397
+
1398
+ const bool needs_locking = manual_wal_flush_ && !two_write_queues_;
1399
+ if (UNLIKELY(needs_locking)) {
1400
+ log_write_mutex_.Lock();
1401
+ }
1402
+
1403
+ for (auto& log : logs_) {
1404
+ io_s = log.writer->file()->Sync(immutable_db_options_.use_fsync);
1405
+ if (!io_s.ok()) {
1406
+ break;
1407
+ }
1408
+ }
1409
+
1410
+ if (UNLIKELY(needs_locking)) {
1411
+ log_write_mutex_.Unlock();
1412
+ }
1413
+
1414
+ if (io_s.ok() && need_log_dir_sync) {
1415
+ // We only sync WAL directory the first time WAL syncing is
1416
+ // requested, so that in case users never turn on WAL sync,
1417
+ // we can avoid the disk I/O in the write code path.
1418
+ io_s = directories_.GetWalDir()->FsyncWithDirOptions(
1419
+ IOOptions(), nullptr,
1420
+ DirFsyncOptions(DirFsyncOptions::FsyncReason::kNewFileSynced));
1421
+ }
1422
+ }
1423
+
1424
+ if (merged_batch == &tmp_batch_) {
1425
+ tmp_batch_.Clear();
1426
+ }
1427
+ if (io_s.ok()) {
1428
+ auto stats = default_cf_internal_stats_;
1429
+ if (need_log_sync) {
1430
+ stats->AddDBStats(InternalStats::kIntStatsWalFileSynced, 1);
1431
+ RecordTick(stats_, WAL_FILE_SYNCED);
1432
+ }
1433
+ stats->AddDBStats(InternalStats::kIntStatsWalFileBytes, log_size);
1434
+ RecordTick(stats_, WAL_FILE_BYTES, log_size);
1435
+ stats->AddDBStats(InternalStats::kIntStatsWriteWithWal, write_with_wal);
1436
+ RecordTick(stats_, WRITE_WITH_WAL, write_with_wal);
1437
+ }
1438
+ return io_s;
1439
+ }
1440
+
1441
+ IOStatus DBImpl::ConcurrentWriteToWAL(
1442
+ const WriteThread::WriteGroup& write_group, uint64_t* log_used,
1443
+ SequenceNumber* last_sequence, size_t seq_inc) {
1444
+ IOStatus io_s;
1445
+
1446
+ assert(two_write_queues_ || immutable_db_options_.unordered_write);
1447
+ assert(!write_group.leader->disable_wal);
1448
+ // Same holds for all in the batch group
1449
+ WriteBatch tmp_batch;
1450
+ size_t write_with_wal = 0;
1451
+ WriteBatch* to_be_cached_state = nullptr;
1452
+ WriteBatch* merged_batch;
1453
+ io_s = status_to_io_status(MergeBatch(write_group, &tmp_batch, &merged_batch,
1454
+ &write_with_wal, &to_be_cached_state));
1455
+ if (UNLIKELY(!io_s.ok())) {
1456
+ return io_s;
1457
+ }
1458
+
1459
+ // We need to lock log_write_mutex_ since logs_ and alive_log_files might be
1460
+ // pushed back concurrently
1461
+ log_write_mutex_.Lock();
1462
+ if (merged_batch == write_group.leader->batch) {
1463
+ write_group.leader->log_used = logfile_number_;
1464
+ } else if (write_with_wal > 1) {
1465
+ for (auto writer : write_group) {
1466
+ writer->log_used = logfile_number_;
1467
+ }
1468
+ }
1469
+ *last_sequence = versions_->FetchAddLastAllocatedSequence(seq_inc);
1470
+ auto sequence = *last_sequence + 1;
1471
+ WriteBatchInternal::SetSequence(merged_batch, sequence);
1472
+
1473
+ log::Writer* log_writer = logs_.back().writer;
1474
+ LogFileNumberSize& log_file_number_size = alive_log_files_.back();
1475
+
1476
+ assert(log_writer->get_log_number() == log_file_number_size.number);
1477
+
1478
+ uint64_t log_size;
1479
+ io_s = WriteToWAL(*merged_batch, log_writer, log_used, &log_size,
1480
+ write_group.leader->rate_limiter_priority,
1481
+ log_file_number_size);
1482
+ if (to_be_cached_state) {
1483
+ cached_recoverable_state_ = *to_be_cached_state;
1484
+ cached_recoverable_state_empty_ = false;
1485
+ }
1486
+ log_write_mutex_.Unlock();
1487
+
1488
+ if (io_s.ok()) {
1489
+ const bool concurrent = true;
1490
+ auto stats = default_cf_internal_stats_;
1491
+ stats->AddDBStats(InternalStats::kIntStatsWalFileBytes, log_size,
1492
+ concurrent);
1493
+ RecordTick(stats_, WAL_FILE_BYTES, log_size);
1494
+ stats->AddDBStats(InternalStats::kIntStatsWriteWithWal, write_with_wal,
1495
+ concurrent);
1496
+ RecordTick(stats_, WRITE_WITH_WAL, write_with_wal);
1497
+ }
1498
+ return io_s;
1499
+ }
1500
+
1501
+ Status DBImpl::WriteRecoverableState() {
1502
+ mutex_.AssertHeld();
1503
+ if (!cached_recoverable_state_empty_) {
1504
+ bool dont_care_bool;
1505
+ SequenceNumber next_seq;
1506
+ if (two_write_queues_) {
1507
+ log_write_mutex_.Lock();
1508
+ }
1509
+ SequenceNumber seq;
1510
+ if (two_write_queues_) {
1511
+ seq = versions_->FetchAddLastAllocatedSequence(0);
1512
+ } else {
1513
+ seq = versions_->LastSequence();
1514
+ }
1515
+ WriteBatchInternal::SetSequence(&cached_recoverable_state_, seq + 1);
1516
+ auto status = WriteBatchInternal::InsertInto(
1517
+ &cached_recoverable_state_, column_family_memtables_.get(),
1518
+ &flush_scheduler_, &trim_history_scheduler_, true,
1519
+ 0 /*recovery_log_number*/, this, false /* concurrent_memtable_writes */,
1520
+ &next_seq, &dont_care_bool, seq_per_batch_);
1521
+ auto last_seq = next_seq - 1;
1522
+ if (two_write_queues_) {
1523
+ versions_->FetchAddLastAllocatedSequence(last_seq - seq);
1524
+ versions_->SetLastPublishedSequence(last_seq);
1525
+ }
1526
+ versions_->SetLastSequence(last_seq);
1527
+ if (two_write_queues_) {
1528
+ log_write_mutex_.Unlock();
1529
+ }
1530
+ if (status.ok() && recoverable_state_pre_release_callback_) {
1531
+ const bool DISABLE_MEMTABLE = true;
1532
+ for (uint64_t sub_batch_seq = seq + 1;
1533
+ sub_batch_seq < next_seq && status.ok(); sub_batch_seq++) {
1534
+ uint64_t const no_log_num = 0;
1535
+ // Unlock it since the callback might end up locking mutex. e.g.,
1536
+ // AddCommitted -> AdvanceMaxEvictedSeq -> GetSnapshotListFromDB
1537
+ mutex_.Unlock();
1538
+ status = recoverable_state_pre_release_callback_->Callback(
1539
+ sub_batch_seq, !DISABLE_MEMTABLE, no_log_num, 0, 1);
1540
+ mutex_.Lock();
1541
+ }
1542
+ }
1543
+ if (status.ok()) {
1544
+ cached_recoverable_state_.Clear();
1545
+ cached_recoverable_state_empty_ = true;
1546
+ }
1547
+ return status;
1548
+ }
1549
+ return Status::OK();
1550
+ }
1551
+
1552
+ void DBImpl::SelectColumnFamiliesForAtomicFlush(
1553
+ autovector<ColumnFamilyData*>* selected_cfds,
1554
+ const autovector<ColumnFamilyData*>& provided_candidate_cfds) {
1555
+ mutex_.AssertHeld();
1556
+ assert(selected_cfds);
1557
+
1558
+ autovector<ColumnFamilyData*> candidate_cfds;
1559
+
1560
+ // Generate candidate cfds if not provided
1561
+ if (provided_candidate_cfds.empty()) {
1562
+ for (ColumnFamilyData* cfd : *versions_->GetColumnFamilySet()) {
1563
+ if (!cfd->IsDropped() && cfd->initialized()) {
1564
+ cfd->Ref();
1565
+ candidate_cfds.push_back(cfd);
1566
+ }
1567
+ }
1568
+ } else {
1569
+ candidate_cfds = provided_candidate_cfds;
1570
+ }
1571
+
1572
+ for (ColumnFamilyData* cfd : candidate_cfds) {
1573
+ if (cfd->IsDropped()) {
1574
+ continue;
1575
+ }
1576
+ if (cfd->imm()->NumNotFlushed() != 0 || !cfd->mem()->IsEmpty() ||
1577
+ !cached_recoverable_state_empty_.load()) {
1578
+ selected_cfds->push_back(cfd);
1579
+ }
1580
+ }
1581
+
1582
+ // Unref the newly generated candidate cfds (when not provided) in
1583
+ // `candidate_cfds`
1584
+ if (provided_candidate_cfds.empty()) {
1585
+ for (auto candidate_cfd : candidate_cfds) {
1586
+ candidate_cfd->UnrefAndTryDelete();
1587
+ }
1588
+ }
1589
+ }
1590
+
1591
+ // Assign sequence number for atomic flush.
1592
+ void DBImpl::AssignAtomicFlushSeq(const autovector<ColumnFamilyData*>& cfds) {
1593
+ assert(immutable_db_options_.atomic_flush);
1594
+ auto seq = versions_->LastSequence();
1595
+ for (auto cfd : cfds) {
1596
+ cfd->imm()->AssignAtomicFlushSeq(seq);
1597
+ }
1598
+ }
1599
+
1600
+ Status DBImpl::SwitchWAL(WriteContext* write_context) {
1601
+ mutex_.AssertHeld();
1602
+ assert(write_context != nullptr);
1603
+ Status status;
1604
+
1605
+ if (alive_log_files_.begin()->getting_flushed) {
1606
+ return status;
1607
+ }
1608
+
1609
+ auto oldest_alive_log = alive_log_files_.begin()->number;
1610
+ bool flush_wont_release_oldest_log = false;
1611
+ if (allow_2pc()) {
1612
+ auto oldest_log_with_uncommitted_prep =
1613
+ logs_with_prep_tracker_.FindMinLogContainingOutstandingPrep();
1614
+
1615
+ assert(oldest_log_with_uncommitted_prep == 0 ||
1616
+ oldest_log_with_uncommitted_prep >= oldest_alive_log);
1617
+ if (oldest_log_with_uncommitted_prep > 0 &&
1618
+ oldest_log_with_uncommitted_prep == oldest_alive_log) {
1619
+ if (unable_to_release_oldest_log_) {
1620
+ // we already attempted to flush all column families dependent on
1621
+ // the oldest alive log but the log still contained uncommitted
1622
+ // transactions so there is still nothing that we can do.
1623
+ return status;
1624
+ } else {
1625
+ ROCKS_LOG_WARN(
1626
+ immutable_db_options_.info_log,
1627
+ "Unable to release oldest log due to uncommitted transaction");
1628
+ unable_to_release_oldest_log_ = true;
1629
+ flush_wont_release_oldest_log = true;
1630
+ }
1631
+ }
1632
+ }
1633
+ if (!flush_wont_release_oldest_log) {
1634
+ // we only mark this log as getting flushed if we have successfully
1635
+ // flushed all data in this log. If this log contains outstanding prepared
1636
+ // transactions then we cannot flush this log until those transactions are
1637
+ // commited.
1638
+ unable_to_release_oldest_log_ = false;
1639
+ alive_log_files_.begin()->getting_flushed = true;
1640
+ }
1641
+
1642
+ ROCKS_LOG_INFO(
1643
+ immutable_db_options_.info_log,
1644
+ "Flushing all column families with data in WAL number %" PRIu64
1645
+ ". Total log size is %" PRIu64 " while max_total_wal_size is %" PRIu64,
1646
+ oldest_alive_log, total_log_size_.load(), GetMaxTotalWalSize());
1647
+ // no need to refcount because drop is happening in write thread, so can't
1648
+ // happen while we're in the write thread
1649
+ autovector<ColumnFamilyData*> cfds;
1650
+ if (immutable_db_options_.atomic_flush) {
1651
+ SelectColumnFamiliesForAtomicFlush(&cfds);
1652
+ } else {
1653
+ for (auto cfd : *versions_->GetColumnFamilySet()) {
1654
+ if (cfd->IsDropped()) {
1655
+ continue;
1656
+ }
1657
+ if (cfd->OldestLogToKeep() <= oldest_alive_log) {
1658
+ cfds.push_back(cfd);
1659
+ }
1660
+ }
1661
+ MaybeFlushStatsCF(&cfds);
1662
+ }
1663
+ WriteThread::Writer nonmem_w;
1664
+ if (two_write_queues_) {
1665
+ nonmem_write_thread_.EnterUnbatched(&nonmem_w, &mutex_);
1666
+ }
1667
+
1668
+ for (const auto cfd : cfds) {
1669
+ cfd->Ref();
1670
+ status = SwitchMemtable(cfd, write_context);
1671
+ cfd->UnrefAndTryDelete();
1672
+ if (!status.ok()) {
1673
+ break;
1674
+ }
1675
+ }
1676
+ if (two_write_queues_) {
1677
+ nonmem_write_thread_.ExitUnbatched(&nonmem_w);
1678
+ }
1679
+
1680
+ if (status.ok()) {
1681
+ if (immutable_db_options_.atomic_flush) {
1682
+ AssignAtomicFlushSeq(cfds);
1683
+ }
1684
+ for (auto cfd : cfds) {
1685
+ cfd->imm()->FlushRequested();
1686
+ if (!immutable_db_options_.atomic_flush) {
1687
+ FlushRequest flush_req;
1688
+ GenerateFlushRequest({cfd}, FlushReason::kWalFull, &flush_req);
1689
+ SchedulePendingFlush(flush_req);
1690
+ }
1691
+ }
1692
+ if (immutable_db_options_.atomic_flush) {
1693
+ FlushRequest flush_req;
1694
+ GenerateFlushRequest(cfds, FlushReason::kWalFull, &flush_req);
1695
+ SchedulePendingFlush(flush_req);
1696
+ }
1697
+ MaybeScheduleFlushOrCompaction();
1698
+ }
1699
+ return status;
1700
+ }
1701
+
1702
+ Status DBImpl::HandleWriteBufferManagerFlush(WriteContext* write_context) {
1703
+ mutex_.AssertHeld();
1704
+ assert(write_context != nullptr);
1705
+ Status status;
1706
+
1707
+ // Before a new memtable is added in SwitchMemtable(),
1708
+ // write_buffer_manager_->ShouldFlush() will keep returning true. If another
1709
+ // thread is writing to another DB with the same write buffer, they may also
1710
+ // be flushed. We may end up with flushing much more DBs than needed. It's
1711
+ // suboptimal but still correct.
1712
+ // no need to refcount because drop is happening in write thread, so can't
1713
+ // happen while we're in the write thread
1714
+ autovector<ColumnFamilyData*> cfds;
1715
+ if (immutable_db_options_.atomic_flush) {
1716
+ SelectColumnFamiliesForAtomicFlush(&cfds);
1717
+ } else {
1718
+ ColumnFamilyData* cfd_picked = nullptr;
1719
+ SequenceNumber seq_num_for_cf_picked = kMaxSequenceNumber;
1720
+
1721
+ for (auto cfd : *versions_->GetColumnFamilySet()) {
1722
+ if (cfd->IsDropped()) {
1723
+ continue;
1724
+ }
1725
+ if (!cfd->mem()->IsEmpty() && !cfd->imm()->IsFlushPendingOrRunning()) {
1726
+ // We only consider flush on CFs with bytes in the mutable memtable,
1727
+ // and no immutable memtables for which flush has yet to finish. If
1728
+ // we triggered flush on CFs already trying to flush, we would risk
1729
+ // creating too many immutable memtables leading to write stalls.
1730
+ uint64_t seq = cfd->mem()->GetCreationSeq();
1731
+ if (cfd_picked == nullptr || seq < seq_num_for_cf_picked) {
1732
+ cfd_picked = cfd;
1733
+ seq_num_for_cf_picked = seq;
1734
+ }
1735
+ }
1736
+ }
1737
+ if (cfd_picked != nullptr) {
1738
+ cfds.push_back(cfd_picked);
1739
+ }
1740
+ MaybeFlushStatsCF(&cfds);
1741
+ }
1742
+ if (!cfds.empty()) {
1743
+ ROCKS_LOG_INFO(
1744
+ immutable_db_options_.info_log,
1745
+ "Flushing triggered to alleviate write buffer memory usage. Write "
1746
+ "buffer is using %" ROCKSDB_PRIszt
1747
+ " bytes out of a total of %" ROCKSDB_PRIszt ".",
1748
+ write_buffer_manager_->memory_usage(),
1749
+ write_buffer_manager_->buffer_size());
1750
+ }
1751
+
1752
+ WriteThread::Writer nonmem_w;
1753
+ if (two_write_queues_) {
1754
+ nonmem_write_thread_.EnterUnbatched(&nonmem_w, &mutex_);
1755
+ }
1756
+ for (const auto cfd : cfds) {
1757
+ if (cfd->mem()->IsEmpty()) {
1758
+ continue;
1759
+ }
1760
+ cfd->Ref();
1761
+ status = SwitchMemtable(cfd, write_context);
1762
+ cfd->UnrefAndTryDelete();
1763
+ if (!status.ok()) {
1764
+ break;
1765
+ }
1766
+ }
1767
+ if (two_write_queues_) {
1768
+ nonmem_write_thread_.ExitUnbatched(&nonmem_w);
1769
+ }
1770
+
1771
+ if (status.ok()) {
1772
+ if (immutable_db_options_.atomic_flush) {
1773
+ AssignAtomicFlushSeq(cfds);
1774
+ }
1775
+ for (const auto cfd : cfds) {
1776
+ cfd->imm()->FlushRequested();
1777
+ if (!immutable_db_options_.atomic_flush) {
1778
+ FlushRequest flush_req;
1779
+ GenerateFlushRequest({cfd}, FlushReason::kWriteBufferManager,
1780
+ &flush_req);
1781
+ SchedulePendingFlush(flush_req);
1782
+ }
1783
+ }
1784
+ if (immutable_db_options_.atomic_flush) {
1785
+ FlushRequest flush_req;
1786
+ GenerateFlushRequest(cfds, FlushReason::kWriteBufferManager, &flush_req);
1787
+ SchedulePendingFlush(flush_req);
1788
+ }
1789
+ MaybeScheduleFlushOrCompaction();
1790
+ }
1791
+ return status;
1792
+ }
1793
+
1794
+ uint64_t DBImpl::GetMaxTotalWalSize() const {
1795
+ uint64_t max_total_wal_size =
1796
+ max_total_wal_size_.load(std::memory_order_acquire);
1797
+ if (max_total_wal_size > 0) {
1798
+ return max_total_wal_size;
1799
+ }
1800
+ return 4 * max_total_in_memory_state_.load(std::memory_order_acquire);
1801
+ }
1802
+
1803
+ // REQUIRES: mutex_ is held
1804
+ // REQUIRES: this thread is currently at the leader for write_thread
1805
+ Status DBImpl::DelayWrite(uint64_t num_bytes, WriteThread& write_thread,
1806
+ const WriteOptions& write_options) {
1807
+ mutex_.AssertHeld();
1808
+ uint64_t time_delayed = 0;
1809
+ bool delayed = false;
1810
+ {
1811
+ StopWatch sw(immutable_db_options_.clock, stats_, WRITE_STALL,
1812
+ Histograms::HISTOGRAM_ENUM_MAX, &time_delayed);
1813
+ // To avoid parallel timed delays (bad throttling), only support them
1814
+ // on the primary write queue.
1815
+ uint64_t delay;
1816
+ if (&write_thread == &write_thread_) {
1817
+ delay =
1818
+ write_controller_.GetDelay(immutable_db_options_.clock, num_bytes);
1819
+ } else {
1820
+ assert(num_bytes == 0);
1821
+ delay = 0;
1822
+ }
1823
+ TEST_SYNC_POINT("DBImpl::DelayWrite:Start");
1824
+ if (delay > 0) {
1825
+ if (write_options.no_slowdown) {
1826
+ return Status::Incomplete("Write stall");
1827
+ }
1828
+ TEST_SYNC_POINT("DBImpl::DelayWrite:Sleep");
1829
+
1830
+ // Notify write_thread about the stall so it can setup a barrier and
1831
+ // fail any pending writers with no_slowdown
1832
+ write_thread.BeginWriteStall();
1833
+ mutex_.Unlock();
1834
+ TEST_SYNC_POINT("DBImpl::DelayWrite:BeginWriteStallDone");
1835
+ // We will delay the write until we have slept for `delay` microseconds
1836
+ // or we don't need a delay anymore. We check for cancellation every 1ms
1837
+ // (slightly longer because WriteController minimum delay is 1ms, in
1838
+ // case of sleep imprecision, rounding, etc.)
1839
+ const uint64_t kDelayInterval = 1001;
1840
+ uint64_t stall_end = sw.start_time() + delay;
1841
+ while (write_controller_.NeedsDelay()) {
1842
+ if (immutable_db_options_.clock->NowMicros() >= stall_end) {
1843
+ // We already delayed this write `delay` microseconds
1844
+ break;
1845
+ }
1846
+
1847
+ delayed = true;
1848
+ // Sleep for 0.001 seconds
1849
+ immutable_db_options_.clock->SleepForMicroseconds(kDelayInterval);
1850
+ }
1851
+ mutex_.Lock();
1852
+ write_thread.EndWriteStall();
1853
+ }
1854
+
1855
+ // Don't wait if there's a background error, even if its a soft error. We
1856
+ // might wait here indefinitely as the background compaction may never
1857
+ // finish successfully, resulting in the stall condition lasting
1858
+ // indefinitely
1859
+ while (error_handler_.GetBGError().ok() && write_controller_.IsStopped() &&
1860
+ !shutting_down_.load(std::memory_order_relaxed)) {
1861
+ if (write_options.no_slowdown) {
1862
+ return Status::Incomplete("Write stall");
1863
+ }
1864
+ delayed = true;
1865
+
1866
+ // Notify write_thread about the stall so it can setup a barrier and
1867
+ // fail any pending writers with no_slowdown
1868
+ write_thread.BeginWriteStall();
1869
+ if (&write_thread == &write_thread_) {
1870
+ TEST_SYNC_POINT("DBImpl::DelayWrite:Wait");
1871
+ } else {
1872
+ TEST_SYNC_POINT("DBImpl::DelayWrite:NonmemWait");
1873
+ }
1874
+ bg_cv_.Wait();
1875
+ TEST_SYNC_POINT_CALLBACK("DBImpl::DelayWrite:AfterWait", &mutex_);
1876
+ write_thread.EndWriteStall();
1877
+ }
1878
+ }
1879
+ assert(!delayed || !write_options.no_slowdown);
1880
+ if (delayed) {
1881
+ default_cf_internal_stats_->AddDBStats(
1882
+ InternalStats::kIntStatsWriteStallMicros, time_delayed);
1883
+ RecordTick(stats_, STALL_MICROS, time_delayed);
1884
+ }
1885
+
1886
+ // If DB is not in read-only mode and write_controller is not stopping
1887
+ // writes, we can ignore any background errors and allow the write to
1888
+ // proceed
1889
+ Status s;
1890
+ if (write_controller_.IsStopped()) {
1891
+ if (!shutting_down_.load(std::memory_order_relaxed)) {
1892
+ // If writes are still stopped and db not shutdown, it means we bailed
1893
+ // due to a background error
1894
+ s = Status::Incomplete(error_handler_.GetBGError().ToString());
1895
+ } else {
1896
+ s = Status::ShutdownInProgress("stalled writes");
1897
+ }
1898
+ }
1899
+ if (error_handler_.IsDBStopped()) {
1900
+ s = error_handler_.GetBGError();
1901
+ }
1902
+ return s;
1903
+ }
1904
+
1905
+ // REQUIRES: mutex_ is held
1906
+ // REQUIRES: this thread is currently at the front of the writer queue
1907
+ void DBImpl::WriteBufferManagerStallWrites() {
1908
+ mutex_.AssertHeld();
1909
+ // First block future writer threads who want to add themselves to the queue
1910
+ // of WriteThread.
1911
+ write_thread_.BeginWriteStall();
1912
+ mutex_.Unlock();
1913
+
1914
+ // Change the state to State::Blocked.
1915
+ static_cast<WBMStallInterface*>(wbm_stall_.get())
1916
+ ->SetState(WBMStallInterface::State::BLOCKED);
1917
+ // Then WriteBufferManager will add DB instance to its queue
1918
+ // and block this thread by calling WBMStallInterface::Block().
1919
+ write_buffer_manager_->BeginWriteStall(wbm_stall_.get());
1920
+ wbm_stall_->Block();
1921
+
1922
+ mutex_.Lock();
1923
+ // Stall has ended. Signal writer threads so that they can add
1924
+ // themselves to the WriteThread queue for writes.
1925
+ write_thread_.EndWriteStall();
1926
+ }
1927
+
1928
+ Status DBImpl::ThrottleLowPriWritesIfNeeded(const WriteOptions& write_options,
1929
+ WriteBatch* my_batch) {
1930
+ assert(write_options.low_pri);
1931
+ // This is called outside the DB mutex. Although it is safe to make the call,
1932
+ // the consistency condition is not guaranteed to hold. It's OK to live with
1933
+ // it in this case.
1934
+ // If we need to speed compaction, it means the compaction is left behind
1935
+ // and we start to limit low pri writes to a limit.
1936
+ if (write_controller_.NeedSpeedupCompaction()) {
1937
+ if (allow_2pc() && (my_batch->HasCommit() || my_batch->HasRollback())) {
1938
+ // For 2PC, we only rate limit prepare, not commit.
1939
+ return Status::OK();
1940
+ }
1941
+ if (write_options.no_slowdown) {
1942
+ return Status::Incomplete("Low priority write stall");
1943
+ } else {
1944
+ assert(my_batch != nullptr);
1945
+ // Rate limit those writes. The reason that we don't completely wait
1946
+ // is that in case the write is heavy, low pri writes may never have
1947
+ // a chance to run. Now we guarantee we are still slowly making
1948
+ // progress.
1949
+ PERF_TIMER_GUARD(write_delay_time);
1950
+ write_controller_.low_pri_rate_limiter()->Request(
1951
+ my_batch->GetDataSize(), Env::IO_HIGH, nullptr /* stats */,
1952
+ RateLimiter::OpType::kWrite);
1953
+ }
1954
+ }
1955
+ return Status::OK();
1956
+ }
1957
+
1958
+ void DBImpl::MaybeFlushStatsCF(autovector<ColumnFamilyData*>* cfds) {
1959
+ assert(cfds != nullptr);
1960
+ if (!cfds->empty() && immutable_db_options_.persist_stats_to_disk) {
1961
+ ColumnFamilyData* cfd_stats =
1962
+ versions_->GetColumnFamilySet()->GetColumnFamily(
1963
+ kPersistentStatsColumnFamilyName);
1964
+ if (cfd_stats != nullptr && !cfd_stats->mem()->IsEmpty()) {
1965
+ for (ColumnFamilyData* cfd : *cfds) {
1966
+ if (cfd == cfd_stats) {
1967
+ // stats CF already included in cfds
1968
+ return;
1969
+ }
1970
+ }
1971
+ // force flush stats CF when its log number is less than all other CF's
1972
+ // log numbers
1973
+ bool force_flush_stats_cf = true;
1974
+ for (auto* loop_cfd : *versions_->GetColumnFamilySet()) {
1975
+ if (loop_cfd == cfd_stats) {
1976
+ continue;
1977
+ }
1978
+ if (loop_cfd->GetLogNumber() <= cfd_stats->GetLogNumber()) {
1979
+ force_flush_stats_cf = false;
1980
+ }
1981
+ }
1982
+ if (force_flush_stats_cf) {
1983
+ cfds->push_back(cfd_stats);
1984
+ ROCKS_LOG_INFO(immutable_db_options_.info_log,
1985
+ "Force flushing stats CF with automated flush "
1986
+ "to avoid holding old logs");
1987
+ }
1988
+ }
1989
+ }
1990
+ }
1991
+
1992
+ Status DBImpl::TrimMemtableHistory(WriteContext* context) {
1993
+ autovector<ColumnFamilyData*> cfds;
1994
+ ColumnFamilyData* tmp_cfd;
1995
+ while ((tmp_cfd = trim_history_scheduler_.TakeNextColumnFamily()) !=
1996
+ nullptr) {
1997
+ cfds.push_back(tmp_cfd);
1998
+ }
1999
+ for (auto& cfd : cfds) {
2000
+ autovector<MemTable*> to_delete;
2001
+ bool trimmed = cfd->imm()->TrimHistory(&context->memtables_to_free_,
2002
+ cfd->mem()->MemoryAllocatedBytes());
2003
+ if (trimmed) {
2004
+ context->superversion_context.NewSuperVersion();
2005
+ assert(context->superversion_context.new_superversion.get() != nullptr);
2006
+ cfd->InstallSuperVersion(&context->superversion_context, &mutex_);
2007
+ }
2008
+
2009
+ if (cfd->UnrefAndTryDelete()) {
2010
+ cfd = nullptr;
2011
+ }
2012
+ }
2013
+ return Status::OK();
2014
+ }
2015
+
2016
+ Status DBImpl::ScheduleFlushes(WriteContext* context) {
2017
+ autovector<ColumnFamilyData*> cfds;
2018
+ if (immutable_db_options_.atomic_flush) {
2019
+ SelectColumnFamiliesForAtomicFlush(&cfds);
2020
+ for (auto cfd : cfds) {
2021
+ cfd->Ref();
2022
+ }
2023
+ flush_scheduler_.Clear();
2024
+ } else {
2025
+ ColumnFamilyData* tmp_cfd;
2026
+ while ((tmp_cfd = flush_scheduler_.TakeNextColumnFamily()) != nullptr) {
2027
+ cfds.push_back(tmp_cfd);
2028
+ }
2029
+ MaybeFlushStatsCF(&cfds);
2030
+ }
2031
+ Status status;
2032
+ WriteThread::Writer nonmem_w;
2033
+ if (two_write_queues_) {
2034
+ nonmem_write_thread_.EnterUnbatched(&nonmem_w, &mutex_);
2035
+ }
2036
+
2037
+ for (auto& cfd : cfds) {
2038
+ if (!cfd->mem()->IsEmpty()) {
2039
+ status = SwitchMemtable(cfd, context);
2040
+ }
2041
+ if (cfd->UnrefAndTryDelete()) {
2042
+ cfd = nullptr;
2043
+ }
2044
+ if (!status.ok()) {
2045
+ break;
2046
+ }
2047
+ }
2048
+
2049
+ if (two_write_queues_) {
2050
+ nonmem_write_thread_.ExitUnbatched(&nonmem_w);
2051
+ }
2052
+
2053
+ if (status.ok()) {
2054
+ if (immutable_db_options_.atomic_flush) {
2055
+ AssignAtomicFlushSeq(cfds);
2056
+ FlushRequest flush_req;
2057
+ GenerateFlushRequest(cfds, FlushReason::kWriteBufferFull, &flush_req);
2058
+ SchedulePendingFlush(flush_req);
2059
+ } else {
2060
+ for (auto* cfd : cfds) {
2061
+ FlushRequest flush_req;
2062
+ GenerateFlushRequest({cfd}, FlushReason::kWriteBufferFull, &flush_req);
2063
+ SchedulePendingFlush(flush_req);
2064
+ }
2065
+ }
2066
+ MaybeScheduleFlushOrCompaction();
2067
+ }
2068
+ return status;
2069
+ }
2070
+
2071
+ void DBImpl::NotifyOnMemTableSealed(ColumnFamilyData* /*cfd*/,
2072
+ const MemTableInfo& mem_table_info) {
2073
+ if (immutable_db_options_.listeners.size() == 0U) {
2074
+ return;
2075
+ }
2076
+ if (shutting_down_.load(std::memory_order_acquire)) {
2077
+ return;
2078
+ }
2079
+
2080
+ mutex_.Unlock();
2081
+ for (auto listener : immutable_db_options_.listeners) {
2082
+ listener->OnMemTableSealed(mem_table_info);
2083
+ }
2084
+ mutex_.Lock();
2085
+ }
2086
+
2087
+ // REQUIRES: mutex_ is held
2088
+ // REQUIRES: this thread is currently at the front of the writer queue
2089
+ // REQUIRES: this thread is currently at the front of the 2nd writer queue if
2090
+ // two_write_queues_ is true (This is to simplify the reasoning.)
2091
+ Status DBImpl::SwitchMemtable(ColumnFamilyData* cfd, WriteContext* context) {
2092
+ mutex_.AssertHeld();
2093
+ // TODO: plumb Env::IOActivity
2094
+ const ReadOptions read_options;
2095
+ log::Writer* new_log = nullptr;
2096
+ MemTable* new_mem = nullptr;
2097
+ IOStatus io_s;
2098
+
2099
+ // Recoverable state is persisted in WAL. After memtable switch, WAL might
2100
+ // be deleted, so we write the state to memtable to be persisted as well.
2101
+ Status s = WriteRecoverableState();
2102
+ if (!s.ok()) {
2103
+ return s;
2104
+ }
2105
+
2106
+ // Attempt to switch to a new memtable and trigger flush of old.
2107
+ // Do this without holding the dbmutex lock.
2108
+ assert(versions_->prev_log_number() == 0);
2109
+ if (two_write_queues_) {
2110
+ log_write_mutex_.Lock();
2111
+ }
2112
+ bool creating_new_log = !log_empty_;
2113
+ if (two_write_queues_) {
2114
+ log_write_mutex_.Unlock();
2115
+ }
2116
+ uint64_t recycle_log_number = 0;
2117
+ if (creating_new_log && immutable_db_options_.recycle_log_file_num &&
2118
+ !log_recycle_files_.empty()) {
2119
+ recycle_log_number = log_recycle_files_.front();
2120
+ }
2121
+ uint64_t new_log_number =
2122
+ creating_new_log ? versions_->NewFileNumber() : logfile_number_;
2123
+ const MutableCFOptions mutable_cf_options = *cfd->GetLatestMutableCFOptions();
2124
+
2125
+ // Set memtable_info for memtable sealed callback
2126
+ MemTableInfo memtable_info;
2127
+ memtable_info.cf_name = cfd->GetName();
2128
+ memtable_info.first_seqno = cfd->mem()->GetFirstSequenceNumber();
2129
+ memtable_info.earliest_seqno = cfd->mem()->GetEarliestSequenceNumber();
2130
+ memtable_info.num_entries = cfd->mem()->num_entries();
2131
+ memtable_info.num_deletes = cfd->mem()->num_deletes();
2132
+ // Log this later after lock release. It may be outdated, e.g., if background
2133
+ // flush happens before logging, but that should be ok.
2134
+ int num_imm_unflushed = cfd->imm()->NumNotFlushed();
2135
+ const auto preallocate_block_size =
2136
+ GetWalPreallocateBlockSize(mutable_cf_options.write_buffer_size);
2137
+ mutex_.Unlock();
2138
+ if (creating_new_log) {
2139
+ // TODO: Write buffer size passed in should be max of all CF's instead
2140
+ // of mutable_cf_options.write_buffer_size.
2141
+ io_s = CreateWAL(new_log_number, recycle_log_number, preallocate_block_size,
2142
+ &new_log);
2143
+ if (s.ok()) {
2144
+ s = io_s;
2145
+ }
2146
+ }
2147
+ if (s.ok()) {
2148
+ SequenceNumber seq = versions_->LastSequence();
2149
+ new_mem = cfd->ConstructNewMemtable(mutable_cf_options, seq);
2150
+ context->superversion_context.NewSuperVersion();
2151
+ }
2152
+ ROCKS_LOG_INFO(immutable_db_options_.info_log,
2153
+ "[%s] New memtable created with log file: #%" PRIu64
2154
+ ". Immutable memtables: %d.\n",
2155
+ cfd->GetName().c_str(), new_log_number, num_imm_unflushed);
2156
+ // There should be no concurrent write as the thread is at the front of
2157
+ // writer queue
2158
+ cfd->mem()->ConstructFragmentedRangeTombstones();
2159
+
2160
+ mutex_.Lock();
2161
+ if (recycle_log_number != 0) {
2162
+ // Since renaming the file is done outside DB mutex, we need to ensure
2163
+ // concurrent full purges don't delete the file while we're recycling it.
2164
+ // To achieve that we hold the old log number in the recyclable list until
2165
+ // after it has been renamed.
2166
+ assert(log_recycle_files_.front() == recycle_log_number);
2167
+ log_recycle_files_.pop_front();
2168
+ }
2169
+ if (s.ok() && creating_new_log) {
2170
+ InstrumentedMutexLock l(&log_write_mutex_);
2171
+ assert(new_log != nullptr);
2172
+ if (!logs_.empty()) {
2173
+ // Alway flush the buffer of the last log before switching to a new one
2174
+ log::Writer* cur_log_writer = logs_.back().writer;
2175
+ if (error_handler_.IsRecoveryInProgress()) {
2176
+ // In recovery path, we force another try of writing WAL buffer.
2177
+ cur_log_writer->file()->reset_seen_error();
2178
+ }
2179
+ io_s = cur_log_writer->WriteBuffer();
2180
+ if (s.ok()) {
2181
+ s = io_s;
2182
+ }
2183
+ if (!s.ok()) {
2184
+ ROCKS_LOG_WARN(immutable_db_options_.info_log,
2185
+ "[%s] Failed to switch from #%" PRIu64 " to #%" PRIu64
2186
+ " WAL file\n",
2187
+ cfd->GetName().c_str(), cur_log_writer->get_log_number(),
2188
+ new_log_number);
2189
+ }
2190
+ }
2191
+ if (s.ok()) {
2192
+ logfile_number_ = new_log_number;
2193
+ log_empty_ = true;
2194
+ log_dir_synced_ = false;
2195
+ logs_.emplace_back(logfile_number_, new_log);
2196
+ alive_log_files_.push_back(LogFileNumberSize(logfile_number_));
2197
+ }
2198
+ }
2199
+
2200
+ if (!s.ok()) {
2201
+ // how do we fail if we're not creating new log?
2202
+ assert(creating_new_log);
2203
+ delete new_mem;
2204
+ delete new_log;
2205
+ context->superversion_context.new_superversion.reset();
2206
+ // We may have lost data from the WritableFileBuffer in-memory buffer for
2207
+ // the current log, so treat it as a fatal error and set bg_error
2208
+ if (!io_s.ok()) {
2209
+ error_handler_.SetBGError(io_s, BackgroundErrorReason::kMemTable);
2210
+ } else {
2211
+ error_handler_.SetBGError(s, BackgroundErrorReason::kMemTable);
2212
+ }
2213
+ // Read back bg_error in order to get the right severity
2214
+ s = error_handler_.GetBGError();
2215
+ return s;
2216
+ }
2217
+
2218
+ bool empty_cf_updated = false;
2219
+ if (immutable_db_options_.track_and_verify_wals_in_manifest &&
2220
+ !immutable_db_options_.allow_2pc && creating_new_log) {
2221
+ // In non-2pc mode, WALs become obsolete if they do not contain unflushed
2222
+ // data. Updating the empty CF's log number might cause some WALs to become
2223
+ // obsolete. So we should track the WAL obsoletion event before actually
2224
+ // updating the empty CF's log number.
2225
+ uint64_t min_wal_number_to_keep =
2226
+ versions_->PreComputeMinLogNumberWithUnflushedData(logfile_number_);
2227
+ if (min_wal_number_to_keep >
2228
+ versions_->GetWalSet().GetMinWalNumberToKeep()) {
2229
+ // Get a snapshot of the empty column families.
2230
+ // LogAndApply may release and reacquire db
2231
+ // mutex, during that period, column family may become empty (e.g. its
2232
+ // flush succeeds), then it affects the computed min_log_number_to_keep,
2233
+ // so we take a snapshot for consistency of column family data
2234
+ // status. If a column family becomes non-empty afterwards, its active log
2235
+ // should still be the created new log, so the min_log_number_to_keep is
2236
+ // not affected.
2237
+ autovector<ColumnFamilyData*> empty_cfs;
2238
+ for (auto cf : *versions_->GetColumnFamilySet()) {
2239
+ if (cf->IsEmpty()) {
2240
+ empty_cfs.push_back(cf);
2241
+ }
2242
+ }
2243
+
2244
+ VersionEdit wal_deletion;
2245
+ wal_deletion.DeleteWalsBefore(min_wal_number_to_keep);
2246
+ s = versions_->LogAndApplyToDefaultColumnFamily(
2247
+ read_options, &wal_deletion, &mutex_, directories_.GetDbDir());
2248
+ if (!s.ok() && versions_->io_status().IsIOError()) {
2249
+ s = error_handler_.SetBGError(versions_->io_status(),
2250
+ BackgroundErrorReason::kManifestWrite);
2251
+ }
2252
+ if (!s.ok()) {
2253
+ return s;
2254
+ }
2255
+
2256
+ for (auto cf : empty_cfs) {
2257
+ if (cf->IsEmpty()) {
2258
+ cf->SetLogNumber(logfile_number_);
2259
+ // MEMPURGE: No need to change this, because new adds
2260
+ // should still receive new sequence numbers.
2261
+ cf->mem()->SetCreationSeq(versions_->LastSequence());
2262
+ } // cf may become non-empty.
2263
+ }
2264
+ empty_cf_updated = true;
2265
+ }
2266
+ }
2267
+ if (!empty_cf_updated) {
2268
+ for (auto cf : *versions_->GetColumnFamilySet()) {
2269
+ // all this is just optimization to delete logs that
2270
+ // are no longer needed -- if CF is empty, that means it
2271
+ // doesn't need that particular log to stay alive, so we just
2272
+ // advance the log number. no need to persist this in the manifest
2273
+ if (cf->IsEmpty()) {
2274
+ if (creating_new_log) {
2275
+ cf->SetLogNumber(logfile_number_);
2276
+ }
2277
+ cf->mem()->SetCreationSeq(versions_->LastSequence());
2278
+ }
2279
+ }
2280
+ }
2281
+
2282
+ cfd->mem()->SetNextLogNumber(logfile_number_);
2283
+ assert(new_mem != nullptr);
2284
+ cfd->imm()->Add(cfd->mem(), &context->memtables_to_free_);
2285
+ new_mem->Ref();
2286
+ cfd->SetMemtable(new_mem);
2287
+ InstallSuperVersionAndScheduleWork(cfd, &context->superversion_context,
2288
+ mutable_cf_options);
2289
+
2290
+ // Notify client that memtable is sealed, now that we have successfully
2291
+ // installed a new memtable
2292
+ NotifyOnMemTableSealed(cfd, memtable_info);
2293
+ // It is possible that we got here without checking the value of i_os, but
2294
+ // that is okay. If we did, it most likely means that s was already an error.
2295
+ // In any case, ignore any unchecked error for i_os here.
2296
+ io_s.PermitUncheckedError();
2297
+ return s;
2298
+ }
2299
+
2300
+ size_t DBImpl::GetWalPreallocateBlockSize(uint64_t write_buffer_size) const {
2301
+ mutex_.AssertHeld();
2302
+ size_t bsize =
2303
+ static_cast<size_t>(write_buffer_size / 10 + write_buffer_size);
2304
+ // Some users might set very high write_buffer_size and rely on
2305
+ // max_total_wal_size or other parameters to control the WAL size.
2306
+ if (mutable_db_options_.max_total_wal_size > 0) {
2307
+ bsize = std::min<size_t>(
2308
+ bsize, static_cast<size_t>(mutable_db_options_.max_total_wal_size));
2309
+ }
2310
+ if (immutable_db_options_.db_write_buffer_size > 0) {
2311
+ bsize = std::min<size_t>(bsize, immutable_db_options_.db_write_buffer_size);
2312
+ }
2313
+ if (immutable_db_options_.write_buffer_manager &&
2314
+ immutable_db_options_.write_buffer_manager->enabled()) {
2315
+ bsize = std::min<size_t>(
2316
+ bsize, immutable_db_options_.write_buffer_manager->buffer_size());
2317
+ }
2318
+
2319
+ return bsize;
2320
+ }
2321
+
2322
+ // Default implementations of convenience methods that subclasses of DB
2323
+ // can call if they wish
2324
+ Status DB::Put(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2325
+ const Slice& key, const Slice& value) {
2326
+ // Pre-allocate size of write batch conservatively.
2327
+ // 8 bytes are taken by header, 4 bytes for count, 1 byte for type,
2328
+ // and we allocate 11 extra bytes for key length, as well as value length.
2329
+ WriteBatch batch(key.size() + value.size() + 24, 0 /* max_bytes */,
2330
+ opt.protection_bytes_per_key, 0 /* default_cf_ts_sz */);
2331
+ Status s = batch.Put(column_family, key, value);
2332
+ if (!s.ok()) {
2333
+ return s;
2334
+ }
2335
+ return Write(opt, &batch);
2336
+ }
2337
+
2338
+ Status DB::Put(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2339
+ const Slice& key, const Slice& ts, const Slice& value) {
2340
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2341
+ assert(default_cf);
2342
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2343
+ assert(default_cf_ucmp);
2344
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2345
+ opt.protection_bytes_per_key,
2346
+ default_cf_ucmp->timestamp_size());
2347
+ Status s = batch.Put(column_family, key, ts, value);
2348
+ if (!s.ok()) {
2349
+ return s;
2350
+ }
2351
+ return Write(opt, &batch);
2352
+ }
2353
+
2354
+ Status DB::PutEntity(const WriteOptions& options,
2355
+ ColumnFamilyHandle* column_family, const Slice& key,
2356
+ const WideColumns& columns) {
2357
+ const ColumnFamilyHandle* const default_cf = DefaultColumnFamily();
2358
+ assert(default_cf);
2359
+
2360
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2361
+ assert(default_cf_ucmp);
2362
+
2363
+ WriteBatch batch(/* reserved_bytes */ 0, /* max_bytes */ 0,
2364
+ options.protection_bytes_per_key,
2365
+ default_cf_ucmp->timestamp_size());
2366
+
2367
+ const Status s = batch.PutEntity(column_family, key, columns);
2368
+ if (!s.ok()) {
2369
+ return s;
2370
+ }
2371
+
2372
+ return Write(options, &batch);
2373
+ }
2374
+
2375
+ Status DB::Delete(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2376
+ const Slice& key) {
2377
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2378
+ opt.protection_bytes_per_key, 0 /* default_cf_ts_sz */);
2379
+ Status s = batch.Delete(column_family, key);
2380
+ if (!s.ok()) {
2381
+ return s;
2382
+ }
2383
+ return Write(opt, &batch);
2384
+ }
2385
+
2386
+ Status DB::Delete(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2387
+ const Slice& key, const Slice& ts) {
2388
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2389
+ assert(default_cf);
2390
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2391
+ assert(default_cf_ucmp);
2392
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2393
+ opt.protection_bytes_per_key,
2394
+ default_cf_ucmp->timestamp_size());
2395
+ Status s = batch.Delete(column_family, key, ts);
2396
+ if (!s.ok()) {
2397
+ return s;
2398
+ }
2399
+ return Write(opt, &batch);
2400
+ }
2401
+
2402
+ Status DB::SingleDelete(const WriteOptions& opt,
2403
+ ColumnFamilyHandle* column_family, const Slice& key) {
2404
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2405
+ opt.protection_bytes_per_key, 0 /* default_cf_ts_sz */);
2406
+ Status s = batch.SingleDelete(column_family, key);
2407
+ if (!s.ok()) {
2408
+ return s;
2409
+ }
2410
+ return Write(opt, &batch);
2411
+ }
2412
+
2413
+ Status DB::SingleDelete(const WriteOptions& opt,
2414
+ ColumnFamilyHandle* column_family, const Slice& key,
2415
+ const Slice& ts) {
2416
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2417
+ assert(default_cf);
2418
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2419
+ assert(default_cf_ucmp);
2420
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2421
+ opt.protection_bytes_per_key,
2422
+ default_cf_ucmp->timestamp_size());
2423
+ Status s = batch.SingleDelete(column_family, key, ts);
2424
+ if (!s.ok()) {
2425
+ return s;
2426
+ }
2427
+ return Write(opt, &batch);
2428
+ }
2429
+
2430
+ Status DB::DeleteRange(const WriteOptions& opt,
2431
+ ColumnFamilyHandle* column_family,
2432
+ const Slice& begin_key, const Slice& end_key) {
2433
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2434
+ opt.protection_bytes_per_key, 0 /* default_cf_ts_sz */);
2435
+ Status s = batch.DeleteRange(column_family, begin_key, end_key);
2436
+ if (!s.ok()) {
2437
+ return s;
2438
+ }
2439
+ return Write(opt, &batch);
2440
+ }
2441
+
2442
+ Status DB::DeleteRange(const WriteOptions& opt,
2443
+ ColumnFamilyHandle* column_family,
2444
+ const Slice& begin_key, const Slice& end_key,
2445
+ const Slice& ts) {
2446
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2447
+ assert(default_cf);
2448
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2449
+ assert(default_cf_ucmp);
2450
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2451
+ opt.protection_bytes_per_key,
2452
+ default_cf_ucmp->timestamp_size());
2453
+ Status s = batch.DeleteRange(column_family, begin_key, end_key, ts);
2454
+ if (!s.ok()) {
2455
+ return s;
2456
+ }
2457
+ return Write(opt, &batch);
2458
+ }
2459
+
2460
+ Status DB::Merge(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2461
+ const Slice& key, const Slice& value) {
2462
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2463
+ opt.protection_bytes_per_key, 0 /* default_cf_ts_sz */);
2464
+ Status s = batch.Merge(column_family, key, value);
2465
+ if (!s.ok()) {
2466
+ return s;
2467
+ }
2468
+ return Write(opt, &batch);
2469
+ }
2470
+
2471
+ Status DB::Merge(const WriteOptions& opt, ColumnFamilyHandle* column_family,
2472
+ const Slice& key, const Slice& ts, const Slice& value) {
2473
+ ColumnFamilyHandle* default_cf = DefaultColumnFamily();
2474
+ assert(default_cf);
2475
+ const Comparator* const default_cf_ucmp = default_cf->GetComparator();
2476
+ assert(default_cf_ucmp);
2477
+ WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
2478
+ opt.protection_bytes_per_key,
2479
+ default_cf_ucmp->timestamp_size());
2480
+ Status s = batch.Merge(column_family, key, ts, value);
2481
+ if (!s.ok()) {
2482
+ return s;
2483
+ }
2484
+ return Write(opt, &batch);
2485
+ }
2486
+
2487
+ } // namespace ROCKSDB_NAMESPACE