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,3294 @@
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
+
11
+ #include <ios>
12
+ #include <thread>
13
+
14
+ #include "util/compression.h"
15
+ #ifdef GFLAGS
16
+ #include "db_stress_tool/db_stress_common.h"
17
+ #include "db_stress_tool/db_stress_compaction_filter.h"
18
+ #include "db_stress_tool/db_stress_driver.h"
19
+ #include "db_stress_tool/db_stress_table_properties_collector.h"
20
+ #include "rocksdb/convenience.h"
21
+ #include "rocksdb/filter_policy.h"
22
+ #include "rocksdb/secondary_cache.h"
23
+ #include "rocksdb/sst_file_manager.h"
24
+ #include "rocksdb/types.h"
25
+ #include "rocksdb/utilities/object_registry.h"
26
+ #include "rocksdb/utilities/write_batch_with_index.h"
27
+ #include "test_util/testutil.h"
28
+ #include "util/cast_util.h"
29
+ #include "utilities/backup/backup_engine_impl.h"
30
+ #include "utilities/fault_injection_fs.h"
31
+ #include "utilities/fault_injection_secondary_cache.h"
32
+
33
+ namespace ROCKSDB_NAMESPACE {
34
+
35
+ namespace {
36
+
37
+ std::shared_ptr<const FilterPolicy> CreateFilterPolicy() {
38
+ if (FLAGS_bloom_bits < 0) {
39
+ return BlockBasedTableOptions().filter_policy;
40
+ }
41
+ const FilterPolicy* new_policy;
42
+ if (FLAGS_ribbon_starting_level >= 999) {
43
+ // Use Bloom API
44
+ new_policy = NewBloomFilterPolicy(FLAGS_bloom_bits, false);
45
+ } else {
46
+ new_policy = NewRibbonFilterPolicy(
47
+ FLAGS_bloom_bits, /* bloom_before_level */ FLAGS_ribbon_starting_level);
48
+ }
49
+ return std::shared_ptr<const FilterPolicy>(new_policy);
50
+ }
51
+
52
+ } // namespace
53
+
54
+ StressTest::StressTest()
55
+ : cache_(NewCache(FLAGS_cache_size, FLAGS_cache_numshardbits)),
56
+ filter_policy_(CreateFilterPolicy()),
57
+ db_(nullptr),
58
+ txn_db_(nullptr),
59
+
60
+ db_aptr_(nullptr),
61
+ clock_(db_stress_env->GetSystemClock().get()),
62
+ new_column_family_name_(1),
63
+ num_times_reopened_(0),
64
+ db_preload_finished_(false),
65
+ cmp_db_(nullptr),
66
+ is_db_stopped_(false) {
67
+ if (FLAGS_destroy_db_initially) {
68
+ std::vector<std::string> files;
69
+ db_stress_env->GetChildren(FLAGS_db, &files);
70
+ for (unsigned int i = 0; i < files.size(); i++) {
71
+ if (Slice(files[i]).starts_with("heap-")) {
72
+ db_stress_env->DeleteFile(FLAGS_db + "/" + files[i]);
73
+ }
74
+ }
75
+
76
+ Options options;
77
+ options.env = db_stress_env;
78
+ // Remove files without preserving manfiest files
79
+ const Status s = !FLAGS_use_blob_db
80
+ ? DestroyDB(FLAGS_db, options)
81
+ : blob_db::DestroyBlobDB(FLAGS_db, options,
82
+ blob_db::BlobDBOptions());
83
+
84
+ if (!s.ok()) {
85
+ fprintf(stderr, "Cannot destroy original db: %s\n", s.ToString().c_str());
86
+ exit(1);
87
+ }
88
+ }
89
+ }
90
+
91
+ StressTest::~StressTest() {
92
+ for (auto cf : column_families_) {
93
+ delete cf;
94
+ }
95
+ column_families_.clear();
96
+ delete db_;
97
+
98
+ for (auto* cf : cmp_cfhs_) {
99
+ delete cf;
100
+ }
101
+ cmp_cfhs_.clear();
102
+ delete cmp_db_;
103
+ }
104
+
105
+ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
106
+ int32_t num_shard_bits) {
107
+ ConfigOptions config_options;
108
+ if (capacity <= 0) {
109
+ return nullptr;
110
+ }
111
+
112
+ std::shared_ptr<SecondaryCache> secondary_cache;
113
+ if (!FLAGS_secondary_cache_uri.empty()) {
114
+ Status s = SecondaryCache::CreateFromString(
115
+ config_options, FLAGS_secondary_cache_uri, &secondary_cache);
116
+ if (secondary_cache == nullptr) {
117
+ fprintf(stderr,
118
+ "No secondary cache registered matching string: %s status=%s\n",
119
+ FLAGS_secondary_cache_uri.c_str(), s.ToString().c_str());
120
+ exit(1);
121
+ }
122
+ if (FLAGS_secondary_cache_fault_one_in > 0) {
123
+ secondary_cache = std::make_shared<FaultInjectionSecondaryCache>(
124
+ secondary_cache, static_cast<uint32_t>(FLAGS_seed),
125
+ FLAGS_secondary_cache_fault_one_in);
126
+ }
127
+ }
128
+
129
+ if (FLAGS_cache_type == "clock_cache") {
130
+ fprintf(stderr, "Old clock cache implementation has been removed.\n");
131
+ exit(1);
132
+ } else if (FLAGS_cache_type == "hyper_clock_cache") {
133
+ HyperClockCacheOptions opts(static_cast<size_t>(capacity),
134
+ FLAGS_block_size /*estimated_entry_charge*/,
135
+ num_shard_bits);
136
+ opts.secondary_cache = std::move(secondary_cache);
137
+ return opts.MakeSharedCache();
138
+ } else if (FLAGS_cache_type == "lru_cache") {
139
+ LRUCacheOptions opts;
140
+ opts.capacity = capacity;
141
+ opts.num_shard_bits = num_shard_bits;
142
+ opts.secondary_cache = std::move(secondary_cache);
143
+ return NewLRUCache(opts);
144
+ } else {
145
+ fprintf(stderr, "Cache type not supported.");
146
+ exit(1);
147
+ }
148
+ }
149
+
150
+ std::vector<std::string> StressTest::GetBlobCompressionTags() {
151
+ std::vector<std::string> compression_tags{"kNoCompression"};
152
+
153
+ if (Snappy_Supported()) {
154
+ compression_tags.emplace_back("kSnappyCompression");
155
+ }
156
+ if (LZ4_Supported()) {
157
+ compression_tags.emplace_back("kLZ4Compression");
158
+ }
159
+ if (ZSTD_Supported()) {
160
+ compression_tags.emplace_back("kZSTD");
161
+ }
162
+
163
+ return compression_tags;
164
+ }
165
+
166
+ bool StressTest::BuildOptionsTable() {
167
+ if (FLAGS_set_options_one_in <= 0) {
168
+ return true;
169
+ }
170
+
171
+ std::unordered_map<std::string, std::vector<std::string>> options_tbl = {
172
+ {"write_buffer_size",
173
+ {std::to_string(options_.write_buffer_size),
174
+ std::to_string(options_.write_buffer_size * 2),
175
+ std::to_string(options_.write_buffer_size * 4)}},
176
+ {"max_write_buffer_number",
177
+ {std::to_string(options_.max_write_buffer_number),
178
+ std::to_string(options_.max_write_buffer_number * 2),
179
+ std::to_string(options_.max_write_buffer_number * 4)}},
180
+ {"arena_block_size",
181
+ {
182
+ std::to_string(options_.arena_block_size),
183
+ std::to_string(options_.write_buffer_size / 4),
184
+ std::to_string(options_.write_buffer_size / 8),
185
+ }},
186
+ {"memtable_huge_page_size", {"0", std::to_string(2 * 1024 * 1024)}},
187
+ {"max_successive_merges", {"0", "2", "4"}},
188
+ {"inplace_update_num_locks", {"100", "200", "300"}},
189
+ // TODO: re-enable once internal task T124324915 is fixed.
190
+ // {"experimental_mempurge_threshold", {"0.0", "1.0"}},
191
+ // TODO(ljin): enable test for this option
192
+ // {"disable_auto_compactions", {"100", "200", "300"}},
193
+ {"level0_file_num_compaction_trigger",
194
+ {
195
+ std::to_string(options_.level0_file_num_compaction_trigger),
196
+ std::to_string(options_.level0_file_num_compaction_trigger + 2),
197
+ std::to_string(options_.level0_file_num_compaction_trigger + 4),
198
+ }},
199
+ {"level0_slowdown_writes_trigger",
200
+ {
201
+ std::to_string(options_.level0_slowdown_writes_trigger),
202
+ std::to_string(options_.level0_slowdown_writes_trigger + 2),
203
+ std::to_string(options_.level0_slowdown_writes_trigger + 4),
204
+ }},
205
+ {"level0_stop_writes_trigger",
206
+ {
207
+ std::to_string(options_.level0_stop_writes_trigger),
208
+ std::to_string(options_.level0_stop_writes_trigger + 2),
209
+ std::to_string(options_.level0_stop_writes_trigger + 4),
210
+ }},
211
+ {"max_compaction_bytes",
212
+ {
213
+ std::to_string(options_.target_file_size_base * 5),
214
+ std::to_string(options_.target_file_size_base * 15),
215
+ std::to_string(options_.target_file_size_base * 100),
216
+ }},
217
+ {"target_file_size_base",
218
+ {
219
+ std::to_string(options_.target_file_size_base),
220
+ std::to_string(options_.target_file_size_base * 2),
221
+ std::to_string(options_.target_file_size_base * 4),
222
+ }},
223
+ {"target_file_size_multiplier",
224
+ {
225
+ std::to_string(options_.target_file_size_multiplier),
226
+ "1",
227
+ "2",
228
+ }},
229
+ {"max_bytes_for_level_base",
230
+ {
231
+ std::to_string(options_.max_bytes_for_level_base / 2),
232
+ std::to_string(options_.max_bytes_for_level_base),
233
+ std::to_string(options_.max_bytes_for_level_base * 2),
234
+ }},
235
+ {"max_bytes_for_level_multiplier",
236
+ {
237
+ std::to_string(options_.max_bytes_for_level_multiplier),
238
+ "1",
239
+ "2",
240
+ }},
241
+ {"max_sequential_skip_in_iterations", {"4", "8", "12"}},
242
+ };
243
+
244
+ if (FLAGS_allow_setting_blob_options_dynamically) {
245
+ options_tbl.emplace("enable_blob_files",
246
+ std::vector<std::string>{"false", "true"});
247
+ options_tbl.emplace("min_blob_size",
248
+ std::vector<std::string>{"0", "8", "16"});
249
+ options_tbl.emplace("blob_file_size",
250
+ std::vector<std::string>{"1M", "16M", "256M", "1G"});
251
+ options_tbl.emplace("blob_compression_type", GetBlobCompressionTags());
252
+ options_tbl.emplace("enable_blob_garbage_collection",
253
+ std::vector<std::string>{"false", "true"});
254
+ options_tbl.emplace(
255
+ "blob_garbage_collection_age_cutoff",
256
+ std::vector<std::string>{"0.0", "0.25", "0.5", "0.75", "1.0"});
257
+ options_tbl.emplace("blob_garbage_collection_force_threshold",
258
+ std::vector<std::string>{"0.5", "0.75", "1.0"});
259
+ options_tbl.emplace("blob_compaction_readahead_size",
260
+ std::vector<std::string>{"0", "1M", "4M"});
261
+ options_tbl.emplace("blob_file_starting_level",
262
+ std::vector<std::string>{"0", "1", "2"});
263
+ options_tbl.emplace("prepopulate_blob_cache",
264
+ std::vector<std::string>{"kDisable", "kFlushOnly"});
265
+ }
266
+
267
+ options_table_ = std::move(options_tbl);
268
+
269
+ for (const auto& iter : options_table_) {
270
+ options_index_.push_back(iter.first);
271
+ }
272
+ return true;
273
+ }
274
+
275
+ void StressTest::InitDb(SharedState* shared) {
276
+ uint64_t now = clock_->NowMicros();
277
+ fprintf(stdout, "%s Initializing db_stress\n",
278
+ clock_->TimeToString(now / 1000000).c_str());
279
+ PrintEnv();
280
+ Open(shared);
281
+ BuildOptionsTable();
282
+ }
283
+
284
+ void StressTest::FinishInitDb(SharedState* shared) {
285
+ if (FLAGS_read_only) {
286
+ uint64_t now = clock_->NowMicros();
287
+ fprintf(stdout, "%s Preloading db with %" PRIu64 " KVs\n",
288
+ clock_->TimeToString(now / 1000000).c_str(), FLAGS_max_key);
289
+ PreloadDbAndReopenAsReadOnly(FLAGS_max_key, shared);
290
+ }
291
+
292
+ if (shared->HasHistory()) {
293
+ // The way it works right now is, if there's any history, that means the
294
+ // previous run mutating the DB had all its operations traced, in which case
295
+ // we should always be able to `Restore()` the expected values to match the
296
+ // `db_`'s current seqno.
297
+ Status s = shared->Restore(db_);
298
+ if (!s.ok()) {
299
+ fprintf(stderr, "Error restoring historical expected values: %s\n",
300
+ s.ToString().c_str());
301
+ exit(1);
302
+ }
303
+ }
304
+ if (FLAGS_use_txn) {
305
+ // It's OK here without sync because unsynced data cannot be lost at this
306
+ // point
307
+ // - even with sync_fault_injection=1 as the
308
+ // file is still directly writable until after FinishInitDb()
309
+ ProcessRecoveredPreparedTxns(shared);
310
+ }
311
+
312
+ if (FLAGS_enable_compaction_filter) {
313
+ auto* compaction_filter_factory =
314
+ reinterpret_cast<DbStressCompactionFilterFactory*>(
315
+ options_.compaction_filter_factory.get());
316
+ assert(compaction_filter_factory);
317
+ // This must be called only after any potential `SharedState::Restore()` has
318
+ // completed in order for the `compaction_filter_factory` to operate on the
319
+ // correct latest values file.
320
+ compaction_filter_factory->SetSharedState(shared);
321
+ fprintf(stdout, "Compaction filter factory: %s\n",
322
+ compaction_filter_factory->Name());
323
+ }
324
+ }
325
+
326
+ void StressTest::TrackExpectedState(SharedState* shared) {
327
+ // For `FLAGS_manual_wal_flush_one_inWAL`
328
+ // data can be lost when `manual_wal_flush_one_in > 0` and `FlushWAL()` is not
329
+ // explictly called by users of RocksDB (in our case, db stress).
330
+ // Therefore recovery from such potential WAL data loss is a prefix recovery
331
+ // that requires tracing
332
+ if ((FLAGS_sync_fault_injection || FLAGS_disable_wal ||
333
+ FLAGS_manual_wal_flush_one_in > 0) &&
334
+ IsStateTracked()) {
335
+ Status s = shared->SaveAtAndAfter(db_);
336
+ if (!s.ok()) {
337
+ fprintf(stderr, "Error enabling history tracing: %s\n",
338
+ s.ToString().c_str());
339
+ exit(1);
340
+ }
341
+ }
342
+ }
343
+
344
+ Status StressTest::AssertSame(DB* db, ColumnFamilyHandle* cf,
345
+ ThreadState::SnapshotState& snap_state) {
346
+ Status s;
347
+ if (cf->GetName() != snap_state.cf_at_name) {
348
+ return s;
349
+ }
350
+ // This `ReadOptions` is for validation purposes. Ignore
351
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
352
+ ReadOptions ropt;
353
+ ropt.snapshot = snap_state.snapshot;
354
+ Slice ts;
355
+ if (!snap_state.timestamp.empty()) {
356
+ ts = snap_state.timestamp;
357
+ ropt.timestamp = &ts;
358
+ }
359
+ PinnableSlice exp_v(&snap_state.value);
360
+ exp_v.PinSelf();
361
+ PinnableSlice v;
362
+ s = db->Get(ropt, cf, snap_state.key, &v);
363
+ if (!s.ok() && !s.IsNotFound()) {
364
+ return s;
365
+ }
366
+ if (snap_state.status != s) {
367
+ return Status::Corruption(
368
+ "The snapshot gave inconsistent results for key " +
369
+ std::to_string(Hash(snap_state.key.c_str(), snap_state.key.size(), 0)) +
370
+ " in cf " + cf->GetName() + ": (" + snap_state.status.ToString() +
371
+ ") vs. (" + s.ToString() + ")");
372
+ }
373
+ if (s.ok()) {
374
+ if (exp_v != v) {
375
+ return Status::Corruption("The snapshot gave inconsistent values: (" +
376
+ exp_v.ToString() + ") vs. (" + v.ToString() +
377
+ ")");
378
+ }
379
+ }
380
+ if (snap_state.key_vec != nullptr) {
381
+ // When `prefix_extractor` is set, seeking to beginning and scanning
382
+ // across prefixes are only supported with `total_order_seek` set.
383
+ ropt.total_order_seek = true;
384
+ std::unique_ptr<Iterator> iterator(db->NewIterator(ropt));
385
+ std::unique_ptr<std::vector<bool>> tmp_bitvec(
386
+ new std::vector<bool>(FLAGS_max_key));
387
+ for (iterator->SeekToFirst(); iterator->Valid(); iterator->Next()) {
388
+ uint64_t key_val;
389
+ if (GetIntVal(iterator->key().ToString(), &key_val)) {
390
+ (*tmp_bitvec.get())[key_val] = true;
391
+ }
392
+ }
393
+ if (!std::equal(snap_state.key_vec->begin(), snap_state.key_vec->end(),
394
+ tmp_bitvec.get()->begin())) {
395
+ return Status::Corruption("Found inconsistent keys at this snapshot");
396
+ }
397
+ }
398
+ return Status::OK();
399
+ }
400
+
401
+ void StressTest::VerificationAbort(SharedState* shared, std::string msg,
402
+ Status s) const {
403
+ fprintf(stderr, "Verification failed: %s. Status is %s\n", msg.c_str(),
404
+ s.ToString().c_str());
405
+ shared->SetVerificationFailure();
406
+ }
407
+
408
+ void StressTest::VerificationAbort(SharedState* shared, std::string msg, int cf,
409
+ int64_t key) const {
410
+ auto key_str = Key(key);
411
+ Slice key_slice = key_str;
412
+ fprintf(stderr,
413
+ "Verification failed for column family %d key %s (%" PRIi64 "): %s\n",
414
+ cf, key_slice.ToString(true).c_str(), key, msg.c_str());
415
+ shared->SetVerificationFailure();
416
+ }
417
+
418
+ void StressTest::VerificationAbort(SharedState* shared, std::string msg, int cf,
419
+ int64_t key, Slice value_from_db,
420
+ Slice value_from_expected) const {
421
+ auto key_str = Key(key);
422
+ fprintf(stderr,
423
+ "Verification failed for column family %d key %s (%" PRIi64
424
+ "): value_from_db: %s, value_from_expected: %s, msg: %s\n",
425
+ cf, Slice(key_str).ToString(true).c_str(), key,
426
+ value_from_db.ToString(true).c_str(),
427
+ value_from_expected.ToString(true).c_str(), msg.c_str());
428
+ shared->SetVerificationFailure();
429
+ }
430
+
431
+ void StressTest::VerificationAbort(SharedState* shared, int cf, int64_t key,
432
+ const Slice& value,
433
+ const WideColumns& columns) const {
434
+ assert(shared);
435
+
436
+ auto key_str = Key(key);
437
+
438
+ fprintf(stderr,
439
+ "Verification failed for column family %d key %s (%" PRIi64
440
+ "): Value and columns inconsistent: value: %s, columns: %s\n",
441
+ cf, Slice(key_str).ToString(/* hex */ true).c_str(), key,
442
+ value.ToString(/* hex */ true).c_str(),
443
+ WideColumnsToHex(columns).c_str());
444
+
445
+ shared->SetVerificationFailure();
446
+ }
447
+
448
+ std::string StressTest::DebugString(const Slice& value,
449
+ const WideColumns& columns) {
450
+ std::ostringstream oss;
451
+
452
+ oss << "value: " << value.ToString(/* hex */ true)
453
+ << ", columns: " << WideColumnsToHex(columns);
454
+
455
+ return oss.str();
456
+ }
457
+
458
+ void StressTest::PrintStatistics() {
459
+ if (dbstats) {
460
+ fprintf(stdout, "STATISTICS:\n%s\n", dbstats->ToString().c_str());
461
+ }
462
+ if (dbstats_secondaries) {
463
+ fprintf(stdout, "Secondary instances STATISTICS:\n%s\n",
464
+ dbstats_secondaries->ToString().c_str());
465
+ }
466
+ }
467
+
468
+ // Currently PreloadDb has to be single-threaded.
469
+ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
470
+ SharedState* shared) {
471
+ WriteOptions write_opts;
472
+ write_opts.disableWAL = FLAGS_disable_wal;
473
+ if (FLAGS_sync) {
474
+ write_opts.sync = true;
475
+ }
476
+ if (FLAGS_rate_limit_auto_wal_flush) {
477
+ write_opts.rate_limiter_priority = Env::IO_USER;
478
+ }
479
+ char value[100];
480
+ int cf_idx = 0;
481
+ Status s;
482
+ for (auto cfh : column_families_) {
483
+ for (int64_t k = 0; k != number_of_keys; ++k) {
484
+ const std::string key = Key(k);
485
+
486
+ PendingExpectedValue pending_expected_value =
487
+ shared->PreparePut(cf_idx, k);
488
+ const uint32_t value_base = pending_expected_value.GetFinalValueBase();
489
+ const size_t sz = GenerateValue(value_base, value, sizeof(value));
490
+
491
+ const Slice v(value, sz);
492
+
493
+
494
+ std::string ts;
495
+ if (FLAGS_user_timestamp_size > 0) {
496
+ ts = GetNowNanos();
497
+ }
498
+
499
+ if (FLAGS_use_merge) {
500
+ if (!FLAGS_use_txn) {
501
+ if (FLAGS_user_timestamp_size > 0) {
502
+ s = db_->Merge(write_opts, cfh, key, ts, v);
503
+ } else {
504
+ s = db_->Merge(write_opts, cfh, key, v);
505
+ }
506
+ } else {
507
+ Transaction* txn;
508
+ s = NewTxn(write_opts, &txn);
509
+ if (s.ok()) {
510
+ s = txn->Merge(cfh, key, v);
511
+ if (s.ok()) {
512
+ s = CommitTxn(txn);
513
+ }
514
+ }
515
+ }
516
+ } else if (FLAGS_use_put_entity_one_in > 0) {
517
+ s = db_->PutEntity(write_opts, cfh, key,
518
+ GenerateWideColumns(value_base, v));
519
+ } else {
520
+ if (!FLAGS_use_txn) {
521
+ if (FLAGS_user_timestamp_size > 0) {
522
+ s = db_->Put(write_opts, cfh, key, ts, v);
523
+ } else {
524
+ s = db_->Put(write_opts, cfh, key, v);
525
+ }
526
+ } else {
527
+ Transaction* txn;
528
+ s = NewTxn(write_opts, &txn);
529
+ if (s.ok()) {
530
+ s = txn->Put(cfh, key, v);
531
+ if (s.ok()) {
532
+ s = CommitTxn(txn);
533
+ }
534
+ }
535
+ }
536
+ }
537
+
538
+ pending_expected_value.Commit();
539
+ if (!s.ok()) {
540
+ break;
541
+ }
542
+ }
543
+ if (!s.ok()) {
544
+ break;
545
+ }
546
+ ++cf_idx;
547
+ }
548
+ if (s.ok()) {
549
+ s = db_->Flush(FlushOptions(), column_families_);
550
+ }
551
+ if (s.ok()) {
552
+ for (auto cf : column_families_) {
553
+ delete cf;
554
+ }
555
+ column_families_.clear();
556
+ delete db_;
557
+ db_ = nullptr;
558
+ txn_db_ = nullptr;
559
+
560
+ db_preload_finished_.store(true);
561
+ auto now = clock_->NowMicros();
562
+ fprintf(stdout, "%s Reopening database in read-only\n",
563
+ clock_->TimeToString(now / 1000000).c_str());
564
+ // Reopen as read-only, can ignore all options related to updates
565
+ Open(shared);
566
+ } else {
567
+ fprintf(stderr, "Failed to preload db");
568
+ exit(1);
569
+ }
570
+ }
571
+
572
+ Status StressTest::SetOptions(ThreadState* thread) {
573
+ assert(FLAGS_set_options_one_in > 0);
574
+ std::unordered_map<std::string, std::string> opts;
575
+ std::string name =
576
+ options_index_[thread->rand.Next() % options_index_.size()];
577
+ int value_idx = thread->rand.Next() % options_table_[name].size();
578
+ if (name == "level0_file_num_compaction_trigger" ||
579
+ name == "level0_slowdown_writes_trigger" ||
580
+ name == "level0_stop_writes_trigger") {
581
+ opts["level0_file_num_compaction_trigger"] =
582
+ options_table_["level0_file_num_compaction_trigger"][value_idx];
583
+ opts["level0_slowdown_writes_trigger"] =
584
+ options_table_["level0_slowdown_writes_trigger"][value_idx];
585
+ opts["level0_stop_writes_trigger"] =
586
+ options_table_["level0_stop_writes_trigger"][value_idx];
587
+ } else {
588
+ opts[name] = options_table_[name][value_idx];
589
+ }
590
+
591
+ int rand_cf_idx = thread->rand.Next() % FLAGS_column_families;
592
+ auto cfh = column_families_[rand_cf_idx];
593
+ return db_->SetOptions(cfh, opts);
594
+ }
595
+
596
+ void StressTest::ProcessRecoveredPreparedTxns(SharedState* shared) {
597
+ assert(txn_db_);
598
+ std::vector<Transaction*> recovered_prepared_trans;
599
+ txn_db_->GetAllPreparedTransactions(&recovered_prepared_trans);
600
+ for (Transaction* txn : recovered_prepared_trans) {
601
+ ProcessRecoveredPreparedTxnsHelper(txn, shared);
602
+ delete txn;
603
+ }
604
+ recovered_prepared_trans.clear();
605
+ txn_db_->GetAllPreparedTransactions(&recovered_prepared_trans);
606
+ assert(recovered_prepared_trans.size() == 0);
607
+ }
608
+
609
+ void StressTest::ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
610
+ SharedState* shared) {
611
+ thread_local Random rand(static_cast<uint32_t>(FLAGS_seed));
612
+ for (size_t i = 0; i < column_families_.size(); ++i) {
613
+ std::unique_ptr<WBWIIterator> wbwi_iter(
614
+ txn->GetWriteBatch()->NewIterator(column_families_[i]));
615
+ for (wbwi_iter->SeekToFirst(); wbwi_iter->Valid(); wbwi_iter->Next()) {
616
+ uint64_t key_val;
617
+ if (GetIntVal(wbwi_iter->Entry().key.ToString(), &key_val)) {
618
+ shared->SyncPendingPut(static_cast<int>(i) /* cf_idx */, key_val);
619
+ }
620
+ }
621
+ }
622
+ if (rand.OneIn(2)) {
623
+ Status s = txn->Commit();
624
+ assert(s.ok());
625
+ } else {
626
+ Status s = txn->Rollback();
627
+ assert(s.ok());
628
+ }
629
+ }
630
+
631
+ Status StressTest::NewTxn(WriteOptions& write_opts, Transaction** txn) {
632
+ if (!FLAGS_use_txn) {
633
+ return Status::InvalidArgument("NewTxn when FLAGS_use_txn is not set");
634
+ }
635
+ write_opts.disableWAL = FLAGS_disable_wal;
636
+ static std::atomic<uint64_t> txn_id = {0};
637
+ TransactionOptions txn_options;
638
+ txn_options.use_only_the_last_commit_time_batch_for_recovery =
639
+ FLAGS_use_only_the_last_commit_time_batch_for_recovery;
640
+ txn_options.lock_timeout = 600000; // 10 min
641
+ txn_options.deadlock_detect = true;
642
+ *txn = txn_db_->BeginTransaction(write_opts, txn_options);
643
+ auto istr = std::to_string(txn_id.fetch_add(1));
644
+ Status s = (*txn)->SetName("xid" + istr);
645
+ return s;
646
+ }
647
+
648
+ Status StressTest::CommitTxn(Transaction* txn, ThreadState* thread) {
649
+ if (!FLAGS_use_txn) {
650
+ return Status::InvalidArgument("CommitTxn when FLAGS_use_txn is not set");
651
+ }
652
+ assert(txn_db_);
653
+ Status s = txn->Prepare();
654
+ std::shared_ptr<const Snapshot> timestamped_snapshot;
655
+ if (s.ok()) {
656
+ if (thread && FLAGS_create_timestamped_snapshot_one_in &&
657
+ thread->rand.OneIn(FLAGS_create_timestamped_snapshot_one_in)) {
658
+ uint64_t ts = db_stress_env->NowNanos();
659
+ s = txn->CommitAndTryCreateSnapshot(/*notifier=*/nullptr, ts,
660
+ &timestamped_snapshot);
661
+
662
+ std::pair<Status, std::shared_ptr<const Snapshot>> res;
663
+ if (thread->tid == 0) {
664
+ uint64_t now = db_stress_env->NowNanos();
665
+ res = txn_db_->CreateTimestampedSnapshot(now);
666
+ if (res.first.ok()) {
667
+ assert(res.second);
668
+ assert(res.second->GetTimestamp() == now);
669
+ if (timestamped_snapshot) {
670
+ assert(res.second->GetTimestamp() >
671
+ timestamped_snapshot->GetTimestamp());
672
+ }
673
+ } else {
674
+ assert(!res.second);
675
+ }
676
+ }
677
+ } else {
678
+ s = txn->Commit();
679
+ }
680
+ }
681
+ if (thread && FLAGS_create_timestamped_snapshot_one_in > 0 &&
682
+ thread->rand.OneInOpt(50000)) {
683
+ uint64_t now = db_stress_env->NowNanos();
684
+ constexpr uint64_t time_diff = static_cast<uint64_t>(1000) * 1000 * 1000;
685
+ txn_db_->ReleaseTimestampedSnapshotsOlderThan(now - time_diff);
686
+ }
687
+ delete txn;
688
+ return s;
689
+ }
690
+
691
+ Status StressTest::RollbackTxn(Transaction* txn) {
692
+ if (!FLAGS_use_txn) {
693
+ return Status::InvalidArgument(
694
+ "RollbackTxn when FLAGS_use_txn is not"
695
+ " set");
696
+ }
697
+ Status s = txn->Rollback();
698
+ delete txn;
699
+ return s;
700
+ }
701
+
702
+ void StressTest::OperateDb(ThreadState* thread) {
703
+ ReadOptions read_opts(FLAGS_verify_checksum, true);
704
+ read_opts.rate_limiter_priority =
705
+ FLAGS_rate_limit_user_ops ? Env::IO_USER : Env::IO_TOTAL;
706
+ read_opts.async_io = FLAGS_async_io;
707
+ read_opts.adaptive_readahead = FLAGS_adaptive_readahead;
708
+ read_opts.readahead_size = FLAGS_readahead_size;
709
+ WriteOptions write_opts;
710
+ if (FLAGS_rate_limit_auto_wal_flush) {
711
+ write_opts.rate_limiter_priority = Env::IO_USER;
712
+ }
713
+ auto shared = thread->shared;
714
+ char value[100];
715
+ std::string from_db;
716
+ if (FLAGS_sync) {
717
+ write_opts.sync = true;
718
+ }
719
+ write_opts.disableWAL = FLAGS_disable_wal;
720
+ write_opts.protection_bytes_per_key = FLAGS_batch_protection_bytes_per_key;
721
+ const int prefix_bound = static_cast<int>(FLAGS_readpercent) +
722
+ static_cast<int>(FLAGS_prefixpercent);
723
+ const int write_bound = prefix_bound + static_cast<int>(FLAGS_writepercent);
724
+ const int del_bound = write_bound + static_cast<int>(FLAGS_delpercent);
725
+ const int delrange_bound =
726
+ del_bound + static_cast<int>(FLAGS_delrangepercent);
727
+ const int iterate_bound =
728
+ delrange_bound + static_cast<int>(FLAGS_iterpercent);
729
+
730
+ const uint64_t ops_per_open = FLAGS_ops_per_thread / (FLAGS_reopen + 1);
731
+
732
+ #ifndef NDEBUG
733
+ if (FLAGS_read_fault_one_in) {
734
+ fault_fs_guard->SetThreadLocalReadErrorContext(thread->shared->GetSeed(),
735
+ FLAGS_read_fault_one_in);
736
+ }
737
+ #endif // NDEBUG
738
+ if (FLAGS_write_fault_one_in) {
739
+ IOStatus error_msg;
740
+ if (FLAGS_injest_error_severity <= 1 || FLAGS_injest_error_severity > 2) {
741
+ error_msg = IOStatus::IOError("Retryable IO Error");
742
+ error_msg.SetRetryable(true);
743
+ } else if (FLAGS_injest_error_severity == 2) {
744
+ // Ingest the fatal error
745
+ error_msg = IOStatus::IOError("Fatal IO Error");
746
+ error_msg.SetDataLoss(true);
747
+ }
748
+ std::vector<FileType> types = {FileType::kTableFile,
749
+ FileType::kDescriptorFile,
750
+ FileType::kCurrentFile};
751
+ fault_fs_guard->SetRandomWriteError(
752
+ thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg,
753
+ /*inject_for_all_file_types=*/false, types);
754
+ }
755
+ thread->stats.Start();
756
+ for (int open_cnt = 0; open_cnt <= FLAGS_reopen; ++open_cnt) {
757
+ if (thread->shared->HasVerificationFailedYet() ||
758
+ thread->shared->ShouldStopTest()) {
759
+ break;
760
+ }
761
+ if (open_cnt != 0) {
762
+ thread->stats.FinishedSingleOp();
763
+ MutexLock l(thread->shared->GetMutex());
764
+ while (!thread->snapshot_queue.empty()) {
765
+ db_->ReleaseSnapshot(thread->snapshot_queue.front().second.snapshot);
766
+ delete thread->snapshot_queue.front().second.key_vec;
767
+ thread->snapshot_queue.pop();
768
+ }
769
+ thread->shared->IncVotedReopen();
770
+ if (thread->shared->AllVotedReopen()) {
771
+ thread->shared->GetStressTest()->Reopen(thread);
772
+ thread->shared->GetCondVar()->SignalAll();
773
+ } else {
774
+ thread->shared->GetCondVar()->Wait();
775
+ }
776
+ // Commenting this out as we don't want to reset stats on each open.
777
+ // thread->stats.Start();
778
+ }
779
+
780
+ for (uint64_t i = 0; i < ops_per_open; i++) {
781
+ if (thread->shared->HasVerificationFailedYet()) {
782
+ break;
783
+ }
784
+
785
+ // Change Options
786
+ if (thread->rand.OneInOpt(FLAGS_set_options_one_in)) {
787
+ SetOptions(thread);
788
+ }
789
+
790
+ if (thread->rand.OneInOpt(FLAGS_set_in_place_one_in)) {
791
+ options_.inplace_update_support ^= options_.inplace_update_support;
792
+ }
793
+
794
+ if (thread->tid == 0 && FLAGS_verify_db_one_in > 0 &&
795
+ thread->rand.OneIn(FLAGS_verify_db_one_in)) {
796
+ ContinuouslyVerifyDb(thread);
797
+ if (thread->shared->ShouldStopTest()) {
798
+ break;
799
+ }
800
+ }
801
+
802
+ MaybeClearOneColumnFamily(thread);
803
+
804
+ if (thread->rand.OneInOpt(FLAGS_manual_wal_flush_one_in)) {
805
+ bool sync = thread->rand.OneIn(2) ? true : false;
806
+ Status s = db_->FlushWAL(sync);
807
+ if (!s.ok() && !(sync && s.IsNotSupported())) {
808
+ fprintf(stderr, "FlushWAL(sync=%s) failed: %s\n",
809
+ (sync ? "true" : "false"), s.ToString().c_str());
810
+ }
811
+ }
812
+
813
+ if (thread->rand.OneInOpt(FLAGS_lock_wal_one_in)) {
814
+ Status s = db_->LockWAL();
815
+ if (!s.ok()) {
816
+ fprintf(stderr, "LockWAL() failed: %s\n", s.ToString().c_str());
817
+ } else {
818
+ auto old_seqno = db_->GetLatestSequenceNumber();
819
+ // Yield for a while
820
+ do {
821
+ std::this_thread::yield();
822
+ } while (thread->rand.OneIn(2));
823
+ // Latest seqno should not have changed
824
+ auto new_seqno = db_->GetLatestSequenceNumber();
825
+ if (old_seqno != new_seqno) {
826
+ fprintf(
827
+ stderr,
828
+ "Failure: latest seqno changed from %u to %u with WAL locked\n",
829
+ (unsigned)old_seqno, (unsigned)new_seqno);
830
+ }
831
+ s = db_->UnlockWAL();
832
+ if (!s.ok()) {
833
+ fprintf(stderr, "UnlockWAL() failed: %s\n", s.ToString().c_str());
834
+ }
835
+ }
836
+ }
837
+
838
+ if (thread->rand.OneInOpt(FLAGS_sync_wal_one_in)) {
839
+ Status s = db_->SyncWAL();
840
+ if (!s.ok() && !s.IsNotSupported()) {
841
+ fprintf(stderr, "SyncWAL() failed: %s\n", s.ToString().c_str());
842
+ }
843
+ }
844
+
845
+ int rand_column_family = thread->rand.Next() % FLAGS_column_families;
846
+ ColumnFamilyHandle* column_family = column_families_[rand_column_family];
847
+
848
+ if (thread->rand.OneInOpt(FLAGS_compact_files_one_in)) {
849
+ TestCompactFiles(thread, column_family);
850
+ }
851
+
852
+ int64_t rand_key = GenerateOneKey(thread, i);
853
+ std::string keystr = Key(rand_key);
854
+ Slice key = keystr;
855
+
856
+ if (thread->rand.OneInOpt(FLAGS_compact_range_one_in)) {
857
+ TestCompactRange(thread, rand_key, key, column_family);
858
+ if (thread->shared->HasVerificationFailedYet()) {
859
+ break;
860
+ }
861
+ }
862
+
863
+ std::vector<int> rand_column_families =
864
+ GenerateColumnFamilies(FLAGS_column_families, rand_column_family);
865
+
866
+ if (thread->rand.OneInOpt(FLAGS_flush_one_in)) {
867
+ Status status = TestFlush(rand_column_families);
868
+ if (!status.ok()) {
869
+ fprintf(stdout, "Unable to perform Flush(): %s\n",
870
+ status.ToString().c_str());
871
+ }
872
+ }
873
+
874
+ // Verify GetLiveFiles with a 1 in N chance.
875
+ if (thread->rand.OneInOpt(FLAGS_get_live_files_one_in) &&
876
+ !FLAGS_write_fault_one_in) {
877
+ Status status = VerifyGetLiveFiles();
878
+ if (!status.ok()) {
879
+ VerificationAbort(shared, "VerifyGetLiveFiles status not OK", status);
880
+ }
881
+ }
882
+
883
+ // Verify GetSortedWalFiles with a 1 in N chance.
884
+ if (thread->rand.OneInOpt(FLAGS_get_sorted_wal_files_one_in)) {
885
+ Status status = VerifyGetSortedWalFiles();
886
+ if (!status.ok()) {
887
+ VerificationAbort(shared, "VerifyGetSortedWalFiles status not OK",
888
+ status);
889
+ }
890
+ }
891
+
892
+ // Verify GetCurrentWalFile with a 1 in N chance.
893
+ if (thread->rand.OneInOpt(FLAGS_get_current_wal_file_one_in)) {
894
+ Status status = VerifyGetCurrentWalFile();
895
+ if (!status.ok()) {
896
+ VerificationAbort(shared, "VerifyGetCurrentWalFile status not OK",
897
+ status);
898
+ }
899
+ }
900
+
901
+ if (thread->rand.OneInOpt(FLAGS_pause_background_one_in)) {
902
+ Status status = TestPauseBackground(thread);
903
+ if (!status.ok()) {
904
+ VerificationAbort(
905
+ shared, "Pause/ContinueBackgroundWork status not OK", status);
906
+ }
907
+ }
908
+
909
+ if (thread->rand.OneInOpt(FLAGS_verify_checksum_one_in)) {
910
+ Status status = db_->VerifyChecksum();
911
+ if (!status.ok()) {
912
+ VerificationAbort(shared, "VerifyChecksum status not OK", status);
913
+ }
914
+ }
915
+
916
+ if (thread->rand.OneInOpt(FLAGS_get_property_one_in)) {
917
+ TestGetProperty(thread);
918
+ }
919
+
920
+ std::vector<int64_t> rand_keys = GenerateKeys(rand_key);
921
+
922
+ if (thread->rand.OneInOpt(FLAGS_ingest_external_file_one_in)) {
923
+ TestIngestExternalFile(thread, rand_column_families, rand_keys);
924
+ }
925
+
926
+ if (thread->rand.OneInOpt(FLAGS_backup_one_in)) {
927
+ // Beyond a certain DB size threshold, this test becomes heavier than
928
+ // it's worth.
929
+ uint64_t total_size = 0;
930
+ if (FLAGS_backup_max_size > 0) {
931
+ std::vector<FileAttributes> files;
932
+ db_stress_env->GetChildrenFileAttributes(FLAGS_db, &files);
933
+ for (auto& file : files) {
934
+ total_size += file.size_bytes;
935
+ }
936
+ }
937
+
938
+ if (total_size <= FLAGS_backup_max_size) {
939
+ Status s = TestBackupRestore(thread, rand_column_families, rand_keys);
940
+ if (!s.ok()) {
941
+ VerificationAbort(shared, "Backup/restore gave inconsistent state",
942
+ s);
943
+ }
944
+ }
945
+ }
946
+
947
+ if (thread->rand.OneInOpt(FLAGS_checkpoint_one_in)) {
948
+ Status s = TestCheckpoint(thread, rand_column_families, rand_keys);
949
+ if (!s.ok()) {
950
+ VerificationAbort(shared, "Checkpoint gave inconsistent state", s);
951
+ }
952
+ }
953
+
954
+ if (thread->rand.OneInOpt(FLAGS_approximate_size_one_in)) {
955
+ Status s =
956
+ TestApproximateSize(thread, i, rand_column_families, rand_keys);
957
+ if (!s.ok()) {
958
+ VerificationAbort(shared, "ApproximateSize Failed", s);
959
+ }
960
+ }
961
+ if (thread->rand.OneInOpt(FLAGS_acquire_snapshot_one_in)) {
962
+ TestAcquireSnapshot(thread, rand_column_family, keystr, i);
963
+ }
964
+
965
+ /*always*/ {
966
+ Status s = MaybeReleaseSnapshots(thread, i);
967
+ if (!s.ok()) {
968
+ VerificationAbort(shared, "Snapshot gave inconsistent state", s);
969
+ }
970
+ }
971
+
972
+ // Assign timestamps if necessary.
973
+ std::string read_ts_str;
974
+ Slice read_ts;
975
+ if (FLAGS_user_timestamp_size > 0) {
976
+ read_ts_str = GetNowNanos();
977
+ read_ts = read_ts_str;
978
+ read_opts.timestamp = &read_ts;
979
+ }
980
+
981
+ int prob_op = thread->rand.Uniform(100);
982
+ // Reset this in case we pick something other than a read op. We don't
983
+ // want to use a stale value when deciding at the beginning of the loop
984
+ // whether to vote to reopen
985
+ if (prob_op >= 0 && prob_op < static_cast<int>(FLAGS_readpercent)) {
986
+ assert(0 <= prob_op);
987
+ // OPERATION read
988
+ if (FLAGS_use_multi_get_entity) {
989
+ constexpr uint64_t max_batch_size = 64;
990
+ const uint64_t batch_size = std::min(
991
+ static_cast<uint64_t>(thread->rand.Uniform(max_batch_size)) + 1,
992
+ ops_per_open - i);
993
+ assert(batch_size >= 1);
994
+ assert(batch_size <= max_batch_size);
995
+ assert(i + batch_size <= ops_per_open);
996
+
997
+ rand_keys = GenerateNKeys(thread, static_cast<int>(batch_size), i);
998
+
999
+ TestMultiGetEntity(thread, read_opts, rand_column_families,
1000
+ rand_keys);
1001
+
1002
+ i += batch_size - 1;
1003
+ } else if (FLAGS_use_get_entity) {
1004
+ TestGetEntity(thread, read_opts, rand_column_families, rand_keys);
1005
+ } else if (FLAGS_use_multiget) {
1006
+ // Leave room for one more iteration of the loop with a single key
1007
+ // batch. This is to ensure that each thread does exactly the same
1008
+ // number of ops
1009
+ int multiget_batch_size = static_cast<int>(
1010
+ std::min(static_cast<uint64_t>(thread->rand.Uniform(64)),
1011
+ FLAGS_ops_per_thread - i - 1));
1012
+ // If its the last iteration, ensure that multiget_batch_size is 1
1013
+ multiget_batch_size = std::max(multiget_batch_size, 1);
1014
+ rand_keys = GenerateNKeys(thread, multiget_batch_size, i);
1015
+ TestMultiGet(thread, read_opts, rand_column_families, rand_keys);
1016
+ i += multiget_batch_size - 1;
1017
+ } else {
1018
+ TestGet(thread, read_opts, rand_column_families, rand_keys);
1019
+ }
1020
+ } else if (prob_op < prefix_bound) {
1021
+ assert(static_cast<int>(FLAGS_readpercent) <= prob_op);
1022
+ // OPERATION prefix scan
1023
+ // keys are 8 bytes long, prefix size is FLAGS_prefix_size. There are
1024
+ // (8 - FLAGS_prefix_size) bytes besides the prefix. So there will
1025
+ // be 2 ^ ((8 - FLAGS_prefix_size) * 8) possible keys with the same
1026
+ // prefix
1027
+ TestPrefixScan(thread, read_opts, rand_column_families, rand_keys);
1028
+ } else if (prob_op < write_bound) {
1029
+ assert(prefix_bound <= prob_op);
1030
+ // OPERATION write
1031
+ TestPut(thread, write_opts, read_opts, rand_column_families, rand_keys,
1032
+ value);
1033
+ } else if (prob_op < del_bound) {
1034
+ assert(write_bound <= prob_op);
1035
+ // OPERATION delete
1036
+ TestDelete(thread, write_opts, rand_column_families, rand_keys);
1037
+ } else if (prob_op < delrange_bound) {
1038
+ assert(del_bound <= prob_op);
1039
+ // OPERATION delete range
1040
+ TestDeleteRange(thread, write_opts, rand_column_families, rand_keys);
1041
+ } else if (prob_op < iterate_bound) {
1042
+ assert(delrange_bound <= prob_op);
1043
+ // OPERATION iterate
1044
+ if (!FLAGS_skip_verifydb &&
1045
+ thread->rand.OneInOpt(
1046
+ FLAGS_verify_iterator_with_expected_state_one_in)) {
1047
+ TestIterateAgainstExpected(thread, read_opts, rand_column_families,
1048
+ rand_keys);
1049
+ } else {
1050
+ int num_seeks = static_cast<int>(std::min(
1051
+ std::max(static_cast<uint64_t>(thread->rand.Uniform(4)),
1052
+ static_cast<uint64_t>(1)),
1053
+ std::max(static_cast<uint64_t>(FLAGS_ops_per_thread - i - 1),
1054
+ static_cast<uint64_t>(1))));
1055
+ rand_keys = GenerateNKeys(thread, num_seeks, i);
1056
+ i += num_seeks - 1;
1057
+ TestIterate(thread, read_opts, rand_column_families, rand_keys);
1058
+ }
1059
+ } else {
1060
+ assert(iterate_bound <= prob_op);
1061
+ TestCustomOperations(thread, rand_column_families);
1062
+ }
1063
+ thread->stats.FinishedSingleOp();
1064
+ }
1065
+ }
1066
+ while (!thread->snapshot_queue.empty()) {
1067
+ db_->ReleaseSnapshot(thread->snapshot_queue.front().second.snapshot);
1068
+ delete thread->snapshot_queue.front().second.key_vec;
1069
+ thread->snapshot_queue.pop();
1070
+ }
1071
+
1072
+ thread->stats.Stop();
1073
+ }
1074
+
1075
+ // Generated a list of keys that close to boundaries of SST keys.
1076
+ // If there isn't any SST file in the DB, return empty list.
1077
+ std::vector<std::string> StressTest::GetWhiteBoxKeys(ThreadState* thread,
1078
+ DB* db,
1079
+ ColumnFamilyHandle* cfh,
1080
+ size_t num_keys) {
1081
+ ColumnFamilyMetaData cfmd;
1082
+ db->GetColumnFamilyMetaData(cfh, &cfmd);
1083
+ std::vector<std::string> boundaries;
1084
+ for (const LevelMetaData& lmd : cfmd.levels) {
1085
+ for (const SstFileMetaData& sfmd : lmd.files) {
1086
+ // If FLAGS_user_timestamp_size > 0, then both smallestkey and largestkey
1087
+ // have timestamps.
1088
+ const auto& skey = sfmd.smallestkey;
1089
+ const auto& lkey = sfmd.largestkey;
1090
+ assert(skey.size() >= FLAGS_user_timestamp_size);
1091
+ assert(lkey.size() >= FLAGS_user_timestamp_size);
1092
+ boundaries.push_back(
1093
+ skey.substr(0, skey.size() - FLAGS_user_timestamp_size));
1094
+ boundaries.push_back(
1095
+ lkey.substr(0, lkey.size() - FLAGS_user_timestamp_size));
1096
+ }
1097
+ }
1098
+ if (boundaries.empty()) {
1099
+ return {};
1100
+ }
1101
+
1102
+ std::vector<std::string> ret;
1103
+ for (size_t j = 0; j < num_keys; j++) {
1104
+ std::string k =
1105
+ boundaries[thread->rand.Uniform(static_cast<int>(boundaries.size()))];
1106
+ if (thread->rand.OneIn(3)) {
1107
+ // Reduce one byte from the string
1108
+ for (int i = static_cast<int>(k.length()) - 1; i >= 0; i--) {
1109
+ uint8_t cur = k[i];
1110
+ if (cur > 0) {
1111
+ k[i] = static_cast<char>(cur - 1);
1112
+ break;
1113
+ } else if (i > 0) {
1114
+ k[i] = 0xFFu;
1115
+ }
1116
+ }
1117
+ } else if (thread->rand.OneIn(2)) {
1118
+ // Add one byte to the string
1119
+ for (int i = static_cast<int>(k.length()) - 1; i >= 0; i--) {
1120
+ uint8_t cur = k[i];
1121
+ if (cur < 255) {
1122
+ k[i] = static_cast<char>(cur + 1);
1123
+ break;
1124
+ } else if (i > 0) {
1125
+ k[i] = 0x00;
1126
+ }
1127
+ }
1128
+ }
1129
+ ret.push_back(k);
1130
+ }
1131
+ return ret;
1132
+ }
1133
+
1134
+ // Given a key K, this creates an iterator which scans to K and then
1135
+ // does a random sequence of Next/Prev operations.
1136
+ Status StressTest::TestIterate(ThreadState* thread,
1137
+ const ReadOptions& read_opts,
1138
+ const std::vector<int>& rand_column_families,
1139
+ const std::vector<int64_t>& rand_keys) {
1140
+ assert(!rand_column_families.empty());
1141
+ assert(!rand_keys.empty());
1142
+
1143
+ ManagedSnapshot snapshot_guard(db_);
1144
+
1145
+ ReadOptions ro = read_opts;
1146
+ ro.snapshot = snapshot_guard.snapshot();
1147
+
1148
+ std::string read_ts_str;
1149
+ Slice read_ts_slice;
1150
+ MaybeUseOlderTimestampForRangeScan(thread, read_ts_str, read_ts_slice, ro);
1151
+
1152
+ bool expect_total_order = false;
1153
+ if (thread->rand.OneIn(16)) {
1154
+ // When prefix extractor is used, it's useful to cover total order seek.
1155
+ ro.total_order_seek = true;
1156
+ expect_total_order = true;
1157
+ } else if (thread->rand.OneIn(4)) {
1158
+ ro.total_order_seek = false;
1159
+ ro.auto_prefix_mode = true;
1160
+ expect_total_order = true;
1161
+ } else if (options_.prefix_extractor.get() == nullptr) {
1162
+ expect_total_order = true;
1163
+ }
1164
+
1165
+ std::string upper_bound_str;
1166
+ Slice upper_bound;
1167
+ if (thread->rand.OneIn(16)) {
1168
+ // With a 1/16 chance, set an iterator upper bound.
1169
+ // Note: upper_bound can be smaller than the seek key.
1170
+ const int64_t rand_upper_key = GenerateOneKey(thread, FLAGS_ops_per_thread);
1171
+ upper_bound_str = Key(rand_upper_key);
1172
+ upper_bound = Slice(upper_bound_str);
1173
+ ro.iterate_upper_bound = &upper_bound;
1174
+ }
1175
+ std::string lower_bound_str;
1176
+ Slice lower_bound;
1177
+ if (thread->rand.OneIn(16)) {
1178
+ // With a 1/16 chance, enable iterator lower bound.
1179
+ // Note: lower_bound can be greater than the seek key.
1180
+ const int64_t rand_lower_key = GenerateOneKey(thread, FLAGS_ops_per_thread);
1181
+ lower_bound_str = Key(rand_lower_key);
1182
+ lower_bound = Slice(lower_bound_str);
1183
+ ro.iterate_lower_bound = &lower_bound;
1184
+ }
1185
+
1186
+ ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
1187
+ assert(cfh);
1188
+
1189
+ std::unique_ptr<Iterator> iter(db_->NewIterator(ro, cfh));
1190
+
1191
+ std::vector<std::string> key_strs;
1192
+ if (thread->rand.OneIn(16)) {
1193
+ // Generate keys close to lower or upper bound of SST files.
1194
+ key_strs = GetWhiteBoxKeys(thread, db_, cfh, rand_keys.size());
1195
+ }
1196
+ if (key_strs.empty()) {
1197
+ // Use the random keys passed in.
1198
+ for (int64_t rkey : rand_keys) {
1199
+ key_strs.push_back(Key(rkey));
1200
+ }
1201
+ }
1202
+
1203
+ std::string op_logs;
1204
+ constexpr size_t kOpLogsLimit = 10000;
1205
+
1206
+ for (const std::string& key_str : key_strs) {
1207
+ if (op_logs.size() > kOpLogsLimit) {
1208
+ // Shouldn't take too much memory for the history log. Clear it.
1209
+ op_logs = "(cleared...)\n";
1210
+ }
1211
+
1212
+ if (ro.iterate_upper_bound != nullptr && thread->rand.OneIn(2)) {
1213
+ // With a 1/2 chance, change the upper bound.
1214
+ // It is possible that it is changed before first use, but there is no
1215
+ // problem with that.
1216
+ const int64_t rand_upper_key =
1217
+ GenerateOneKey(thread, FLAGS_ops_per_thread);
1218
+ upper_bound_str = Key(rand_upper_key);
1219
+ upper_bound = Slice(upper_bound_str);
1220
+ }
1221
+ if (ro.iterate_lower_bound != nullptr && thread->rand.OneIn(4)) {
1222
+ // With a 1/4 chance, change the lower bound.
1223
+ // It is possible that it is changed before first use, but there is no
1224
+ // problem with that.
1225
+ const int64_t rand_lower_key =
1226
+ GenerateOneKey(thread, FLAGS_ops_per_thread);
1227
+ lower_bound_str = Key(rand_lower_key);
1228
+ lower_bound = Slice(lower_bound_str);
1229
+ }
1230
+
1231
+ // Record some options to op_logs
1232
+ op_logs += "total_order_seek: ";
1233
+ op_logs += (ro.total_order_seek ? "1 " : "0 ");
1234
+ op_logs += "auto_prefix_mode: ";
1235
+ op_logs += (ro.auto_prefix_mode ? "1 " : "0 ");
1236
+ if (ro.iterate_upper_bound != nullptr) {
1237
+ op_logs += "ub: " + upper_bound.ToString(true) + " ";
1238
+ }
1239
+ if (ro.iterate_lower_bound != nullptr) {
1240
+ op_logs += "lb: " + lower_bound.ToString(true) + " ";
1241
+ }
1242
+
1243
+ // Set up an iterator, perform the same operations without bounds and with
1244
+ // total order seek, and compare the results. This is to identify bugs
1245
+ // related to bounds, prefix extractor, or reseeking. Sometimes we are
1246
+ // comparing iterators with the same set-up, and it doesn't hurt to check
1247
+ // them to be equal.
1248
+ //
1249
+ // This `ReadOptions` is for validation purposes. Ignore
1250
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
1251
+ ReadOptions cmp_ro;
1252
+ cmp_ro.timestamp = ro.timestamp;
1253
+ cmp_ro.iter_start_ts = ro.iter_start_ts;
1254
+ cmp_ro.snapshot = snapshot_guard.snapshot();
1255
+ cmp_ro.total_order_seek = true;
1256
+
1257
+ ColumnFamilyHandle* const cmp_cfh =
1258
+ GetControlCfh(thread, rand_column_families[0]);
1259
+ assert(cmp_cfh);
1260
+
1261
+ std::unique_ptr<Iterator> cmp_iter(db_->NewIterator(cmp_ro, cmp_cfh));
1262
+
1263
+ bool diverged = false;
1264
+
1265
+ Slice key(key_str);
1266
+
1267
+ const bool support_seek_first_or_last = expect_total_order;
1268
+
1269
+ LastIterateOp last_op;
1270
+ if (support_seek_first_or_last && thread->rand.OneIn(100)) {
1271
+ iter->SeekToFirst();
1272
+ cmp_iter->SeekToFirst();
1273
+ last_op = kLastOpSeekToFirst;
1274
+ op_logs += "STF ";
1275
+ } else if (support_seek_first_or_last && thread->rand.OneIn(100)) {
1276
+ iter->SeekToLast();
1277
+ cmp_iter->SeekToLast();
1278
+ last_op = kLastOpSeekToLast;
1279
+ op_logs += "STL ";
1280
+ } else if (thread->rand.OneIn(8)) {
1281
+ iter->SeekForPrev(key);
1282
+ cmp_iter->SeekForPrev(key);
1283
+ last_op = kLastOpSeekForPrev;
1284
+ op_logs += "SFP " + key.ToString(true) + " ";
1285
+ } else {
1286
+ iter->Seek(key);
1287
+ cmp_iter->Seek(key);
1288
+ last_op = kLastOpSeek;
1289
+ op_logs += "S " + key.ToString(true) + " ";
1290
+ }
1291
+
1292
+ VerifyIterator(thread, cmp_cfh, ro, iter.get(), cmp_iter.get(), last_op,
1293
+ key, op_logs, &diverged);
1294
+
1295
+ const bool no_reverse =
1296
+ (FLAGS_memtablerep == "prefix_hash" && !expect_total_order);
1297
+ for (uint64_t i = 0; i < FLAGS_num_iterations && iter->Valid(); ++i) {
1298
+ if (no_reverse || thread->rand.OneIn(2)) {
1299
+ iter->Next();
1300
+ if (!diverged) {
1301
+ assert(cmp_iter->Valid());
1302
+ cmp_iter->Next();
1303
+ }
1304
+ op_logs += "N";
1305
+ } else {
1306
+ iter->Prev();
1307
+ if (!diverged) {
1308
+ assert(cmp_iter->Valid());
1309
+ cmp_iter->Prev();
1310
+ }
1311
+ op_logs += "P";
1312
+ }
1313
+
1314
+ last_op = kLastOpNextOrPrev;
1315
+
1316
+ VerifyIterator(thread, cmp_cfh, ro, iter.get(), cmp_iter.get(), last_op,
1317
+ key, op_logs, &diverged);
1318
+ }
1319
+
1320
+ thread->stats.AddIterations(1);
1321
+
1322
+ op_logs += "; ";
1323
+ }
1324
+
1325
+ return Status::OK();
1326
+ }
1327
+
1328
+ // Test the return status of GetLiveFiles.
1329
+ Status StressTest::VerifyGetLiveFiles() const {
1330
+ std::vector<std::string> live_file;
1331
+ uint64_t manifest_size = 0;
1332
+ return db_->GetLiveFiles(live_file, &manifest_size);
1333
+ }
1334
+
1335
+ // Test the return status of GetSortedWalFiles.
1336
+ Status StressTest::VerifyGetSortedWalFiles() const {
1337
+ VectorLogPtr log_ptr;
1338
+ return db_->GetSortedWalFiles(log_ptr);
1339
+ }
1340
+
1341
+ // Test the return status of GetCurrentWalFile.
1342
+ Status StressTest::VerifyGetCurrentWalFile() const {
1343
+ std::unique_ptr<LogFile> cur_wal_file;
1344
+ return db_->GetCurrentWalFile(&cur_wal_file);
1345
+ }
1346
+
1347
+ // Compare the two iterator, iter and cmp_iter are in the same position,
1348
+ // unless iter might be made invalidate or undefined because of
1349
+ // upper or lower bounds, or prefix extractor.
1350
+ // Will flag failure if the verification fails.
1351
+ // diverged = true if the two iterator is already diverged.
1352
+ // True if verification passed, false if not.
1353
+ void StressTest::VerifyIterator(ThreadState* thread,
1354
+ ColumnFamilyHandle* cmp_cfh,
1355
+ const ReadOptions& ro, Iterator* iter,
1356
+ Iterator* cmp_iter, LastIterateOp op,
1357
+ const Slice& seek_key,
1358
+ const std::string& op_logs, bool* diverged) {
1359
+ assert(diverged);
1360
+
1361
+ if (*diverged) {
1362
+ return;
1363
+ }
1364
+
1365
+ if (ro.iter_start_ts != nullptr) {
1366
+ assert(FLAGS_user_timestamp_size > 0);
1367
+ // We currently do not verify iterator when dumping history of internal
1368
+ // keys.
1369
+ *diverged = true;
1370
+ return;
1371
+ }
1372
+
1373
+ if (op == kLastOpSeekToFirst && ro.iterate_lower_bound != nullptr) {
1374
+ // SeekToFirst() with lower bound is not well defined.
1375
+ *diverged = true;
1376
+ return;
1377
+ } else if (op == kLastOpSeekToLast && ro.iterate_upper_bound != nullptr) {
1378
+ // SeekToLast() with higher bound is not well defined.
1379
+ *diverged = true;
1380
+ return;
1381
+ } else if (op == kLastOpSeek && ro.iterate_lower_bound != nullptr &&
1382
+ (options_.comparator->CompareWithoutTimestamp(
1383
+ *ro.iterate_lower_bound, /*a_has_ts=*/false, seek_key,
1384
+ /*b_has_ts=*/false) >= 0 ||
1385
+ (ro.iterate_upper_bound != nullptr &&
1386
+ options_.comparator->CompareWithoutTimestamp(
1387
+ *ro.iterate_lower_bound, /*a_has_ts=*/false,
1388
+ *ro.iterate_upper_bound, /*b_has_ts*/ false) >= 0))) {
1389
+ // Lower bound behavior is not well defined if it is larger than
1390
+ // seek key or upper bound. Disable the check for now.
1391
+ *diverged = true;
1392
+ return;
1393
+ } else if (op == kLastOpSeekForPrev && ro.iterate_upper_bound != nullptr &&
1394
+ (options_.comparator->CompareWithoutTimestamp(
1395
+ *ro.iterate_upper_bound, /*a_has_ts=*/false, seek_key,
1396
+ /*b_has_ts=*/false) <= 0 ||
1397
+ (ro.iterate_lower_bound != nullptr &&
1398
+ options_.comparator->CompareWithoutTimestamp(
1399
+ *ro.iterate_lower_bound, /*a_has_ts=*/false,
1400
+ *ro.iterate_upper_bound, /*b_has_ts=*/false) >= 0))) {
1401
+ // Uppder bound behavior is not well defined if it is smaller than
1402
+ // seek key or lower bound. Disable the check for now.
1403
+ *diverged = true;
1404
+ return;
1405
+ }
1406
+
1407
+ const SliceTransform* pe = (ro.total_order_seek || ro.auto_prefix_mode)
1408
+ ? nullptr
1409
+ : options_.prefix_extractor.get();
1410
+ const Comparator* cmp = options_.comparator;
1411
+
1412
+ if (iter->Valid() && !cmp_iter->Valid()) {
1413
+ if (pe != nullptr) {
1414
+ if (!pe->InDomain(seek_key)) {
1415
+ // Prefix seek a non-in-domain key is undefined. Skip checking for
1416
+ // this scenario.
1417
+ *diverged = true;
1418
+ return;
1419
+ } else if (!pe->InDomain(iter->key())) {
1420
+ // out of range is iterator key is not in domain anymore.
1421
+ *diverged = true;
1422
+ return;
1423
+ } else if (pe->Transform(iter->key()) != pe->Transform(seek_key)) {
1424
+ *diverged = true;
1425
+ return;
1426
+ }
1427
+ }
1428
+ fprintf(stderr,
1429
+ "Control interator is invalid but iterator has key %s "
1430
+ "%s\n",
1431
+ iter->key().ToString(true).c_str(), op_logs.c_str());
1432
+
1433
+ *diverged = true;
1434
+ } else if (cmp_iter->Valid()) {
1435
+ // Iterator is not valid. It can be legimate if it has already been
1436
+ // out of upper or lower bound, or filtered out by prefix iterator.
1437
+ const Slice& total_order_key = cmp_iter->key();
1438
+
1439
+ if (pe != nullptr) {
1440
+ if (!pe->InDomain(seek_key)) {
1441
+ // Prefix seek a non-in-domain key is undefined. Skip checking for
1442
+ // this scenario.
1443
+ *diverged = true;
1444
+ return;
1445
+ }
1446
+
1447
+ if (!pe->InDomain(total_order_key) ||
1448
+ pe->Transform(total_order_key) != pe->Transform(seek_key)) {
1449
+ // If the prefix is exhausted, the only thing needs to check
1450
+ // is the iterator isn't return a position in prefix.
1451
+ // Either way, checking can stop from here.
1452
+ *diverged = true;
1453
+ if (!iter->Valid() || !pe->InDomain(iter->key()) ||
1454
+ pe->Transform(iter->key()) != pe->Transform(seek_key)) {
1455
+ return;
1456
+ }
1457
+ fprintf(stderr,
1458
+ "Iterator stays in prefix but contol doesn't"
1459
+ " iterator key %s control iterator key %s %s\n",
1460
+ iter->key().ToString(true).c_str(),
1461
+ cmp_iter->key().ToString(true).c_str(), op_logs.c_str());
1462
+ }
1463
+ }
1464
+ // Check upper or lower bounds.
1465
+ if (!*diverged) {
1466
+ if ((iter->Valid() && iter->key() != cmp_iter->key()) ||
1467
+ (!iter->Valid() &&
1468
+ (ro.iterate_upper_bound == nullptr ||
1469
+ cmp->CompareWithoutTimestamp(total_order_key, /*a_has_ts=*/false,
1470
+ *ro.iterate_upper_bound,
1471
+ /*b_has_ts=*/false) < 0) &&
1472
+ (ro.iterate_lower_bound == nullptr ||
1473
+ cmp->CompareWithoutTimestamp(total_order_key, /*a_has_ts=*/false,
1474
+ *ro.iterate_lower_bound,
1475
+ /*b_has_ts=*/false) > 0))) {
1476
+ fprintf(stderr,
1477
+ "Iterator diverged from control iterator which"
1478
+ " has value %s %s\n",
1479
+ total_order_key.ToString(true).c_str(), op_logs.c_str());
1480
+ if (iter->Valid()) {
1481
+ fprintf(stderr, "iterator has value %s\n",
1482
+ iter->key().ToString(true).c_str());
1483
+ } else {
1484
+ fprintf(stderr, "iterator is not valid\n");
1485
+ }
1486
+ *diverged = true;
1487
+ }
1488
+ }
1489
+ }
1490
+
1491
+ if (!*diverged && iter->Valid()) {
1492
+ if (!VerifyWideColumns(iter->value(), iter->columns())) {
1493
+ fprintf(stderr,
1494
+ "Value and columns inconsistent for iterator: value: %s, "
1495
+ "columns: %s\n",
1496
+ iter->value().ToString(/* hex */ true).c_str(),
1497
+ WideColumnsToHex(iter->columns()).c_str());
1498
+
1499
+ *diverged = true;
1500
+ }
1501
+ }
1502
+
1503
+ if (*diverged) {
1504
+ fprintf(stderr, "Control CF %s\n", cmp_cfh->GetName().c_str());
1505
+ thread->stats.AddErrors(1);
1506
+ // Fail fast to preserve the DB state.
1507
+ thread->shared->SetVerificationFailure();
1508
+ }
1509
+ }
1510
+
1511
+ Status StressTest::TestBackupRestore(
1512
+ ThreadState* thread, const std::vector<int>& rand_column_families,
1513
+ const std::vector<int64_t>& rand_keys) {
1514
+ std::vector<std::unique_ptr<MutexLock>> locks;
1515
+ if (ShouldAcquireMutexOnKey()) {
1516
+ for (int rand_column_family : rand_column_families) {
1517
+ // `rand_keys[0]` on each chosen CF will be verified.
1518
+ locks.emplace_back(new MutexLock(
1519
+ thread->shared->GetMutexForKey(rand_column_family, rand_keys[0])));
1520
+ }
1521
+ }
1522
+
1523
+ const std::string backup_dir =
1524
+ FLAGS_db + "/.backup" + std::to_string(thread->tid);
1525
+ const std::string restore_dir =
1526
+ FLAGS_db + "/.restore" + std::to_string(thread->tid);
1527
+ BackupEngineOptions backup_opts(backup_dir);
1528
+ // For debugging, get info_log from live options
1529
+ backup_opts.info_log = db_->GetDBOptions().info_log.get();
1530
+ if (thread->rand.OneIn(10)) {
1531
+ backup_opts.share_table_files = false;
1532
+ } else {
1533
+ backup_opts.share_table_files = true;
1534
+ if (thread->rand.OneIn(5)) {
1535
+ backup_opts.share_files_with_checksum = false;
1536
+ } else {
1537
+ backup_opts.share_files_with_checksum = true;
1538
+ if (thread->rand.OneIn(2)) {
1539
+ // old
1540
+ backup_opts.share_files_with_checksum_naming =
1541
+ BackupEngineOptions::kLegacyCrc32cAndFileSize;
1542
+ } else {
1543
+ // new
1544
+ backup_opts.share_files_with_checksum_naming =
1545
+ BackupEngineOptions::kUseDbSessionId;
1546
+ }
1547
+ if (thread->rand.OneIn(2)) {
1548
+ backup_opts.share_files_with_checksum_naming =
1549
+ backup_opts.share_files_with_checksum_naming |
1550
+ BackupEngineOptions::kFlagIncludeFileSize;
1551
+ }
1552
+ }
1553
+ }
1554
+ if (thread->rand.OneIn(2)) {
1555
+ backup_opts.schema_version = 1;
1556
+ } else {
1557
+ backup_opts.schema_version = 2;
1558
+ }
1559
+ BackupEngine* backup_engine = nullptr;
1560
+ std::string from = "a backup/restore operation";
1561
+ Status s = BackupEngine::Open(db_stress_env, backup_opts, &backup_engine);
1562
+ if (!s.ok()) {
1563
+ from = "BackupEngine::Open";
1564
+ }
1565
+ if (s.ok()) {
1566
+ if (backup_opts.schema_version >= 2 && thread->rand.OneIn(2)) {
1567
+ TEST_BackupMetaSchemaOptions test_opts;
1568
+ test_opts.crc32c_checksums = thread->rand.OneIn(2) == 0;
1569
+ test_opts.file_sizes = thread->rand.OneIn(2) == 0;
1570
+ TEST_SetBackupMetaSchemaOptions(backup_engine, test_opts);
1571
+ }
1572
+ CreateBackupOptions create_opts;
1573
+ if (FLAGS_disable_wal) {
1574
+ // The verification can only work when latest value of `key` is backed up,
1575
+ // which requires flushing in case of WAL disabled.
1576
+ //
1577
+ // Note this triggers a flush with a key lock held. Meanwhile, operations
1578
+ // like flush/compaction may attempt to grab key locks like in
1579
+ // `DbStressCompactionFilter`. The philosophy around preventing deadlock
1580
+ // is the background operation key lock acquisition only tries but does
1581
+ // not wait for the lock. So here in the foreground it is OK to hold the
1582
+ // lock and wait on a background operation (flush).
1583
+ create_opts.flush_before_backup = true;
1584
+ }
1585
+ s = backup_engine->CreateNewBackup(create_opts, db_);
1586
+ if (!s.ok()) {
1587
+ from = "BackupEngine::CreateNewBackup";
1588
+ }
1589
+ }
1590
+ if (s.ok()) {
1591
+ delete backup_engine;
1592
+ backup_engine = nullptr;
1593
+ s = BackupEngine::Open(db_stress_env, backup_opts, &backup_engine);
1594
+ if (!s.ok()) {
1595
+ from = "BackupEngine::Open (again)";
1596
+ }
1597
+ }
1598
+ std::vector<BackupInfo> backup_info;
1599
+ // If inplace_not_restore, we verify the backup by opening it as a
1600
+ // read-only DB. If !inplace_not_restore, we restore it to a temporary
1601
+ // directory for verification.
1602
+ bool inplace_not_restore = thread->rand.OneIn(3);
1603
+ if (s.ok()) {
1604
+ backup_engine->GetBackupInfo(&backup_info,
1605
+ /*include_file_details*/ inplace_not_restore);
1606
+ if (backup_info.empty()) {
1607
+ s = Status::NotFound("no backups found");
1608
+ from = "BackupEngine::GetBackupInfo";
1609
+ }
1610
+ }
1611
+ if (s.ok() && thread->rand.OneIn(2)) {
1612
+ s = backup_engine->VerifyBackup(
1613
+ backup_info.front().backup_id,
1614
+ thread->rand.OneIn(2) /* verify_with_checksum */);
1615
+ if (!s.ok()) {
1616
+ from = "BackupEngine::VerifyBackup";
1617
+ }
1618
+ }
1619
+ const bool allow_persistent = thread->tid == 0; // not too many
1620
+ bool from_latest = false;
1621
+ int count = static_cast<int>(backup_info.size());
1622
+ if (s.ok() && !inplace_not_restore) {
1623
+ if (count > 1) {
1624
+ s = backup_engine->RestoreDBFromBackup(
1625
+ RestoreOptions(), backup_info[thread->rand.Uniform(count)].backup_id,
1626
+ restore_dir /* db_dir */, restore_dir /* wal_dir */);
1627
+ if (!s.ok()) {
1628
+ from = "BackupEngine::RestoreDBFromBackup";
1629
+ }
1630
+ } else {
1631
+ from_latest = true;
1632
+ s = backup_engine->RestoreDBFromLatestBackup(RestoreOptions(),
1633
+ restore_dir /* db_dir */,
1634
+ restore_dir /* wal_dir */);
1635
+ if (!s.ok()) {
1636
+ from = "BackupEngine::RestoreDBFromLatestBackup";
1637
+ }
1638
+ }
1639
+ }
1640
+ if (s.ok() && !inplace_not_restore) {
1641
+ // Purge early if restoring, to ensure the restored directory doesn't
1642
+ // have some secret dependency on the backup directory.
1643
+ uint32_t to_keep = 0;
1644
+ if (allow_persistent) {
1645
+ // allow one thread to keep up to 2 backups
1646
+ to_keep = thread->rand.Uniform(3);
1647
+ }
1648
+ s = backup_engine->PurgeOldBackups(to_keep);
1649
+ if (!s.ok()) {
1650
+ from = "BackupEngine::PurgeOldBackups";
1651
+ }
1652
+ }
1653
+ DB* restored_db = nullptr;
1654
+ std::vector<ColumnFamilyHandle*> restored_cf_handles;
1655
+ // Not yet implemented: opening restored BlobDB or TransactionDB
1656
+ if (s.ok() && !FLAGS_use_txn && !FLAGS_use_blob_db) {
1657
+ Options restore_options(options_);
1658
+ restore_options.best_efforts_recovery = false;
1659
+ restore_options.listeners.clear();
1660
+ // Avoid dangling/shared file descriptors, for reliable destroy
1661
+ restore_options.sst_file_manager = nullptr;
1662
+ std::vector<ColumnFamilyDescriptor> cf_descriptors;
1663
+ // TODO(ajkr): `column_family_names_` is not safe to access here when
1664
+ // `clear_column_family_one_in != 0`. But we can't easily switch to
1665
+ // `ListColumnFamilies` to get names because it won't necessarily give
1666
+ // the same order as `column_family_names_`.
1667
+ assert(FLAGS_clear_column_family_one_in == 0);
1668
+ for (auto name : column_family_names_) {
1669
+ cf_descriptors.emplace_back(name, ColumnFamilyOptions(restore_options));
1670
+ }
1671
+ if (inplace_not_restore) {
1672
+ BackupInfo& info = backup_info[thread->rand.Uniform(count)];
1673
+ restore_options.env = info.env_for_open.get();
1674
+ s = DB::OpenForReadOnly(DBOptions(restore_options), info.name_for_open,
1675
+ cf_descriptors, &restored_cf_handles,
1676
+ &restored_db);
1677
+ if (!s.ok()) {
1678
+ from = "DB::OpenForReadOnly in backup/restore";
1679
+ }
1680
+ } else {
1681
+ s = DB::Open(DBOptions(restore_options), restore_dir, cf_descriptors,
1682
+ &restored_cf_handles, &restored_db);
1683
+ if (!s.ok()) {
1684
+ from = "DB::Open in backup/restore";
1685
+ }
1686
+ }
1687
+ }
1688
+ // Note the column families chosen by `rand_column_families` cannot be
1689
+ // dropped while the locks for `rand_keys` are held. So we should not have
1690
+ // to worry about accessing those column families throughout this function.
1691
+ //
1692
+ // For simplicity, currently only verifies existence/non-existence of a
1693
+ // single key
1694
+ for (size_t i = 0; restored_db && s.ok() && i < rand_column_families.size();
1695
+ ++i) {
1696
+ std::string key_str = Key(rand_keys[0]);
1697
+ Slice key = key_str;
1698
+ std::string restored_value;
1699
+ // This `ReadOptions` is for validation purposes. Ignore
1700
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
1701
+ ReadOptions read_opts;
1702
+ std::string ts_str;
1703
+ Slice ts;
1704
+ if (FLAGS_user_timestamp_size > 0) {
1705
+ ts_str = GetNowNanos();
1706
+ ts = ts_str;
1707
+ read_opts.timestamp = &ts;
1708
+ }
1709
+ Status get_status = restored_db->Get(
1710
+ read_opts, restored_cf_handles[rand_column_families[i]], key,
1711
+ &restored_value);
1712
+ bool exists = thread->shared->Exists(rand_column_families[i], rand_keys[0]);
1713
+ if (get_status.ok()) {
1714
+ if (!exists && from_latest && ShouldAcquireMutexOnKey()) {
1715
+ std::ostringstream oss;
1716
+ oss << "0x" << key.ToString(true)
1717
+ << " exists in restore but not in original db";
1718
+ s = Status::Corruption(oss.str());
1719
+ }
1720
+ } else if (get_status.IsNotFound()) {
1721
+ if (exists && from_latest && ShouldAcquireMutexOnKey()) {
1722
+ std::ostringstream oss;
1723
+ oss << "0x" << key.ToString(true)
1724
+ << " exists in original db but not in restore";
1725
+ s = Status::Corruption(oss.str());
1726
+ }
1727
+ } else {
1728
+ s = get_status;
1729
+ if (!s.ok()) {
1730
+ from = "DB::Get in backup/restore";
1731
+ }
1732
+ }
1733
+ }
1734
+ if (restored_db != nullptr) {
1735
+ for (auto* cf_handle : restored_cf_handles) {
1736
+ restored_db->DestroyColumnFamilyHandle(cf_handle);
1737
+ }
1738
+ delete restored_db;
1739
+ restored_db = nullptr;
1740
+ }
1741
+ if (s.ok() && inplace_not_restore) {
1742
+ // Purge late if inplace open read-only
1743
+ uint32_t to_keep = 0;
1744
+ if (allow_persistent) {
1745
+ // allow one thread to keep up to 2 backups
1746
+ to_keep = thread->rand.Uniform(3);
1747
+ }
1748
+ s = backup_engine->PurgeOldBackups(to_keep);
1749
+ if (!s.ok()) {
1750
+ from = "BackupEngine::PurgeOldBackups";
1751
+ }
1752
+ }
1753
+ if (backup_engine != nullptr) {
1754
+ delete backup_engine;
1755
+ backup_engine = nullptr;
1756
+ }
1757
+ if (s.ok()) {
1758
+ // Preserve directories on failure, or allowed persistent backup
1759
+ if (!allow_persistent) {
1760
+ s = DestroyDir(db_stress_env, backup_dir);
1761
+ if (!s.ok()) {
1762
+ from = "Destroy backup dir";
1763
+ }
1764
+ }
1765
+ }
1766
+ if (s.ok()) {
1767
+ s = DestroyDir(db_stress_env, restore_dir);
1768
+ if (!s.ok()) {
1769
+ from = "Destroy restore dir";
1770
+ }
1771
+ }
1772
+ if (!s.ok()) {
1773
+ fprintf(stderr, "Failure in %s with: %s\n", from.c_str(),
1774
+ s.ToString().c_str());
1775
+ }
1776
+ return s;
1777
+ }
1778
+
1779
+ Status StressTest::TestApproximateSize(
1780
+ ThreadState* thread, uint64_t iteration,
1781
+ const std::vector<int>& rand_column_families,
1782
+ const std::vector<int64_t>& rand_keys) {
1783
+ // rand_keys likely only has one key. Just use the first one.
1784
+ assert(!rand_keys.empty());
1785
+ assert(!rand_column_families.empty());
1786
+ int64_t key1 = rand_keys[0];
1787
+ int64_t key2;
1788
+ if (thread->rand.OneIn(2)) {
1789
+ // Two totally random keys. This tends to cover large ranges.
1790
+ key2 = GenerateOneKey(thread, iteration);
1791
+ if (key2 < key1) {
1792
+ std::swap(key1, key2);
1793
+ }
1794
+ } else {
1795
+ // Unless users pass a very large FLAGS_max_key, it we should not worry
1796
+ // about overflow. It is for testing, so we skip the overflow checking
1797
+ // for simplicity.
1798
+ key2 = key1 + static_cast<int64_t>(thread->rand.Uniform(1000));
1799
+ }
1800
+ std::string key1_str = Key(key1);
1801
+ std::string key2_str = Key(key2);
1802
+ Range range{Slice(key1_str), Slice(key2_str)};
1803
+ SizeApproximationOptions sao;
1804
+ sao.include_memtables = thread->rand.OneIn(2);
1805
+ if (sao.include_memtables) {
1806
+ sao.include_files = thread->rand.OneIn(2);
1807
+ }
1808
+ if (thread->rand.OneIn(2)) {
1809
+ if (thread->rand.OneIn(2)) {
1810
+ sao.files_size_error_margin = 0.0;
1811
+ } else {
1812
+ sao.files_size_error_margin =
1813
+ static_cast<double>(thread->rand.Uniform(3));
1814
+ }
1815
+ }
1816
+ uint64_t result;
1817
+ return db_->GetApproximateSizes(
1818
+ sao, column_families_[rand_column_families[0]], &range, 1, &result);
1819
+ }
1820
+
1821
+ Status StressTest::TestCheckpoint(ThreadState* thread,
1822
+ const std::vector<int>& rand_column_families,
1823
+ const std::vector<int64_t>& rand_keys) {
1824
+ std::vector<std::unique_ptr<MutexLock>> locks;
1825
+ if (ShouldAcquireMutexOnKey()) {
1826
+ for (int rand_column_family : rand_column_families) {
1827
+ // `rand_keys[0]` on each chosen CF will be verified.
1828
+ locks.emplace_back(new MutexLock(
1829
+ thread->shared->GetMutexForKey(rand_column_family, rand_keys[0])));
1830
+ }
1831
+ }
1832
+
1833
+ std::string checkpoint_dir =
1834
+ FLAGS_db + "/.checkpoint" + std::to_string(thread->tid);
1835
+ Options tmp_opts(options_);
1836
+ tmp_opts.listeners.clear();
1837
+ tmp_opts.env = db_stress_env;
1838
+ // Avoid delayed deletion so whole directory can be deleted
1839
+ tmp_opts.sst_file_manager.reset();
1840
+
1841
+ DestroyDB(checkpoint_dir, tmp_opts);
1842
+
1843
+ Checkpoint* checkpoint = nullptr;
1844
+ Status s = Checkpoint::Create(db_, &checkpoint);
1845
+ if (s.ok()) {
1846
+ s = checkpoint->CreateCheckpoint(checkpoint_dir);
1847
+ if (!s.ok()) {
1848
+ fprintf(stderr, "Fail to create checkpoint to %s\n",
1849
+ checkpoint_dir.c_str());
1850
+ std::vector<std::string> files;
1851
+ Status my_s = db_stress_env->GetChildren(checkpoint_dir, &files);
1852
+ if (my_s.ok()) {
1853
+ for (const auto& f : files) {
1854
+ fprintf(stderr, " %s\n", f.c_str());
1855
+ }
1856
+ } else {
1857
+ fprintf(stderr, "Fail to get files under the directory to %s\n",
1858
+ my_s.ToString().c_str());
1859
+ }
1860
+ }
1861
+ }
1862
+ delete checkpoint;
1863
+ checkpoint = nullptr;
1864
+ std::vector<ColumnFamilyHandle*> cf_handles;
1865
+ DB* checkpoint_db = nullptr;
1866
+ if (s.ok()) {
1867
+ Options options(options_);
1868
+ options.best_efforts_recovery = false;
1869
+ options.listeners.clear();
1870
+ // Avoid race condition in trash handling after delete checkpoint_db
1871
+ options.sst_file_manager.reset();
1872
+ std::vector<ColumnFamilyDescriptor> cf_descs;
1873
+ // TODO(ajkr): `column_family_names_` is not safe to access here when
1874
+ // `clear_column_family_one_in != 0`. But we can't easily switch to
1875
+ // `ListColumnFamilies` to get names because it won't necessarily give
1876
+ // the same order as `column_family_names_`.
1877
+ assert(FLAGS_clear_column_family_one_in == 0);
1878
+ if (FLAGS_clear_column_family_one_in == 0) {
1879
+ for (const auto& name : column_family_names_) {
1880
+ cf_descs.emplace_back(name, ColumnFamilyOptions(options));
1881
+ }
1882
+ s = DB::OpenForReadOnly(DBOptions(options), checkpoint_dir, cf_descs,
1883
+ &cf_handles, &checkpoint_db);
1884
+ }
1885
+ }
1886
+ if (checkpoint_db != nullptr) {
1887
+ // Note the column families chosen by `rand_column_families` cannot be
1888
+ // dropped while the locks for `rand_keys` are held. So we should not have
1889
+ // to worry about accessing those column families throughout this function.
1890
+ for (size_t i = 0; s.ok() && i < rand_column_families.size(); ++i) {
1891
+ std::string key_str = Key(rand_keys[0]);
1892
+ Slice key = key_str;
1893
+ std::string ts_str;
1894
+ Slice ts;
1895
+ ReadOptions read_opts;
1896
+ if (FLAGS_user_timestamp_size > 0) {
1897
+ ts_str = GetNowNanos();
1898
+ ts = ts_str;
1899
+ read_opts.timestamp = &ts;
1900
+ }
1901
+ std::string value;
1902
+ Status get_status = checkpoint_db->Get(
1903
+ read_opts, cf_handles[rand_column_families[i]], key, &value);
1904
+ bool exists =
1905
+ thread->shared->Exists(rand_column_families[i], rand_keys[0]);
1906
+ if (get_status.ok()) {
1907
+ if (!exists && ShouldAcquireMutexOnKey()) {
1908
+ std::ostringstream oss;
1909
+ oss << "0x" << key.ToString(true) << " exists in checkpoint "
1910
+ << checkpoint_dir << " but not in original db";
1911
+ s = Status::Corruption(oss.str());
1912
+ }
1913
+ } else if (get_status.IsNotFound()) {
1914
+ if (exists && ShouldAcquireMutexOnKey()) {
1915
+ std::ostringstream oss;
1916
+ oss << "0x" << key.ToString(true)
1917
+ << " exists in original db but not in checkpoint "
1918
+ << checkpoint_dir;
1919
+ s = Status::Corruption(oss.str());
1920
+ }
1921
+ } else {
1922
+ s = get_status;
1923
+ }
1924
+ }
1925
+ for (auto cfh : cf_handles) {
1926
+ delete cfh;
1927
+ }
1928
+ cf_handles.clear();
1929
+ delete checkpoint_db;
1930
+ checkpoint_db = nullptr;
1931
+ }
1932
+
1933
+ if (!s.ok()) {
1934
+ fprintf(stderr, "A checkpoint operation failed with: %s\n",
1935
+ s.ToString().c_str());
1936
+ } else {
1937
+ DestroyDB(checkpoint_dir, tmp_opts);
1938
+ }
1939
+ return s;
1940
+ }
1941
+
1942
+ void StressTest::TestGetProperty(ThreadState* thread) const {
1943
+ std::unordered_set<std::string> levelPropertyNames = {
1944
+ DB::Properties::kAggregatedTablePropertiesAtLevel,
1945
+ DB::Properties::kCompressionRatioAtLevelPrefix,
1946
+ DB::Properties::kNumFilesAtLevelPrefix,
1947
+ };
1948
+ std::unordered_set<std::string> unknownPropertyNames = {
1949
+ DB::Properties::kEstimateOldestKeyTime,
1950
+ DB::Properties::kOptionsStatistics,
1951
+ DB::Properties::
1952
+ kLiveSstFilesSizeAtTemperature, // similar to levelPropertyNames, it
1953
+ // requires a number suffix
1954
+ };
1955
+ unknownPropertyNames.insert(levelPropertyNames.begin(),
1956
+ levelPropertyNames.end());
1957
+
1958
+ std::unordered_set<std::string> blobCachePropertyNames = {
1959
+ DB::Properties::kBlobCacheCapacity,
1960
+ DB::Properties::kBlobCacheUsage,
1961
+ DB::Properties::kBlobCachePinnedUsage,
1962
+ };
1963
+ if (db_->GetOptions().blob_cache == nullptr) {
1964
+ unknownPropertyNames.insert(blobCachePropertyNames.begin(),
1965
+ blobCachePropertyNames.end());
1966
+ }
1967
+
1968
+ std::string prop;
1969
+ for (const auto& ppt_name_and_info : InternalStats::ppt_name_to_info) {
1970
+ bool res = db_->GetProperty(ppt_name_and_info.first, &prop);
1971
+ if (unknownPropertyNames.find(ppt_name_and_info.first) ==
1972
+ unknownPropertyNames.end()) {
1973
+ if (!res) {
1974
+ fprintf(stderr, "Failed to get DB property: %s\n",
1975
+ ppt_name_and_info.first.c_str());
1976
+ thread->shared->SetVerificationFailure();
1977
+ }
1978
+ if (ppt_name_and_info.second.handle_int != nullptr) {
1979
+ uint64_t prop_int;
1980
+ if (!db_->GetIntProperty(ppt_name_and_info.first, &prop_int)) {
1981
+ fprintf(stderr, "Failed to get Int property: %s\n",
1982
+ ppt_name_and_info.first.c_str());
1983
+ thread->shared->SetVerificationFailure();
1984
+ }
1985
+ }
1986
+ if (ppt_name_and_info.second.handle_map != nullptr) {
1987
+ std::map<std::string, std::string> prop_map;
1988
+ if (!db_->GetMapProperty(ppt_name_and_info.first, &prop_map)) {
1989
+ fprintf(stderr, "Failed to get Map property: %s\n",
1990
+ ppt_name_and_info.first.c_str());
1991
+ thread->shared->SetVerificationFailure();
1992
+ }
1993
+ }
1994
+ }
1995
+ }
1996
+
1997
+ ROCKSDB_NAMESPACE::ColumnFamilyMetaData cf_meta_data;
1998
+ db_->GetColumnFamilyMetaData(&cf_meta_data);
1999
+ int level_size = static_cast<int>(cf_meta_data.levels.size());
2000
+ for (int level = 0; level < level_size; level++) {
2001
+ for (const auto& ppt_name : levelPropertyNames) {
2002
+ bool res = db_->GetProperty(ppt_name + std::to_string(level), &prop);
2003
+ if (!res) {
2004
+ fprintf(stderr, "Failed to get DB property: %s\n",
2005
+ (ppt_name + std::to_string(level)).c_str());
2006
+ thread->shared->SetVerificationFailure();
2007
+ }
2008
+ }
2009
+ }
2010
+
2011
+ // Test for an invalid property name
2012
+ if (thread->rand.OneIn(100)) {
2013
+ if (db_->GetProperty("rocksdb.invalid_property_name", &prop)) {
2014
+ fprintf(stderr, "Failed to return false for invalid property name\n");
2015
+ thread->shared->SetVerificationFailure();
2016
+ }
2017
+ }
2018
+ }
2019
+
2020
+ void StressTest::TestCompactFiles(ThreadState* thread,
2021
+ ColumnFamilyHandle* column_family) {
2022
+ ROCKSDB_NAMESPACE::ColumnFamilyMetaData cf_meta_data;
2023
+ db_->GetColumnFamilyMetaData(column_family, &cf_meta_data);
2024
+
2025
+ if (cf_meta_data.levels.empty()) {
2026
+ return;
2027
+ }
2028
+
2029
+ // Randomly compact up to three consecutive files from a level
2030
+ const int kMaxRetry = 3;
2031
+ for (int attempt = 0; attempt < kMaxRetry; ++attempt) {
2032
+ size_t random_level =
2033
+ thread->rand.Uniform(static_cast<int>(cf_meta_data.levels.size()));
2034
+
2035
+ const auto& files = cf_meta_data.levels[random_level].files;
2036
+ if (files.size() > 0) {
2037
+ size_t random_file_index =
2038
+ thread->rand.Uniform(static_cast<int>(files.size()));
2039
+ if (files[random_file_index].being_compacted) {
2040
+ // Retry as the selected file is currently being compacted
2041
+ continue;
2042
+ }
2043
+
2044
+ std::vector<std::string> input_files;
2045
+ input_files.push_back(files[random_file_index].name);
2046
+ if (random_file_index > 0 &&
2047
+ !files[random_file_index - 1].being_compacted) {
2048
+ input_files.push_back(files[random_file_index - 1].name);
2049
+ }
2050
+ if (random_file_index + 1 < files.size() &&
2051
+ !files[random_file_index + 1].being_compacted) {
2052
+ input_files.push_back(files[random_file_index + 1].name);
2053
+ }
2054
+
2055
+ size_t output_level =
2056
+ std::min(random_level + 1, cf_meta_data.levels.size() - 1);
2057
+ auto s = db_->CompactFiles(CompactionOptions(), column_family,
2058
+ input_files, static_cast<int>(output_level));
2059
+ if (!s.ok()) {
2060
+ fprintf(stdout, "Unable to perform CompactFiles(): %s\n",
2061
+ s.ToString().c_str());
2062
+ thread->stats.AddNumCompactFilesFailed(1);
2063
+ } else {
2064
+ thread->stats.AddNumCompactFilesSucceed(1);
2065
+ }
2066
+ break;
2067
+ }
2068
+ }
2069
+ }
2070
+
2071
+ Status StressTest::TestFlush(const std::vector<int>& rand_column_families) {
2072
+ FlushOptions flush_opts;
2073
+ if (FLAGS_atomic_flush) {
2074
+ return db_->Flush(flush_opts, column_families_);
2075
+ }
2076
+ std::vector<ColumnFamilyHandle*> cfhs;
2077
+ std::for_each(rand_column_families.begin(), rand_column_families.end(),
2078
+ [this, &cfhs](int k) { cfhs.push_back(column_families_[k]); });
2079
+ return db_->Flush(flush_opts, cfhs);
2080
+ }
2081
+
2082
+ Status StressTest::TestPauseBackground(ThreadState* thread) {
2083
+ Status status = db_->PauseBackgroundWork();
2084
+ if (!status.ok()) {
2085
+ return status;
2086
+ }
2087
+ // To avoid stalling/deadlocking ourself in this thread, just
2088
+ // sleep here during pause and let other threads do db operations.
2089
+ // Sleep up to ~16 seconds (2**24 microseconds), but very skewed
2090
+ // toward short pause. (1 chance in 25 of pausing >= 1s;
2091
+ // 1 chance in 625 of pausing full 16s.)
2092
+ int pwr2_micros =
2093
+ std::min(thread->rand.Uniform(25), thread->rand.Uniform(25));
2094
+ clock_->SleepForMicroseconds(1 << pwr2_micros);
2095
+ return db_->ContinueBackgroundWork();
2096
+ }
2097
+
2098
+ void StressTest::TestAcquireSnapshot(ThreadState* thread,
2099
+ int rand_column_family,
2100
+ const std::string& keystr, uint64_t i) {
2101
+ Slice key = keystr;
2102
+ ColumnFamilyHandle* column_family = column_families_[rand_column_family];
2103
+ // This `ReadOptions` is for validation purposes. Ignore
2104
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
2105
+ ReadOptions ropt;
2106
+ auto db_impl = static_cast_with_check<DBImpl>(db_->GetRootDB());
2107
+ const bool ww_snapshot = thread->rand.OneIn(10);
2108
+ const Snapshot* snapshot =
2109
+ ww_snapshot ? db_impl->GetSnapshotForWriteConflictBoundary()
2110
+ : db_->GetSnapshot();
2111
+ ropt.snapshot = snapshot;
2112
+
2113
+ // Ideally, we want snapshot taking and timestamp generation to be atomic
2114
+ // here, so that the snapshot corresponds to the timestamp. However, it is
2115
+ // not possible with current GetSnapshot() API.
2116
+ std::string ts_str;
2117
+ Slice ts;
2118
+ if (FLAGS_user_timestamp_size > 0) {
2119
+ ts_str = GetNowNanos();
2120
+ ts = ts_str;
2121
+ ropt.timestamp = &ts;
2122
+ }
2123
+
2124
+ std::string value_at;
2125
+ // When taking a snapshot, we also read a key from that snapshot. We
2126
+ // will later read the same key before releasing the snapshot and
2127
+ // verify that the results are the same.
2128
+ auto status_at = db_->Get(ropt, column_family, key, &value_at);
2129
+ std::vector<bool>* key_vec = nullptr;
2130
+
2131
+ if (FLAGS_compare_full_db_state_snapshot && (thread->tid == 0)) {
2132
+ key_vec = new std::vector<bool>(FLAGS_max_key);
2133
+ // When `prefix_extractor` is set, seeking to beginning and scanning
2134
+ // across prefixes are only supported with `total_order_seek` set.
2135
+ ropt.total_order_seek = true;
2136
+ std::unique_ptr<Iterator> iterator(db_->NewIterator(ropt));
2137
+ for (iterator->SeekToFirst(); iterator->Valid(); iterator->Next()) {
2138
+ uint64_t key_val;
2139
+ if (GetIntVal(iterator->key().ToString(), &key_val)) {
2140
+ (*key_vec)[key_val] = true;
2141
+ }
2142
+ }
2143
+ }
2144
+
2145
+ ThreadState::SnapshotState snap_state = {snapshot,
2146
+ rand_column_family,
2147
+ column_family->GetName(),
2148
+ keystr,
2149
+ status_at,
2150
+ value_at,
2151
+ key_vec,
2152
+ ts_str};
2153
+ uint64_t hold_for = FLAGS_snapshot_hold_ops;
2154
+ if (FLAGS_long_running_snapshots) {
2155
+ // Hold 10% of snapshots for 10x more
2156
+ if (thread->rand.OneIn(10)) {
2157
+ assert(hold_for < std::numeric_limits<uint64_t>::max() / 10);
2158
+ hold_for *= 10;
2159
+ // Hold 1% of snapshots for 100x more
2160
+ if (thread->rand.OneIn(10)) {
2161
+ assert(hold_for < std::numeric_limits<uint64_t>::max() / 10);
2162
+ hold_for *= 10;
2163
+ }
2164
+ }
2165
+ }
2166
+ uint64_t release_at = std::min(FLAGS_ops_per_thread - 1, i + hold_for);
2167
+ thread->snapshot_queue.emplace(release_at, snap_state);
2168
+ }
2169
+
2170
+ Status StressTest::MaybeReleaseSnapshots(ThreadState* thread, uint64_t i) {
2171
+ while (!thread->snapshot_queue.empty() &&
2172
+ i >= thread->snapshot_queue.front().first) {
2173
+ auto snap_state = thread->snapshot_queue.front().second;
2174
+ assert(snap_state.snapshot);
2175
+ // Note: this is unsafe as the cf might be dropped concurrently. But
2176
+ // it is ok since unclean cf drop is cunnrently not supported by write
2177
+ // prepared transactions.
2178
+ Status s = AssertSame(db_, column_families_[snap_state.cf_at], snap_state);
2179
+ db_->ReleaseSnapshot(snap_state.snapshot);
2180
+ delete snap_state.key_vec;
2181
+ thread->snapshot_queue.pop();
2182
+ if (!s.ok()) {
2183
+ return s;
2184
+ }
2185
+ }
2186
+ return Status::OK();
2187
+ }
2188
+
2189
+ void StressTest::TestCompactRange(ThreadState* thread, int64_t rand_key,
2190
+ const Slice& start_key,
2191
+ ColumnFamilyHandle* column_family) {
2192
+ int64_t end_key_num;
2193
+ if (std::numeric_limits<int64_t>::max() - rand_key <
2194
+ FLAGS_compact_range_width) {
2195
+ end_key_num = std::numeric_limits<int64_t>::max();
2196
+ } else {
2197
+ end_key_num = FLAGS_compact_range_width + rand_key;
2198
+ }
2199
+ std::string end_key_buf = Key(end_key_num);
2200
+ Slice end_key(end_key_buf);
2201
+
2202
+ CompactRangeOptions cro;
2203
+ cro.exclusive_manual_compaction = static_cast<bool>(thread->rand.Next() % 2);
2204
+ cro.change_level = static_cast<bool>(thread->rand.Next() % 2);
2205
+ std::vector<BottommostLevelCompaction> bottom_level_styles = {
2206
+ BottommostLevelCompaction::kSkip,
2207
+ BottommostLevelCompaction::kIfHaveCompactionFilter,
2208
+ BottommostLevelCompaction::kForce,
2209
+ BottommostLevelCompaction::kForceOptimized};
2210
+ cro.bottommost_level_compaction =
2211
+ bottom_level_styles[thread->rand.Next() %
2212
+ static_cast<uint32_t>(bottom_level_styles.size())];
2213
+ cro.allow_write_stall = static_cast<bool>(thread->rand.Next() % 2);
2214
+ cro.max_subcompactions = static_cast<uint32_t>(thread->rand.Next() % 4);
2215
+ std::vector<BlobGarbageCollectionPolicy> blob_gc_policies = {
2216
+ BlobGarbageCollectionPolicy::kForce,
2217
+ BlobGarbageCollectionPolicy::kDisable,
2218
+ BlobGarbageCollectionPolicy::kUseDefault};
2219
+ cro.blob_garbage_collection_policy =
2220
+ blob_gc_policies[thread->rand.Next() %
2221
+ static_cast<uint32_t>(blob_gc_policies.size())];
2222
+ cro.blob_garbage_collection_age_cutoff =
2223
+ static_cast<double>(thread->rand.Next() % 100) / 100.0;
2224
+
2225
+ const Snapshot* pre_snapshot = nullptr;
2226
+ uint32_t pre_hash = 0;
2227
+ if (thread->rand.OneIn(2)) {
2228
+ // Do some validation by declaring a snapshot and compare the data before
2229
+ // and after the compaction
2230
+ pre_snapshot = db_->GetSnapshot();
2231
+ pre_hash =
2232
+ GetRangeHash(thread, pre_snapshot, column_family, start_key, end_key);
2233
+ }
2234
+
2235
+ Status status = db_->CompactRange(cro, column_family, &start_key, &end_key);
2236
+
2237
+ if (!status.ok()) {
2238
+ fprintf(stdout, "Unable to perform CompactRange(): %s\n",
2239
+ status.ToString().c_str());
2240
+ }
2241
+
2242
+ if (pre_snapshot != nullptr) {
2243
+ uint32_t post_hash =
2244
+ GetRangeHash(thread, pre_snapshot, column_family, start_key, end_key);
2245
+ if (pre_hash != post_hash) {
2246
+ fprintf(stderr,
2247
+ "Data hash different before and after compact range "
2248
+ "start_key %s end_key %s\n",
2249
+ start_key.ToString(true).c_str(), end_key.ToString(true).c_str());
2250
+ thread->stats.AddErrors(1);
2251
+ // Fail fast to preserve the DB state.
2252
+ thread->shared->SetVerificationFailure();
2253
+ }
2254
+ db_->ReleaseSnapshot(pre_snapshot);
2255
+ }
2256
+ }
2257
+
2258
+ uint32_t StressTest::GetRangeHash(ThreadState* thread, const Snapshot* snapshot,
2259
+ ColumnFamilyHandle* column_family,
2260
+ const Slice& start_key,
2261
+ const Slice& end_key) {
2262
+ // This `ReadOptions` is for validation purposes. Ignore
2263
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
2264
+ ReadOptions ro;
2265
+ ro.snapshot = snapshot;
2266
+ ro.total_order_seek = true;
2267
+ std::string ts_str;
2268
+ Slice ts;
2269
+ if (FLAGS_user_timestamp_size > 0) {
2270
+ ts_str = GetNowNanos();
2271
+ ts = ts_str;
2272
+ ro.timestamp = &ts;
2273
+ }
2274
+
2275
+ std::unique_ptr<Iterator> it(db_->NewIterator(ro, column_family));
2276
+
2277
+ constexpr char kCrcCalculatorSepearator = ';';
2278
+
2279
+ uint32_t crc = 0;
2280
+
2281
+ for (it->Seek(start_key);
2282
+ it->Valid() && options_.comparator->Compare(it->key(), end_key) <= 0;
2283
+ it->Next()) {
2284
+ crc = crc32c::Extend(crc, it->key().data(), it->key().size());
2285
+ crc = crc32c::Extend(crc, &kCrcCalculatorSepearator, sizeof(char));
2286
+ crc = crc32c::Extend(crc, it->value().data(), it->value().size());
2287
+ crc = crc32c::Extend(crc, &kCrcCalculatorSepearator, sizeof(char));
2288
+
2289
+ for (const auto& column : it->columns()) {
2290
+ crc = crc32c::Extend(crc, column.name().data(), column.name().size());
2291
+ crc = crc32c::Extend(crc, &kCrcCalculatorSepearator, sizeof(char));
2292
+ crc = crc32c::Extend(crc, column.value().data(), column.value().size());
2293
+ crc = crc32c::Extend(crc, &kCrcCalculatorSepearator, sizeof(char));
2294
+ }
2295
+ }
2296
+
2297
+ if (!it->status().ok()) {
2298
+ fprintf(stderr, "Iterator non-OK when calculating range CRC: %s\n",
2299
+ it->status().ToString().c_str());
2300
+ thread->stats.AddErrors(1);
2301
+ // Fail fast to preserve the DB state.
2302
+ thread->shared->SetVerificationFailure();
2303
+ }
2304
+
2305
+ return crc;
2306
+ }
2307
+
2308
+ void StressTest::PrintEnv() const {
2309
+ fprintf(stdout, "RocksDB version : %d.%d\n", kMajorVersion,
2310
+ kMinorVersion);
2311
+ fprintf(stdout, "Format version : %d\n", FLAGS_format_version);
2312
+ fprintf(stdout, "TransactionDB : %s\n",
2313
+ FLAGS_use_txn ? "true" : "false");
2314
+
2315
+ if (FLAGS_use_txn) {
2316
+ fprintf(stdout, "Two write queues: : %s\n",
2317
+ FLAGS_two_write_queues ? "true" : "false");
2318
+ fprintf(stdout, "Write policy : %d\n",
2319
+ static_cast<int>(FLAGS_txn_write_policy));
2320
+ if (static_cast<uint64_t>(TxnDBWritePolicy::WRITE_PREPARED) ==
2321
+ FLAGS_txn_write_policy ||
2322
+ static_cast<uint64_t>(TxnDBWritePolicy::WRITE_UNPREPARED) ==
2323
+ FLAGS_txn_write_policy) {
2324
+ fprintf(stdout, "Snapshot cache bits : %d\n",
2325
+ static_cast<int>(FLAGS_wp_snapshot_cache_bits));
2326
+ fprintf(stdout, "Commit cache bits : %d\n",
2327
+ static_cast<int>(FLAGS_wp_commit_cache_bits));
2328
+ }
2329
+ fprintf(stdout, "last cwb for recovery : %s\n",
2330
+ FLAGS_use_only_the_last_commit_time_batch_for_recovery ? "true"
2331
+ : "false");
2332
+ }
2333
+
2334
+ fprintf(stdout, "Stacked BlobDB : %s\n",
2335
+ FLAGS_use_blob_db ? "true" : "false");
2336
+ fprintf(stdout, "Read only mode : %s\n",
2337
+ FLAGS_read_only ? "true" : "false");
2338
+ fprintf(stdout, "Atomic flush : %s\n",
2339
+ FLAGS_atomic_flush ? "true" : "false");
2340
+ fprintf(stdout, "Manual WAL flush : %s\n",
2341
+ FLAGS_manual_wal_flush_one_in > 0 ? "true" : "false");
2342
+ fprintf(stdout, "Column families : %d\n", FLAGS_column_families);
2343
+ if (!FLAGS_test_batches_snapshots) {
2344
+ fprintf(stdout, "Clear CFs one in : %d\n",
2345
+ FLAGS_clear_column_family_one_in);
2346
+ }
2347
+ fprintf(stdout, "Number of threads : %d\n", FLAGS_threads);
2348
+ fprintf(stdout, "Ops per thread : %lu\n",
2349
+ (unsigned long)FLAGS_ops_per_thread);
2350
+ std::string ttl_state("unused");
2351
+ if (FLAGS_ttl > 0) {
2352
+ ttl_state = std::to_string(FLAGS_ttl);
2353
+ }
2354
+ fprintf(stdout, "Time to live(sec) : %s\n", ttl_state.c_str());
2355
+ fprintf(stdout, "Read percentage : %d%%\n", FLAGS_readpercent);
2356
+ fprintf(stdout, "Prefix percentage : %d%%\n", FLAGS_prefixpercent);
2357
+ fprintf(stdout, "Write percentage : %d%%\n", FLAGS_writepercent);
2358
+ fprintf(stdout, "Delete percentage : %d%%\n", FLAGS_delpercent);
2359
+ fprintf(stdout, "Delete range percentage : %d%%\n", FLAGS_delrangepercent);
2360
+ fprintf(stdout, "No overwrite percentage : %d%%\n",
2361
+ FLAGS_nooverwritepercent);
2362
+ fprintf(stdout, "Iterate percentage : %d%%\n", FLAGS_iterpercent);
2363
+ fprintf(stdout, "Custom ops percentage : %d%%\n", FLAGS_customopspercent);
2364
+ fprintf(stdout, "DB-write-buffer-size : %" PRIu64 "\n",
2365
+ FLAGS_db_write_buffer_size);
2366
+ fprintf(stdout, "Write-buffer-size : %d\n", FLAGS_write_buffer_size);
2367
+ fprintf(stdout, "Iterations : %lu\n",
2368
+ (unsigned long)FLAGS_num_iterations);
2369
+ fprintf(stdout, "Max key : %lu\n",
2370
+ (unsigned long)FLAGS_max_key);
2371
+ fprintf(stdout, "Ratio #ops/#keys : %f\n",
2372
+ (1.0 * FLAGS_ops_per_thread * FLAGS_threads) / FLAGS_max_key);
2373
+ fprintf(stdout, "Num times DB reopens : %d\n", FLAGS_reopen);
2374
+ fprintf(stdout, "Batches/snapshots : %d\n",
2375
+ FLAGS_test_batches_snapshots);
2376
+ fprintf(stdout, "Do update in place : %d\n", FLAGS_in_place_update);
2377
+ fprintf(stdout, "Num keys per lock : %d\n",
2378
+ 1 << FLAGS_log2_keys_per_lock);
2379
+ std::string compression = CompressionTypeToString(compression_type_e);
2380
+ fprintf(stdout, "Compression : %s\n", compression.c_str());
2381
+ std::string bottommost_compression =
2382
+ CompressionTypeToString(bottommost_compression_type_e);
2383
+ fprintf(stdout, "Bottommost Compression : %s\n",
2384
+ bottommost_compression.c_str());
2385
+ std::string checksum = ChecksumTypeToString(checksum_type_e);
2386
+ fprintf(stdout, "Checksum type : %s\n", checksum.c_str());
2387
+ fprintf(stdout, "File checksum impl : %s\n",
2388
+ FLAGS_file_checksum_impl.c_str());
2389
+ fprintf(stdout, "Bloom bits / key : %s\n",
2390
+ FormatDoubleParam(FLAGS_bloom_bits).c_str());
2391
+ fprintf(stdout, "Max subcompactions : %" PRIu64 "\n",
2392
+ FLAGS_subcompactions);
2393
+ fprintf(stdout, "Use MultiGet : %s\n",
2394
+ FLAGS_use_multiget ? "true" : "false");
2395
+ fprintf(stdout, "Use GetEntity : %s\n",
2396
+ FLAGS_use_get_entity ? "true" : "false");
2397
+ fprintf(stdout, "Use MultiGetEntity : %s\n",
2398
+ FLAGS_use_multi_get_entity ? "true" : "false");
2399
+
2400
+ const char* memtablerep = "";
2401
+ switch (FLAGS_rep_factory) {
2402
+ case kSkipList:
2403
+ memtablerep = "skip_list";
2404
+ break;
2405
+ case kHashSkipList:
2406
+ memtablerep = "prefix_hash";
2407
+ break;
2408
+ case kVectorRep:
2409
+ memtablerep = "vector";
2410
+ break;
2411
+ }
2412
+
2413
+ fprintf(stdout, "Memtablerep : %s\n", memtablerep);
2414
+
2415
+ #ifndef NDEBUG
2416
+ KillPoint* kp = KillPoint::GetInstance();
2417
+ fprintf(stdout, "Test kill odd : %d\n", kp->rocksdb_kill_odds);
2418
+ if (!kp->rocksdb_kill_exclude_prefixes.empty()) {
2419
+ fprintf(stdout, "Skipping kill points prefixes:\n");
2420
+ for (auto& p : kp->rocksdb_kill_exclude_prefixes) {
2421
+ fprintf(stdout, " %s\n", p.c_str());
2422
+ }
2423
+ }
2424
+ #endif
2425
+ fprintf(stdout, "Periodic Compaction Secs : %" PRIu64 "\n",
2426
+ FLAGS_periodic_compaction_seconds);
2427
+ fprintf(stdout, "Compaction TTL : %" PRIu64 "\n",
2428
+ FLAGS_compaction_ttl);
2429
+ const char* compaction_pri = "";
2430
+ switch (FLAGS_compaction_pri) {
2431
+ case kByCompensatedSize:
2432
+ compaction_pri = "kByCompensatedSize";
2433
+ break;
2434
+ case kOldestLargestSeqFirst:
2435
+ compaction_pri = "kOldestLargestSeqFirst";
2436
+ break;
2437
+ case kOldestSmallestSeqFirst:
2438
+ compaction_pri = "kOldestSmallestSeqFirst";
2439
+ break;
2440
+ case kMinOverlappingRatio:
2441
+ compaction_pri = "kMinOverlappingRatio";
2442
+ break;
2443
+ case kRoundRobin:
2444
+ compaction_pri = "kRoundRobin";
2445
+ break;
2446
+ }
2447
+ fprintf(stdout, "Compaction Pri : %s\n", compaction_pri);
2448
+ fprintf(stdout, "Background Purge : %d\n",
2449
+ static_cast<int>(FLAGS_avoid_unnecessary_blocking_io));
2450
+ fprintf(stdout, "Write DB ID to manifest : %d\n",
2451
+ static_cast<int>(FLAGS_write_dbid_to_manifest));
2452
+ fprintf(stdout, "Max Write Batch Group Size: %" PRIu64 "\n",
2453
+ FLAGS_max_write_batch_group_size_bytes);
2454
+ fprintf(stdout, "Use dynamic level : %d\n",
2455
+ static_cast<int>(FLAGS_level_compaction_dynamic_level_bytes));
2456
+ fprintf(stdout, "Read fault one in : %d\n", FLAGS_read_fault_one_in);
2457
+ fprintf(stdout, "Write fault one in : %d\n", FLAGS_write_fault_one_in);
2458
+ fprintf(stdout, "Open metadata write fault one in:\n");
2459
+ fprintf(stdout, " %d\n",
2460
+ FLAGS_open_metadata_write_fault_one_in);
2461
+ fprintf(stdout, "Sync fault injection : %d\n",
2462
+ FLAGS_sync_fault_injection);
2463
+ fprintf(stdout, "Best efforts recovery : %d\n",
2464
+ static_cast<int>(FLAGS_best_efforts_recovery));
2465
+ fprintf(stdout, "Fail if OPTIONS file error: %d\n",
2466
+ static_cast<int>(FLAGS_fail_if_options_file_error));
2467
+ fprintf(stdout, "User timestamp size bytes : %d\n",
2468
+ static_cast<int>(FLAGS_user_timestamp_size));
2469
+ fprintf(stdout, "WAL compression : %s\n",
2470
+ FLAGS_wal_compression.c_str());
2471
+ fprintf(stdout, "Try verify sst unique id : %d\n",
2472
+ static_cast<int>(FLAGS_verify_sst_unique_id_in_manifest));
2473
+
2474
+ fprintf(stdout, "------------------------------------------------\n");
2475
+ }
2476
+
2477
+ void StressTest::Open(SharedState* shared) {
2478
+ assert(db_ == nullptr);
2479
+ assert(txn_db_ == nullptr);
2480
+ if (!InitializeOptionsFromFile(options_)) {
2481
+ InitializeOptionsFromFlags(cache_, filter_policy_, options_);
2482
+ }
2483
+ InitializeOptionsGeneral(cache_, filter_policy_, options_);
2484
+
2485
+ if (FLAGS_prefix_size == 0 && FLAGS_rep_factory == kHashSkipList) {
2486
+ fprintf(stderr,
2487
+ "prefeix_size cannot be zero if memtablerep == prefix_hash\n");
2488
+ exit(1);
2489
+ }
2490
+ if (FLAGS_prefix_size != 0 && FLAGS_rep_factory != kHashSkipList) {
2491
+ fprintf(stderr,
2492
+ "WARNING: prefix_size is non-zero but "
2493
+ "memtablerep != prefix_hash\n");
2494
+ }
2495
+
2496
+ if ((options_.enable_blob_files || options_.enable_blob_garbage_collection ||
2497
+ FLAGS_allow_setting_blob_options_dynamically) &&
2498
+ FLAGS_best_efforts_recovery) {
2499
+ fprintf(stderr,
2500
+ "Integrated BlobDB is currently incompatible with best-effort "
2501
+ "recovery\n");
2502
+ exit(1);
2503
+ }
2504
+
2505
+ fprintf(stdout,
2506
+ "Integrated BlobDB: blob files enabled %d, min blob size %" PRIu64
2507
+ ", blob file size %" PRIu64
2508
+ ", blob compression type %s, blob GC enabled %d, cutoff %f, force "
2509
+ "threshold %f, blob compaction readahead size %" PRIu64
2510
+ ", blob file starting level %d\n",
2511
+ options_.enable_blob_files, options_.min_blob_size,
2512
+ options_.blob_file_size,
2513
+ CompressionTypeToString(options_.blob_compression_type).c_str(),
2514
+ options_.enable_blob_garbage_collection,
2515
+ options_.blob_garbage_collection_age_cutoff,
2516
+ options_.blob_garbage_collection_force_threshold,
2517
+ options_.blob_compaction_readahead_size,
2518
+ options_.blob_file_starting_level);
2519
+
2520
+ if (FLAGS_use_blob_cache) {
2521
+ fprintf(stdout,
2522
+ "Integrated BlobDB: blob cache enabled"
2523
+ ", block and blob caches shared: %d",
2524
+ FLAGS_use_shared_block_and_blob_cache);
2525
+ if (!FLAGS_use_shared_block_and_blob_cache) {
2526
+ fprintf(stdout,
2527
+ ", blob cache size %" PRIu64 ", blob cache num shard bits: %d",
2528
+ FLAGS_blob_cache_size, FLAGS_blob_cache_numshardbits);
2529
+ }
2530
+ fprintf(stdout, ", blob cache prepopulated: %d\n",
2531
+ FLAGS_prepopulate_blob_cache);
2532
+ } else {
2533
+ fprintf(stdout, "Integrated BlobDB: blob cache disabled\n");
2534
+ }
2535
+
2536
+ fprintf(stdout, "DB path: [%s]\n", FLAGS_db.c_str());
2537
+
2538
+ Status s;
2539
+
2540
+ if (FLAGS_ttl == -1) {
2541
+ std::vector<std::string> existing_column_families;
2542
+ s = DB::ListColumnFamilies(DBOptions(options_), FLAGS_db,
2543
+ &existing_column_families); // ignore errors
2544
+ if (!s.ok()) {
2545
+ // DB doesn't exist
2546
+ assert(existing_column_families.empty());
2547
+ assert(column_family_names_.empty());
2548
+ column_family_names_.push_back(kDefaultColumnFamilyName);
2549
+ } else if (column_family_names_.empty()) {
2550
+ // this is the first call to the function Open()
2551
+ column_family_names_ = existing_column_families;
2552
+ } else {
2553
+ // this is a reopen. just assert that existing column_family_names are
2554
+ // equivalent to what we remember
2555
+ auto sorted_cfn = column_family_names_;
2556
+ std::sort(sorted_cfn.begin(), sorted_cfn.end());
2557
+ std::sort(existing_column_families.begin(),
2558
+ existing_column_families.end());
2559
+ if (sorted_cfn != existing_column_families) {
2560
+ fprintf(stderr, "Expected column families differ from the existing:\n");
2561
+ fprintf(stderr, "Expected: {");
2562
+ for (auto cf : sorted_cfn) {
2563
+ fprintf(stderr, "%s ", cf.c_str());
2564
+ }
2565
+ fprintf(stderr, "}\n");
2566
+ fprintf(stderr, "Existing: {");
2567
+ for (auto cf : existing_column_families) {
2568
+ fprintf(stderr, "%s ", cf.c_str());
2569
+ }
2570
+ fprintf(stderr, "}\n");
2571
+ }
2572
+ assert(sorted_cfn == existing_column_families);
2573
+ }
2574
+ std::vector<ColumnFamilyDescriptor> cf_descriptors;
2575
+ for (auto name : column_family_names_) {
2576
+ if (name != kDefaultColumnFamilyName) {
2577
+ new_column_family_name_ =
2578
+ std::max(new_column_family_name_.load(), std::stoi(name) + 1);
2579
+ }
2580
+ cf_descriptors.emplace_back(name, ColumnFamilyOptions(options_));
2581
+ }
2582
+ while (cf_descriptors.size() < (size_t)FLAGS_column_families) {
2583
+ std::string name = std::to_string(new_column_family_name_.load());
2584
+ new_column_family_name_++;
2585
+ cf_descriptors.emplace_back(name, ColumnFamilyOptions(options_));
2586
+ column_family_names_.push_back(name);
2587
+ }
2588
+
2589
+ options_.listeners.clear();
2590
+ options_.listeners.emplace_back(new DbStressListener(
2591
+ FLAGS_db, options_.db_paths, cf_descriptors, db_stress_listener_env));
2592
+ RegisterAdditionalListeners();
2593
+
2594
+ if (!FLAGS_use_txn) {
2595
+ // Determine whether we need to ingest file metadata write failures
2596
+ // during DB reopen. If it does, enable it.
2597
+ // Only ingest metadata error if it is reopening, as initial open
2598
+ // failure doesn't need to be handled.
2599
+ // TODO cover transaction DB is not covered in this fault test too.
2600
+ bool ingest_meta_error = false;
2601
+ bool ingest_write_error = false;
2602
+ bool ingest_read_error = false;
2603
+ if ((FLAGS_open_metadata_write_fault_one_in ||
2604
+ FLAGS_open_write_fault_one_in || FLAGS_open_read_fault_one_in) &&
2605
+ fault_fs_guard
2606
+ ->FileExists(FLAGS_db + "/CURRENT", IOOptions(), nullptr)
2607
+ .ok()) {
2608
+ if (!FLAGS_sync) {
2609
+ // When DB Stress is not sync mode, we expect all WAL writes to
2610
+ // WAL is durable. Buffering unsynced writes will cause false
2611
+ // positive in crash tests. Before we figure out a way to
2612
+ // solve it, skip WAL from failure injection.
2613
+ fault_fs_guard->SetSkipDirectWritableTypes({kWalFile});
2614
+ }
2615
+ ingest_meta_error = FLAGS_open_metadata_write_fault_one_in;
2616
+ ingest_write_error = FLAGS_open_write_fault_one_in;
2617
+ ingest_read_error = FLAGS_open_read_fault_one_in;
2618
+ if (ingest_meta_error) {
2619
+ fault_fs_guard->EnableMetadataWriteErrorInjection();
2620
+ fault_fs_guard->SetRandomMetadataWriteError(
2621
+ FLAGS_open_metadata_write_fault_one_in);
2622
+ }
2623
+ if (ingest_write_error) {
2624
+ fault_fs_guard->SetFilesystemDirectWritable(false);
2625
+ fault_fs_guard->EnableWriteErrorInjection();
2626
+ fault_fs_guard->SetRandomWriteError(
2627
+ static_cast<uint32_t>(FLAGS_seed), FLAGS_open_write_fault_one_in,
2628
+ IOStatus::IOError("Injected Open Error"),
2629
+ /*inject_for_all_file_types=*/true, /*types=*/{});
2630
+ }
2631
+ if (ingest_read_error) {
2632
+ fault_fs_guard->SetRandomReadError(FLAGS_open_read_fault_one_in);
2633
+ }
2634
+ }
2635
+ while (true) {
2636
+ // StackableDB-based BlobDB
2637
+ if (FLAGS_use_blob_db) {
2638
+ blob_db::BlobDBOptions blob_db_options;
2639
+ blob_db_options.min_blob_size = FLAGS_blob_db_min_blob_size;
2640
+ blob_db_options.bytes_per_sync = FLAGS_blob_db_bytes_per_sync;
2641
+ blob_db_options.blob_file_size = FLAGS_blob_db_file_size;
2642
+ blob_db_options.enable_garbage_collection = FLAGS_blob_db_enable_gc;
2643
+ blob_db_options.garbage_collection_cutoff = FLAGS_blob_db_gc_cutoff;
2644
+
2645
+ blob_db::BlobDB* blob_db = nullptr;
2646
+ s = blob_db::BlobDB::Open(options_, blob_db_options, FLAGS_db,
2647
+ cf_descriptors, &column_families_,
2648
+ &blob_db);
2649
+ if (s.ok()) {
2650
+ db_ = blob_db;
2651
+ }
2652
+ } else
2653
+ {
2654
+ if (db_preload_finished_.load() && FLAGS_read_only) {
2655
+ s = DB::OpenForReadOnly(DBOptions(options_), FLAGS_db,
2656
+ cf_descriptors, &column_families_, &db_);
2657
+ } else {
2658
+ s = DB::Open(DBOptions(options_), FLAGS_db, cf_descriptors,
2659
+ &column_families_, &db_);
2660
+ }
2661
+ }
2662
+
2663
+ if (ingest_meta_error || ingest_write_error || ingest_read_error) {
2664
+ fault_fs_guard->SetFilesystemDirectWritable(true);
2665
+ fault_fs_guard->DisableMetadataWriteErrorInjection();
2666
+ fault_fs_guard->DisableWriteErrorInjection();
2667
+ fault_fs_guard->SetSkipDirectWritableTypes({});
2668
+ fault_fs_guard->SetRandomReadError(0);
2669
+ if (s.ok()) {
2670
+ // Ingested errors might happen in background compactions. We
2671
+ // wait for all compactions to finish to make sure DB is in
2672
+ // clean state before executing queries.
2673
+ s = static_cast_with_check<DBImpl>(db_->GetRootDB())
2674
+ ->WaitForCompact();
2675
+ if (!s.ok()) {
2676
+ for (auto cf : column_families_) {
2677
+ delete cf;
2678
+ }
2679
+ column_families_.clear();
2680
+ delete db_;
2681
+ db_ = nullptr;
2682
+ }
2683
+ }
2684
+ if (!s.ok()) {
2685
+ // After failure to opening a DB due to IO error, retry should
2686
+ // successfully open the DB with correct data if no IO error shows
2687
+ // up.
2688
+ ingest_meta_error = false;
2689
+ ingest_write_error = false;
2690
+ ingest_read_error = false;
2691
+
2692
+ Random rand(static_cast<uint32_t>(FLAGS_seed));
2693
+ if (rand.OneIn(2)) {
2694
+ fault_fs_guard->DeleteFilesCreatedAfterLastDirSync(IOOptions(),
2695
+ nullptr);
2696
+ }
2697
+ if (rand.OneIn(3)) {
2698
+ fault_fs_guard->DropUnsyncedFileData();
2699
+ } else if (rand.OneIn(2)) {
2700
+ fault_fs_guard->DropRandomUnsyncedFileData(&rand);
2701
+ }
2702
+ continue;
2703
+ }
2704
+ }
2705
+ break;
2706
+ }
2707
+ } else {
2708
+ TransactionDBOptions txn_db_options;
2709
+ assert(FLAGS_txn_write_policy <= TxnDBWritePolicy::WRITE_UNPREPARED);
2710
+ txn_db_options.write_policy =
2711
+ static_cast<TxnDBWritePolicy>(FLAGS_txn_write_policy);
2712
+ if (FLAGS_unordered_write) {
2713
+ assert(txn_db_options.write_policy == TxnDBWritePolicy::WRITE_PREPARED);
2714
+ options_.unordered_write = true;
2715
+ options_.two_write_queues = true;
2716
+ txn_db_options.skip_concurrency_control = true;
2717
+ } else {
2718
+ options_.two_write_queues = FLAGS_two_write_queues;
2719
+ }
2720
+ txn_db_options.wp_snapshot_cache_bits =
2721
+ static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
2722
+ txn_db_options.wp_commit_cache_bits =
2723
+ static_cast<size_t>(FLAGS_wp_commit_cache_bits);
2724
+ PrepareTxnDbOptions(shared, txn_db_options);
2725
+ s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
2726
+ cf_descriptors, &column_families_, &txn_db_);
2727
+ if (!s.ok()) {
2728
+ fprintf(stderr, "Error in opening the TransactionDB [%s]\n",
2729
+ s.ToString().c_str());
2730
+ fflush(stderr);
2731
+ }
2732
+ assert(s.ok());
2733
+
2734
+ // Do not swap the order of the following.
2735
+ {
2736
+ db_ = txn_db_;
2737
+ db_aptr_.store(txn_db_, std::memory_order_release);
2738
+ }
2739
+ }
2740
+ if (!s.ok()) {
2741
+ fprintf(stderr, "Error in opening the DB [%s]\n", s.ToString().c_str());
2742
+ fflush(stderr);
2743
+ }
2744
+ assert(s.ok());
2745
+ assert(column_families_.size() ==
2746
+ static_cast<size_t>(FLAGS_column_families));
2747
+
2748
+ // Secondary instance does not support write-prepared/write-unprepared
2749
+ // transactions, thus just disable secondary instance if we use
2750
+ // transaction.
2751
+ if (s.ok() && FLAGS_test_secondary && !FLAGS_use_txn) {
2752
+ Options tmp_opts;
2753
+ // TODO(yanqin) support max_open_files != -1 for secondary instance.
2754
+ tmp_opts.max_open_files = -1;
2755
+ tmp_opts.env = db_stress_env;
2756
+ const std::string& secondary_path = FLAGS_secondaries_base;
2757
+ s = DB::OpenAsSecondary(tmp_opts, FLAGS_db, secondary_path,
2758
+ cf_descriptors, &cmp_cfhs_, &cmp_db_);
2759
+ assert(s.ok());
2760
+ assert(cmp_cfhs_.size() == static_cast<size_t>(FLAGS_column_families));
2761
+ }
2762
+ } else {
2763
+ DBWithTTL* db_with_ttl;
2764
+ s = DBWithTTL::Open(options_, FLAGS_db, &db_with_ttl, FLAGS_ttl);
2765
+ db_ = db_with_ttl;
2766
+ }
2767
+
2768
+ if (FLAGS_preserve_unverified_changes) {
2769
+ // Up until now, no live file should have become obsolete due to these
2770
+ // options. After `DisableFileDeletions()` we can reenable auto compactions
2771
+ // since, even if live files become obsolete, they won't be deleted.
2772
+ assert(options_.avoid_flush_during_recovery);
2773
+ assert(options_.disable_auto_compactions);
2774
+ if (s.ok()) {
2775
+ s = db_->DisableFileDeletions();
2776
+ }
2777
+ if (s.ok()) {
2778
+ s = db_->EnableAutoCompaction(column_families_);
2779
+ }
2780
+ }
2781
+
2782
+ if (!s.ok()) {
2783
+ fprintf(stderr, "open error: %s\n", s.ToString().c_str());
2784
+ exit(1);
2785
+ }
2786
+ }
2787
+
2788
+ void StressTest::Reopen(ThreadState* thread) {
2789
+ // BG jobs in WritePrepared must be canceled first because i) they can access
2790
+ // the db via a callbac ii) they hold on to a snapshot and the upcoming
2791
+ // ::Close would complain about it.
2792
+ const bool write_prepared = FLAGS_use_txn && FLAGS_txn_write_policy != 0;
2793
+ bool bg_canceled __attribute__((unused)) = false;
2794
+ if (write_prepared || thread->rand.OneIn(2)) {
2795
+ const bool wait =
2796
+ write_prepared || static_cast<bool>(thread->rand.OneIn(2));
2797
+ CancelAllBackgroundWork(db_, wait);
2798
+ bg_canceled = wait;
2799
+ }
2800
+ assert(!write_prepared || bg_canceled);
2801
+
2802
+ for (auto cf : column_families_) {
2803
+ delete cf;
2804
+ }
2805
+ column_families_.clear();
2806
+
2807
+ if (thread->rand.OneIn(2)) {
2808
+ Status s = db_->Close();
2809
+ if (!s.ok()) {
2810
+ fprintf(stderr, "Non-ok close status: %s\n", s.ToString().c_str());
2811
+ fflush(stderr);
2812
+ }
2813
+ assert(s.ok());
2814
+ }
2815
+ assert(txn_db_ == nullptr || db_ == txn_db_);
2816
+ delete db_;
2817
+ db_ = nullptr;
2818
+ txn_db_ = nullptr;
2819
+
2820
+ num_times_reopened_++;
2821
+ auto now = clock_->NowMicros();
2822
+ fprintf(stdout, "%s Reopening database for the %dth time\n",
2823
+ clock_->TimeToString(now / 1000000).c_str(), num_times_reopened_);
2824
+ Open(thread->shared);
2825
+
2826
+ if ((FLAGS_sync_fault_injection || FLAGS_disable_wal ||
2827
+ FLAGS_manual_wal_flush_one_in > 0) &&
2828
+ IsStateTracked()) {
2829
+ Status s = thread->shared->SaveAtAndAfter(db_);
2830
+ if (!s.ok()) {
2831
+ fprintf(stderr, "Error enabling history tracing: %s\n",
2832
+ s.ToString().c_str());
2833
+ exit(1);
2834
+ }
2835
+ }
2836
+ }
2837
+
2838
+ bool StressTest::MaybeUseOlderTimestampForPointLookup(ThreadState* thread,
2839
+ std::string& ts_str,
2840
+ Slice& ts_slice,
2841
+ ReadOptions& read_opts) {
2842
+ if (FLAGS_user_timestamp_size == 0) {
2843
+ return false;
2844
+ }
2845
+
2846
+ assert(thread);
2847
+ if (!thread->rand.OneInOpt(3)) {
2848
+ return false;
2849
+ }
2850
+
2851
+ const SharedState* const shared = thread->shared;
2852
+ assert(shared);
2853
+ const uint64_t start_ts = shared->GetStartTimestamp();
2854
+
2855
+ uint64_t now = db_stress_env->NowNanos();
2856
+
2857
+ assert(now > start_ts);
2858
+ uint64_t time_diff = now - start_ts;
2859
+ uint64_t ts = start_ts + (thread->rand.Next64() % time_diff);
2860
+ ts_str.clear();
2861
+ PutFixed64(&ts_str, ts);
2862
+ ts_slice = ts_str;
2863
+ read_opts.timestamp = &ts_slice;
2864
+ return true;
2865
+ }
2866
+
2867
+ void StressTest::MaybeUseOlderTimestampForRangeScan(ThreadState* thread,
2868
+ std::string& ts_str,
2869
+ Slice& ts_slice,
2870
+ ReadOptions& read_opts) {
2871
+ if (FLAGS_user_timestamp_size == 0) {
2872
+ return;
2873
+ }
2874
+
2875
+ assert(thread);
2876
+ if (!thread->rand.OneInOpt(3)) {
2877
+ return;
2878
+ }
2879
+
2880
+ const Slice* const saved_ts = read_opts.timestamp;
2881
+ assert(saved_ts != nullptr);
2882
+
2883
+ const SharedState* const shared = thread->shared;
2884
+ assert(shared);
2885
+ const uint64_t start_ts = shared->GetStartTimestamp();
2886
+
2887
+ uint64_t now = db_stress_env->NowNanos();
2888
+
2889
+ assert(now > start_ts);
2890
+ uint64_t time_diff = now - start_ts;
2891
+ uint64_t ts = start_ts + (thread->rand.Next64() % time_diff);
2892
+ ts_str.clear();
2893
+ PutFixed64(&ts_str, ts);
2894
+ ts_slice = ts_str;
2895
+ read_opts.timestamp = &ts_slice;
2896
+
2897
+ // TODO (yanqin): support Merge with iter_start_ts
2898
+ if (!thread->rand.OneInOpt(3) || FLAGS_use_merge || FLAGS_use_full_merge_v1) {
2899
+ return;
2900
+ }
2901
+
2902
+ ts_str.clear();
2903
+ PutFixed64(&ts_str, start_ts);
2904
+ ts_slice = ts_str;
2905
+ read_opts.iter_start_ts = &ts_slice;
2906
+ read_opts.timestamp = saved_ts;
2907
+ }
2908
+
2909
+ void CheckAndSetOptionsForUserTimestamp(Options& options) {
2910
+ assert(FLAGS_user_timestamp_size > 0);
2911
+ const Comparator* const cmp = test::BytewiseComparatorWithU64TsWrapper();
2912
+ assert(cmp);
2913
+ if (FLAGS_user_timestamp_size != cmp->timestamp_size()) {
2914
+ fprintf(stderr,
2915
+ "Only -user_timestamp_size=%d is supported in stress test.\n",
2916
+ static_cast<int>(cmp->timestamp_size()));
2917
+ exit(1);
2918
+ }
2919
+ if (FLAGS_use_txn) {
2920
+ fprintf(stderr, "TransactionDB does not support timestamp yet.\n");
2921
+ exit(1);
2922
+ }
2923
+ if (FLAGS_test_cf_consistency || FLAGS_test_batches_snapshots) {
2924
+ fprintf(stderr,
2925
+ "Due to per-key ts-seq ordering constraint, only the (default) "
2926
+ "non-batched test is supported with timestamp.\n");
2927
+ exit(1);
2928
+ }
2929
+ if (FLAGS_ingest_external_file_one_in > 0) {
2930
+ fprintf(stderr, "Bulk loading may not support timestamp yet.\n");
2931
+ exit(1);
2932
+ }
2933
+ options.comparator = cmp;
2934
+ }
2935
+
2936
+ bool InitializeOptionsFromFile(Options& options) {
2937
+ DBOptions db_options;
2938
+ ConfigOptions config_options;
2939
+ config_options.ignore_unknown_options = false;
2940
+ config_options.input_strings_escaped = true;
2941
+ config_options.env = db_stress_env;
2942
+ std::vector<ColumnFamilyDescriptor> cf_descriptors;
2943
+ if (!FLAGS_options_file.empty()) {
2944
+ Status s = LoadOptionsFromFile(config_options, FLAGS_options_file,
2945
+ &db_options, &cf_descriptors);
2946
+ if (!s.ok()) {
2947
+ fprintf(stderr, "Unable to load options file %s --- %s\n",
2948
+ FLAGS_options_file.c_str(), s.ToString().c_str());
2949
+ exit(1);
2950
+ }
2951
+ db_options.env = new CompositeEnvWrapper(db_stress_env);
2952
+ options = Options(db_options, cf_descriptors[0].options);
2953
+ return true;
2954
+ }
2955
+ return false;
2956
+ }
2957
+
2958
+ void InitializeOptionsFromFlags(
2959
+ const std::shared_ptr<Cache>& cache,
2960
+ const std::shared_ptr<const FilterPolicy>& filter_policy,
2961
+ Options& options) {
2962
+ BlockBasedTableOptions block_based_options;
2963
+ block_based_options.block_cache = cache;
2964
+ block_based_options.cache_index_and_filter_blocks =
2965
+ FLAGS_cache_index_and_filter_blocks;
2966
+ block_based_options.metadata_cache_options.top_level_index_pinning =
2967
+ static_cast<PinningTier>(FLAGS_top_level_index_pinning);
2968
+ block_based_options.metadata_cache_options.partition_pinning =
2969
+ static_cast<PinningTier>(FLAGS_partition_pinning);
2970
+ block_based_options.metadata_cache_options.unpartitioned_pinning =
2971
+ static_cast<PinningTier>(FLAGS_unpartitioned_pinning);
2972
+ block_based_options.checksum = checksum_type_e;
2973
+ block_based_options.block_size = FLAGS_block_size;
2974
+ block_based_options.cache_usage_options.options_overrides.insert(
2975
+ {CacheEntryRole::kCompressionDictionaryBuildingBuffer,
2976
+ {/*.charged = */ FLAGS_charge_compression_dictionary_building_buffer
2977
+ ? CacheEntryRoleOptions::Decision::kEnabled
2978
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2979
+ block_based_options.cache_usage_options.options_overrides.insert(
2980
+ {CacheEntryRole::kFilterConstruction,
2981
+ {/*.charged = */ FLAGS_charge_filter_construction
2982
+ ? CacheEntryRoleOptions::Decision::kEnabled
2983
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2984
+ block_based_options.cache_usage_options.options_overrides.insert(
2985
+ {CacheEntryRole::kBlockBasedTableReader,
2986
+ {/*.charged = */ FLAGS_charge_table_reader
2987
+ ? CacheEntryRoleOptions::Decision::kEnabled
2988
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2989
+ block_based_options.cache_usage_options.options_overrides.insert(
2990
+ {CacheEntryRole::kFileMetadata,
2991
+ {/*.charged = */ FLAGS_charge_file_metadata
2992
+ ? CacheEntryRoleOptions::Decision::kEnabled
2993
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2994
+ block_based_options.cache_usage_options.options_overrides.insert(
2995
+ {CacheEntryRole::kBlobCache,
2996
+ {/*.charged = */ FLAGS_charge_blob_cache
2997
+ ? CacheEntryRoleOptions::Decision::kEnabled
2998
+ : CacheEntryRoleOptions::Decision::kDisabled}});
2999
+ block_based_options.format_version =
3000
+ static_cast<uint32_t>(FLAGS_format_version);
3001
+ block_based_options.index_block_restart_interval =
3002
+ static_cast<int32_t>(FLAGS_index_block_restart_interval);
3003
+ block_based_options.filter_policy = filter_policy;
3004
+ block_based_options.partition_filters = FLAGS_partition_filters;
3005
+ block_based_options.optimize_filters_for_memory =
3006
+ FLAGS_optimize_filters_for_memory;
3007
+ block_based_options.detect_filter_construct_corruption =
3008
+ FLAGS_detect_filter_construct_corruption;
3009
+ block_based_options.index_type =
3010
+ static_cast<BlockBasedTableOptions::IndexType>(FLAGS_index_type);
3011
+ block_based_options.data_block_index_type =
3012
+ static_cast<BlockBasedTableOptions::DataBlockIndexType>(
3013
+ FLAGS_data_block_index_type);
3014
+ block_based_options.prepopulate_block_cache =
3015
+ static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
3016
+ FLAGS_prepopulate_block_cache);
3017
+ block_based_options.initial_auto_readahead_size =
3018
+ FLAGS_initial_auto_readahead_size;
3019
+ block_based_options.max_auto_readahead_size = FLAGS_max_auto_readahead_size;
3020
+ block_based_options.num_file_reads_for_auto_readahead =
3021
+ FLAGS_num_file_reads_for_auto_readahead;
3022
+ options.table_factory.reset(NewBlockBasedTableFactory(block_based_options));
3023
+ options.db_write_buffer_size = FLAGS_db_write_buffer_size;
3024
+ options.write_buffer_size = FLAGS_write_buffer_size;
3025
+ options.max_write_buffer_number = FLAGS_max_write_buffer_number;
3026
+ options.min_write_buffer_number_to_merge =
3027
+ FLAGS_min_write_buffer_number_to_merge;
3028
+ options.max_write_buffer_number_to_maintain =
3029
+ FLAGS_max_write_buffer_number_to_maintain;
3030
+ options.max_write_buffer_size_to_maintain =
3031
+ FLAGS_max_write_buffer_size_to_maintain;
3032
+ options.memtable_prefix_bloom_size_ratio =
3033
+ FLAGS_memtable_prefix_bloom_size_ratio;
3034
+ options.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
3035
+ options.disable_auto_compactions = FLAGS_disable_auto_compactions;
3036
+ options.max_background_compactions = FLAGS_max_background_compactions;
3037
+ options.max_background_flushes = FLAGS_max_background_flushes;
3038
+ options.compaction_style =
3039
+ static_cast<ROCKSDB_NAMESPACE::CompactionStyle>(FLAGS_compaction_style);
3040
+ if (options.compaction_style ==
3041
+ ROCKSDB_NAMESPACE::CompactionStyle::kCompactionStyleFIFO) {
3042
+ options.compaction_options_fifo.allow_compaction =
3043
+ FLAGS_fifo_allow_compaction;
3044
+ }
3045
+ options.compaction_pri =
3046
+ static_cast<ROCKSDB_NAMESPACE::CompactionPri>(FLAGS_compaction_pri);
3047
+ options.num_levels = FLAGS_num_levels;
3048
+ if (FLAGS_prefix_size >= 0) {
3049
+ options.prefix_extractor.reset(NewFixedPrefixTransform(FLAGS_prefix_size));
3050
+ }
3051
+ options.max_open_files = FLAGS_open_files;
3052
+ options.statistics = dbstats;
3053
+ options.env = db_stress_env;
3054
+ options.use_fsync = FLAGS_use_fsync;
3055
+ options.compaction_readahead_size = FLAGS_compaction_readahead_size;
3056
+ options.allow_mmap_reads = FLAGS_mmap_read;
3057
+ options.allow_mmap_writes = FLAGS_mmap_write;
3058
+ options.use_direct_reads = FLAGS_use_direct_reads;
3059
+ options.use_direct_io_for_flush_and_compaction =
3060
+ FLAGS_use_direct_io_for_flush_and_compaction;
3061
+ options.recycle_log_file_num =
3062
+ static_cast<size_t>(FLAGS_recycle_log_file_num);
3063
+ options.target_file_size_base = FLAGS_target_file_size_base;
3064
+ options.target_file_size_multiplier = FLAGS_target_file_size_multiplier;
3065
+ options.max_bytes_for_level_base = FLAGS_max_bytes_for_level_base;
3066
+ options.max_bytes_for_level_multiplier = FLAGS_max_bytes_for_level_multiplier;
3067
+ options.level0_stop_writes_trigger = FLAGS_level0_stop_writes_trigger;
3068
+ options.level0_slowdown_writes_trigger = FLAGS_level0_slowdown_writes_trigger;
3069
+ options.level0_file_num_compaction_trigger =
3070
+ FLAGS_level0_file_num_compaction_trigger;
3071
+ options.compression = compression_type_e;
3072
+ options.bottommost_compression = bottommost_compression_type_e;
3073
+ options.compression_opts.max_dict_bytes = FLAGS_compression_max_dict_bytes;
3074
+ options.compression_opts.zstd_max_train_bytes =
3075
+ FLAGS_compression_zstd_max_train_bytes;
3076
+ options.compression_opts.parallel_threads =
3077
+ FLAGS_compression_parallel_threads;
3078
+ options.compression_opts.max_dict_buffer_bytes =
3079
+ FLAGS_compression_max_dict_buffer_bytes;
3080
+ if (ZSTD_FinalizeDictionarySupported()) {
3081
+ options.compression_opts.use_zstd_dict_trainer =
3082
+ FLAGS_compression_use_zstd_dict_trainer;
3083
+ } else if (!FLAGS_compression_use_zstd_dict_trainer) {
3084
+ fprintf(
3085
+ stderr,
3086
+ "WARNING: use_zstd_dict_trainer is false but zstd finalizeDictionary "
3087
+ "cannot be used because ZSTD 1.4.5+ is not linked with the binary."
3088
+ " zstd dictionary trainer will be used.\n");
3089
+ }
3090
+ options.max_manifest_file_size = FLAGS_max_manifest_file_size;
3091
+ options.inplace_update_support = FLAGS_in_place_update;
3092
+ options.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
3093
+ options.allow_concurrent_memtable_write =
3094
+ FLAGS_allow_concurrent_memtable_write;
3095
+ options.experimental_mempurge_threshold =
3096
+ FLAGS_experimental_mempurge_threshold;
3097
+ options.periodic_compaction_seconds = FLAGS_periodic_compaction_seconds;
3098
+ options.stats_dump_period_sec =
3099
+ static_cast<unsigned int>(FLAGS_stats_dump_period_sec);
3100
+ options.ttl = FLAGS_compaction_ttl;
3101
+ options.enable_pipelined_write = FLAGS_enable_pipelined_write;
3102
+ options.enable_write_thread_adaptive_yield =
3103
+ FLAGS_enable_write_thread_adaptive_yield;
3104
+ options.compaction_options_universal.size_ratio = FLAGS_universal_size_ratio;
3105
+ options.compaction_options_universal.min_merge_width =
3106
+ FLAGS_universal_min_merge_width;
3107
+ options.compaction_options_universal.max_merge_width =
3108
+ FLAGS_universal_max_merge_width;
3109
+ options.compaction_options_universal.max_size_amplification_percent =
3110
+ FLAGS_universal_max_size_amplification_percent;
3111
+ options.atomic_flush = FLAGS_atomic_flush;
3112
+ options.manual_wal_flush = FLAGS_manual_wal_flush_one_in > 0 ? true : false;
3113
+ options.avoid_unnecessary_blocking_io = FLAGS_avoid_unnecessary_blocking_io;
3114
+ options.write_dbid_to_manifest = FLAGS_write_dbid_to_manifest;
3115
+ options.avoid_flush_during_recovery = FLAGS_avoid_flush_during_recovery;
3116
+ options.max_write_batch_group_size_bytes =
3117
+ FLAGS_max_write_batch_group_size_bytes;
3118
+ options.level_compaction_dynamic_level_bytes =
3119
+ FLAGS_level_compaction_dynamic_level_bytes;
3120
+ options.track_and_verify_wals_in_manifest = true;
3121
+ options.verify_sst_unique_id_in_manifest =
3122
+ FLAGS_verify_sst_unique_id_in_manifest;
3123
+ options.memtable_protection_bytes_per_key =
3124
+ FLAGS_memtable_protection_bytes_per_key;
3125
+ options.block_protection_bytes_per_key = FLAGS_block_protection_bytes_per_key;
3126
+
3127
+ // Integrated BlobDB
3128
+ options.enable_blob_files = FLAGS_enable_blob_files;
3129
+ options.min_blob_size = FLAGS_min_blob_size;
3130
+ options.blob_file_size = FLAGS_blob_file_size;
3131
+ options.blob_compression_type =
3132
+ StringToCompressionType(FLAGS_blob_compression_type.c_str());
3133
+ options.enable_blob_garbage_collection = FLAGS_enable_blob_garbage_collection;
3134
+ options.blob_garbage_collection_age_cutoff =
3135
+ FLAGS_blob_garbage_collection_age_cutoff;
3136
+ options.blob_garbage_collection_force_threshold =
3137
+ FLAGS_blob_garbage_collection_force_threshold;
3138
+ options.blob_compaction_readahead_size = FLAGS_blob_compaction_readahead_size;
3139
+ options.blob_file_starting_level = FLAGS_blob_file_starting_level;
3140
+
3141
+ if (FLAGS_use_blob_cache) {
3142
+ if (FLAGS_use_shared_block_and_blob_cache) {
3143
+ options.blob_cache = cache;
3144
+ } else {
3145
+ if (FLAGS_blob_cache_size > 0) {
3146
+ LRUCacheOptions co;
3147
+ co.capacity = FLAGS_blob_cache_size;
3148
+ co.num_shard_bits = FLAGS_blob_cache_numshardbits;
3149
+ options.blob_cache = NewLRUCache(co);
3150
+ } else {
3151
+ fprintf(stderr,
3152
+ "Unable to create a standalone blob cache if blob_cache_size "
3153
+ "<= 0.\n");
3154
+ exit(1);
3155
+ }
3156
+ }
3157
+ switch (FLAGS_prepopulate_blob_cache) {
3158
+ case 0:
3159
+ options.prepopulate_blob_cache = PrepopulateBlobCache::kDisable;
3160
+ break;
3161
+ case 1:
3162
+ options.prepopulate_blob_cache = PrepopulateBlobCache::kFlushOnly;
3163
+ break;
3164
+ default:
3165
+ fprintf(stderr, "Unknown prepopulate blob cache mode\n");
3166
+ exit(1);
3167
+ }
3168
+ }
3169
+
3170
+ options.wal_compression =
3171
+ StringToCompressionType(FLAGS_wal_compression.c_str());
3172
+
3173
+ if (FLAGS_enable_tiered_storage) {
3174
+ options.bottommost_temperature = Temperature::kCold;
3175
+ }
3176
+ options.preclude_last_level_data_seconds =
3177
+ FLAGS_preclude_last_level_data_seconds;
3178
+ options.preserve_internal_time_seconds = FLAGS_preserve_internal_time_seconds;
3179
+
3180
+ switch (FLAGS_rep_factory) {
3181
+ case kSkipList:
3182
+ // no need to do anything
3183
+ break;
3184
+ case kHashSkipList:
3185
+ options.memtable_factory.reset(NewHashSkipListRepFactory(10000));
3186
+ break;
3187
+ case kVectorRep:
3188
+ options.memtable_factory.reset(new VectorRepFactory());
3189
+ break;
3190
+ }
3191
+ if (FLAGS_use_full_merge_v1) {
3192
+ options.merge_operator = MergeOperators::CreateDeprecatedPutOperator();
3193
+ } else {
3194
+ options.merge_operator = MergeOperators::CreatePutOperator();
3195
+ }
3196
+
3197
+ if (FLAGS_enable_compaction_filter) {
3198
+ options.compaction_filter_factory =
3199
+ std::make_shared<DbStressCompactionFilterFactory>();
3200
+ }
3201
+
3202
+ options.best_efforts_recovery = FLAGS_best_efforts_recovery;
3203
+ options.paranoid_file_checks = FLAGS_paranoid_file_checks;
3204
+ options.fail_if_options_file_error = FLAGS_fail_if_options_file_error;
3205
+
3206
+ if (FLAGS_user_timestamp_size > 0) {
3207
+ CheckAndSetOptionsForUserTimestamp(options);
3208
+ }
3209
+
3210
+ options.allow_data_in_errors = FLAGS_allow_data_in_errors;
3211
+
3212
+ options.enable_thread_tracking = FLAGS_enable_thread_tracking;
3213
+ }
3214
+
3215
+ void InitializeOptionsGeneral(
3216
+ const std::shared_ptr<Cache>& cache,
3217
+ const std::shared_ptr<const FilterPolicy>& filter_policy,
3218
+ Options& options) {
3219
+ options.create_missing_column_families = true;
3220
+ options.create_if_missing = true;
3221
+
3222
+ if (!options.statistics) {
3223
+ options.statistics = dbstats;
3224
+ }
3225
+
3226
+ if (options.env == Options().env) {
3227
+ options.env = db_stress_env;
3228
+ }
3229
+
3230
+ assert(options.table_factory);
3231
+ auto table_options =
3232
+ options.table_factory->GetOptions<BlockBasedTableOptions>();
3233
+ if (table_options) {
3234
+ if (FLAGS_cache_size > 0) {
3235
+ table_options->block_cache = cache;
3236
+ }
3237
+ if (!table_options->filter_policy) {
3238
+ table_options->filter_policy = filter_policy;
3239
+ }
3240
+ }
3241
+
3242
+ // TODO: row_cache, thread-pool IO priority, CPU priority.
3243
+
3244
+ if (!options.rate_limiter) {
3245
+ if (FLAGS_rate_limiter_bytes_per_sec > 0) {
3246
+ options.rate_limiter.reset(NewGenericRateLimiter(
3247
+ FLAGS_rate_limiter_bytes_per_sec, 1000 /* refill_period_us */,
3248
+ 10 /* fairness */,
3249
+ FLAGS_rate_limit_bg_reads ? RateLimiter::Mode::kReadsOnly
3250
+ : RateLimiter::Mode::kWritesOnly));
3251
+ }
3252
+ }
3253
+
3254
+ if (!options.file_checksum_gen_factory) {
3255
+ options.file_checksum_gen_factory =
3256
+ GetFileChecksumImpl(FLAGS_file_checksum_impl);
3257
+ }
3258
+
3259
+ if (FLAGS_sst_file_manager_bytes_per_sec > 0 ||
3260
+ FLAGS_sst_file_manager_bytes_per_truncate > 0) {
3261
+ Status status;
3262
+ options.sst_file_manager.reset(NewSstFileManager(
3263
+ db_stress_env, options.info_log, "" /* trash_dir */,
3264
+ static_cast<int64_t>(FLAGS_sst_file_manager_bytes_per_sec),
3265
+ true /* delete_existing_trash */, &status,
3266
+ 0.25 /* max_trash_db_ratio */,
3267
+ FLAGS_sst_file_manager_bytes_per_truncate));
3268
+ if (!status.ok()) {
3269
+ fprintf(stderr, "SstFileManager creation failed: %s\n",
3270
+ status.ToString().c_str());
3271
+ exit(1);
3272
+ }
3273
+ }
3274
+
3275
+ if (FLAGS_preserve_unverified_changes) {
3276
+ if (!options.avoid_flush_during_recovery) {
3277
+ fprintf(stderr,
3278
+ "WARNING: flipping `avoid_flush_during_recovery` to true for "
3279
+ "`preserve_unverified_changes` to keep all files\n");
3280
+ options.avoid_flush_during_recovery = true;
3281
+ }
3282
+ // Together with `avoid_flush_during_recovery == true`, this will prevent
3283
+ // live files from becoming obsolete and deleted between `DB::Open()` and
3284
+ // `DisableFileDeletions()` due to flush or compaction. We do not need to
3285
+ // warn the user since we will reenable compaction soon.
3286
+ options.disable_auto_compactions = true;
3287
+ }
3288
+
3289
+ options.table_properties_collector_factories.emplace_back(
3290
+ std::make_shared<DbStressTablePropertiesCollectorFactory>());
3291
+ }
3292
+
3293
+ } // namespace ROCKSDB_NAMESPACE
3294
+ #endif // GFLAGS