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,3142 @@
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
+ //
10
+ // WriteBatch::rep_ :=
11
+ // sequence: fixed64
12
+ // count: fixed32
13
+ // data: record[count]
14
+ // record :=
15
+ // kTypeValue varstring varstring
16
+ // kTypeDeletion varstring
17
+ // kTypeSingleDeletion varstring
18
+ // kTypeRangeDeletion varstring varstring
19
+ // kTypeMerge varstring varstring
20
+ // kTypeColumnFamilyValue varint32 varstring varstring
21
+ // kTypeColumnFamilyDeletion varint32 varstring
22
+ // kTypeColumnFamilySingleDeletion varint32 varstring
23
+ // kTypeColumnFamilyRangeDeletion varint32 varstring varstring
24
+ // kTypeColumnFamilyMerge varint32 varstring varstring
25
+ // kTypeBeginPrepareXID
26
+ // kTypeEndPrepareXID varstring
27
+ // kTypeCommitXID varstring
28
+ // kTypeCommitXIDAndTimestamp varstring varstring
29
+ // kTypeRollbackXID varstring
30
+ // kTypeBeginPersistedPrepareXID
31
+ // kTypeBeginUnprepareXID
32
+ // kTypeWideColumnEntity varstring varstring
33
+ // kTypeColumnFamilyWideColumnEntity varint32 varstring varstring
34
+ // kTypeNoop
35
+ // varstring :=
36
+ // len: varint32
37
+ // data: uint8[len]
38
+
39
+ #include "rocksdb/write_batch.h"
40
+
41
+ #include <algorithm>
42
+ #include <limits>
43
+ #include <map>
44
+ #include <stack>
45
+ #include <stdexcept>
46
+ #include <type_traits>
47
+ #include <unordered_map>
48
+ #include <vector>
49
+
50
+ #include "db/column_family.h"
51
+ #include "db/db_impl/db_impl.h"
52
+ #include "db/dbformat.h"
53
+ #include "db/flush_scheduler.h"
54
+ #include "db/kv_checksum.h"
55
+ #include "db/memtable.h"
56
+ #include "db/merge_context.h"
57
+ #include "db/snapshot_impl.h"
58
+ #include "db/trim_history_scheduler.h"
59
+ #include "db/wide/wide_column_serialization.h"
60
+ #include "db/write_batch_internal.h"
61
+ #include "monitoring/perf_context_imp.h"
62
+ #include "monitoring/statistics_impl.h"
63
+ #include "port/lang.h"
64
+ #include "rocksdb/merge_operator.h"
65
+ #include "rocksdb/system_clock.h"
66
+ #include "util/autovector.h"
67
+ #include "util/cast_util.h"
68
+ #include "util/coding.h"
69
+ #include "util/duplicate_detector.h"
70
+ #include "util/string_util.h"
71
+
72
+ namespace ROCKSDB_NAMESPACE {
73
+
74
+ // anon namespace for file-local types
75
+ namespace {
76
+
77
+ enum ContentFlags : uint32_t {
78
+ DEFERRED = 1 << 0,
79
+ HAS_PUT = 1 << 1,
80
+ HAS_DELETE = 1 << 2,
81
+ HAS_SINGLE_DELETE = 1 << 3,
82
+ HAS_MERGE = 1 << 4,
83
+ HAS_BEGIN_PREPARE = 1 << 5,
84
+ HAS_END_PREPARE = 1 << 6,
85
+ HAS_COMMIT = 1 << 7,
86
+ HAS_ROLLBACK = 1 << 8,
87
+ HAS_DELETE_RANGE = 1 << 9,
88
+ HAS_BLOB_INDEX = 1 << 10,
89
+ HAS_BEGIN_UNPREPARE = 1 << 11,
90
+ HAS_PUT_ENTITY = 1 << 12,
91
+ };
92
+
93
+ struct BatchContentClassifier : public WriteBatch::Handler {
94
+ uint32_t content_flags = 0;
95
+
96
+ Status PutCF(uint32_t, const Slice&, const Slice&) override {
97
+ content_flags |= ContentFlags::HAS_PUT;
98
+ return Status::OK();
99
+ }
100
+
101
+ Status PutEntityCF(uint32_t /* column_family_id */, const Slice& /* key */,
102
+ const Slice& /* entity */) override {
103
+ content_flags |= ContentFlags::HAS_PUT_ENTITY;
104
+ return Status::OK();
105
+ }
106
+
107
+ Status DeleteCF(uint32_t, const Slice&) override {
108
+ content_flags |= ContentFlags::HAS_DELETE;
109
+ return Status::OK();
110
+ }
111
+
112
+ Status SingleDeleteCF(uint32_t, const Slice&) override {
113
+ content_flags |= ContentFlags::HAS_SINGLE_DELETE;
114
+ return Status::OK();
115
+ }
116
+
117
+ Status DeleteRangeCF(uint32_t, const Slice&, const Slice&) override {
118
+ content_flags |= ContentFlags::HAS_DELETE_RANGE;
119
+ return Status::OK();
120
+ }
121
+
122
+ Status MergeCF(uint32_t, const Slice&, const Slice&) override {
123
+ content_flags |= ContentFlags::HAS_MERGE;
124
+ return Status::OK();
125
+ }
126
+
127
+ Status PutBlobIndexCF(uint32_t, const Slice&, const Slice&) override {
128
+ content_flags |= ContentFlags::HAS_BLOB_INDEX;
129
+ return Status::OK();
130
+ }
131
+
132
+ Status MarkBeginPrepare(bool unprepare) override {
133
+ content_flags |= ContentFlags::HAS_BEGIN_PREPARE;
134
+ if (unprepare) {
135
+ content_flags |= ContentFlags::HAS_BEGIN_UNPREPARE;
136
+ }
137
+ return Status::OK();
138
+ }
139
+
140
+ Status MarkEndPrepare(const Slice&) override {
141
+ content_flags |= ContentFlags::HAS_END_PREPARE;
142
+ return Status::OK();
143
+ }
144
+
145
+ Status MarkCommit(const Slice&) override {
146
+ content_flags |= ContentFlags::HAS_COMMIT;
147
+ return Status::OK();
148
+ }
149
+
150
+ Status MarkCommitWithTimestamp(const Slice&, const Slice&) override {
151
+ content_flags |= ContentFlags::HAS_COMMIT;
152
+ return Status::OK();
153
+ }
154
+
155
+ Status MarkRollback(const Slice&) override {
156
+ content_flags |= ContentFlags::HAS_ROLLBACK;
157
+ return Status::OK();
158
+ }
159
+ };
160
+
161
+ } // anonymous namespace
162
+
163
+ struct SavePoints {
164
+ std::stack<SavePoint, autovector<SavePoint>> stack;
165
+ };
166
+
167
+ WriteBatch::WriteBatch(size_t reserved_bytes, size_t max_bytes,
168
+ size_t protection_bytes_per_key, size_t default_cf_ts_sz)
169
+ : content_flags_(0),
170
+ max_bytes_(max_bytes),
171
+ default_cf_ts_sz_(default_cf_ts_sz),
172
+ rep_() {
173
+ // Currently `protection_bytes_per_key` can only be enabled at 8 bytes per
174
+ // entry.
175
+ assert(protection_bytes_per_key == 0 || protection_bytes_per_key == 8);
176
+ if (protection_bytes_per_key != 0) {
177
+ prot_info_.reset(new WriteBatch::ProtectionInfo());
178
+ }
179
+ rep_.reserve((reserved_bytes > WriteBatchInternal::kHeader)
180
+ ? reserved_bytes
181
+ : WriteBatchInternal::kHeader);
182
+ rep_.resize(WriteBatchInternal::kHeader);
183
+ }
184
+
185
+ WriteBatch::WriteBatch(const std::string& rep)
186
+ : content_flags_(ContentFlags::DEFERRED), max_bytes_(0), rep_(rep) {}
187
+
188
+ WriteBatch::WriteBatch(std::string&& rep)
189
+ : content_flags_(ContentFlags::DEFERRED),
190
+ max_bytes_(0),
191
+ rep_(std::move(rep)) {}
192
+
193
+ WriteBatch::WriteBatch(const WriteBatch& src)
194
+ : wal_term_point_(src.wal_term_point_),
195
+ content_flags_(src.content_flags_.load(std::memory_order_relaxed)),
196
+ max_bytes_(src.max_bytes_),
197
+ default_cf_ts_sz_(src.default_cf_ts_sz_),
198
+ rep_(src.rep_) {
199
+ if (src.save_points_ != nullptr) {
200
+ save_points_.reset(new SavePoints());
201
+ save_points_->stack = src.save_points_->stack;
202
+ }
203
+ if (src.prot_info_ != nullptr) {
204
+ prot_info_.reset(new WriteBatch::ProtectionInfo());
205
+ prot_info_->entries_ = src.prot_info_->entries_;
206
+ }
207
+ }
208
+
209
+ WriteBatch::WriteBatch(WriteBatch&& src) noexcept
210
+ : save_points_(std::move(src.save_points_)),
211
+ wal_term_point_(std::move(src.wal_term_point_)),
212
+ content_flags_(src.content_flags_.load(std::memory_order_relaxed)),
213
+ max_bytes_(src.max_bytes_),
214
+ prot_info_(std::move(src.prot_info_)),
215
+ default_cf_ts_sz_(src.default_cf_ts_sz_),
216
+ rep_(std::move(src.rep_)) {}
217
+
218
+ WriteBatch& WriteBatch::operator=(const WriteBatch& src) {
219
+ if (&src != this) {
220
+ this->~WriteBatch();
221
+ new (this) WriteBatch(src);
222
+ }
223
+ return *this;
224
+ }
225
+
226
+ WriteBatch& WriteBatch::operator=(WriteBatch&& src) {
227
+ if (&src != this) {
228
+ this->~WriteBatch();
229
+ new (this) WriteBatch(std::move(src));
230
+ }
231
+ return *this;
232
+ }
233
+
234
+ WriteBatch::~WriteBatch() {}
235
+
236
+ WriteBatch::Handler::~Handler() {}
237
+
238
+ void WriteBatch::Handler::LogData(const Slice& /*blob*/) {
239
+ // If the user has not specified something to do with blobs, then we ignore
240
+ // them.
241
+ }
242
+
243
+ bool WriteBatch::Handler::Continue() { return true; }
244
+
245
+ void WriteBatch::Clear() {
246
+ rep_.clear();
247
+ rep_.resize(WriteBatchInternal::kHeader);
248
+
249
+ content_flags_.store(0, std::memory_order_relaxed);
250
+
251
+ if (save_points_ != nullptr) {
252
+ while (!save_points_->stack.empty()) {
253
+ save_points_->stack.pop();
254
+ }
255
+ }
256
+
257
+ if (prot_info_ != nullptr) {
258
+ prot_info_->entries_.clear();
259
+ }
260
+ wal_term_point_.clear();
261
+ default_cf_ts_sz_ = 0;
262
+ }
263
+
264
+ uint32_t WriteBatch::Count() const { return WriteBatchInternal::Count(this); }
265
+
266
+ uint32_t WriteBatch::ComputeContentFlags() const {
267
+ auto rv = content_flags_.load(std::memory_order_relaxed);
268
+ if ((rv & ContentFlags::DEFERRED) != 0) {
269
+ BatchContentClassifier classifier;
270
+ // Should we handle status here?
271
+ Iterate(&classifier).PermitUncheckedError();
272
+ rv = classifier.content_flags;
273
+
274
+ // this method is conceptually const, because it is performing a lazy
275
+ // computation that doesn't affect the abstract state of the batch.
276
+ // content_flags_ is marked mutable so that we can perform the
277
+ // following assignment
278
+ content_flags_.store(rv, std::memory_order_relaxed);
279
+ }
280
+ return rv;
281
+ }
282
+
283
+ void WriteBatch::MarkWalTerminationPoint() {
284
+ wal_term_point_.size = GetDataSize();
285
+ wal_term_point_.count = Count();
286
+ wal_term_point_.content_flags = content_flags_;
287
+ }
288
+
289
+ size_t WriteBatch::GetProtectionBytesPerKey() const {
290
+ if (prot_info_ != nullptr) {
291
+ return prot_info_->GetBytesPerKey();
292
+ }
293
+ return 0;
294
+ }
295
+
296
+ bool WriteBatch::HasPut() const {
297
+ return (ComputeContentFlags() & ContentFlags::HAS_PUT) != 0;
298
+ }
299
+
300
+ bool WriteBatch::HasPutEntity() const {
301
+ return (ComputeContentFlags() & ContentFlags::HAS_PUT_ENTITY) != 0;
302
+ }
303
+
304
+ bool WriteBatch::HasDelete() const {
305
+ return (ComputeContentFlags() & ContentFlags::HAS_DELETE) != 0;
306
+ }
307
+
308
+ bool WriteBatch::HasSingleDelete() const {
309
+ return (ComputeContentFlags() & ContentFlags::HAS_SINGLE_DELETE) != 0;
310
+ }
311
+
312
+ bool WriteBatch::HasDeleteRange() const {
313
+ return (ComputeContentFlags() & ContentFlags::HAS_DELETE_RANGE) != 0;
314
+ }
315
+
316
+ bool WriteBatch::HasMerge() const {
317
+ return (ComputeContentFlags() & ContentFlags::HAS_MERGE) != 0;
318
+ }
319
+
320
+ bool ReadKeyFromWriteBatchEntry(Slice* input, Slice* key, bool cf_record) {
321
+ assert(input != nullptr && key != nullptr);
322
+ // Skip tag byte
323
+ input->remove_prefix(1);
324
+
325
+ if (cf_record) {
326
+ // Skip column_family bytes
327
+ uint32_t cf;
328
+ if (!GetVarint32(input, &cf)) {
329
+ return false;
330
+ }
331
+ }
332
+
333
+ // Extract key
334
+ return GetLengthPrefixedSlice(input, key);
335
+ }
336
+
337
+ bool WriteBatch::HasBeginPrepare() const {
338
+ return (ComputeContentFlags() & ContentFlags::HAS_BEGIN_PREPARE) != 0;
339
+ }
340
+
341
+ bool WriteBatch::HasEndPrepare() const {
342
+ return (ComputeContentFlags() & ContentFlags::HAS_END_PREPARE) != 0;
343
+ }
344
+
345
+ bool WriteBatch::HasCommit() const {
346
+ return (ComputeContentFlags() & ContentFlags::HAS_COMMIT) != 0;
347
+ }
348
+
349
+ bool WriteBatch::HasRollback() const {
350
+ return (ComputeContentFlags() & ContentFlags::HAS_ROLLBACK) != 0;
351
+ }
352
+
353
+ Status ReadRecordFromWriteBatch(Slice* input, char* tag,
354
+ uint32_t* column_family, Slice* key,
355
+ Slice* value, Slice* blob, Slice* xid) {
356
+ assert(key != nullptr && value != nullptr);
357
+ *tag = (*input)[0];
358
+ input->remove_prefix(1);
359
+ *column_family = 0; // default
360
+ switch (*tag) {
361
+ case kTypeColumnFamilyValue:
362
+ if (!GetVarint32(input, column_family)) {
363
+ return Status::Corruption("bad WriteBatch Put");
364
+ }
365
+ FALLTHROUGH_INTENDED;
366
+ case kTypeValue:
367
+ if (!GetLengthPrefixedSlice(input, key) ||
368
+ !GetLengthPrefixedSlice(input, value)) {
369
+ return Status::Corruption("bad WriteBatch Put");
370
+ }
371
+ break;
372
+ case kTypeColumnFamilyDeletion:
373
+ case kTypeColumnFamilySingleDeletion:
374
+ if (!GetVarint32(input, column_family)) {
375
+ return Status::Corruption("bad WriteBatch Delete");
376
+ }
377
+ FALLTHROUGH_INTENDED;
378
+ case kTypeDeletion:
379
+ case kTypeSingleDeletion:
380
+ if (!GetLengthPrefixedSlice(input, key)) {
381
+ return Status::Corruption("bad WriteBatch Delete");
382
+ }
383
+ break;
384
+ case kTypeColumnFamilyRangeDeletion:
385
+ if (!GetVarint32(input, column_family)) {
386
+ return Status::Corruption("bad WriteBatch DeleteRange");
387
+ }
388
+ FALLTHROUGH_INTENDED;
389
+ case kTypeRangeDeletion:
390
+ // for range delete, "key" is begin_key, "value" is end_key
391
+ if (!GetLengthPrefixedSlice(input, key) ||
392
+ !GetLengthPrefixedSlice(input, value)) {
393
+ return Status::Corruption("bad WriteBatch DeleteRange");
394
+ }
395
+ break;
396
+ case kTypeColumnFamilyMerge:
397
+ if (!GetVarint32(input, column_family)) {
398
+ return Status::Corruption("bad WriteBatch Merge");
399
+ }
400
+ FALLTHROUGH_INTENDED;
401
+ case kTypeMerge:
402
+ if (!GetLengthPrefixedSlice(input, key) ||
403
+ !GetLengthPrefixedSlice(input, value)) {
404
+ return Status::Corruption("bad WriteBatch Merge");
405
+ }
406
+ break;
407
+ case kTypeColumnFamilyBlobIndex:
408
+ if (!GetVarint32(input, column_family)) {
409
+ return Status::Corruption("bad WriteBatch BlobIndex");
410
+ }
411
+ FALLTHROUGH_INTENDED;
412
+ case kTypeBlobIndex:
413
+ if (!GetLengthPrefixedSlice(input, key) ||
414
+ !GetLengthPrefixedSlice(input, value)) {
415
+ return Status::Corruption("bad WriteBatch BlobIndex");
416
+ }
417
+ break;
418
+ case kTypeLogData:
419
+ assert(blob != nullptr);
420
+ if (!GetLengthPrefixedSlice(input, blob)) {
421
+ return Status::Corruption("bad WriteBatch Blob");
422
+ }
423
+ break;
424
+ case kTypeNoop:
425
+ case kTypeBeginPrepareXID:
426
+ // This indicates that the prepared batch is also persisted in the db.
427
+ // This is used in WritePreparedTxn
428
+ case kTypeBeginPersistedPrepareXID:
429
+ // This is used in WriteUnpreparedTxn
430
+ case kTypeBeginUnprepareXID:
431
+ break;
432
+ case kTypeEndPrepareXID:
433
+ if (!GetLengthPrefixedSlice(input, xid)) {
434
+ return Status::Corruption("bad EndPrepare XID");
435
+ }
436
+ break;
437
+ case kTypeCommitXIDAndTimestamp:
438
+ if (!GetLengthPrefixedSlice(input, key)) {
439
+ return Status::Corruption("bad commit timestamp");
440
+ }
441
+ FALLTHROUGH_INTENDED;
442
+ case kTypeCommitXID:
443
+ if (!GetLengthPrefixedSlice(input, xid)) {
444
+ return Status::Corruption("bad Commit XID");
445
+ }
446
+ break;
447
+ case kTypeRollbackXID:
448
+ if (!GetLengthPrefixedSlice(input, xid)) {
449
+ return Status::Corruption("bad Rollback XID");
450
+ }
451
+ break;
452
+ case kTypeColumnFamilyWideColumnEntity:
453
+ if (!GetVarint32(input, column_family)) {
454
+ return Status::Corruption("bad WriteBatch PutEntity");
455
+ }
456
+ FALLTHROUGH_INTENDED;
457
+ case kTypeWideColumnEntity:
458
+ if (!GetLengthPrefixedSlice(input, key) ||
459
+ !GetLengthPrefixedSlice(input, value)) {
460
+ return Status::Corruption("bad WriteBatch PutEntity");
461
+ }
462
+ break;
463
+ default:
464
+ return Status::Corruption("unknown WriteBatch tag");
465
+ }
466
+ return Status::OK();
467
+ }
468
+
469
+ Status WriteBatch::Iterate(Handler* handler) const {
470
+ if (rep_.size() < WriteBatchInternal::kHeader) {
471
+ return Status::Corruption("malformed WriteBatch (too small)");
472
+ }
473
+
474
+ return WriteBatchInternal::Iterate(this, handler, WriteBatchInternal::kHeader,
475
+ rep_.size());
476
+ }
477
+
478
+ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
479
+ WriteBatch::Handler* handler, size_t begin,
480
+ size_t end) {
481
+ if (begin > wb->rep_.size() || end > wb->rep_.size() || end < begin) {
482
+ return Status::Corruption("Invalid start/end bounds for Iterate");
483
+ }
484
+ assert(begin <= end);
485
+ Slice input(wb->rep_.data() + begin, static_cast<size_t>(end - begin));
486
+ bool whole_batch =
487
+ (begin == WriteBatchInternal::kHeader) && (end == wb->rep_.size());
488
+
489
+ Slice key, value, blob, xid;
490
+
491
+ // Sometimes a sub-batch starts with a Noop. We want to exclude such Noops as
492
+ // the batch boundary symbols otherwise we would mis-count the number of
493
+ // batches. We do that by checking whether the accumulated batch is empty
494
+ // before seeing the next Noop.
495
+ bool empty_batch = true;
496
+ uint32_t found = 0;
497
+ Status s;
498
+ char tag = 0;
499
+ uint32_t column_family = 0; // default
500
+ bool last_was_try_again = false;
501
+ bool handler_continue = true;
502
+ while (((s.ok() && !input.empty()) || UNLIKELY(s.IsTryAgain()))) {
503
+ handler_continue = handler->Continue();
504
+ if (!handler_continue) {
505
+ break;
506
+ }
507
+
508
+ if (LIKELY(!s.IsTryAgain())) {
509
+ last_was_try_again = false;
510
+ tag = 0;
511
+ column_family = 0; // default
512
+
513
+ s = ReadRecordFromWriteBatch(&input, &tag, &column_family, &key, &value,
514
+ &blob, &xid);
515
+ if (!s.ok()) {
516
+ return s;
517
+ }
518
+ } else {
519
+ assert(s.IsTryAgain());
520
+ assert(!last_was_try_again); // to detect infinite loop bugs
521
+ if (UNLIKELY(last_was_try_again)) {
522
+ return Status::Corruption(
523
+ "two consecutive TryAgain in WriteBatch handler; this is either a "
524
+ "software bug or data corruption.");
525
+ }
526
+ last_was_try_again = true;
527
+ s = Status::OK();
528
+ }
529
+
530
+ switch (tag) {
531
+ case kTypeColumnFamilyValue:
532
+ case kTypeValue:
533
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
534
+ (ContentFlags::DEFERRED | ContentFlags::HAS_PUT));
535
+ s = handler->PutCF(column_family, key, value);
536
+ if (LIKELY(s.ok())) {
537
+ empty_batch = false;
538
+ found++;
539
+ }
540
+ break;
541
+ case kTypeColumnFamilyDeletion:
542
+ case kTypeDeletion:
543
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
544
+ (ContentFlags::DEFERRED | ContentFlags::HAS_DELETE));
545
+ s = handler->DeleteCF(column_family, key);
546
+ if (LIKELY(s.ok())) {
547
+ empty_batch = false;
548
+ found++;
549
+ }
550
+ break;
551
+ case kTypeColumnFamilySingleDeletion:
552
+ case kTypeSingleDeletion:
553
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
554
+ (ContentFlags::DEFERRED | ContentFlags::HAS_SINGLE_DELETE));
555
+ s = handler->SingleDeleteCF(column_family, key);
556
+ if (LIKELY(s.ok())) {
557
+ empty_batch = false;
558
+ found++;
559
+ }
560
+ break;
561
+ case kTypeColumnFamilyRangeDeletion:
562
+ case kTypeRangeDeletion:
563
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
564
+ (ContentFlags::DEFERRED | ContentFlags::HAS_DELETE_RANGE));
565
+ s = handler->DeleteRangeCF(column_family, key, value);
566
+ if (LIKELY(s.ok())) {
567
+ empty_batch = false;
568
+ found++;
569
+ }
570
+ break;
571
+ case kTypeColumnFamilyMerge:
572
+ case kTypeMerge:
573
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
574
+ (ContentFlags::DEFERRED | ContentFlags::HAS_MERGE));
575
+ s = handler->MergeCF(column_family, key, value);
576
+ if (LIKELY(s.ok())) {
577
+ empty_batch = false;
578
+ found++;
579
+ }
580
+ break;
581
+ case kTypeColumnFamilyBlobIndex:
582
+ case kTypeBlobIndex:
583
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
584
+ (ContentFlags::DEFERRED | ContentFlags::HAS_BLOB_INDEX));
585
+ s = handler->PutBlobIndexCF(column_family, key, value);
586
+ if (LIKELY(s.ok())) {
587
+ found++;
588
+ }
589
+ break;
590
+ case kTypeLogData:
591
+ handler->LogData(blob);
592
+ // A batch might have nothing but LogData. It is still a batch.
593
+ empty_batch = false;
594
+ break;
595
+ case kTypeBeginPrepareXID:
596
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
597
+ (ContentFlags::DEFERRED | ContentFlags::HAS_BEGIN_PREPARE));
598
+ s = handler->MarkBeginPrepare();
599
+ assert(s.ok());
600
+ empty_batch = false;
601
+ if (handler->WriteAfterCommit() ==
602
+ WriteBatch::Handler::OptionState::kDisabled) {
603
+ s = Status::NotSupported(
604
+ "WriteCommitted txn tag when write_after_commit_ is disabled (in "
605
+ "WritePrepared/WriteUnprepared mode). If it is not due to "
606
+ "corruption, the WAL must be emptied before changing the "
607
+ "WritePolicy.");
608
+ }
609
+ if (handler->WriteBeforePrepare() ==
610
+ WriteBatch::Handler::OptionState::kEnabled) {
611
+ s = Status::NotSupported(
612
+ "WriteCommitted txn tag when write_before_prepare_ is enabled "
613
+ "(in WriteUnprepared mode). If it is not due to corruption, the "
614
+ "WAL must be emptied before changing the WritePolicy.");
615
+ }
616
+ break;
617
+ case kTypeBeginPersistedPrepareXID:
618
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
619
+ (ContentFlags::DEFERRED | ContentFlags::HAS_BEGIN_PREPARE));
620
+ s = handler->MarkBeginPrepare();
621
+ assert(s.ok());
622
+ empty_batch = false;
623
+ if (handler->WriteAfterCommit() ==
624
+ WriteBatch::Handler::OptionState::kEnabled) {
625
+ s = Status::NotSupported(
626
+ "WritePrepared/WriteUnprepared txn tag when write_after_commit_ "
627
+ "is enabled (in default WriteCommitted mode). If it is not due "
628
+ "to corruption, the WAL must be emptied before changing the "
629
+ "WritePolicy.");
630
+ }
631
+ break;
632
+ case kTypeBeginUnprepareXID:
633
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
634
+ (ContentFlags::DEFERRED | ContentFlags::HAS_BEGIN_UNPREPARE));
635
+ s = handler->MarkBeginPrepare(true /* unprepared */);
636
+ assert(s.ok());
637
+ empty_batch = false;
638
+ if (handler->WriteAfterCommit() ==
639
+ WriteBatch::Handler::OptionState::kEnabled) {
640
+ s = Status::NotSupported(
641
+ "WriteUnprepared txn tag when write_after_commit_ is enabled (in "
642
+ "default WriteCommitted mode). If it is not due to corruption, "
643
+ "the WAL must be emptied before changing the WritePolicy.");
644
+ }
645
+ if (handler->WriteBeforePrepare() ==
646
+ WriteBatch::Handler::OptionState::kDisabled) {
647
+ s = Status::NotSupported(
648
+ "WriteUnprepared txn tag when write_before_prepare_ is disabled "
649
+ "(in WriteCommitted/WritePrepared mode). If it is not due to "
650
+ "corruption, the WAL must be emptied before changing the "
651
+ "WritePolicy.");
652
+ }
653
+ break;
654
+ case kTypeEndPrepareXID:
655
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
656
+ (ContentFlags::DEFERRED | ContentFlags::HAS_END_PREPARE));
657
+ s = handler->MarkEndPrepare(xid);
658
+ assert(s.ok());
659
+ empty_batch = true;
660
+ break;
661
+ case kTypeCommitXID:
662
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
663
+ (ContentFlags::DEFERRED | ContentFlags::HAS_COMMIT));
664
+ s = handler->MarkCommit(xid);
665
+ assert(s.ok());
666
+ empty_batch = true;
667
+ break;
668
+ case kTypeCommitXIDAndTimestamp:
669
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
670
+ (ContentFlags::DEFERRED | ContentFlags::HAS_COMMIT));
671
+ // key stores the commit timestamp.
672
+ assert(!key.empty());
673
+ s = handler->MarkCommitWithTimestamp(xid, key);
674
+ if (LIKELY(s.ok())) {
675
+ empty_batch = true;
676
+ }
677
+ break;
678
+ case kTypeRollbackXID:
679
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
680
+ (ContentFlags::DEFERRED | ContentFlags::HAS_ROLLBACK));
681
+ s = handler->MarkRollback(xid);
682
+ assert(s.ok());
683
+ empty_batch = true;
684
+ break;
685
+ case kTypeNoop:
686
+ s = handler->MarkNoop(empty_batch);
687
+ assert(s.ok());
688
+ empty_batch = true;
689
+ break;
690
+ case kTypeWideColumnEntity:
691
+ case kTypeColumnFamilyWideColumnEntity:
692
+ assert(wb->content_flags_.load(std::memory_order_relaxed) &
693
+ (ContentFlags::DEFERRED | ContentFlags::HAS_PUT_ENTITY));
694
+ s = handler->PutEntityCF(column_family, key, value);
695
+ if (LIKELY(s.ok())) {
696
+ empty_batch = false;
697
+ ++found;
698
+ }
699
+ break;
700
+ default:
701
+ return Status::Corruption("unknown WriteBatch tag");
702
+ }
703
+ }
704
+ if (!s.ok()) {
705
+ return s;
706
+ }
707
+ if (handler_continue && whole_batch &&
708
+ found != WriteBatchInternal::Count(wb)) {
709
+ return Status::Corruption("WriteBatch has wrong count");
710
+ } else {
711
+ return Status::OK();
712
+ }
713
+ }
714
+
715
+ bool WriteBatchInternal::IsLatestPersistentState(const WriteBatch* b) {
716
+ return b->is_latest_persistent_state_;
717
+ }
718
+
719
+ void WriteBatchInternal::SetAsLatestPersistentState(WriteBatch* b) {
720
+ b->is_latest_persistent_state_ = true;
721
+ }
722
+
723
+ uint32_t WriteBatchInternal::Count(const WriteBatch* b) {
724
+ return DecodeFixed32(b->rep_.data() + 8);
725
+ }
726
+
727
+ void WriteBatchInternal::SetCount(WriteBatch* b, uint32_t n) {
728
+ EncodeFixed32(&b->rep_[8], n);
729
+ }
730
+
731
+ SequenceNumber WriteBatchInternal::Sequence(const WriteBatch* b) {
732
+ return SequenceNumber(DecodeFixed64(b->rep_.data()));
733
+ }
734
+
735
+ void WriteBatchInternal::SetSequence(WriteBatch* b, SequenceNumber seq) {
736
+ EncodeFixed64(&b->rep_[0], seq);
737
+ }
738
+
739
+ size_t WriteBatchInternal::GetFirstOffset(WriteBatch* /*b*/) {
740
+ return WriteBatchInternal::kHeader;
741
+ }
742
+
743
+ std::tuple<Status, uint32_t, size_t>
744
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(
745
+ WriteBatch* b, ColumnFamilyHandle* column_family) {
746
+ uint32_t cf_id = GetColumnFamilyID(column_family);
747
+ size_t ts_sz = 0;
748
+ Status s;
749
+ if (column_family) {
750
+ const Comparator* const ucmp = column_family->GetComparator();
751
+ if (ucmp) {
752
+ ts_sz = ucmp->timestamp_size();
753
+ if (0 == cf_id && b->default_cf_ts_sz_ != ts_sz) {
754
+ s = Status::InvalidArgument("Default cf timestamp size mismatch");
755
+ }
756
+ }
757
+ } else if (b->default_cf_ts_sz_ > 0) {
758
+ ts_sz = b->default_cf_ts_sz_;
759
+ }
760
+ return std::make_tuple(s, cf_id, ts_sz);
761
+ }
762
+
763
+ namespace {
764
+ Status CheckColumnFamilyTimestampSize(ColumnFamilyHandle* column_family,
765
+ const Slice& ts) {
766
+ if (!column_family) {
767
+ return Status::InvalidArgument("column family handle cannot be null");
768
+ }
769
+ const Comparator* const ucmp = column_family->GetComparator();
770
+ assert(ucmp);
771
+ size_t cf_ts_sz = ucmp->timestamp_size();
772
+ if (0 == cf_ts_sz) {
773
+ return Status::InvalidArgument("timestamp disabled");
774
+ }
775
+ if (cf_ts_sz != ts.size()) {
776
+ return Status::InvalidArgument("timestamp size mismatch");
777
+ }
778
+ return Status::OK();
779
+ }
780
+ } // anonymous namespace
781
+
782
+ Status WriteBatchInternal::Put(WriteBatch* b, uint32_t column_family_id,
783
+ const Slice& key, const Slice& value) {
784
+ if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
785
+ return Status::InvalidArgument("key is too large");
786
+ }
787
+ if (value.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
788
+ return Status::InvalidArgument("value is too large");
789
+ }
790
+
791
+ LocalSavePoint save(b);
792
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
793
+ if (column_family_id == 0) {
794
+ b->rep_.push_back(static_cast<char>(kTypeValue));
795
+ } else {
796
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyValue));
797
+ PutVarint32(&b->rep_, column_family_id);
798
+ }
799
+ PutLengthPrefixedSlice(&b->rep_, key);
800
+ PutLengthPrefixedSlice(&b->rep_, value);
801
+ b->content_flags_.store(
802
+ b->content_flags_.load(std::memory_order_relaxed) | ContentFlags::HAS_PUT,
803
+ std::memory_order_relaxed);
804
+ if (b->prot_info_ != nullptr) {
805
+ // Technically the optype could've been `kTypeColumnFamilyValue` with the
806
+ // CF ID encoded in the `WriteBatch`. That distinction is unimportant
807
+ // however since we verify CF ID is correct, as well as all other fields
808
+ // (a missing/extra encoded CF ID would corrupt another field). It is
809
+ // convenient to consolidate on `kTypeValue` here as that is what will be
810
+ // inserted into memtable.
811
+ b->prot_info_->entries_.emplace_back(ProtectionInfo64()
812
+ .ProtectKVO(key, value, kTypeValue)
813
+ .ProtectC(column_family_id));
814
+ }
815
+ return save.commit();
816
+ }
817
+
818
+ Status WriteBatch::Put(ColumnFamilyHandle* column_family, const Slice& key,
819
+ const Slice& value) {
820
+ size_t ts_sz = 0;
821
+ uint32_t cf_id = 0;
822
+ Status s;
823
+
824
+ std::tie(s, cf_id, ts_sz) =
825
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
826
+ column_family);
827
+
828
+ if (!s.ok()) {
829
+ return s;
830
+ }
831
+
832
+ if (0 == ts_sz) {
833
+ return WriteBatchInternal::Put(this, cf_id, key, value);
834
+ }
835
+
836
+ needs_in_place_update_ts_ = true;
837
+ has_key_with_ts_ = true;
838
+ std::string dummy_ts(ts_sz, '\0');
839
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
840
+ return WriteBatchInternal::Put(this, cf_id, SliceParts(key_with_ts.data(), 2),
841
+ SliceParts(&value, 1));
842
+ }
843
+
844
+ Status WriteBatch::Put(ColumnFamilyHandle* column_family, const Slice& key,
845
+ const Slice& ts, const Slice& value) {
846
+ const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
847
+ if (!s.ok()) {
848
+ return s;
849
+ }
850
+ has_key_with_ts_ = true;
851
+ assert(column_family);
852
+ uint32_t cf_id = column_family->GetID();
853
+ std::array<Slice, 2> key_with_ts{{key, ts}};
854
+ return WriteBatchInternal::Put(this, cf_id, SliceParts(key_with_ts.data(), 2),
855
+ SliceParts(&value, 1));
856
+ }
857
+
858
+ Status WriteBatchInternal::CheckSlicePartsLength(const SliceParts& key,
859
+ const SliceParts& value) {
860
+ size_t total_key_bytes = 0;
861
+ for (int i = 0; i < key.num_parts; ++i) {
862
+ total_key_bytes += key.parts[i].size();
863
+ }
864
+ if (total_key_bytes >= size_t{std::numeric_limits<uint32_t>::max()}) {
865
+ return Status::InvalidArgument("key is too large");
866
+ }
867
+
868
+ size_t total_value_bytes = 0;
869
+ for (int i = 0; i < value.num_parts; ++i) {
870
+ total_value_bytes += value.parts[i].size();
871
+ }
872
+ if (total_value_bytes >= size_t{std::numeric_limits<uint32_t>::max()}) {
873
+ return Status::InvalidArgument("value is too large");
874
+ }
875
+ return Status::OK();
876
+ }
877
+
878
+ Status WriteBatchInternal::Put(WriteBatch* b, uint32_t column_family_id,
879
+ const SliceParts& key, const SliceParts& value) {
880
+ Status s = CheckSlicePartsLength(key, value);
881
+ if (!s.ok()) {
882
+ return s;
883
+ }
884
+
885
+ LocalSavePoint save(b);
886
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
887
+ if (column_family_id == 0) {
888
+ b->rep_.push_back(static_cast<char>(kTypeValue));
889
+ } else {
890
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyValue));
891
+ PutVarint32(&b->rep_, column_family_id);
892
+ }
893
+ PutLengthPrefixedSliceParts(&b->rep_, key);
894
+ PutLengthPrefixedSliceParts(&b->rep_, value);
895
+ b->content_flags_.store(
896
+ b->content_flags_.load(std::memory_order_relaxed) | ContentFlags::HAS_PUT,
897
+ std::memory_order_relaxed);
898
+ if (b->prot_info_ != nullptr) {
899
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
900
+ // `ValueType` argument passed to `ProtectKVO()`.
901
+ b->prot_info_->entries_.emplace_back(ProtectionInfo64()
902
+ .ProtectKVO(key, value, kTypeValue)
903
+ .ProtectC(column_family_id));
904
+ }
905
+ return save.commit();
906
+ }
907
+
908
+ Status WriteBatch::Put(ColumnFamilyHandle* column_family, const SliceParts& key,
909
+ const SliceParts& value) {
910
+ size_t ts_sz = 0;
911
+ uint32_t cf_id = 0;
912
+ Status s;
913
+
914
+ std::tie(s, cf_id, ts_sz) =
915
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
916
+ column_family);
917
+
918
+ if (!s.ok()) {
919
+ return s;
920
+ }
921
+
922
+ if (ts_sz == 0) {
923
+ return WriteBatchInternal::Put(this, cf_id, key, value);
924
+ }
925
+
926
+ return Status::InvalidArgument(
927
+ "Cannot call this method on column family enabling timestamp");
928
+ }
929
+
930
+ Status WriteBatchInternal::PutEntity(WriteBatch* b, uint32_t column_family_id,
931
+ const Slice& key,
932
+ const WideColumns& columns) {
933
+ assert(b);
934
+
935
+ if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
936
+ return Status::InvalidArgument("key is too large");
937
+ }
938
+
939
+ WideColumns sorted_columns(columns);
940
+ std::sort(sorted_columns.begin(), sorted_columns.end(),
941
+ [](const WideColumn& lhs, const WideColumn& rhs) {
942
+ return lhs.name().compare(rhs.name()) < 0;
943
+ });
944
+
945
+ std::string entity;
946
+ const Status s = WideColumnSerialization::Serialize(sorted_columns, entity);
947
+ if (!s.ok()) {
948
+ return s;
949
+ }
950
+
951
+ if (entity.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
952
+ return Status::InvalidArgument("wide column entity is too large");
953
+ }
954
+
955
+ LocalSavePoint save(b);
956
+
957
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
958
+
959
+ if (column_family_id == 0) {
960
+ b->rep_.push_back(static_cast<char>(kTypeWideColumnEntity));
961
+ } else {
962
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyWideColumnEntity));
963
+ PutVarint32(&b->rep_, column_family_id);
964
+ }
965
+
966
+ PutLengthPrefixedSlice(&b->rep_, key);
967
+ PutLengthPrefixedSlice(&b->rep_, entity);
968
+
969
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
970
+ ContentFlags::HAS_PUT_ENTITY,
971
+ std::memory_order_relaxed);
972
+
973
+ if (b->prot_info_ != nullptr) {
974
+ b->prot_info_->entries_.emplace_back(
975
+ ProtectionInfo64()
976
+ .ProtectKVO(key, entity, kTypeWideColumnEntity)
977
+ .ProtectC(column_family_id));
978
+ }
979
+
980
+ return save.commit();
981
+ }
982
+
983
+ Status WriteBatch::PutEntity(ColumnFamilyHandle* column_family,
984
+ const Slice& key, const WideColumns& columns) {
985
+ if (!column_family) {
986
+ return Status::InvalidArgument(
987
+ "Cannot call this method without a column family handle");
988
+ }
989
+
990
+ Status s;
991
+ uint32_t cf_id = 0;
992
+ size_t ts_sz = 0;
993
+
994
+ std::tie(s, cf_id, ts_sz) =
995
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
996
+ column_family);
997
+
998
+ if (!s.ok()) {
999
+ return s;
1000
+ }
1001
+
1002
+ if (ts_sz) {
1003
+ return Status::InvalidArgument(
1004
+ "Cannot call this method on column family enabling timestamp");
1005
+ }
1006
+
1007
+ return WriteBatchInternal::PutEntity(this, cf_id, key, columns);
1008
+ }
1009
+
1010
+ Status WriteBatchInternal::InsertNoop(WriteBatch* b) {
1011
+ b->rep_.push_back(static_cast<char>(kTypeNoop));
1012
+ return Status::OK();
1013
+ }
1014
+
1015
+ Status WriteBatchInternal::MarkEndPrepare(WriteBatch* b, const Slice& xid,
1016
+ bool write_after_commit,
1017
+ bool unprepared_batch) {
1018
+ // a manually constructed batch can only contain one prepare section
1019
+ assert(b->rep_[12] == static_cast<char>(kTypeNoop));
1020
+
1021
+ // all savepoints up to this point are cleared
1022
+ if (b->save_points_ != nullptr) {
1023
+ while (!b->save_points_->stack.empty()) {
1024
+ b->save_points_->stack.pop();
1025
+ }
1026
+ }
1027
+
1028
+ // rewrite noop as begin marker
1029
+ b->rep_[12] = static_cast<char>(
1030
+ write_after_commit ? kTypeBeginPrepareXID
1031
+ : (unprepared_batch ? kTypeBeginUnprepareXID
1032
+ : kTypeBeginPersistedPrepareXID));
1033
+ b->rep_.push_back(static_cast<char>(kTypeEndPrepareXID));
1034
+ PutLengthPrefixedSlice(&b->rep_, xid);
1035
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1036
+ ContentFlags::HAS_END_PREPARE |
1037
+ ContentFlags::HAS_BEGIN_PREPARE,
1038
+ std::memory_order_relaxed);
1039
+ if (unprepared_batch) {
1040
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1041
+ ContentFlags::HAS_BEGIN_UNPREPARE,
1042
+ std::memory_order_relaxed);
1043
+ }
1044
+ return Status::OK();
1045
+ }
1046
+
1047
+ Status WriteBatchInternal::MarkCommit(WriteBatch* b, const Slice& xid) {
1048
+ b->rep_.push_back(static_cast<char>(kTypeCommitXID));
1049
+ PutLengthPrefixedSlice(&b->rep_, xid);
1050
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1051
+ ContentFlags::HAS_COMMIT,
1052
+ std::memory_order_relaxed);
1053
+ return Status::OK();
1054
+ }
1055
+
1056
+ Status WriteBatchInternal::MarkCommitWithTimestamp(WriteBatch* b,
1057
+ const Slice& xid,
1058
+ const Slice& commit_ts) {
1059
+ assert(!commit_ts.empty());
1060
+ b->rep_.push_back(static_cast<char>(kTypeCommitXIDAndTimestamp));
1061
+ PutLengthPrefixedSlice(&b->rep_, commit_ts);
1062
+ PutLengthPrefixedSlice(&b->rep_, xid);
1063
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1064
+ ContentFlags::HAS_COMMIT,
1065
+ std::memory_order_relaxed);
1066
+ return Status::OK();
1067
+ }
1068
+
1069
+ Status WriteBatchInternal::MarkRollback(WriteBatch* b, const Slice& xid) {
1070
+ b->rep_.push_back(static_cast<char>(kTypeRollbackXID));
1071
+ PutLengthPrefixedSlice(&b->rep_, xid);
1072
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1073
+ ContentFlags::HAS_ROLLBACK,
1074
+ std::memory_order_relaxed);
1075
+ return Status::OK();
1076
+ }
1077
+
1078
+ Status WriteBatchInternal::Delete(WriteBatch* b, uint32_t column_family_id,
1079
+ const Slice& key) {
1080
+ LocalSavePoint save(b);
1081
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1082
+ if (column_family_id == 0) {
1083
+ b->rep_.push_back(static_cast<char>(kTypeDeletion));
1084
+ } else {
1085
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyDeletion));
1086
+ PutVarint32(&b->rep_, column_family_id);
1087
+ }
1088
+ PutLengthPrefixedSlice(&b->rep_, key);
1089
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1090
+ ContentFlags::HAS_DELETE,
1091
+ std::memory_order_relaxed);
1092
+ if (b->prot_info_ != nullptr) {
1093
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1094
+ // `ValueType` argument passed to `ProtectKVO()`.
1095
+ b->prot_info_->entries_.emplace_back(
1096
+ ProtectionInfo64()
1097
+ .ProtectKVO(key, "" /* value */, kTypeDeletion)
1098
+ .ProtectC(column_family_id));
1099
+ }
1100
+ return save.commit();
1101
+ }
1102
+
1103
+ Status WriteBatch::Delete(ColumnFamilyHandle* column_family, const Slice& key) {
1104
+ size_t ts_sz = 0;
1105
+ uint32_t cf_id = 0;
1106
+ Status s;
1107
+
1108
+ std::tie(s, cf_id, ts_sz) =
1109
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1110
+ column_family);
1111
+
1112
+ if (!s.ok()) {
1113
+ return s;
1114
+ }
1115
+
1116
+ if (0 == ts_sz) {
1117
+ return WriteBatchInternal::Delete(this, cf_id, key);
1118
+ }
1119
+
1120
+ needs_in_place_update_ts_ = true;
1121
+ has_key_with_ts_ = true;
1122
+ std::string dummy_ts(ts_sz, '\0');
1123
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1124
+ return WriteBatchInternal::Delete(this, cf_id,
1125
+ SliceParts(key_with_ts.data(), 2));
1126
+ }
1127
+
1128
+ Status WriteBatch::Delete(ColumnFamilyHandle* column_family, const Slice& key,
1129
+ const Slice& ts) {
1130
+ const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1131
+ if (!s.ok()) {
1132
+ return s;
1133
+ }
1134
+ assert(column_family);
1135
+ has_key_with_ts_ = true;
1136
+ uint32_t cf_id = column_family->GetID();
1137
+ std::array<Slice, 2> key_with_ts{{key, ts}};
1138
+ return WriteBatchInternal::Delete(this, cf_id,
1139
+ SliceParts(key_with_ts.data(), 2));
1140
+ }
1141
+
1142
+ Status WriteBatchInternal::Delete(WriteBatch* b, uint32_t column_family_id,
1143
+ const SliceParts& key) {
1144
+ LocalSavePoint save(b);
1145
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1146
+ if (column_family_id == 0) {
1147
+ b->rep_.push_back(static_cast<char>(kTypeDeletion));
1148
+ } else {
1149
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyDeletion));
1150
+ PutVarint32(&b->rep_, column_family_id);
1151
+ }
1152
+ PutLengthPrefixedSliceParts(&b->rep_, key);
1153
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1154
+ ContentFlags::HAS_DELETE,
1155
+ std::memory_order_relaxed);
1156
+ if (b->prot_info_ != nullptr) {
1157
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1158
+ // `ValueType` argument passed to `ProtectKVO()`.
1159
+ b->prot_info_->entries_.emplace_back(
1160
+ ProtectionInfo64()
1161
+ .ProtectKVO(key,
1162
+ SliceParts(nullptr /* _parts */, 0 /* _num_parts */),
1163
+ kTypeDeletion)
1164
+ .ProtectC(column_family_id));
1165
+ }
1166
+ return save.commit();
1167
+ }
1168
+
1169
+ Status WriteBatch::Delete(ColumnFamilyHandle* column_family,
1170
+ const SliceParts& key) {
1171
+ size_t ts_sz = 0;
1172
+ uint32_t cf_id = 0;
1173
+ Status s;
1174
+
1175
+ std::tie(s, cf_id, ts_sz) =
1176
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1177
+ column_family);
1178
+
1179
+ if (!s.ok()) {
1180
+ return s;
1181
+ }
1182
+
1183
+ if (0 == ts_sz) {
1184
+ return WriteBatchInternal::Delete(this, cf_id, key);
1185
+ }
1186
+
1187
+ return Status::InvalidArgument(
1188
+ "Cannot call this method on column family enabling timestamp");
1189
+ }
1190
+
1191
+ Status WriteBatchInternal::SingleDelete(WriteBatch* b,
1192
+ uint32_t column_family_id,
1193
+ const Slice& key) {
1194
+ LocalSavePoint save(b);
1195
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1196
+ if (column_family_id == 0) {
1197
+ b->rep_.push_back(static_cast<char>(kTypeSingleDeletion));
1198
+ } else {
1199
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilySingleDeletion));
1200
+ PutVarint32(&b->rep_, column_family_id);
1201
+ }
1202
+ PutLengthPrefixedSlice(&b->rep_, key);
1203
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1204
+ ContentFlags::HAS_SINGLE_DELETE,
1205
+ std::memory_order_relaxed);
1206
+ if (b->prot_info_ != nullptr) {
1207
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1208
+ // `ValueType` argument passed to `ProtectKVO()`.
1209
+ b->prot_info_->entries_.emplace_back(
1210
+ ProtectionInfo64()
1211
+ .ProtectKVO(key, "" /* value */, kTypeSingleDeletion)
1212
+ .ProtectC(column_family_id));
1213
+ }
1214
+ return save.commit();
1215
+ }
1216
+
1217
+ Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1218
+ const Slice& key) {
1219
+ size_t ts_sz = 0;
1220
+ uint32_t cf_id = 0;
1221
+ Status s;
1222
+
1223
+ std::tie(s, cf_id, ts_sz) =
1224
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1225
+ column_family);
1226
+
1227
+ if (!s.ok()) {
1228
+ return s;
1229
+ }
1230
+
1231
+ if (0 == ts_sz) {
1232
+ return WriteBatchInternal::SingleDelete(this, cf_id, key);
1233
+ }
1234
+
1235
+ needs_in_place_update_ts_ = true;
1236
+ has_key_with_ts_ = true;
1237
+ std::string dummy_ts(ts_sz, '\0');
1238
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1239
+ return WriteBatchInternal::SingleDelete(this, cf_id,
1240
+ SliceParts(key_with_ts.data(), 2));
1241
+ }
1242
+
1243
+ Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1244
+ const Slice& key, const Slice& ts) {
1245
+ const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1246
+ if (!s.ok()) {
1247
+ return s;
1248
+ }
1249
+ has_key_with_ts_ = true;
1250
+ assert(column_family);
1251
+ uint32_t cf_id = column_family->GetID();
1252
+ std::array<Slice, 2> key_with_ts{{key, ts}};
1253
+ return WriteBatchInternal::SingleDelete(this, cf_id,
1254
+ SliceParts(key_with_ts.data(), 2));
1255
+ }
1256
+
1257
+ Status WriteBatchInternal::SingleDelete(WriteBatch* b,
1258
+ uint32_t column_family_id,
1259
+ const SliceParts& key) {
1260
+ LocalSavePoint save(b);
1261
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1262
+ if (column_family_id == 0) {
1263
+ b->rep_.push_back(static_cast<char>(kTypeSingleDeletion));
1264
+ } else {
1265
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilySingleDeletion));
1266
+ PutVarint32(&b->rep_, column_family_id);
1267
+ }
1268
+ PutLengthPrefixedSliceParts(&b->rep_, key);
1269
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1270
+ ContentFlags::HAS_SINGLE_DELETE,
1271
+ std::memory_order_relaxed);
1272
+ if (b->prot_info_ != nullptr) {
1273
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1274
+ // `ValueType` argument passed to `ProtectKVO()`.
1275
+ b->prot_info_->entries_.emplace_back(
1276
+ ProtectionInfo64()
1277
+ .ProtectKVO(key,
1278
+ SliceParts(nullptr /* _parts */,
1279
+ 0 /* _num_parts */) /* value */,
1280
+ kTypeSingleDeletion)
1281
+ .ProtectC(column_family_id));
1282
+ }
1283
+ return save.commit();
1284
+ }
1285
+
1286
+ Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1287
+ const SliceParts& key) {
1288
+ size_t ts_sz = 0;
1289
+ uint32_t cf_id = 0;
1290
+ Status s;
1291
+
1292
+ std::tie(s, cf_id, ts_sz) =
1293
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1294
+ column_family);
1295
+
1296
+ if (!s.ok()) {
1297
+ return s;
1298
+ }
1299
+
1300
+ if (0 == ts_sz) {
1301
+ return WriteBatchInternal::SingleDelete(this, cf_id, key);
1302
+ }
1303
+
1304
+ return Status::InvalidArgument(
1305
+ "Cannot call this method on column family enabling timestamp");
1306
+ }
1307
+
1308
+ Status WriteBatchInternal::DeleteRange(WriteBatch* b, uint32_t column_family_id,
1309
+ const Slice& begin_key,
1310
+ const Slice& end_key) {
1311
+ LocalSavePoint save(b);
1312
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1313
+ if (column_family_id == 0) {
1314
+ b->rep_.push_back(static_cast<char>(kTypeRangeDeletion));
1315
+ } else {
1316
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyRangeDeletion));
1317
+ PutVarint32(&b->rep_, column_family_id);
1318
+ }
1319
+ PutLengthPrefixedSlice(&b->rep_, begin_key);
1320
+ PutLengthPrefixedSlice(&b->rep_, end_key);
1321
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1322
+ ContentFlags::HAS_DELETE_RANGE,
1323
+ std::memory_order_relaxed);
1324
+ if (b->prot_info_ != nullptr) {
1325
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1326
+ // `ValueType` argument passed to `ProtectKVO()`.
1327
+ // In `DeleteRange()`, the end key is treated as the value.
1328
+ b->prot_info_->entries_.emplace_back(
1329
+ ProtectionInfo64()
1330
+ .ProtectKVO(begin_key, end_key, kTypeRangeDeletion)
1331
+ .ProtectC(column_family_id));
1332
+ }
1333
+ return save.commit();
1334
+ }
1335
+
1336
+ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1337
+ const Slice& begin_key, const Slice& end_key) {
1338
+ size_t ts_sz = 0;
1339
+ uint32_t cf_id = 0;
1340
+ Status s;
1341
+
1342
+ std::tie(s, cf_id, ts_sz) =
1343
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1344
+ column_family);
1345
+
1346
+ if (!s.ok()) {
1347
+ return s;
1348
+ }
1349
+
1350
+ if (0 == ts_sz) {
1351
+ return WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1352
+ }
1353
+
1354
+ needs_in_place_update_ts_ = true;
1355
+ has_key_with_ts_ = true;
1356
+ std::string dummy_ts(ts_sz, '\0');
1357
+ std::array<Slice, 2> begin_key_with_ts{{begin_key, dummy_ts}};
1358
+ std::array<Slice, 2> end_key_with_ts{{end_key, dummy_ts}};
1359
+ return WriteBatchInternal::DeleteRange(
1360
+ this, cf_id, SliceParts(begin_key_with_ts.data(), 2),
1361
+ SliceParts(end_key_with_ts.data(), 2));
1362
+ }
1363
+
1364
+ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1365
+ const Slice& begin_key, const Slice& end_key,
1366
+ const Slice& ts) {
1367
+ const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1368
+ if (!s.ok()) {
1369
+ return s;
1370
+ }
1371
+ assert(column_family);
1372
+ has_key_with_ts_ = true;
1373
+ uint32_t cf_id = column_family->GetID();
1374
+ std::array<Slice, 2> key_with_ts{{begin_key, ts}};
1375
+ std::array<Slice, 2> end_key_with_ts{{end_key, ts}};
1376
+ return WriteBatchInternal::DeleteRange(this, cf_id,
1377
+ SliceParts(key_with_ts.data(), 2),
1378
+ SliceParts(end_key_with_ts.data(), 2));
1379
+ }
1380
+
1381
+ Status WriteBatchInternal::DeleteRange(WriteBatch* b, uint32_t column_family_id,
1382
+ const SliceParts& begin_key,
1383
+ const SliceParts& end_key) {
1384
+ LocalSavePoint save(b);
1385
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1386
+ if (column_family_id == 0) {
1387
+ b->rep_.push_back(static_cast<char>(kTypeRangeDeletion));
1388
+ } else {
1389
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyRangeDeletion));
1390
+ PutVarint32(&b->rep_, column_family_id);
1391
+ }
1392
+ PutLengthPrefixedSliceParts(&b->rep_, begin_key);
1393
+ PutLengthPrefixedSliceParts(&b->rep_, end_key);
1394
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1395
+ ContentFlags::HAS_DELETE_RANGE,
1396
+ std::memory_order_relaxed);
1397
+ if (b->prot_info_ != nullptr) {
1398
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1399
+ // `ValueType` argument passed to `ProtectKVO()`.
1400
+ // In `DeleteRange()`, the end key is treated as the value.
1401
+ b->prot_info_->entries_.emplace_back(
1402
+ ProtectionInfo64()
1403
+ .ProtectKVO(begin_key, end_key, kTypeRangeDeletion)
1404
+ .ProtectC(column_family_id));
1405
+ }
1406
+ return save.commit();
1407
+ }
1408
+
1409
+ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1410
+ const SliceParts& begin_key,
1411
+ const SliceParts& end_key) {
1412
+ size_t ts_sz = 0;
1413
+ uint32_t cf_id = 0;
1414
+ Status s;
1415
+
1416
+ std::tie(s, cf_id, ts_sz) =
1417
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1418
+ column_family);
1419
+
1420
+ if (!s.ok()) {
1421
+ return s;
1422
+ }
1423
+
1424
+ if (0 == ts_sz) {
1425
+ return WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1426
+ }
1427
+
1428
+ return Status::InvalidArgument(
1429
+ "Cannot call this method on column family enabling timestamp");
1430
+ }
1431
+
1432
+ Status WriteBatchInternal::Merge(WriteBatch* b, uint32_t column_family_id,
1433
+ const Slice& key, const Slice& value) {
1434
+ if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
1435
+ return Status::InvalidArgument("key is too large");
1436
+ }
1437
+ if (value.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
1438
+ return Status::InvalidArgument("value is too large");
1439
+ }
1440
+
1441
+ LocalSavePoint save(b);
1442
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1443
+ if (column_family_id == 0) {
1444
+ b->rep_.push_back(static_cast<char>(kTypeMerge));
1445
+ } else {
1446
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyMerge));
1447
+ PutVarint32(&b->rep_, column_family_id);
1448
+ }
1449
+ PutLengthPrefixedSlice(&b->rep_, key);
1450
+ PutLengthPrefixedSlice(&b->rep_, value);
1451
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1452
+ ContentFlags::HAS_MERGE,
1453
+ std::memory_order_relaxed);
1454
+ if (b->prot_info_ != nullptr) {
1455
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1456
+ // `ValueType` argument passed to `ProtectKVO()`.
1457
+ b->prot_info_->entries_.emplace_back(ProtectionInfo64()
1458
+ .ProtectKVO(key, value, kTypeMerge)
1459
+ .ProtectC(column_family_id));
1460
+ }
1461
+ return save.commit();
1462
+ }
1463
+
1464
+ Status WriteBatch::Merge(ColumnFamilyHandle* column_family, const Slice& key,
1465
+ const Slice& value) {
1466
+ size_t ts_sz = 0;
1467
+ uint32_t cf_id = 0;
1468
+ Status s;
1469
+
1470
+ std::tie(s, cf_id, ts_sz) =
1471
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1472
+ column_family);
1473
+
1474
+ if (!s.ok()) {
1475
+ return s;
1476
+ }
1477
+
1478
+ if (0 == ts_sz) {
1479
+ return WriteBatchInternal::Merge(this, cf_id, key, value);
1480
+ }
1481
+
1482
+ needs_in_place_update_ts_ = true;
1483
+ has_key_with_ts_ = true;
1484
+ std::string dummy_ts(ts_sz, '\0');
1485
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1486
+
1487
+ return WriteBatchInternal::Merge(
1488
+ this, cf_id, SliceParts(key_with_ts.data(), 2), SliceParts(&value, 1));
1489
+ }
1490
+
1491
+ Status WriteBatch::Merge(ColumnFamilyHandle* column_family, const Slice& key,
1492
+ const Slice& ts, const Slice& value) {
1493
+ const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1494
+ if (!s.ok()) {
1495
+ return s;
1496
+ }
1497
+ has_key_with_ts_ = true;
1498
+ assert(column_family);
1499
+ uint32_t cf_id = column_family->GetID();
1500
+ std::array<Slice, 2> key_with_ts{{key, ts}};
1501
+ return WriteBatchInternal::Merge(
1502
+ this, cf_id, SliceParts(key_with_ts.data(), 2), SliceParts(&value, 1));
1503
+ }
1504
+
1505
+ Status WriteBatchInternal::Merge(WriteBatch* b, uint32_t column_family_id,
1506
+ const SliceParts& key,
1507
+ const SliceParts& value) {
1508
+ Status s = CheckSlicePartsLength(key, value);
1509
+ if (!s.ok()) {
1510
+ return s;
1511
+ }
1512
+
1513
+ LocalSavePoint save(b);
1514
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1515
+ if (column_family_id == 0) {
1516
+ b->rep_.push_back(static_cast<char>(kTypeMerge));
1517
+ } else {
1518
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyMerge));
1519
+ PutVarint32(&b->rep_, column_family_id);
1520
+ }
1521
+ PutLengthPrefixedSliceParts(&b->rep_, key);
1522
+ PutLengthPrefixedSliceParts(&b->rep_, value);
1523
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1524
+ ContentFlags::HAS_MERGE,
1525
+ std::memory_order_relaxed);
1526
+ if (b->prot_info_ != nullptr) {
1527
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1528
+ // `ValueType` argument passed to `ProtectKVO()`.
1529
+ b->prot_info_->entries_.emplace_back(ProtectionInfo64()
1530
+ .ProtectKVO(key, value, kTypeMerge)
1531
+ .ProtectC(column_family_id));
1532
+ }
1533
+ return save.commit();
1534
+ }
1535
+
1536
+ Status WriteBatch::Merge(ColumnFamilyHandle* column_family,
1537
+ const SliceParts& key, const SliceParts& value) {
1538
+ size_t ts_sz = 0;
1539
+ uint32_t cf_id = 0;
1540
+ Status s;
1541
+
1542
+ std::tie(s, cf_id, ts_sz) =
1543
+ WriteBatchInternal::GetColumnFamilyIdAndTimestampSize(this,
1544
+ column_family);
1545
+
1546
+ if (!s.ok()) {
1547
+ return s;
1548
+ }
1549
+
1550
+ if (0 == ts_sz) {
1551
+ return WriteBatchInternal::Merge(this, cf_id, key, value);
1552
+ }
1553
+
1554
+ return Status::InvalidArgument(
1555
+ "Cannot call this method on column family enabling timestamp");
1556
+ }
1557
+
1558
+ Status WriteBatchInternal::PutBlobIndex(WriteBatch* b,
1559
+ uint32_t column_family_id,
1560
+ const Slice& key, const Slice& value) {
1561
+ LocalSavePoint save(b);
1562
+ WriteBatchInternal::SetCount(b, WriteBatchInternal::Count(b) + 1);
1563
+ if (column_family_id == 0) {
1564
+ b->rep_.push_back(static_cast<char>(kTypeBlobIndex));
1565
+ } else {
1566
+ b->rep_.push_back(static_cast<char>(kTypeColumnFamilyBlobIndex));
1567
+ PutVarint32(&b->rep_, column_family_id);
1568
+ }
1569
+ PutLengthPrefixedSlice(&b->rep_, key);
1570
+ PutLengthPrefixedSlice(&b->rep_, value);
1571
+ b->content_flags_.store(b->content_flags_.load(std::memory_order_relaxed) |
1572
+ ContentFlags::HAS_BLOB_INDEX,
1573
+ std::memory_order_relaxed);
1574
+ if (b->prot_info_ != nullptr) {
1575
+ // See comment in first `WriteBatchInternal::Put()` overload concerning the
1576
+ // `ValueType` argument passed to `ProtectKVO()`.
1577
+ b->prot_info_->entries_.emplace_back(
1578
+ ProtectionInfo64()
1579
+ .ProtectKVO(key, value, kTypeBlobIndex)
1580
+ .ProtectC(column_family_id));
1581
+ }
1582
+ return save.commit();
1583
+ }
1584
+
1585
+ Status WriteBatch::PutLogData(const Slice& blob) {
1586
+ LocalSavePoint save(this);
1587
+ rep_.push_back(static_cast<char>(kTypeLogData));
1588
+ PutLengthPrefixedSlice(&rep_, blob);
1589
+ return save.commit();
1590
+ }
1591
+
1592
+ void WriteBatch::SetSavePoint() {
1593
+ if (save_points_ == nullptr) {
1594
+ save_points_.reset(new SavePoints());
1595
+ }
1596
+ // Record length and count of current batch of writes.
1597
+ save_points_->stack.push(SavePoint(
1598
+ GetDataSize(), Count(), content_flags_.load(std::memory_order_relaxed)));
1599
+ }
1600
+
1601
+ Status WriteBatch::RollbackToSavePoint() {
1602
+ if (save_points_ == nullptr || save_points_->stack.size() == 0) {
1603
+ return Status::NotFound();
1604
+ }
1605
+
1606
+ // Pop the most recent savepoint off the stack
1607
+ SavePoint savepoint = save_points_->stack.top();
1608
+ save_points_->stack.pop();
1609
+
1610
+ assert(savepoint.size <= rep_.size());
1611
+ assert(static_cast<uint32_t>(savepoint.count) <= Count());
1612
+
1613
+ if (savepoint.size == rep_.size()) {
1614
+ // No changes to rollback
1615
+ } else if (savepoint.size == 0) {
1616
+ // Rollback everything
1617
+ Clear();
1618
+ } else {
1619
+ rep_.resize(savepoint.size);
1620
+ if (prot_info_ != nullptr) {
1621
+ prot_info_->entries_.resize(savepoint.count);
1622
+ }
1623
+ WriteBatchInternal::SetCount(this, savepoint.count);
1624
+ content_flags_.store(savepoint.content_flags, std::memory_order_relaxed);
1625
+ }
1626
+
1627
+ return Status::OK();
1628
+ }
1629
+
1630
+ Status WriteBatch::PopSavePoint() {
1631
+ if (save_points_ == nullptr || save_points_->stack.size() == 0) {
1632
+ return Status::NotFound();
1633
+ }
1634
+
1635
+ // Pop the most recent savepoint off the stack
1636
+ save_points_->stack.pop();
1637
+
1638
+ return Status::OK();
1639
+ }
1640
+
1641
+ Status WriteBatch::UpdateTimestamps(
1642
+ const Slice& ts, std::function<size_t(uint32_t)> ts_sz_func) {
1643
+ TimestampUpdater<decltype(ts_sz_func)> ts_updater(prot_info_.get(),
1644
+ std::move(ts_sz_func), ts);
1645
+ const Status s = Iterate(&ts_updater);
1646
+ if (s.ok()) {
1647
+ needs_in_place_update_ts_ = false;
1648
+ }
1649
+ return s;
1650
+ }
1651
+
1652
+ Status WriteBatch::VerifyChecksum() const {
1653
+ if (prot_info_ == nullptr) {
1654
+ return Status::OK();
1655
+ }
1656
+ Slice input(rep_.data() + WriteBatchInternal::kHeader,
1657
+ rep_.size() - WriteBatchInternal::kHeader);
1658
+ Slice key, value, blob, xid;
1659
+ char tag = 0;
1660
+ uint32_t column_family = 0; // default
1661
+ Status s;
1662
+ size_t prot_info_idx = 0;
1663
+ bool checksum_protected = true;
1664
+ while (!input.empty() && prot_info_idx < prot_info_->entries_.size()) {
1665
+ // In case key/value/column_family are not updated by
1666
+ // ReadRecordFromWriteBatch
1667
+ key.clear();
1668
+ value.clear();
1669
+ column_family = 0;
1670
+ s = ReadRecordFromWriteBatch(&input, &tag, &column_family, &key, &value,
1671
+ &blob, &xid);
1672
+ if (!s.ok()) {
1673
+ return s;
1674
+ }
1675
+ checksum_protected = true;
1676
+ // Write batch checksum uses op_type without ColumnFamily (e.g., if op_type
1677
+ // in the write batch is kTypeColumnFamilyValue, kTypeValue is used to
1678
+ // compute the checksum), and encodes column family id separately. See
1679
+ // comment in first `WriteBatchInternal::Put()` for more detail.
1680
+ switch (tag) {
1681
+ case kTypeColumnFamilyValue:
1682
+ case kTypeValue:
1683
+ tag = kTypeValue;
1684
+ break;
1685
+ case kTypeColumnFamilyDeletion:
1686
+ case kTypeDeletion:
1687
+ tag = kTypeDeletion;
1688
+ break;
1689
+ case kTypeColumnFamilySingleDeletion:
1690
+ case kTypeSingleDeletion:
1691
+ tag = kTypeSingleDeletion;
1692
+ break;
1693
+ case kTypeColumnFamilyRangeDeletion:
1694
+ case kTypeRangeDeletion:
1695
+ tag = kTypeRangeDeletion;
1696
+ break;
1697
+ case kTypeColumnFamilyMerge:
1698
+ case kTypeMerge:
1699
+ tag = kTypeMerge;
1700
+ break;
1701
+ case kTypeColumnFamilyBlobIndex:
1702
+ case kTypeBlobIndex:
1703
+ tag = kTypeBlobIndex;
1704
+ break;
1705
+ case kTypeLogData:
1706
+ case kTypeBeginPrepareXID:
1707
+ case kTypeEndPrepareXID:
1708
+ case kTypeCommitXID:
1709
+ case kTypeRollbackXID:
1710
+ case kTypeNoop:
1711
+ case kTypeBeginPersistedPrepareXID:
1712
+ case kTypeBeginUnprepareXID:
1713
+ case kTypeDeletionWithTimestamp:
1714
+ case kTypeCommitXIDAndTimestamp:
1715
+ checksum_protected = false;
1716
+ break;
1717
+ case kTypeColumnFamilyWideColumnEntity:
1718
+ case kTypeWideColumnEntity:
1719
+ tag = kTypeWideColumnEntity;
1720
+ break;
1721
+ default:
1722
+ return Status::Corruption(
1723
+ "unknown WriteBatch tag",
1724
+ std::to_string(static_cast<unsigned int>(tag)));
1725
+ }
1726
+ if (checksum_protected) {
1727
+ s = prot_info_->entries_[prot_info_idx++]
1728
+ .StripC(column_family)
1729
+ .StripKVO(key, value, static_cast<ValueType>(tag))
1730
+ .GetStatus();
1731
+ if (!s.ok()) {
1732
+ return s;
1733
+ }
1734
+ }
1735
+ }
1736
+
1737
+ if (prot_info_idx != WriteBatchInternal::Count(this)) {
1738
+ return Status::Corruption("WriteBatch has wrong count");
1739
+ }
1740
+ assert(WriteBatchInternal::Count(this) == prot_info_->entries_.size());
1741
+ return Status::OK();
1742
+ }
1743
+
1744
+ namespace {
1745
+
1746
+ class MemTableInserter : public WriteBatch::Handler {
1747
+ SequenceNumber sequence_;
1748
+ ColumnFamilyMemTables* const cf_mems_;
1749
+ FlushScheduler* const flush_scheduler_;
1750
+ TrimHistoryScheduler* const trim_history_scheduler_;
1751
+ const bool ignore_missing_column_families_;
1752
+ const uint64_t recovering_log_number_;
1753
+ // log number that all Memtables inserted into should reference
1754
+ uint64_t log_number_ref_;
1755
+ DBImpl* db_;
1756
+ const bool concurrent_memtable_writes_;
1757
+ bool post_info_created_;
1758
+ const WriteBatch::ProtectionInfo* prot_info_;
1759
+ size_t prot_info_idx_;
1760
+
1761
+ bool* has_valid_writes_;
1762
+ // On some (!) platforms just default creating
1763
+ // a map is too expensive in the Write() path as they
1764
+ // cause memory allocations though unused.
1765
+ // Make creation optional but do not incur
1766
+ // std::unique_ptr additional allocation
1767
+ using MemPostInfoMap = std::map<MemTable*, MemTablePostProcessInfo>;
1768
+ using PostMapType = std::aligned_storage<sizeof(MemPostInfoMap)>::type;
1769
+ PostMapType mem_post_info_map_;
1770
+ // current recovered transaction we are rebuilding (recovery)
1771
+ WriteBatch* rebuilding_trx_;
1772
+ SequenceNumber rebuilding_trx_seq_;
1773
+ // Increase seq number once per each write batch. Otherwise increase it once
1774
+ // per key.
1775
+ bool seq_per_batch_;
1776
+ // Whether the memtable write will be done only after the commit
1777
+ bool write_after_commit_;
1778
+ // Whether memtable write can be done before prepare
1779
+ bool write_before_prepare_;
1780
+ // Whether this batch was unprepared or not
1781
+ bool unprepared_batch_;
1782
+ using DupDetector = std::aligned_storage<sizeof(DuplicateDetector)>::type;
1783
+ DupDetector duplicate_detector_;
1784
+ bool dup_dectector_on_;
1785
+
1786
+ bool hint_per_batch_;
1787
+ bool hint_created_;
1788
+ // Hints for this batch
1789
+ using HintMap = std::unordered_map<MemTable*, void*>;
1790
+ using HintMapType = std::aligned_storage<sizeof(HintMap)>::type;
1791
+ HintMapType hint_;
1792
+
1793
+ HintMap& GetHintMap() {
1794
+ assert(hint_per_batch_);
1795
+ if (!hint_created_) {
1796
+ new (&hint_) HintMap();
1797
+ hint_created_ = true;
1798
+ }
1799
+ return *reinterpret_cast<HintMap*>(&hint_);
1800
+ }
1801
+
1802
+ MemPostInfoMap& GetPostMap() {
1803
+ assert(concurrent_memtable_writes_);
1804
+ if (!post_info_created_) {
1805
+ new (&mem_post_info_map_) MemPostInfoMap();
1806
+ post_info_created_ = true;
1807
+ }
1808
+ return *reinterpret_cast<MemPostInfoMap*>(&mem_post_info_map_);
1809
+ }
1810
+
1811
+ bool IsDuplicateKeySeq(uint32_t column_family_id, const Slice& key) {
1812
+ assert(!write_after_commit_);
1813
+ assert(rebuilding_trx_ != nullptr);
1814
+ if (!dup_dectector_on_) {
1815
+ new (&duplicate_detector_) DuplicateDetector(db_);
1816
+ dup_dectector_on_ = true;
1817
+ }
1818
+ return reinterpret_cast<DuplicateDetector*>(&duplicate_detector_)
1819
+ ->IsDuplicateKeySeq(column_family_id, key, sequence_);
1820
+ }
1821
+
1822
+ const ProtectionInfoKVOC64* NextProtectionInfo() {
1823
+ const ProtectionInfoKVOC64* res = nullptr;
1824
+ if (prot_info_ != nullptr) {
1825
+ assert(prot_info_idx_ < prot_info_->entries_.size());
1826
+ res = &prot_info_->entries_[prot_info_idx_];
1827
+ ++prot_info_idx_;
1828
+ }
1829
+ return res;
1830
+ }
1831
+
1832
+ void DecrementProtectionInfoIdxForTryAgain() {
1833
+ if (prot_info_ != nullptr) --prot_info_idx_;
1834
+ }
1835
+
1836
+ void ResetProtectionInfo() {
1837
+ prot_info_idx_ = 0;
1838
+ prot_info_ = nullptr;
1839
+ }
1840
+
1841
+ protected:
1842
+ Handler::OptionState WriteBeforePrepare() const override {
1843
+ return write_before_prepare_ ? Handler::OptionState::kEnabled
1844
+ : Handler::OptionState::kDisabled;
1845
+ }
1846
+ Handler::OptionState WriteAfterCommit() const override {
1847
+ return write_after_commit_ ? Handler::OptionState::kEnabled
1848
+ : Handler::OptionState::kDisabled;
1849
+ }
1850
+
1851
+ public:
1852
+ // cf_mems should not be shared with concurrent inserters
1853
+ MemTableInserter(SequenceNumber _sequence, ColumnFamilyMemTables* cf_mems,
1854
+ FlushScheduler* flush_scheduler,
1855
+ TrimHistoryScheduler* trim_history_scheduler,
1856
+ bool ignore_missing_column_families,
1857
+ uint64_t recovering_log_number, DB* db,
1858
+ bool concurrent_memtable_writes,
1859
+ const WriteBatch::ProtectionInfo* prot_info,
1860
+ bool* has_valid_writes = nullptr, bool seq_per_batch = false,
1861
+ bool batch_per_txn = true, bool hint_per_batch = false)
1862
+ : sequence_(_sequence),
1863
+ cf_mems_(cf_mems),
1864
+ flush_scheduler_(flush_scheduler),
1865
+ trim_history_scheduler_(trim_history_scheduler),
1866
+ ignore_missing_column_families_(ignore_missing_column_families),
1867
+ recovering_log_number_(recovering_log_number),
1868
+ log_number_ref_(0),
1869
+ db_(static_cast_with_check<DBImpl>(db)),
1870
+ concurrent_memtable_writes_(concurrent_memtable_writes),
1871
+ post_info_created_(false),
1872
+ prot_info_(prot_info),
1873
+ prot_info_idx_(0),
1874
+ has_valid_writes_(has_valid_writes),
1875
+ rebuilding_trx_(nullptr),
1876
+ rebuilding_trx_seq_(0),
1877
+ seq_per_batch_(seq_per_batch),
1878
+ // Write after commit currently uses one seq per key (instead of per
1879
+ // batch). So seq_per_batch being false indicates write_after_commit
1880
+ // approach.
1881
+ write_after_commit_(!seq_per_batch),
1882
+ // WriteUnprepared can write WriteBatches per transaction, so
1883
+ // batch_per_txn being false indicates write_before_prepare.
1884
+ write_before_prepare_(!batch_per_txn),
1885
+ unprepared_batch_(false),
1886
+ duplicate_detector_(),
1887
+ dup_dectector_on_(false),
1888
+ hint_per_batch_(hint_per_batch),
1889
+ hint_created_(false) {
1890
+ assert(cf_mems_);
1891
+ }
1892
+
1893
+ ~MemTableInserter() override {
1894
+ if (dup_dectector_on_) {
1895
+ reinterpret_cast<DuplicateDetector*>(&duplicate_detector_)
1896
+ ->~DuplicateDetector();
1897
+ }
1898
+ if (post_info_created_) {
1899
+ reinterpret_cast<MemPostInfoMap*>(&mem_post_info_map_)->~MemPostInfoMap();
1900
+ }
1901
+ if (hint_created_) {
1902
+ for (auto iter : GetHintMap()) {
1903
+ delete[] reinterpret_cast<char*>(iter.second);
1904
+ }
1905
+ reinterpret_cast<HintMap*>(&hint_)->~HintMap();
1906
+ }
1907
+ delete rebuilding_trx_;
1908
+ }
1909
+
1910
+ MemTableInserter(const MemTableInserter&) = delete;
1911
+ MemTableInserter& operator=(const MemTableInserter&) = delete;
1912
+
1913
+ // The batch seq is regularly restarted; In normal mode it is set when
1914
+ // MemTableInserter is constructed in the write thread and in recovery mode it
1915
+ // is set when a batch, which is tagged with seq, is read from the WAL.
1916
+ // Within a sequenced batch, which could be a merge of multiple batches, we
1917
+ // have two policies to advance the seq: i) seq_per_key (default) and ii)
1918
+ // seq_per_batch. To implement the latter we need to mark the boundary between
1919
+ // the individual batches. The approach is this: 1) Use the terminating
1920
+ // markers to indicate the boundary (kTypeEndPrepareXID, kTypeCommitXID,
1921
+ // kTypeRollbackXID) 2) Terminate a batch with kTypeNoop in the absence of a
1922
+ // natural boundary marker.
1923
+ void MaybeAdvanceSeq(bool batch_boundry = false) {
1924
+ if (batch_boundry == seq_per_batch_) {
1925
+ sequence_++;
1926
+ }
1927
+ }
1928
+
1929
+ void set_log_number_ref(uint64_t log) { log_number_ref_ = log; }
1930
+ void set_prot_info(const WriteBatch::ProtectionInfo* prot_info) {
1931
+ prot_info_ = prot_info;
1932
+ prot_info_idx_ = 0;
1933
+ }
1934
+
1935
+ SequenceNumber sequence() const { return sequence_; }
1936
+
1937
+ void PostProcess() {
1938
+ assert(concurrent_memtable_writes_);
1939
+ // If post info was not created there is nothing
1940
+ // to process and no need to create on demand
1941
+ if (post_info_created_) {
1942
+ for (auto& pair : GetPostMap()) {
1943
+ pair.first->BatchPostProcess(pair.second);
1944
+ }
1945
+ }
1946
+ }
1947
+
1948
+ bool SeekToColumnFamily(uint32_t column_family_id, Status* s) {
1949
+ // If we are in a concurrent mode, it is the caller's responsibility
1950
+ // to clone the original ColumnFamilyMemTables so that each thread
1951
+ // has its own instance. Otherwise, it must be guaranteed that there
1952
+ // is no concurrent access
1953
+ bool found = cf_mems_->Seek(column_family_id);
1954
+ if (!found) {
1955
+ if (ignore_missing_column_families_) {
1956
+ *s = Status::OK();
1957
+ } else {
1958
+ *s = Status::InvalidArgument(
1959
+ "Invalid column family specified in write batch");
1960
+ }
1961
+ return false;
1962
+ }
1963
+ if (recovering_log_number_ != 0 &&
1964
+ recovering_log_number_ < cf_mems_->GetLogNumber()) {
1965
+ // This is true only in recovery environment (recovering_log_number_ is
1966
+ // always 0 in
1967
+ // non-recovery, regular write code-path)
1968
+ // * If recovering_log_number_ < cf_mems_->GetLogNumber(), this means that
1969
+ // column family already contains updates from this log. We can't apply
1970
+ // updates twice because of update-in-place or merge workloads -- ignore
1971
+ // the update
1972
+ *s = Status::OK();
1973
+ return false;
1974
+ }
1975
+
1976
+ if (has_valid_writes_ != nullptr) {
1977
+ *has_valid_writes_ = true;
1978
+ }
1979
+
1980
+ if (log_number_ref_ > 0) {
1981
+ cf_mems_->GetMemTable()->RefLogContainingPrepSection(log_number_ref_);
1982
+ }
1983
+
1984
+ return true;
1985
+ }
1986
+
1987
+ Status PutCFImpl(uint32_t column_family_id, const Slice& key,
1988
+ const Slice& value, ValueType value_type,
1989
+ const ProtectionInfoKVOS64* kv_prot_info) {
1990
+ // optimize for non-recovery mode
1991
+ if (UNLIKELY(write_after_commit_ && rebuilding_trx_ != nullptr)) {
1992
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
1993
+ return WriteBatchInternal::Put(rebuilding_trx_, column_family_id, key,
1994
+ value);
1995
+ // else insert the values to the memtable right away
1996
+ }
1997
+
1998
+ Status ret_status;
1999
+ if (UNLIKELY(!SeekToColumnFamily(column_family_id, &ret_status))) {
2000
+ if (ret_status.ok() && rebuilding_trx_ != nullptr) {
2001
+ assert(!write_after_commit_);
2002
+ // The CF is probably flushed and hence no need for insert but we still
2003
+ // need to keep track of the keys for upcoming rollback/commit.
2004
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2005
+ ret_status = WriteBatchInternal::Put(rebuilding_trx_, column_family_id,
2006
+ key, value);
2007
+ if (ret_status.ok()) {
2008
+ MaybeAdvanceSeq(IsDuplicateKeySeq(column_family_id, key));
2009
+ }
2010
+ } else if (ret_status.ok()) {
2011
+ MaybeAdvanceSeq(false /* batch_boundary */);
2012
+ }
2013
+ return ret_status;
2014
+ }
2015
+ assert(ret_status.ok());
2016
+
2017
+ MemTable* mem = cf_mems_->GetMemTable();
2018
+ auto* moptions = mem->GetImmutableMemTableOptions();
2019
+ // inplace_update_support is inconsistent with snapshots, and therefore with
2020
+ // any kind of transactions including the ones that use seq_per_batch
2021
+ assert(!seq_per_batch_ || !moptions->inplace_update_support);
2022
+ if (!moptions->inplace_update_support) {
2023
+ ret_status =
2024
+ mem->Add(sequence_, value_type, key, value, kv_prot_info,
2025
+ concurrent_memtable_writes_, get_post_process_info(mem),
2026
+ hint_per_batch_ ? &GetHintMap()[mem] : nullptr);
2027
+ } else if (moptions->inplace_callback == nullptr ||
2028
+ value_type != kTypeValue) {
2029
+ assert(!concurrent_memtable_writes_);
2030
+ ret_status = mem->Update(sequence_, value_type, key, value, kv_prot_info);
2031
+ } else {
2032
+ assert(!concurrent_memtable_writes_);
2033
+ assert(value_type == kTypeValue);
2034
+ ret_status = mem->UpdateCallback(sequence_, key, value, kv_prot_info);
2035
+ if (ret_status.IsNotFound()) {
2036
+ // key not found in memtable. Do sst get, update, add
2037
+ SnapshotImpl read_from_snapshot;
2038
+ read_from_snapshot.number_ = sequence_;
2039
+ // TODO: plumb Env::IOActivity
2040
+ ReadOptions ropts;
2041
+ // it's going to be overwritten for sure, so no point caching data block
2042
+ // containing the old version
2043
+ ropts.fill_cache = false;
2044
+ ropts.snapshot = &read_from_snapshot;
2045
+
2046
+ std::string prev_value;
2047
+ std::string merged_value;
2048
+
2049
+ auto cf_handle = cf_mems_->GetColumnFamilyHandle();
2050
+ Status get_status = Status::NotSupported();
2051
+ if (db_ != nullptr && recovering_log_number_ == 0) {
2052
+ if (cf_handle == nullptr) {
2053
+ cf_handle = db_->DefaultColumnFamily();
2054
+ }
2055
+ // TODO (yanqin): fix when user-defined timestamp is enabled.
2056
+ get_status = db_->Get(ropts, cf_handle, key, &prev_value);
2057
+ }
2058
+ // Intentionally overwrites the `NotFound` in `ret_status`.
2059
+ if (!get_status.ok() && !get_status.IsNotFound()) {
2060
+ ret_status = get_status;
2061
+ } else {
2062
+ ret_status = Status::OK();
2063
+ }
2064
+ if (ret_status.ok()) {
2065
+ UpdateStatus update_status;
2066
+ char* prev_buffer = const_cast<char*>(prev_value.c_str());
2067
+ uint32_t prev_size = static_cast<uint32_t>(prev_value.size());
2068
+ if (get_status.ok()) {
2069
+ update_status = moptions->inplace_callback(prev_buffer, &prev_size,
2070
+ value, &merged_value);
2071
+ } else {
2072
+ update_status = moptions->inplace_callback(
2073
+ nullptr /* existing_value */, nullptr /* existing_value_size */,
2074
+ value, &merged_value);
2075
+ }
2076
+ if (update_status == UpdateStatus::UPDATED_INPLACE) {
2077
+ assert(get_status.ok());
2078
+ if (kv_prot_info != nullptr) {
2079
+ ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info);
2080
+ updated_kv_prot_info.UpdateV(value,
2081
+ Slice(prev_buffer, prev_size));
2082
+ // prev_value is updated in-place with final value.
2083
+ ret_status = mem->Add(sequence_, value_type, key,
2084
+ Slice(prev_buffer, prev_size),
2085
+ &updated_kv_prot_info);
2086
+ } else {
2087
+ ret_status = mem->Add(sequence_, value_type, key,
2088
+ Slice(prev_buffer, prev_size),
2089
+ nullptr /* kv_prot_info */);
2090
+ }
2091
+ if (ret_status.ok()) {
2092
+ RecordTick(moptions->statistics, NUMBER_KEYS_WRITTEN);
2093
+ }
2094
+ } else if (update_status == UpdateStatus::UPDATED) {
2095
+ if (kv_prot_info != nullptr) {
2096
+ ProtectionInfoKVOS64 updated_kv_prot_info(*kv_prot_info);
2097
+ updated_kv_prot_info.UpdateV(value, merged_value);
2098
+ // merged_value contains the final value.
2099
+ ret_status = mem->Add(sequence_, value_type, key,
2100
+ Slice(merged_value), &updated_kv_prot_info);
2101
+ } else {
2102
+ // merged_value contains the final value.
2103
+ ret_status =
2104
+ mem->Add(sequence_, value_type, key, Slice(merged_value),
2105
+ nullptr /* kv_prot_info */);
2106
+ }
2107
+ if (ret_status.ok()) {
2108
+ RecordTick(moptions->statistics, NUMBER_KEYS_WRITTEN);
2109
+ }
2110
+ }
2111
+ }
2112
+ }
2113
+ }
2114
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2115
+ assert(seq_per_batch_);
2116
+ const bool kBatchBoundary = true;
2117
+ MaybeAdvanceSeq(kBatchBoundary);
2118
+ } else if (ret_status.ok()) {
2119
+ MaybeAdvanceSeq();
2120
+ CheckMemtableFull();
2121
+ }
2122
+ // optimize for non-recovery mode
2123
+ // If `ret_status` is `TryAgain` then the next (successful) try will add
2124
+ // the key to the rebuilding transaction object. If `ret_status` is
2125
+ // another non-OK `Status`, then the `rebuilding_trx_` will be thrown
2126
+ // away. So we only need to add to it when `ret_status.ok()`.
2127
+ if (UNLIKELY(ret_status.ok() && rebuilding_trx_ != nullptr)) {
2128
+ assert(!write_after_commit_);
2129
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2130
+ ret_status = WriteBatchInternal::Put(rebuilding_trx_, column_family_id,
2131
+ key, value);
2132
+ }
2133
+ return ret_status;
2134
+ }
2135
+
2136
+ Status PutCF(uint32_t column_family_id, const Slice& key,
2137
+ const Slice& value) override {
2138
+ const auto* kv_prot_info = NextProtectionInfo();
2139
+ Status ret_status;
2140
+ if (kv_prot_info != nullptr) {
2141
+ // Memtable needs seqno, doesn't need CF ID
2142
+ auto mem_kv_prot_info =
2143
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2144
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeValue,
2145
+ &mem_kv_prot_info);
2146
+ } else {
2147
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeValue,
2148
+ nullptr /* kv_prot_info */);
2149
+ }
2150
+ // TODO: this assumes that if TryAgain status is returned to the caller,
2151
+ // the operation is actually tried again. The proper way to do this is to
2152
+ // pass a `try_again` parameter to the operation itself and decrement
2153
+ // prot_info_idx_ based on that
2154
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2155
+ DecrementProtectionInfoIdxForTryAgain();
2156
+ }
2157
+ return ret_status;
2158
+ }
2159
+
2160
+ Status PutEntityCF(uint32_t column_family_id, const Slice& key,
2161
+ const Slice& value) override {
2162
+ const auto* kv_prot_info = NextProtectionInfo();
2163
+
2164
+ Status s;
2165
+ if (kv_prot_info) {
2166
+ // Memtable needs seqno, doesn't need CF ID
2167
+ auto mem_kv_prot_info =
2168
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2169
+ s = PutCFImpl(column_family_id, key, value, kTypeWideColumnEntity,
2170
+ &mem_kv_prot_info);
2171
+ } else {
2172
+ s = PutCFImpl(column_family_id, key, value, kTypeWideColumnEntity,
2173
+ /* kv_prot_info */ nullptr);
2174
+ }
2175
+
2176
+ if (UNLIKELY(s.IsTryAgain())) {
2177
+ DecrementProtectionInfoIdxForTryAgain();
2178
+ }
2179
+
2180
+ return s;
2181
+ }
2182
+
2183
+ Status DeleteImpl(uint32_t /*column_family_id*/, const Slice& key,
2184
+ const Slice& value, ValueType delete_type,
2185
+ const ProtectionInfoKVOS64* kv_prot_info) {
2186
+ Status ret_status;
2187
+ MemTable* mem = cf_mems_->GetMemTable();
2188
+ ret_status =
2189
+ mem->Add(sequence_, delete_type, key, value, kv_prot_info,
2190
+ concurrent_memtable_writes_, get_post_process_info(mem),
2191
+ hint_per_batch_ ? &GetHintMap()[mem] : nullptr);
2192
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2193
+ assert(seq_per_batch_);
2194
+ const bool kBatchBoundary = true;
2195
+ MaybeAdvanceSeq(kBatchBoundary);
2196
+ } else if (ret_status.ok()) {
2197
+ MaybeAdvanceSeq();
2198
+ CheckMemtableFull();
2199
+ }
2200
+ return ret_status;
2201
+ }
2202
+
2203
+ Status DeleteCF(uint32_t column_family_id, const Slice& key) override {
2204
+ const auto* kv_prot_info = NextProtectionInfo();
2205
+ // optimize for non-recovery mode
2206
+ if (UNLIKELY(write_after_commit_ && rebuilding_trx_ != nullptr)) {
2207
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2208
+ return WriteBatchInternal::Delete(rebuilding_trx_, column_family_id, key);
2209
+ // else insert the values to the memtable right away
2210
+ }
2211
+
2212
+ Status ret_status;
2213
+ if (UNLIKELY(!SeekToColumnFamily(column_family_id, &ret_status))) {
2214
+ if (ret_status.ok() && rebuilding_trx_ != nullptr) {
2215
+ assert(!write_after_commit_);
2216
+ // The CF is probably flushed and hence no need for insert but we still
2217
+ // need to keep track of the keys for upcoming rollback/commit.
2218
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2219
+ ret_status =
2220
+ WriteBatchInternal::Delete(rebuilding_trx_, column_family_id, key);
2221
+ if (ret_status.ok()) {
2222
+ MaybeAdvanceSeq(IsDuplicateKeySeq(column_family_id, key));
2223
+ }
2224
+ } else if (ret_status.ok()) {
2225
+ MaybeAdvanceSeq(false /* batch_boundary */);
2226
+ }
2227
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2228
+ DecrementProtectionInfoIdxForTryAgain();
2229
+ }
2230
+ return ret_status;
2231
+ }
2232
+
2233
+ ColumnFamilyData* cfd = cf_mems_->current();
2234
+ assert(!cfd || cfd->user_comparator());
2235
+ const size_t ts_sz = (cfd && cfd->user_comparator())
2236
+ ? cfd->user_comparator()->timestamp_size()
2237
+ : 0;
2238
+ const ValueType delete_type =
2239
+ (0 == ts_sz) ? kTypeDeletion : kTypeDeletionWithTimestamp;
2240
+ if (kv_prot_info != nullptr) {
2241
+ auto mem_kv_prot_info =
2242
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2243
+ mem_kv_prot_info.UpdateO(kTypeDeletion, delete_type);
2244
+ ret_status = DeleteImpl(column_family_id, key, Slice(), delete_type,
2245
+ &mem_kv_prot_info);
2246
+ } else {
2247
+ ret_status = DeleteImpl(column_family_id, key, Slice(), delete_type,
2248
+ nullptr /* kv_prot_info */);
2249
+ }
2250
+ // optimize for non-recovery mode
2251
+ // If `ret_status` is `TryAgain` then the next (successful) try will add
2252
+ // the key to the rebuilding transaction object. If `ret_status` is
2253
+ // another non-OK `Status`, then the `rebuilding_trx_` will be thrown
2254
+ // away. So we only need to add to it when `ret_status.ok()`.
2255
+ if (UNLIKELY(ret_status.ok() && rebuilding_trx_ != nullptr)) {
2256
+ assert(!write_after_commit_);
2257
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2258
+ ret_status =
2259
+ WriteBatchInternal::Delete(rebuilding_trx_, column_family_id, key);
2260
+ }
2261
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2262
+ DecrementProtectionInfoIdxForTryAgain();
2263
+ }
2264
+ return ret_status;
2265
+ }
2266
+
2267
+ Status SingleDeleteCF(uint32_t column_family_id, const Slice& key) override {
2268
+ const auto* kv_prot_info = NextProtectionInfo();
2269
+ // optimize for non-recovery mode
2270
+ if (UNLIKELY(write_after_commit_ && rebuilding_trx_ != nullptr)) {
2271
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2272
+ return WriteBatchInternal::SingleDelete(rebuilding_trx_, column_family_id,
2273
+ key);
2274
+ // else insert the values to the memtable right away
2275
+ }
2276
+
2277
+ Status ret_status;
2278
+ if (UNLIKELY(!SeekToColumnFamily(column_family_id, &ret_status))) {
2279
+ if (ret_status.ok() && rebuilding_trx_ != nullptr) {
2280
+ assert(!write_after_commit_);
2281
+ // The CF is probably flushed and hence no need for insert but we still
2282
+ // need to keep track of the keys for upcoming rollback/commit.
2283
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2284
+ ret_status = WriteBatchInternal::SingleDelete(rebuilding_trx_,
2285
+ column_family_id, key);
2286
+ if (ret_status.ok()) {
2287
+ MaybeAdvanceSeq(IsDuplicateKeySeq(column_family_id, key));
2288
+ }
2289
+ } else if (ret_status.ok()) {
2290
+ MaybeAdvanceSeq(false /* batch_boundary */);
2291
+ }
2292
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2293
+ DecrementProtectionInfoIdxForTryAgain();
2294
+ }
2295
+ return ret_status;
2296
+ }
2297
+ assert(ret_status.ok());
2298
+
2299
+ if (kv_prot_info != nullptr) {
2300
+ auto mem_kv_prot_info =
2301
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2302
+ ret_status = DeleteImpl(column_family_id, key, Slice(),
2303
+ kTypeSingleDeletion, &mem_kv_prot_info);
2304
+ } else {
2305
+ ret_status = DeleteImpl(column_family_id, key, Slice(),
2306
+ kTypeSingleDeletion, nullptr /* kv_prot_info */);
2307
+ }
2308
+ // optimize for non-recovery mode
2309
+ // If `ret_status` is `TryAgain` then the next (successful) try will add
2310
+ // the key to the rebuilding transaction object. If `ret_status` is
2311
+ // another non-OK `Status`, then the `rebuilding_trx_` will be thrown
2312
+ // away. So we only need to add to it when `ret_status.ok()`.
2313
+ if (UNLIKELY(ret_status.ok() && rebuilding_trx_ != nullptr)) {
2314
+ assert(!write_after_commit_);
2315
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2316
+ ret_status = WriteBatchInternal::SingleDelete(rebuilding_trx_,
2317
+ column_family_id, key);
2318
+ }
2319
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2320
+ DecrementProtectionInfoIdxForTryAgain();
2321
+ }
2322
+ return ret_status;
2323
+ }
2324
+
2325
+ Status DeleteRangeCF(uint32_t column_family_id, const Slice& begin_key,
2326
+ const Slice& end_key) override {
2327
+ const auto* kv_prot_info = NextProtectionInfo();
2328
+ // optimize for non-recovery mode
2329
+ if (UNLIKELY(write_after_commit_ && rebuilding_trx_ != nullptr)) {
2330
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2331
+ return WriteBatchInternal::DeleteRange(rebuilding_trx_, column_family_id,
2332
+ begin_key, end_key);
2333
+ // else insert the values to the memtable right away
2334
+ }
2335
+
2336
+ Status ret_status;
2337
+ if (UNLIKELY(!SeekToColumnFamily(column_family_id, &ret_status))) {
2338
+ if (ret_status.ok() && rebuilding_trx_ != nullptr) {
2339
+ assert(!write_after_commit_);
2340
+ // The CF is probably flushed and hence no need for insert but we still
2341
+ // need to keep track of the keys for upcoming rollback/commit.
2342
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2343
+ ret_status = WriteBatchInternal::DeleteRange(
2344
+ rebuilding_trx_, column_family_id, begin_key, end_key);
2345
+ if (ret_status.ok()) {
2346
+ MaybeAdvanceSeq(IsDuplicateKeySeq(column_family_id, begin_key));
2347
+ }
2348
+ } else if (ret_status.ok()) {
2349
+ MaybeAdvanceSeq(false /* batch_boundary */);
2350
+ }
2351
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2352
+ DecrementProtectionInfoIdxForTryAgain();
2353
+ }
2354
+ return ret_status;
2355
+ }
2356
+ assert(ret_status.ok());
2357
+
2358
+ if (db_ != nullptr) {
2359
+ auto cf_handle = cf_mems_->GetColumnFamilyHandle();
2360
+ if (cf_handle == nullptr) {
2361
+ cf_handle = db_->DefaultColumnFamily();
2362
+ }
2363
+ auto* cfd =
2364
+ static_cast_with_check<ColumnFamilyHandleImpl>(cf_handle)->cfd();
2365
+ if (!cfd->is_delete_range_supported()) {
2366
+ // TODO(ajkr): refactor `SeekToColumnFamily()` so it returns a `Status`.
2367
+ ret_status.PermitUncheckedError();
2368
+ return Status::NotSupported(
2369
+ std::string("DeleteRange not supported for table type ") +
2370
+ cfd->ioptions()->table_factory->Name() + " in CF " +
2371
+ cfd->GetName());
2372
+ }
2373
+ int cmp =
2374
+ cfd->user_comparator()->CompareWithoutTimestamp(begin_key, end_key);
2375
+ if (cmp > 0) {
2376
+ // TODO(ajkr): refactor `SeekToColumnFamily()` so it returns a `Status`.
2377
+ ret_status.PermitUncheckedError();
2378
+ // It's an empty range where endpoints appear mistaken. Don't bother
2379
+ // applying it to the DB, and return an error to the user.
2380
+ return Status::InvalidArgument("end key comes before start key");
2381
+ } else if (cmp == 0) {
2382
+ // TODO(ajkr): refactor `SeekToColumnFamily()` so it returns a `Status`.
2383
+ ret_status.PermitUncheckedError();
2384
+ // It's an empty range. Don't bother applying it to the DB.
2385
+ return Status::OK();
2386
+ }
2387
+ }
2388
+
2389
+ if (kv_prot_info != nullptr) {
2390
+ auto mem_kv_prot_info =
2391
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2392
+ ret_status = DeleteImpl(column_family_id, begin_key, end_key,
2393
+ kTypeRangeDeletion, &mem_kv_prot_info);
2394
+ } else {
2395
+ ret_status = DeleteImpl(column_family_id, begin_key, end_key,
2396
+ kTypeRangeDeletion, nullptr /* kv_prot_info */);
2397
+ }
2398
+ // optimize for non-recovery mode
2399
+ // If `ret_status` is `TryAgain` then the next (successful) try will add
2400
+ // the key to the rebuilding transaction object. If `ret_status` is
2401
+ // another non-OK `Status`, then the `rebuilding_trx_` will be thrown
2402
+ // away. So we only need to add to it when `ret_status.ok()`.
2403
+ if (UNLIKELY(!ret_status.IsTryAgain() && rebuilding_trx_ != nullptr)) {
2404
+ assert(!write_after_commit_);
2405
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2406
+ ret_status = WriteBatchInternal::DeleteRange(
2407
+ rebuilding_trx_, column_family_id, begin_key, end_key);
2408
+ }
2409
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2410
+ DecrementProtectionInfoIdxForTryAgain();
2411
+ }
2412
+ return ret_status;
2413
+ }
2414
+
2415
+ Status MergeCF(uint32_t column_family_id, const Slice& key,
2416
+ const Slice& value) override {
2417
+ const auto* kv_prot_info = NextProtectionInfo();
2418
+ // optimize for non-recovery mode
2419
+ if (UNLIKELY(write_after_commit_ && rebuilding_trx_ != nullptr)) {
2420
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2421
+ return WriteBatchInternal::Merge(rebuilding_trx_, column_family_id, key,
2422
+ value);
2423
+ // else insert the values to the memtable right away
2424
+ }
2425
+
2426
+ Status ret_status;
2427
+ if (UNLIKELY(!SeekToColumnFamily(column_family_id, &ret_status))) {
2428
+ if (ret_status.ok() && rebuilding_trx_ != nullptr) {
2429
+ assert(!write_after_commit_);
2430
+ // The CF is probably flushed and hence no need for insert but we still
2431
+ // need to keep track of the keys for upcoming rollback/commit.
2432
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2433
+ ret_status = WriteBatchInternal::Merge(rebuilding_trx_,
2434
+ column_family_id, key, value);
2435
+ if (ret_status.ok()) {
2436
+ MaybeAdvanceSeq(IsDuplicateKeySeq(column_family_id, key));
2437
+ }
2438
+ } else if (ret_status.ok()) {
2439
+ MaybeAdvanceSeq(false /* batch_boundary */);
2440
+ }
2441
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2442
+ DecrementProtectionInfoIdxForTryAgain();
2443
+ }
2444
+ return ret_status;
2445
+ }
2446
+ assert(ret_status.ok());
2447
+
2448
+ MemTable* mem = cf_mems_->GetMemTable();
2449
+ auto* moptions = mem->GetImmutableMemTableOptions();
2450
+ if (moptions->merge_operator == nullptr) {
2451
+ return Status::InvalidArgument(
2452
+ "Merge requires `ColumnFamilyOptions::merge_operator != nullptr`");
2453
+ }
2454
+ bool perform_merge = false;
2455
+ assert(!concurrent_memtable_writes_ ||
2456
+ moptions->max_successive_merges == 0);
2457
+
2458
+ // If we pass DB through and options.max_successive_merges is hit
2459
+ // during recovery, Get() will be issued which will try to acquire
2460
+ // DB mutex and cause deadlock, as DB mutex is already held.
2461
+ // So we disable merge in recovery
2462
+ if (moptions->max_successive_merges > 0 && db_ != nullptr &&
2463
+ recovering_log_number_ == 0) {
2464
+ assert(!concurrent_memtable_writes_);
2465
+ LookupKey lkey(key, sequence_);
2466
+
2467
+ // Count the number of successive merges at the head
2468
+ // of the key in the memtable
2469
+ size_t num_merges = mem->CountSuccessiveMergeEntries(lkey);
2470
+
2471
+ if (num_merges >= moptions->max_successive_merges) {
2472
+ perform_merge = true;
2473
+ }
2474
+ }
2475
+
2476
+ if (perform_merge) {
2477
+ // 1) Get the existing value
2478
+ std::string get_value;
2479
+
2480
+ // Pass in the sequence number so that we also include previous merge
2481
+ // operations in the same batch.
2482
+ SnapshotImpl read_from_snapshot;
2483
+ read_from_snapshot.number_ = sequence_;
2484
+ // TODO: plumb Env::IOActivity
2485
+ ReadOptions read_options;
2486
+ read_options.snapshot = &read_from_snapshot;
2487
+
2488
+ auto cf_handle = cf_mems_->GetColumnFamilyHandle();
2489
+ if (cf_handle == nullptr) {
2490
+ cf_handle = db_->DefaultColumnFamily();
2491
+ }
2492
+ Status get_status = db_->Get(read_options, cf_handle, key, &get_value);
2493
+ if (!get_status.ok()) {
2494
+ // Failed to read a key we know exists. Store the delta in memtable.
2495
+ perform_merge = false;
2496
+ } else {
2497
+ Slice get_value_slice = Slice(get_value);
2498
+
2499
+ // 2) Apply this merge
2500
+ auto merge_operator = moptions->merge_operator;
2501
+ assert(merge_operator);
2502
+
2503
+ std::string new_value;
2504
+ // `op_failure_scope` (an output parameter) is not provided (set to
2505
+ // nullptr) since a failure must be propagated regardless of its value.
2506
+ Status merge_status = MergeHelper::TimedFullMerge(
2507
+ merge_operator, key, &get_value_slice, {value}, &new_value,
2508
+ moptions->info_log, moptions->statistics,
2509
+ SystemClock::Default().get(), /* result_operand */ nullptr,
2510
+ /* update_num_ops_stats */ false,
2511
+ /* op_failure_scope */ nullptr);
2512
+
2513
+ if (!merge_status.ok()) {
2514
+ // Failed to merge!
2515
+ // Store the delta in memtable
2516
+ perform_merge = false;
2517
+ } else {
2518
+ // 3) Add value to memtable
2519
+ assert(!concurrent_memtable_writes_);
2520
+ if (kv_prot_info != nullptr) {
2521
+ auto merged_kv_prot_info =
2522
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2523
+ merged_kv_prot_info.UpdateV(value, new_value);
2524
+ merged_kv_prot_info.UpdateO(kTypeMerge, kTypeValue);
2525
+ ret_status = mem->Add(sequence_, kTypeValue, key, new_value,
2526
+ &merged_kv_prot_info);
2527
+ } else {
2528
+ ret_status = mem->Add(sequence_, kTypeValue, key, new_value,
2529
+ nullptr /* kv_prot_info */);
2530
+ }
2531
+ }
2532
+ }
2533
+ }
2534
+
2535
+ if (!perform_merge) {
2536
+ assert(ret_status.ok());
2537
+ // Add merge operand to memtable
2538
+ if (kv_prot_info != nullptr) {
2539
+ auto mem_kv_prot_info =
2540
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2541
+ ret_status =
2542
+ mem->Add(sequence_, kTypeMerge, key, value, &mem_kv_prot_info,
2543
+ concurrent_memtable_writes_, get_post_process_info(mem));
2544
+ } else {
2545
+ ret_status = mem->Add(
2546
+ sequence_, kTypeMerge, key, value, nullptr /* kv_prot_info */,
2547
+ concurrent_memtable_writes_, get_post_process_info(mem));
2548
+ }
2549
+ }
2550
+
2551
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2552
+ assert(seq_per_batch_);
2553
+ const bool kBatchBoundary = true;
2554
+ MaybeAdvanceSeq(kBatchBoundary);
2555
+ } else if (ret_status.ok()) {
2556
+ MaybeAdvanceSeq();
2557
+ CheckMemtableFull();
2558
+ }
2559
+ // optimize for non-recovery mode
2560
+ // If `ret_status` is `TryAgain` then the next (successful) try will add
2561
+ // the key to the rebuilding transaction object. If `ret_status` is
2562
+ // another non-OK `Status`, then the `rebuilding_trx_` will be thrown
2563
+ // away. So we only need to add to it when `ret_status.ok()`.
2564
+ if (UNLIKELY(ret_status.ok() && rebuilding_trx_ != nullptr)) {
2565
+ assert(!write_after_commit_);
2566
+ // TODO(ajkr): propagate `ProtectionInfoKVOS64`.
2567
+ ret_status = WriteBatchInternal::Merge(rebuilding_trx_, column_family_id,
2568
+ key, value);
2569
+ }
2570
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2571
+ DecrementProtectionInfoIdxForTryAgain();
2572
+ }
2573
+ return ret_status;
2574
+ }
2575
+
2576
+ Status PutBlobIndexCF(uint32_t column_family_id, const Slice& key,
2577
+ const Slice& value) override {
2578
+ const auto* kv_prot_info = NextProtectionInfo();
2579
+ Status ret_status;
2580
+ if (kv_prot_info != nullptr) {
2581
+ // Memtable needs seqno, doesn't need CF ID
2582
+ auto mem_kv_prot_info =
2583
+ kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
2584
+ // Same as PutCF except for value type.
2585
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
2586
+ &mem_kv_prot_info);
2587
+ } else {
2588
+ ret_status = PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
2589
+ nullptr /* kv_prot_info */);
2590
+ }
2591
+ if (UNLIKELY(ret_status.IsTryAgain())) {
2592
+ DecrementProtectionInfoIdxForTryAgain();
2593
+ }
2594
+ return ret_status;
2595
+ }
2596
+
2597
+ void CheckMemtableFull() {
2598
+ if (flush_scheduler_ != nullptr) {
2599
+ auto* cfd = cf_mems_->current();
2600
+ assert(cfd != nullptr);
2601
+ if (cfd->mem()->ShouldScheduleFlush() &&
2602
+ cfd->mem()->MarkFlushScheduled()) {
2603
+ // MarkFlushScheduled only returns true if we are the one that
2604
+ // should take action, so no need to dedup further
2605
+ flush_scheduler_->ScheduleWork(cfd);
2606
+ }
2607
+ }
2608
+ // check if memtable_list size exceeds max_write_buffer_size_to_maintain
2609
+ if (trim_history_scheduler_ != nullptr) {
2610
+ auto* cfd = cf_mems_->current();
2611
+
2612
+ assert(cfd);
2613
+ assert(cfd->ioptions());
2614
+
2615
+ const size_t size_to_maintain = static_cast<size_t>(
2616
+ cfd->ioptions()->max_write_buffer_size_to_maintain);
2617
+
2618
+ if (size_to_maintain > 0) {
2619
+ MemTableList* const imm = cfd->imm();
2620
+ assert(imm);
2621
+
2622
+ if (imm->HasHistory()) {
2623
+ const MemTable* const mem = cfd->mem();
2624
+ assert(mem);
2625
+
2626
+ if (mem->MemoryAllocatedBytes() +
2627
+ imm->MemoryAllocatedBytesExcludingLast() >=
2628
+ size_to_maintain &&
2629
+ imm->MarkTrimHistoryNeeded()) {
2630
+ trim_history_scheduler_->ScheduleWork(cfd);
2631
+ }
2632
+ }
2633
+ }
2634
+ }
2635
+ }
2636
+
2637
+ // The write batch handler calls MarkBeginPrepare with unprepare set to true
2638
+ // if it encounters the kTypeBeginUnprepareXID marker.
2639
+ Status MarkBeginPrepare(bool unprepare) override {
2640
+ assert(rebuilding_trx_ == nullptr);
2641
+ assert(db_);
2642
+
2643
+ if (recovering_log_number_ != 0) {
2644
+ db_->mutex()->AssertHeld();
2645
+ // during recovery we rebuild a hollow transaction
2646
+ // from all encountered prepare sections of the wal
2647
+ if (db_->allow_2pc() == false) {
2648
+ return Status::NotSupported(
2649
+ "WAL contains prepared transactions. Open with "
2650
+ "TransactionDB::Open().");
2651
+ }
2652
+
2653
+ // we are now iterating through a prepared section
2654
+ rebuilding_trx_ = new WriteBatch();
2655
+ rebuilding_trx_seq_ = sequence_;
2656
+ // Verify that we have matching MarkBeginPrepare/MarkEndPrepare markers.
2657
+ // unprepared_batch_ should be false because it is false by default, and
2658
+ // gets reset to false in MarkEndPrepare.
2659
+ assert(!unprepared_batch_);
2660
+ unprepared_batch_ = unprepare;
2661
+
2662
+ if (has_valid_writes_ != nullptr) {
2663
+ *has_valid_writes_ = true;
2664
+ }
2665
+ }
2666
+
2667
+ return Status::OK();
2668
+ }
2669
+
2670
+ Status MarkEndPrepare(const Slice& name) override {
2671
+ assert(db_);
2672
+ assert((rebuilding_trx_ != nullptr) == (recovering_log_number_ != 0));
2673
+
2674
+ if (recovering_log_number_ != 0) {
2675
+ db_->mutex()->AssertHeld();
2676
+ assert(db_->allow_2pc());
2677
+ size_t batch_cnt =
2678
+ write_after_commit_
2679
+ ? 0 // 0 will disable further checks
2680
+ : static_cast<size_t>(sequence_ - rebuilding_trx_seq_ + 1);
2681
+ db_->InsertRecoveredTransaction(recovering_log_number_, name.ToString(),
2682
+ rebuilding_trx_, rebuilding_trx_seq_,
2683
+ batch_cnt, unprepared_batch_);
2684
+ unprepared_batch_ = false;
2685
+ rebuilding_trx_ = nullptr;
2686
+ } else {
2687
+ assert(rebuilding_trx_ == nullptr);
2688
+ }
2689
+ const bool batch_boundry = true;
2690
+ MaybeAdvanceSeq(batch_boundry);
2691
+
2692
+ return Status::OK();
2693
+ }
2694
+
2695
+ Status MarkNoop(bool empty_batch) override {
2696
+ if (recovering_log_number_ != 0) {
2697
+ db_->mutex()->AssertHeld();
2698
+ }
2699
+ // A hack in pessimistic transaction could result into a noop at the start
2700
+ // of the write batch, that should be ignored.
2701
+ if (!empty_batch) {
2702
+ // In the absence of Prepare markers, a kTypeNoop tag indicates the end of
2703
+ // a batch. This happens when write batch commits skipping the prepare
2704
+ // phase.
2705
+ const bool batch_boundry = true;
2706
+ MaybeAdvanceSeq(batch_boundry);
2707
+ }
2708
+ return Status::OK();
2709
+ }
2710
+
2711
+ Status MarkCommit(const Slice& name) override {
2712
+ assert(db_);
2713
+
2714
+ Status s;
2715
+
2716
+ if (recovering_log_number_ != 0) {
2717
+ // We must hold db mutex in recovery.
2718
+ db_->mutex()->AssertHeld();
2719
+ // in recovery when we encounter a commit marker
2720
+ // we lookup this transaction in our set of rebuilt transactions
2721
+ // and commit.
2722
+ auto trx = db_->GetRecoveredTransaction(name.ToString());
2723
+
2724
+ // the log containing the prepared section may have
2725
+ // been released in the last incarnation because the
2726
+ // data was flushed to L0
2727
+ if (trx != nullptr) {
2728
+ // at this point individual CF lognumbers will prevent
2729
+ // duplicate re-insertion of values.
2730
+ assert(log_number_ref_ == 0);
2731
+ if (write_after_commit_) {
2732
+ // write_after_commit_ can only have one batch in trx.
2733
+ assert(trx->batches_.size() == 1);
2734
+ const auto& batch_info = trx->batches_.begin()->second;
2735
+ // all inserts must reference this trx log number
2736
+ log_number_ref_ = batch_info.log_number_;
2737
+ ResetProtectionInfo();
2738
+ s = batch_info.batch_->Iterate(this);
2739
+ log_number_ref_ = 0;
2740
+ }
2741
+ // else the values are already inserted before the commit
2742
+
2743
+ if (s.ok()) {
2744
+ db_->DeleteRecoveredTransaction(name.ToString());
2745
+ }
2746
+ if (has_valid_writes_ != nullptr) {
2747
+ *has_valid_writes_ = true;
2748
+ }
2749
+ }
2750
+ } else {
2751
+ // When writes are not delayed until commit, there is no disconnect
2752
+ // between a memtable write and the WAL that supports it. So the commit
2753
+ // need not reference any log as the only log to which it depends.
2754
+ assert(!write_after_commit_ || log_number_ref_ > 0);
2755
+ }
2756
+ const bool batch_boundry = true;
2757
+ MaybeAdvanceSeq(batch_boundry);
2758
+
2759
+ if (UNLIKELY(s.IsTryAgain())) {
2760
+ DecrementProtectionInfoIdxForTryAgain();
2761
+ }
2762
+
2763
+ return s;
2764
+ }
2765
+
2766
+ Status MarkCommitWithTimestamp(const Slice& name,
2767
+ const Slice& commit_ts) override {
2768
+ assert(db_);
2769
+
2770
+ Status s;
2771
+
2772
+ if (recovering_log_number_ != 0) {
2773
+ // In recovery, db mutex must be held.
2774
+ db_->mutex()->AssertHeld();
2775
+ // in recovery when we encounter a commit marker
2776
+ // we lookup this transaction in our set of rebuilt transactions
2777
+ // and commit.
2778
+ auto trx = db_->GetRecoveredTransaction(name.ToString());
2779
+ // the log containing the prepared section may have
2780
+ // been released in the last incarnation because the
2781
+ // data was flushed to L0
2782
+ if (trx) {
2783
+ // at this point individual CF lognumbers will prevent
2784
+ // duplicate re-insertion of values.
2785
+ assert(0 == log_number_ref_);
2786
+ if (write_after_commit_) {
2787
+ // write_after_commit_ can only have one batch in trx.
2788
+ assert(trx->batches_.size() == 1);
2789
+ const auto& batch_info = trx->batches_.begin()->second;
2790
+ // all inserts must reference this trx log number
2791
+ log_number_ref_ = batch_info.log_number_;
2792
+
2793
+ s = batch_info.batch_->UpdateTimestamps(
2794
+ commit_ts, [this](uint32_t cf) {
2795
+ assert(db_);
2796
+ VersionSet* const vset = db_->GetVersionSet();
2797
+ assert(vset);
2798
+ ColumnFamilySet* const cf_set = vset->GetColumnFamilySet();
2799
+ assert(cf_set);
2800
+ ColumnFamilyData* cfd = cf_set->GetColumnFamily(cf);
2801
+ assert(cfd);
2802
+ const auto* const ucmp = cfd->user_comparator();
2803
+ assert(ucmp);
2804
+ return ucmp->timestamp_size();
2805
+ });
2806
+ if (s.ok()) {
2807
+ ResetProtectionInfo();
2808
+ s = batch_info.batch_->Iterate(this);
2809
+ log_number_ref_ = 0;
2810
+ }
2811
+ }
2812
+ // else the values are already inserted before the commit
2813
+
2814
+ if (s.ok()) {
2815
+ db_->DeleteRecoveredTransaction(name.ToString());
2816
+ }
2817
+ if (has_valid_writes_) {
2818
+ *has_valid_writes_ = true;
2819
+ }
2820
+ }
2821
+ } else {
2822
+ // When writes are not delayed until commit, there is no connection
2823
+ // between a memtable write and the WAL that supports it. So the commit
2824
+ // need not reference any log as the only log to which it depends.
2825
+ assert(!write_after_commit_ || log_number_ref_ > 0);
2826
+ }
2827
+ constexpr bool batch_boundary = true;
2828
+ MaybeAdvanceSeq(batch_boundary);
2829
+
2830
+ if (UNLIKELY(s.IsTryAgain())) {
2831
+ DecrementProtectionInfoIdxForTryAgain();
2832
+ }
2833
+
2834
+ return s;
2835
+ }
2836
+
2837
+ Status MarkRollback(const Slice& name) override {
2838
+ assert(db_);
2839
+
2840
+ if (recovering_log_number_ != 0) {
2841
+ auto trx = db_->GetRecoveredTransaction(name.ToString());
2842
+
2843
+ // the log containing the transactions prep section
2844
+ // may have been released in the previous incarnation
2845
+ // because we knew it had been rolled back
2846
+ if (trx != nullptr) {
2847
+ db_->DeleteRecoveredTransaction(name.ToString());
2848
+ }
2849
+ } else {
2850
+ // in non recovery we simply ignore this tag
2851
+ }
2852
+
2853
+ const bool batch_boundry = true;
2854
+ MaybeAdvanceSeq(batch_boundry);
2855
+
2856
+ return Status::OK();
2857
+ }
2858
+
2859
+ private:
2860
+ MemTablePostProcessInfo* get_post_process_info(MemTable* mem) {
2861
+ if (!concurrent_memtable_writes_) {
2862
+ // No need to batch counters locally if we don't use concurrent mode.
2863
+ return nullptr;
2864
+ }
2865
+ return &GetPostMap()[mem];
2866
+ }
2867
+ };
2868
+
2869
+ } // anonymous namespace
2870
+
2871
+ // This function can only be called in these conditions:
2872
+ // 1) During Recovery()
2873
+ // 2) During Write(), in a single-threaded write thread
2874
+ // 3) During Write(), in a concurrent context where memtables has been cloned
2875
+ // The reason is that it calls memtables->Seek(), which has a stateful cache
2876
+ Status WriteBatchInternal::InsertInto(
2877
+ WriteThread::WriteGroup& write_group, SequenceNumber sequence,
2878
+ ColumnFamilyMemTables* memtables, FlushScheduler* flush_scheduler,
2879
+ TrimHistoryScheduler* trim_history_scheduler,
2880
+ bool ignore_missing_column_families, uint64_t recovery_log_number, DB* db,
2881
+ bool concurrent_memtable_writes, bool seq_per_batch, bool batch_per_txn) {
2882
+ MemTableInserter inserter(
2883
+ sequence, memtables, flush_scheduler, trim_history_scheduler,
2884
+ ignore_missing_column_families, recovery_log_number, db,
2885
+ concurrent_memtable_writes, nullptr /* prot_info */,
2886
+ nullptr /*has_valid_writes*/, seq_per_batch, batch_per_txn);
2887
+ for (auto w : write_group) {
2888
+ if (w->CallbackFailed()) {
2889
+ continue;
2890
+ }
2891
+ w->sequence = inserter.sequence();
2892
+ if (!w->ShouldWriteToMemtable()) {
2893
+ // In seq_per_batch_ mode this advances the seq by one.
2894
+ inserter.MaybeAdvanceSeq(true);
2895
+ continue;
2896
+ }
2897
+ SetSequence(w->batch, inserter.sequence());
2898
+ inserter.set_log_number_ref(w->log_ref);
2899
+ inserter.set_prot_info(w->batch->prot_info_.get());
2900
+ w->status = w->batch->Iterate(&inserter);
2901
+ if (!w->status.ok()) {
2902
+ return w->status;
2903
+ }
2904
+ assert(!seq_per_batch || w->batch_cnt != 0);
2905
+ assert(!seq_per_batch || inserter.sequence() - w->sequence == w->batch_cnt);
2906
+ }
2907
+ return Status::OK();
2908
+ }
2909
+
2910
+ Status WriteBatchInternal::InsertInto(
2911
+ WriteThread::Writer* writer, SequenceNumber sequence,
2912
+ ColumnFamilyMemTables* memtables, FlushScheduler* flush_scheduler,
2913
+ TrimHistoryScheduler* trim_history_scheduler,
2914
+ bool ignore_missing_column_families, uint64_t log_number, DB* db,
2915
+ bool concurrent_memtable_writes, bool seq_per_batch, size_t batch_cnt,
2916
+ bool batch_per_txn, bool hint_per_batch) {
2917
+ #ifdef NDEBUG
2918
+ (void)batch_cnt;
2919
+ #endif
2920
+ assert(writer->ShouldWriteToMemtable());
2921
+ MemTableInserter inserter(sequence, memtables, flush_scheduler,
2922
+ trim_history_scheduler,
2923
+ ignore_missing_column_families, log_number, db,
2924
+ concurrent_memtable_writes, nullptr /* prot_info */,
2925
+ nullptr /*has_valid_writes*/, seq_per_batch,
2926
+ batch_per_txn, hint_per_batch);
2927
+ SetSequence(writer->batch, sequence);
2928
+ inserter.set_log_number_ref(writer->log_ref);
2929
+ inserter.set_prot_info(writer->batch->prot_info_.get());
2930
+ Status s = writer->batch->Iterate(&inserter);
2931
+ assert(!seq_per_batch || batch_cnt != 0);
2932
+ assert(!seq_per_batch || inserter.sequence() - sequence == batch_cnt);
2933
+ if (concurrent_memtable_writes) {
2934
+ inserter.PostProcess();
2935
+ }
2936
+ return s;
2937
+ }
2938
+
2939
+ Status WriteBatchInternal::InsertInto(
2940
+ const WriteBatch* batch, ColumnFamilyMemTables* memtables,
2941
+ FlushScheduler* flush_scheduler,
2942
+ TrimHistoryScheduler* trim_history_scheduler,
2943
+ bool ignore_missing_column_families, uint64_t log_number, DB* db,
2944
+ bool concurrent_memtable_writes, SequenceNumber* next_seq,
2945
+ bool* has_valid_writes, bool seq_per_batch, bool batch_per_txn) {
2946
+ MemTableInserter inserter(Sequence(batch), memtables, flush_scheduler,
2947
+ trim_history_scheduler,
2948
+ ignore_missing_column_families, log_number, db,
2949
+ concurrent_memtable_writes, batch->prot_info_.get(),
2950
+ has_valid_writes, seq_per_batch, batch_per_txn);
2951
+ Status s = batch->Iterate(&inserter);
2952
+ if (next_seq != nullptr) {
2953
+ *next_seq = inserter.sequence();
2954
+ }
2955
+ if (concurrent_memtable_writes) {
2956
+ inserter.PostProcess();
2957
+ }
2958
+ return s;
2959
+ }
2960
+
2961
+ namespace {
2962
+
2963
+ // This class updates protection info for a WriteBatch.
2964
+ class ProtectionInfoUpdater : public WriteBatch::Handler {
2965
+ public:
2966
+ explicit ProtectionInfoUpdater(WriteBatch::ProtectionInfo* prot_info)
2967
+ : prot_info_(prot_info) {}
2968
+
2969
+ ~ProtectionInfoUpdater() override {}
2970
+
2971
+ Status PutCF(uint32_t cf, const Slice& key, const Slice& val) override {
2972
+ return UpdateProtInfo(cf, key, val, kTypeValue);
2973
+ }
2974
+
2975
+ Status PutEntityCF(uint32_t cf, const Slice& key,
2976
+ const Slice& entity) override {
2977
+ return UpdateProtInfo(cf, key, entity, kTypeWideColumnEntity);
2978
+ }
2979
+
2980
+ Status DeleteCF(uint32_t cf, const Slice& key) override {
2981
+ return UpdateProtInfo(cf, key, "", kTypeDeletion);
2982
+ }
2983
+
2984
+ Status SingleDeleteCF(uint32_t cf, const Slice& key) override {
2985
+ return UpdateProtInfo(cf, key, "", kTypeSingleDeletion);
2986
+ }
2987
+
2988
+ Status DeleteRangeCF(uint32_t cf, const Slice& begin_key,
2989
+ const Slice& end_key) override {
2990
+ return UpdateProtInfo(cf, begin_key, end_key, kTypeRangeDeletion);
2991
+ }
2992
+
2993
+ Status MergeCF(uint32_t cf, const Slice& key, const Slice& val) override {
2994
+ return UpdateProtInfo(cf, key, val, kTypeMerge);
2995
+ }
2996
+
2997
+ Status PutBlobIndexCF(uint32_t cf, const Slice& key,
2998
+ const Slice& val) override {
2999
+ return UpdateProtInfo(cf, key, val, kTypeBlobIndex);
3000
+ }
3001
+
3002
+ Status MarkBeginPrepare(bool /* unprepare */) override {
3003
+ return Status::OK();
3004
+ }
3005
+
3006
+ Status MarkEndPrepare(const Slice& /* xid */) override {
3007
+ return Status::OK();
3008
+ }
3009
+
3010
+ Status MarkCommit(const Slice& /* xid */) override { return Status::OK(); }
3011
+
3012
+ Status MarkCommitWithTimestamp(const Slice& /* xid */,
3013
+ const Slice& /* ts */) override {
3014
+ return Status::OK();
3015
+ }
3016
+
3017
+ Status MarkRollback(const Slice& /* xid */) override { return Status::OK(); }
3018
+
3019
+ Status MarkNoop(bool /* empty_batch */) override { return Status::OK(); }
3020
+
3021
+ private:
3022
+ Status UpdateProtInfo(uint32_t cf, const Slice& key, const Slice& val,
3023
+ const ValueType op_type) {
3024
+ if (prot_info_) {
3025
+ prot_info_->entries_.emplace_back(
3026
+ ProtectionInfo64().ProtectKVO(key, val, op_type).ProtectC(cf));
3027
+ }
3028
+ return Status::OK();
3029
+ }
3030
+
3031
+ // No copy or move.
3032
+ ProtectionInfoUpdater(const ProtectionInfoUpdater&) = delete;
3033
+ ProtectionInfoUpdater(ProtectionInfoUpdater&&) = delete;
3034
+ ProtectionInfoUpdater& operator=(const ProtectionInfoUpdater&) = delete;
3035
+ ProtectionInfoUpdater& operator=(ProtectionInfoUpdater&&) = delete;
3036
+
3037
+ WriteBatch::ProtectionInfo* const prot_info_ = nullptr;
3038
+ };
3039
+
3040
+ } // anonymous namespace
3041
+
3042
+ Status WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) {
3043
+ assert(contents.size() >= WriteBatchInternal::kHeader);
3044
+ assert(b->prot_info_ == nullptr);
3045
+
3046
+ b->rep_.assign(contents.data(), contents.size());
3047
+ b->content_flags_.store(ContentFlags::DEFERRED, std::memory_order_relaxed);
3048
+ return Status::OK();
3049
+ }
3050
+
3051
+ Status WriteBatchInternal::Append(WriteBatch* dst, const WriteBatch* src,
3052
+ const bool wal_only) {
3053
+ assert(dst->Count() == 0 ||
3054
+ (dst->prot_info_ == nullptr) == (src->prot_info_ == nullptr));
3055
+ if ((src->prot_info_ != nullptr &&
3056
+ src->prot_info_->entries_.size() != src->Count()) ||
3057
+ (dst->prot_info_ != nullptr &&
3058
+ dst->prot_info_->entries_.size() != dst->Count())) {
3059
+ return Status::Corruption(
3060
+ "Write batch has inconsistent count and number of checksums");
3061
+ }
3062
+
3063
+ size_t src_len;
3064
+ int src_count;
3065
+ uint32_t src_flags;
3066
+
3067
+ const SavePoint& batch_end = src->GetWalTerminationPoint();
3068
+
3069
+ if (wal_only && !batch_end.is_cleared()) {
3070
+ src_len = batch_end.size - WriteBatchInternal::kHeader;
3071
+ src_count = batch_end.count;
3072
+ src_flags = batch_end.content_flags;
3073
+ } else {
3074
+ src_len = src->rep_.size() - WriteBatchInternal::kHeader;
3075
+ src_count = Count(src);
3076
+ src_flags = src->content_flags_.load(std::memory_order_relaxed);
3077
+ }
3078
+
3079
+ if (src->prot_info_ != nullptr) {
3080
+ if (dst->prot_info_ == nullptr) {
3081
+ dst->prot_info_.reset(new WriteBatch::ProtectionInfo());
3082
+ }
3083
+ std::copy(src->prot_info_->entries_.begin(),
3084
+ src->prot_info_->entries_.begin() + src_count,
3085
+ std::back_inserter(dst->prot_info_->entries_));
3086
+ } else if (dst->prot_info_ != nullptr) {
3087
+ // dst has empty prot_info->entries
3088
+ // In this special case, we allow write batch without prot_info to
3089
+ // be appende to write batch with empty prot_info
3090
+ dst->prot_info_ = nullptr;
3091
+ }
3092
+ SetCount(dst, Count(dst) + src_count);
3093
+ assert(src->rep_.size() >= WriteBatchInternal::kHeader);
3094
+ dst->rep_.append(src->rep_.data() + WriteBatchInternal::kHeader, src_len);
3095
+ dst->content_flags_.store(
3096
+ dst->content_flags_.load(std::memory_order_relaxed) | src_flags,
3097
+ std::memory_order_relaxed);
3098
+ return Status::OK();
3099
+ }
3100
+
3101
+ size_t WriteBatchInternal::AppendedByteSize(size_t leftByteSize,
3102
+ size_t rightByteSize) {
3103
+ if (leftByteSize == 0 || rightByteSize == 0) {
3104
+ return leftByteSize + rightByteSize;
3105
+ } else {
3106
+ return leftByteSize + rightByteSize - WriteBatchInternal::kHeader;
3107
+ }
3108
+ }
3109
+
3110
+ Status WriteBatchInternal::UpdateProtectionInfo(WriteBatch* wb,
3111
+ size_t bytes_per_key,
3112
+ uint64_t* checksum) {
3113
+ if (bytes_per_key == 0) {
3114
+ if (wb->prot_info_ != nullptr) {
3115
+ wb->prot_info_.reset();
3116
+ return Status::OK();
3117
+ } else {
3118
+ // Already not protected.
3119
+ return Status::OK();
3120
+ }
3121
+ } else if (bytes_per_key == 8) {
3122
+ if (wb->prot_info_ == nullptr) {
3123
+ wb->prot_info_.reset(new WriteBatch::ProtectionInfo());
3124
+ ProtectionInfoUpdater prot_info_updater(wb->prot_info_.get());
3125
+ Status s = wb->Iterate(&prot_info_updater);
3126
+ if (s.ok() && checksum != nullptr) {
3127
+ uint64_t expected_hash = XXH3_64bits(wb->rep_.data(), wb->rep_.size());
3128
+ if (expected_hash != *checksum) {
3129
+ return Status::Corruption("Write batch content corrupted.");
3130
+ }
3131
+ }
3132
+ return s;
3133
+ } else {
3134
+ // Already protected.
3135
+ return Status::OK();
3136
+ }
3137
+ }
3138
+ return Status::NotSupported(
3139
+ "WriteBatch protection info must be zero or eight bytes/key");
3140
+ }
3141
+
3142
+ } // namespace ROCKSDB_NAMESPACE