@nxtedition/rocksdb 5.2.21 → 5.2.26

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 (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -14,31 +14,61 @@
14
14
  #include "db_stress_tool/db_stress_driver.h"
15
15
  #include "db_stress_tool/db_stress_table_properties_collector.h"
16
16
  #include "rocksdb/convenience.h"
17
+ #include "rocksdb/filter_policy.h"
18
+ #include "rocksdb/secondary_cache.h"
17
19
  #include "rocksdb/sst_file_manager.h"
18
20
  #include "rocksdb/types.h"
21
+ #include "rocksdb/utilities/object_registry.h"
22
+ #include "test_util/testutil.h"
19
23
  #include "util/cast_util.h"
24
+ #include "utilities/backup/backup_engine_impl.h"
20
25
  #include "utilities/fault_injection_fs.h"
26
+ #include "utilities/fault_injection_secondary_cache.h"
21
27
 
22
28
  namespace ROCKSDB_NAMESPACE {
29
+
30
+ namespace {
31
+
32
+ std::shared_ptr<const FilterPolicy> CreateFilterPolicy() {
33
+ if (FLAGS_bloom_bits < 0) {
34
+ return BlockBasedTableOptions().filter_policy;
35
+ }
36
+ const FilterPolicy* new_policy;
37
+ if (FLAGS_use_block_based_filter) {
38
+ if (FLAGS_ribbon_starting_level < 999) {
39
+ fprintf(
40
+ stderr,
41
+ "Cannot combine use_block_based_filter and ribbon_starting_level\n");
42
+ exit(1);
43
+ } else {
44
+ new_policy = NewBloomFilterPolicy(FLAGS_bloom_bits, true);
45
+ }
46
+ } else if (FLAGS_ribbon_starting_level >= 999) {
47
+ // Use Bloom API
48
+ new_policy = NewBloomFilterPolicy(FLAGS_bloom_bits, false);
49
+ } else {
50
+ new_policy = NewRibbonFilterPolicy(
51
+ FLAGS_bloom_bits, /* bloom_before_level */ FLAGS_ribbon_starting_level);
52
+ }
53
+ return std::shared_ptr<const FilterPolicy>(new_policy);
54
+ }
55
+
56
+ } // namespace
57
+
23
58
  StressTest::StressTest()
24
- : cache_(NewCache(FLAGS_cache_size)),
59
+ : cache_(NewCache(FLAGS_cache_size, FLAGS_cache_numshardbits)),
25
60
  compressed_cache_(NewLRUCache(FLAGS_compressed_cache_size)),
26
- filter_policy_(
27
- FLAGS_bloom_bits >= 0
28
- ? FLAGS_use_ribbon_filter
29
- ? NewExperimentalRibbonFilterPolicy(FLAGS_bloom_bits)
30
- : FLAGS_use_block_based_filter
31
- ? NewBloomFilterPolicy(FLAGS_bloom_bits, true)
32
- : NewBloomFilterPolicy(FLAGS_bloom_bits, false)
33
- : nullptr),
61
+ filter_policy_(CreateFilterPolicy()),
34
62
  db_(nullptr),
35
63
  #ifndef ROCKSDB_LITE
36
64
  txn_db_(nullptr),
37
65
  #endif
66
+ clock_(db_stress_env->GetSystemClock().get()),
38
67
  new_column_family_name_(1),
39
68
  num_times_reopened_(0),
40
69
  db_preload_finished_(false),
41
- cmp_db_(nullptr) {
70
+ cmp_db_(nullptr),
71
+ is_db_stopped_(false) {
42
72
  if (FLAGS_destroy_db_initially) {
43
73
  std::vector<std::string> files;
44
74
  db_stress_env->GetChildren(FLAGS_db, &files);
@@ -92,7 +122,9 @@ StressTest::~StressTest() {
92
122
  delete cmp_db_;
93
123
  }
94
124
 
95
- std::shared_ptr<Cache> StressTest::NewCache(size_t capacity) {
125
+ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
126
+ int32_t num_shard_bits) {
127
+ ConfigOptions config_options;
96
128
  if (capacity <= 0) {
97
129
  return nullptr;
98
130
  }
@@ -104,8 +136,46 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity) {
104
136
  }
105
137
  return cache;
106
138
  } else {
107
- return NewLRUCache((size_t)capacity);
139
+ LRUCacheOptions opts;
140
+ opts.capacity = capacity;
141
+ opts.num_shard_bits = num_shard_bits;
142
+ #ifndef ROCKSDB_LITE
143
+ std::shared_ptr<SecondaryCache> secondary_cache;
144
+ if (!FLAGS_secondary_cache_uri.empty()) {
145
+ Status s = SecondaryCache::CreateFromString(
146
+ config_options, FLAGS_secondary_cache_uri, &secondary_cache);
147
+ if (secondary_cache == nullptr) {
148
+ fprintf(stderr,
149
+ "No secondary cache registered matching string: %s status=%s\n",
150
+ FLAGS_secondary_cache_uri.c_str(), s.ToString().c_str());
151
+ exit(1);
152
+ }
153
+ if (FLAGS_secondary_cache_fault_one_in > 0) {
154
+ secondary_cache = std::make_shared<FaultInjectionSecondaryCache>(
155
+ secondary_cache, static_cast<uint32_t>(FLAGS_seed),
156
+ FLAGS_secondary_cache_fault_one_in);
157
+ }
158
+ opts.secondary_cache = secondary_cache;
159
+ }
160
+ #endif
161
+ return NewLRUCache(opts);
162
+ }
163
+ }
164
+
165
+ std::vector<std::string> StressTest::GetBlobCompressionTags() {
166
+ std::vector<std::string> compression_tags{"kNoCompression"};
167
+
168
+ if (Snappy_Supported()) {
169
+ compression_tags.emplace_back("kSnappyCompression");
170
+ }
171
+ if (LZ4_Supported()) {
172
+ compression_tags.emplace_back("kLZ4Compression");
108
173
  }
174
+ if (ZSTD_Supported()) {
175
+ compression_tags.emplace_back("kZSTD");
176
+ }
177
+
178
+ return compression_tags;
109
179
  }
110
180
 
111
181
  bool StressTest::BuildOptionsTable() {
@@ -133,8 +203,6 @@ bool StressTest::BuildOptionsTable() {
133
203
  {"inplace_update_num_locks", {"100", "200", "300"}},
134
204
  // TODO(ljin): enable test for this option
135
205
  // {"disable_auto_compactions", {"100", "200", "300"}},
136
- {"soft_rate_limit", {"0", "0.5", "0.9"}},
137
- {"hard_rate_limit", {"0", "1.1", "2.0"}},
138
206
  {"level0_file_num_compaction_trigger",
139
207
  {
140
208
  ToString(options_.level0_file_num_compaction_trigger),
@@ -186,6 +254,25 @@ bool StressTest::BuildOptionsTable() {
186
254
  {"max_sequential_skip_in_iterations", {"4", "8", "12"}},
187
255
  };
188
256
 
257
+ if (FLAGS_allow_setting_blob_options_dynamically) {
258
+ options_tbl.emplace("enable_blob_files",
259
+ std::vector<std::string>{"false", "true"});
260
+ options_tbl.emplace("min_blob_size",
261
+ std::vector<std::string>{"0", "8", "16"});
262
+ options_tbl.emplace("blob_file_size",
263
+ std::vector<std::string>{"1M", "16M", "256M", "1G"});
264
+ options_tbl.emplace("blob_compression_type", GetBlobCompressionTags());
265
+ options_tbl.emplace("enable_blob_garbage_collection",
266
+ std::vector<std::string>{"false", "true"});
267
+ options_tbl.emplace(
268
+ "blob_garbage_collection_age_cutoff",
269
+ std::vector<std::string>{"0.0", "0.25", "0.5", "0.75", "1.0"});
270
+ options_tbl.emplace("blob_garbage_collection_force_threshold",
271
+ std::vector<std::string>{"0.5", "0.75", "1.0"});
272
+ options_tbl.emplace("blob_compaction_readahead_size",
273
+ std::vector<std::string>{"0", "1M", "4M"});
274
+ }
275
+
189
276
  options_table_ = std::move(options_tbl);
190
277
 
191
278
  for (const auto& iter : options_table_) {
@@ -195,9 +282,9 @@ bool StressTest::BuildOptionsTable() {
195
282
  }
196
283
 
197
284
  void StressTest::InitDb() {
198
- uint64_t now = db_stress_env->NowMicros();
285
+ uint64_t now = clock_->NowMicros();
199
286
  fprintf(stdout, "%s Initializing db_stress\n",
200
- db_stress_env->TimeToString(now / 1000000).c_str());
287
+ clock_->TimeToString(now / 1000000).c_str());
201
288
  PrintEnv();
202
289
  Open();
203
290
  BuildOptionsTable();
@@ -205,25 +292,56 @@ void StressTest::InitDb() {
205
292
 
206
293
  void StressTest::FinishInitDb(SharedState* shared) {
207
294
  if (FLAGS_read_only) {
208
- uint64_t now = db_stress_env->NowMicros();
295
+ uint64_t now = clock_->NowMicros();
209
296
  fprintf(stdout, "%s Preloading db with %" PRIu64 " KVs\n",
210
- db_stress_env->TimeToString(now / 1000000).c_str(), FLAGS_max_key);
297
+ clock_->TimeToString(now / 1000000).c_str(), FLAGS_max_key);
211
298
  PreloadDbAndReopenAsReadOnly(FLAGS_max_key, shared);
212
299
  }
300
+
301
+ if (shared->HasHistory()) {
302
+ // The way it works right now is, if there's any history, that means the
303
+ // previous run mutating the DB had all its operations traced, in which case
304
+ // we should always be able to `Restore()` the expected values to match the
305
+ // `db_`'s current seqno.
306
+ Status s = shared->Restore(db_);
307
+ if (!s.ok()) {
308
+ fprintf(stderr, "Error restoring historical expected values: %s\n",
309
+ s.ToString().c_str());
310
+ exit(1);
311
+ }
312
+ }
313
+
213
314
  if (FLAGS_enable_compaction_filter) {
214
- reinterpret_cast<DbStressCompactionFilterFactory*>(
215
- options_.compaction_filter_factory.get())
216
- ->SetSharedState(shared);
315
+ auto* compaction_filter_factory =
316
+ reinterpret_cast<DbStressCompactionFilterFactory*>(
317
+ options_.compaction_filter_factory.get());
318
+ assert(compaction_filter_factory);
319
+ // This must be called only after any potential `SharedState::Restore()` has
320
+ // completed in order for the `compaction_filter_factory` to operate on the
321
+ // correct latest values file.
322
+ compaction_filter_factory->SetSharedState(shared);
323
+ fprintf(stdout, "Compaction filter factory: %s\n",
324
+ compaction_filter_factory->Name());
325
+ }
326
+ }
327
+
328
+ void StressTest::TrackExpectedState(SharedState* shared) {
329
+ if ((FLAGS_sync_fault_injection || FLAGS_disable_wal) && IsStateTracked()) {
330
+ Status s = shared->SaveAtAndAfter(db_);
331
+ if (!s.ok()) {
332
+ fprintf(stderr, "Error enabling history tracing: %s\n",
333
+ s.ToString().c_str());
334
+ exit(1);
335
+ }
217
336
  }
218
337
  }
219
338
 
220
339
  bool StressTest::VerifySecondaries() {
221
340
  #ifndef ROCKSDB_LITE
222
341
  if (FLAGS_test_secondary) {
223
- uint64_t now = db_stress_env->NowMicros();
224
- fprintf(
225
- stdout, "%s Start to verify secondaries against primary\n",
226
- db_stress_env->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
342
+ uint64_t now = clock_->NowMicros();
343
+ fprintf(stdout, "%s Start to verify secondaries against primary\n",
344
+ clock_->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
227
345
  }
228
346
  for (size_t k = 0; k != secondaries_.size(); ++k) {
229
347
  Status s = secondaries_[k]->TryCatchUpWithPrimary();
@@ -231,6 +349,8 @@ bool StressTest::VerifySecondaries() {
231
349
  fprintf(stderr, "Secondary failed to catch up with primary\n");
232
350
  return false;
233
351
  }
352
+ // This `ReadOptions` is for validation purposes. Ignore
353
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
234
354
  ReadOptions ropts;
235
355
  ropts.total_order_seek = true;
236
356
  // Verify only the default column family since the primary may have
@@ -265,10 +385,9 @@ bool StressTest::VerifySecondaries() {
265
385
  }
266
386
  }
267
387
  if (FLAGS_test_secondary) {
268
- uint64_t now = db_stress_env->NowMicros();
269
- fprintf(
270
- stdout, "%s Verification of secondaries succeeded\n",
271
- db_stress_env->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
388
+ uint64_t now = clock_->NowMicros();
389
+ fprintf(stdout, "%s Verification of secondaries succeeded\n",
390
+ clock_->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
272
391
  }
273
392
  #endif // ROCKSDB_LITE
274
393
  return true;
@@ -280,8 +399,15 @@ Status StressTest::AssertSame(DB* db, ColumnFamilyHandle* cf,
280
399
  if (cf->GetName() != snap_state.cf_at_name) {
281
400
  return s;
282
401
  }
402
+ // This `ReadOptions` is for validation purposes. Ignore
403
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
283
404
  ReadOptions ropt;
284
405
  ropt.snapshot = snap_state.snapshot;
406
+ Slice ts;
407
+ if (!snap_state.timestamp.empty()) {
408
+ ts = snap_state.timestamp;
409
+ ropt.timestamp = &ts;
410
+ }
285
411
  PinnableSlice exp_v(&snap_state.value);
286
412
  exp_v.PinSelf();
287
413
  PinnableSlice v;
@@ -359,6 +485,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
359
485
  if (FLAGS_sync) {
360
486
  write_opts.sync = true;
361
487
  }
488
+ if (FLAGS_rate_limit_auto_wal_flush) {
489
+ write_opts.rate_limiter_priority = Env::IO_USER;
490
+ }
362
491
  char value[100];
363
492
  int cf_idx = 0;
364
493
  Status s;
@@ -387,7 +516,15 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
387
516
  }
388
517
  } else {
389
518
  if (!FLAGS_use_txn) {
390
- s = db_->Put(write_opts, cfh, key, v);
519
+ std::string ts_str;
520
+ Slice ts;
521
+ if (FLAGS_user_timestamp_size > 0) {
522
+ ts_str = NowNanosStr();
523
+ ts = ts_str;
524
+ s = db_->Put(write_opts, cfh, key, ts, v);
525
+ } else {
526
+ s = db_->Put(write_opts, cfh, key, v);
527
+ }
391
528
  } else {
392
529
  #ifndef ROCKSDB_LITE
393
530
  Transaction* txn;
@@ -427,9 +564,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
427
564
  #endif
428
565
 
429
566
  db_preload_finished_.store(true);
430
- auto now = db_stress_env->NowMicros();
567
+ auto now = clock_->NowMicros();
431
568
  fprintf(stdout, "%s Reopening database in read-only\n",
432
- db_stress_env->TimeToString(now / 1000000).c_str());
569
+ clock_->TimeToString(now / 1000000).c_str());
433
570
  // Reopen as read-only, can ignore all options related to updates
434
571
  Open();
435
572
  } else {
@@ -444,12 +581,9 @@ Status StressTest::SetOptions(ThreadState* thread) {
444
581
  std::string name =
445
582
  options_index_[thread->rand.Next() % options_index_.size()];
446
583
  int value_idx = thread->rand.Next() % options_table_[name].size();
447
- if (name == "soft_rate_limit" || name == "hard_rate_limit") {
448
- opts["soft_rate_limit"] = options_table_["soft_rate_limit"][value_idx];
449
- opts["hard_rate_limit"] = options_table_["hard_rate_limit"][value_idx];
450
- } else if (name == "level0_file_num_compaction_trigger" ||
451
- name == "level0_slowdown_writes_trigger" ||
452
- name == "level0_stop_writes_trigger") {
584
+ if (name == "level0_file_num_compaction_trigger" ||
585
+ name == "level0_slowdown_writes_trigger" ||
586
+ name == "level0_stop_writes_trigger") {
453
587
  opts["level0_file_num_compaction_trigger"] =
454
588
  options_table_["level0_file_num_compaction_trigger"][value_idx];
455
589
  opts["level0_slowdown_writes_trigger"] =
@@ -470,8 +604,11 @@ Status StressTest::NewTxn(WriteOptions& write_opts, Transaction** txn) {
470
604
  if (!FLAGS_use_txn) {
471
605
  return Status::InvalidArgument("NewTxn when FLAGS_use_txn is not set");
472
606
  }
607
+ write_opts.disableWAL = FLAGS_disable_wal;
473
608
  static std::atomic<uint64_t> txn_id = {0};
474
609
  TransactionOptions txn_options;
610
+ txn_options.use_only_the_last_commit_time_batch_for_recovery =
611
+ FLAGS_use_only_the_last_commit_time_batch_for_recovery;
475
612
  txn_options.lock_timeout = 600000; // 10 min
476
613
  txn_options.deadlock_detect = true;
477
614
  *txn = txn_db_->BeginTransaction(write_opts, txn_options);
@@ -506,7 +643,14 @@ Status StressTest::RollbackTxn(Transaction* txn) {
506
643
 
507
644
  void StressTest::OperateDb(ThreadState* thread) {
508
645
  ReadOptions read_opts(FLAGS_verify_checksum, true);
646
+ read_opts.rate_limiter_priority =
647
+ FLAGS_rate_limit_user_ops ? Env::IO_USER : Env::IO_TOTAL;
648
+ read_opts.async_io = FLAGS_async_io;
649
+ read_opts.adaptive_readahead = FLAGS_adaptive_readahead;
509
650
  WriteOptions write_opts;
651
+ if (FLAGS_rate_limit_auto_wal_flush) {
652
+ write_opts.rate_limiter_priority = Env::IO_USER;
653
+ }
510
654
  auto shared = thread->shared;
511
655
  char value[100];
512
656
  std::string from_db;
@@ -514,11 +658,15 @@ void StressTest::OperateDb(ThreadState* thread) {
514
658
  write_opts.sync = true;
515
659
  }
516
660
  write_opts.disableWAL = FLAGS_disable_wal;
517
- const int prefixBound = static_cast<int>(FLAGS_readpercent) +
518
- static_cast<int>(FLAGS_prefixpercent);
519
- const int writeBound = prefixBound + static_cast<int>(FLAGS_writepercent);
520
- const int delBound = writeBound + static_cast<int>(FLAGS_delpercent);
521
- const int delRangeBound = delBound + static_cast<int>(FLAGS_delrangepercent);
661
+ const int prefix_bound = static_cast<int>(FLAGS_readpercent) +
662
+ static_cast<int>(FLAGS_prefixpercent);
663
+ const int write_bound = prefix_bound + static_cast<int>(FLAGS_writepercent);
664
+ const int del_bound = write_bound + static_cast<int>(FLAGS_delpercent);
665
+ const int delrange_bound =
666
+ del_bound + static_cast<int>(FLAGS_delrangepercent);
667
+ const int iterate_bound =
668
+ delrange_bound + static_cast<int>(FLAGS_iterpercent);
669
+
522
670
  const uint64_t ops_per_open = FLAGS_ops_per_thread / (FLAGS_reopen + 1);
523
671
 
524
672
  #ifndef NDEBUG
@@ -527,14 +675,21 @@ void StressTest::OperateDb(ThreadState* thread) {
527
675
  FLAGS_read_fault_one_in);
528
676
  }
529
677
  if (FLAGS_write_fault_one_in) {
530
- IOStatus error_msg = IOStatus::IOError("Retryable IO Error");
531
- error_msg.SetRetryable(true);
532
- std::vector<FileType> types;
533
- types.push_back(FileType::kTableFile);
534
- types.push_back(FileType::kDescriptorFile);
535
- types.push_back(FileType::kCurrentFile);
678
+ IOStatus error_msg;
679
+ if (FLAGS_injest_error_severity <= 1 || FLAGS_injest_error_severity > 2) {
680
+ error_msg = IOStatus::IOError("Retryable IO Error");
681
+ error_msg.SetRetryable(true);
682
+ } else if (FLAGS_injest_error_severity == 2) {
683
+ // Ingest the fatal error
684
+ error_msg = IOStatus::IOError("Fatal IO Error");
685
+ error_msg.SetDataLoss(true);
686
+ }
687
+ std::vector<FileType> types = {FileType::kTableFile,
688
+ FileType::kDescriptorFile,
689
+ FileType::kCurrentFile};
536
690
  fault_fs_guard->SetRandomWriteError(
537
- thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg, types);
691
+ thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg,
692
+ /*inject_for_all_file_types=*/false, types);
538
693
  }
539
694
  #endif // NDEBUG
540
695
  thread->stats.Start();
@@ -731,6 +886,19 @@ void StressTest::OperateDb(ThreadState* thread) {
731
886
  }
732
887
  }
733
888
 
889
+ // Assign timestamps if necessary.
890
+ std::string read_ts_str;
891
+ std::string write_ts_str;
892
+ Slice read_ts;
893
+ Slice write_ts;
894
+ if (ShouldAcquireMutexOnKey() && FLAGS_user_timestamp_size > 0) {
895
+ read_ts_str = GenerateTimestampForRead();
896
+ read_ts = read_ts_str;
897
+ read_opts.timestamp = &read_ts;
898
+ write_ts_str = NowNanosStr();
899
+ write_ts = write_ts_str;
900
+ }
901
+
734
902
  int prob_op = thread->rand.Uniform(100);
735
903
  // Reset this in case we pick something other than a read op. We don't
736
904
  // want to use a stale value when deciding at the beginning of the loop
@@ -753,7 +921,7 @@ void StressTest::OperateDb(ThreadState* thread) {
753
921
  } else {
754
922
  TestGet(thread, read_opts, rand_column_families, rand_keys);
755
923
  }
756
- } else if (prob_op < prefixBound) {
924
+ } else if (prob_op < prefix_bound) {
757
925
  assert(static_cast<int>(FLAGS_readpercent) <= prob_op);
758
926
  // OPERATION prefix scan
759
927
  // keys are 8 bytes long, prefix size is FLAGS_prefix_size. There are
@@ -761,22 +929,22 @@ void StressTest::OperateDb(ThreadState* thread) {
761
929
  // be 2 ^ ((8 - FLAGS_prefix_size) * 8) possible keys with the same
762
930
  // prefix
763
931
  TestPrefixScan(thread, read_opts, rand_column_families, rand_keys);
764
- } else if (prob_op < writeBound) {
765
- assert(prefixBound <= prob_op);
932
+ } else if (prob_op < write_bound) {
933
+ assert(prefix_bound <= prob_op);
766
934
  // OPERATION write
767
935
  TestPut(thread, write_opts, read_opts, rand_column_families, rand_keys,
768
936
  value, lock);
769
- } else if (prob_op < delBound) {
770
- assert(writeBound <= prob_op);
937
+ } else if (prob_op < del_bound) {
938
+ assert(write_bound <= prob_op);
771
939
  // OPERATION delete
772
940
  TestDelete(thread, write_opts, rand_column_families, rand_keys, lock);
773
- } else if (prob_op < delRangeBound) {
774
- assert(delBound <= prob_op);
941
+ } else if (prob_op < delrange_bound) {
942
+ assert(del_bound <= prob_op);
775
943
  // OPERATION delete range
776
944
  TestDeleteRange(thread, write_opts, rand_column_families, rand_keys,
777
945
  lock);
778
- } else {
779
- assert(delRangeBound <= prob_op);
946
+ } else if (prob_op < iterate_bound) {
947
+ assert(delrange_bound <= prob_op);
780
948
  // OPERATION iterate
781
949
  int num_seeks = static_cast<int>(
782
950
  std::min(static_cast<uint64_t>(thread->rand.Uniform(4)),
@@ -784,6 +952,9 @@ void StressTest::OperateDb(ThreadState* thread) {
784
952
  rand_keys = GenerateNKeys(thread, num_seeks, i);
785
953
  i += num_seeks - 1;
786
954
  TestIterate(thread, read_opts, rand_column_families, rand_keys);
955
+ } else {
956
+ assert(iterate_bound <= prob_op);
957
+ TestCustomOperations(thread, rand_column_families);
787
958
  }
788
959
  thread->stats.FinishedSingleOp();
789
960
  #ifndef ROCKSDB_LITE
@@ -821,8 +992,16 @@ std::vector<std::string> StressTest::GetWhiteBoxKeys(ThreadState* thread,
821
992
  std::vector<std::string> boundaries;
822
993
  for (const LevelMetaData& lmd : cfmd.levels) {
823
994
  for (const SstFileMetaData& sfmd : lmd.files) {
824
- boundaries.push_back(sfmd.smallestkey);
825
- boundaries.push_back(sfmd.largestkey);
995
+ // If FLAGS_user_timestamp_size > 0, then both smallestkey and largestkey
996
+ // have timestamps.
997
+ const auto& skey = sfmd.smallestkey;
998
+ const auto& lkey = sfmd.largestkey;
999
+ assert(skey.size() >= FLAGS_user_timestamp_size);
1000
+ assert(lkey.size() >= FLAGS_user_timestamp_size);
1001
+ boundaries.push_back(
1002
+ skey.substr(0, skey.size() - FLAGS_user_timestamp_size));
1003
+ boundaries.push_back(
1004
+ lkey.substr(0, lkey.size() - FLAGS_user_timestamp_size));
826
1005
  }
827
1006
  }
828
1007
  if (boundaries.empty()) {
@@ -971,7 +1150,10 @@ Status StressTest::TestIterate(ThreadState* thread,
971
1150
  // to bounds, prefix extractor or reseeking. Sometimes we are comparing
972
1151
  // iterators with the same set-up, and it doesn't hurt to check them
973
1152
  // to be equal.
1153
+ // This `ReadOptions` is for validation purposes. Ignore
1154
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
974
1155
  ReadOptions cmp_ro;
1156
+ cmp_ro.timestamp = readoptionscopy.timestamp;
975
1157
  cmp_ro.snapshot = snapshot;
976
1158
  cmp_ro.total_order_seek = true;
977
1159
  ColumnFamilyHandle* cmp_cfh =
@@ -1091,21 +1273,25 @@ void StressTest::VerifyIterator(ThreadState* thread,
1091
1273
  *diverged = true;
1092
1274
  return;
1093
1275
  } else if (op == kLastOpSeek && ro.iterate_lower_bound != nullptr &&
1094
- (options_.comparator->Compare(*ro.iterate_lower_bound, seek_key) >=
1095
- 0 ||
1276
+ (options_.comparator->CompareWithoutTimestamp(
1277
+ *ro.iterate_lower_bound, /*a_has_ts=*/false, seek_key,
1278
+ /*b_has_ts=*/false) >= 0 ||
1096
1279
  (ro.iterate_upper_bound != nullptr &&
1097
- options_.comparator->Compare(*ro.iterate_lower_bound,
1098
- *ro.iterate_upper_bound) >= 0))) {
1280
+ options_.comparator->CompareWithoutTimestamp(
1281
+ *ro.iterate_lower_bound, /*a_has_ts=*/false,
1282
+ *ro.iterate_upper_bound, /*b_has_ts*/ false) >= 0))) {
1099
1283
  // Lower bound behavior is not well defined if it is larger than
1100
1284
  // seek key or upper bound. Disable the check for now.
1101
1285
  *diverged = true;
1102
1286
  return;
1103
1287
  } else if (op == kLastOpSeekForPrev && ro.iterate_upper_bound != nullptr &&
1104
- (options_.comparator->Compare(*ro.iterate_upper_bound, seek_key) <=
1105
- 0 ||
1288
+ (options_.comparator->CompareWithoutTimestamp(
1289
+ *ro.iterate_upper_bound, /*a_has_ts=*/false, seek_key,
1290
+ /*b_has_ts=*/false) <= 0 ||
1106
1291
  (ro.iterate_lower_bound != nullptr &&
1107
- options_.comparator->Compare(*ro.iterate_lower_bound,
1108
- *ro.iterate_upper_bound) >= 0))) {
1292
+ options_.comparator->CompareWithoutTimestamp(
1293
+ *ro.iterate_lower_bound, /*a_has_ts=*/false,
1294
+ *ro.iterate_upper_bound, /*b_has_ts=*/false) >= 0))) {
1109
1295
  // Uppder bound behavior is not well defined if it is smaller than
1110
1296
  // seek key or lower bound. Disable the check for now.
1111
1297
  *diverged = true;
@@ -1174,9 +1360,13 @@ void StressTest::VerifyIterator(ThreadState* thread,
1174
1360
  if ((iter->Valid() && iter->key() != cmp_iter->key()) ||
1175
1361
  (!iter->Valid() &&
1176
1362
  (ro.iterate_upper_bound == nullptr ||
1177
- cmp->Compare(total_order_key, *ro.iterate_upper_bound) < 0) &&
1363
+ cmp->CompareWithoutTimestamp(total_order_key, /*a_has_ts=*/false,
1364
+ *ro.iterate_upper_bound,
1365
+ /*b_has_ts=*/false) < 0) &&
1178
1366
  (ro.iterate_lower_bound == nullptr ||
1179
- cmp->Compare(total_order_key, *ro.iterate_lower_bound) > 0))) {
1367
+ cmp->CompareWithoutTimestamp(total_order_key, /*a_has_ts=*/false,
1368
+ *ro.iterate_lower_bound,
1369
+ /*b_has_ts=*/false) > 0))) {
1180
1370
  fprintf(stderr,
1181
1371
  "Iterator diverged from control iterator which"
1182
1372
  " has value %s %s\n",
@@ -1236,10 +1426,9 @@ Status StressTest::TestBackupRestore(
1236
1426
  const std::vector<int64_t>& rand_keys) {
1237
1427
  std::string backup_dir = FLAGS_db + "/.backup" + ToString(thread->tid);
1238
1428
  std::string restore_dir = FLAGS_db + "/.restore" + ToString(thread->tid);
1239
- BackupableDBOptions backup_opts(backup_dir);
1429
+ BackupEngineOptions backup_opts(backup_dir);
1240
1430
  // For debugging, get info_log from live options
1241
1431
  backup_opts.info_log = db_->GetDBOptions().info_log.get();
1242
- assert(backup_opts.info_log);
1243
1432
  if (thread->rand.OneIn(10)) {
1244
1433
  backup_opts.share_table_files = false;
1245
1434
  } else {
@@ -1251,24 +1440,24 @@ Status StressTest::TestBackupRestore(
1251
1440
  if (thread->rand.OneIn(2)) {
1252
1441
  // old
1253
1442
  backup_opts.share_files_with_checksum_naming =
1254
- BackupableDBOptions::kLegacyCrc32cAndFileSize;
1443
+ BackupEngineOptions::kLegacyCrc32cAndFileSize;
1255
1444
  } else {
1256
1445
  // new
1257
1446
  backup_opts.share_files_with_checksum_naming =
1258
- BackupableDBOptions::kUseDbSessionId;
1447
+ BackupEngineOptions::kUseDbSessionId;
1259
1448
  }
1260
1449
  if (thread->rand.OneIn(2)) {
1261
1450
  backup_opts.share_files_with_checksum_naming =
1262
1451
  backup_opts.share_files_with_checksum_naming |
1263
- BackupableDBOptions::kFlagIncludeFileSize;
1264
- }
1265
- if (thread->rand.OneIn(2)) {
1266
- backup_opts.share_files_with_checksum_naming =
1267
- backup_opts.share_files_with_checksum_naming |
1268
- BackupableDBOptions::kFlagMatchInterimNaming;
1452
+ BackupEngineOptions::kFlagIncludeFileSize;
1269
1453
  }
1270
1454
  }
1271
1455
  }
1456
+ if (thread->rand.OneIn(2)) {
1457
+ backup_opts.schema_version = 1;
1458
+ } else {
1459
+ backup_opts.schema_version = 2;
1460
+ }
1272
1461
  BackupEngine* backup_engine = nullptr;
1273
1462
  std::string from = "a backup/restore operation";
1274
1463
  Status s = BackupEngine::Open(db_stress_env, backup_opts, &backup_engine);
@@ -1276,7 +1465,26 @@ Status StressTest::TestBackupRestore(
1276
1465
  from = "BackupEngine::Open";
1277
1466
  }
1278
1467
  if (s.ok()) {
1279
- s = backup_engine->CreateNewBackup(db_);
1468
+ if (backup_opts.schema_version >= 2 && thread->rand.OneIn(2)) {
1469
+ TEST_BackupMetaSchemaOptions test_opts;
1470
+ test_opts.crc32c_checksums = thread->rand.OneIn(2) == 0;
1471
+ test_opts.file_sizes = thread->rand.OneIn(2) == 0;
1472
+ TEST_SetBackupMetaSchemaOptions(backup_engine, test_opts);
1473
+ }
1474
+ CreateBackupOptions create_opts;
1475
+ if (FLAGS_disable_wal) {
1476
+ // The verification can only work when latest value of `key` is backed up,
1477
+ // which requires flushing in case of WAL disabled.
1478
+ //
1479
+ // Note this triggers a flush with a key lock held. Meanwhile, operations
1480
+ // like flush/compaction may attempt to grab key locks like in
1481
+ // `DbStressCompactionFilter`. The philosophy around preventing deadlock
1482
+ // is the background operation key lock acquisition only tries but does
1483
+ // not wait for the lock. So here in the foreground it is OK to hold the
1484
+ // lock and wait on a background operation (flush).
1485
+ create_opts.flush_before_backup = true;
1486
+ }
1487
+ s = backup_engine->CreateNewBackup(create_opts, db_);
1280
1488
  if (!s.ok()) {
1281
1489
  from = "BackupEngine::CreateNewBackup";
1282
1490
  }
@@ -1290,8 +1498,13 @@ Status StressTest::TestBackupRestore(
1290
1498
  }
1291
1499
  }
1292
1500
  std::vector<BackupInfo> backup_info;
1501
+ // If inplace_not_restore, we verify the backup by opening it as a
1502
+ // read-only DB. If !inplace_not_restore, we restore it to a temporary
1503
+ // directory for verification.
1504
+ bool inplace_not_restore = thread->rand.OneIn(3);
1293
1505
  if (s.ok()) {
1294
- backup_engine->GetBackupInfo(&backup_info);
1506
+ backup_engine->GetBackupInfo(&backup_info,
1507
+ /*include_file_details*/ inplace_not_restore);
1295
1508
  if (backup_info.empty()) {
1296
1509
  s = Status::NotFound("no backups found");
1297
1510
  from = "BackupEngine::GetBackupInfo";
@@ -1307,8 +1520,8 @@ Status StressTest::TestBackupRestore(
1307
1520
  }
1308
1521
  const bool allow_persistent = thread->tid == 0; // not too many
1309
1522
  bool from_latest = false;
1310
- if (s.ok()) {
1311
- int count = static_cast<int>(backup_info.size());
1523
+ int count = static_cast<int>(backup_info.size());
1524
+ if (s.ok() && !inplace_not_restore) {
1312
1525
  if (count > 1) {
1313
1526
  s = backup_engine->RestoreDBFromBackup(
1314
1527
  RestoreOptions(), backup_info[thread->rand.Uniform(count)].backup_id,
@@ -1326,7 +1539,9 @@ Status StressTest::TestBackupRestore(
1326
1539
  }
1327
1540
  }
1328
1541
  }
1329
- if (s.ok()) {
1542
+ if (s.ok() && !inplace_not_restore) {
1543
+ // Purge early if restoring, to ensure the restored directory doesn't
1544
+ // have some secret dependency on the backup directory.
1330
1545
  uint32_t to_keep = 0;
1331
1546
  if (allow_persistent) {
1332
1547
  // allow one thread to keep up to 2 backups
@@ -1354,10 +1569,21 @@ Status StressTest::TestBackupRestore(
1354
1569
  for (auto name : column_family_names_) {
1355
1570
  cf_descriptors.emplace_back(name, ColumnFamilyOptions(restore_options));
1356
1571
  }
1357
- s = DB::Open(DBOptions(restore_options), restore_dir, cf_descriptors,
1358
- &restored_cf_handles, &restored_db);
1359
- if (!s.ok()) {
1360
- from = "DB::Open in backup/restore";
1572
+ if (inplace_not_restore) {
1573
+ BackupInfo& info = backup_info[thread->rand.Uniform(count)];
1574
+ restore_options.env = info.env_for_open.get();
1575
+ s = DB::OpenForReadOnly(DBOptions(restore_options), info.name_for_open,
1576
+ cf_descriptors, &restored_cf_handles,
1577
+ &restored_db);
1578
+ if (!s.ok()) {
1579
+ from = "DB::OpenForReadOnly in backup/restore";
1580
+ }
1581
+ } else {
1582
+ s = DB::Open(DBOptions(restore_options), restore_dir, cf_descriptors,
1583
+ &restored_cf_handles, &restored_db);
1584
+ if (!s.ok()) {
1585
+ from = "DB::Open in backup/restore";
1586
+ }
1361
1587
  }
1362
1588
  }
1363
1589
  // Note the column families chosen by `rand_column_families` cannot be
@@ -1371,8 +1597,18 @@ Status StressTest::TestBackupRestore(
1371
1597
  std::string key_str = Key(rand_keys[0]);
1372
1598
  Slice key = key_str;
1373
1599
  std::string restored_value;
1600
+ // This `ReadOptions` is for validation purposes. Ignore
1601
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
1602
+ ReadOptions read_opts;
1603
+ std::string ts_str;
1604
+ Slice ts;
1605
+ if (FLAGS_user_timestamp_size > 0) {
1606
+ ts_str = GenerateTimestampForRead();
1607
+ ts = ts_str;
1608
+ read_opts.timestamp = &ts;
1609
+ }
1374
1610
  Status get_status = restored_db->Get(
1375
- ReadOptions(), restored_cf_handles[rand_column_families[i]], key,
1611
+ read_opts, restored_cf_handles[rand_column_families[i]], key,
1376
1612
  &restored_value);
1377
1613
  bool exists = thread->shared->Exists(rand_column_families[i], rand_keys[0]);
1378
1614
  if (get_status.ok()) {
@@ -1390,10 +1626,6 @@ Status StressTest::TestBackupRestore(
1390
1626
  }
1391
1627
  }
1392
1628
  }
1393
- if (backup_engine != nullptr) {
1394
- delete backup_engine;
1395
- backup_engine = nullptr;
1396
- }
1397
1629
  if (restored_db != nullptr) {
1398
1630
  for (auto* cf_handle : restored_cf_handles) {
1399
1631
  restored_db->DestroyColumnFamilyHandle(cf_handle);
@@ -1401,6 +1633,22 @@ Status StressTest::TestBackupRestore(
1401
1633
  delete restored_db;
1402
1634
  restored_db = nullptr;
1403
1635
  }
1636
+ if (s.ok() && inplace_not_restore) {
1637
+ // Purge late if inplace open read-only
1638
+ uint32_t to_keep = 0;
1639
+ if (allow_persistent) {
1640
+ // allow one thread to keep up to 2 backups
1641
+ to_keep = thread->rand.Uniform(3);
1642
+ }
1643
+ s = backup_engine->PurgeOldBackups(to_keep);
1644
+ if (!s.ok()) {
1645
+ from = "BackupEngine::PurgeOldBackups";
1646
+ }
1647
+ }
1648
+ if (backup_engine != nullptr) {
1649
+ delete backup_engine;
1650
+ backup_engine = nullptr;
1651
+ }
1404
1652
  if (s.ok()) {
1405
1653
  // Preserve directories on failure, or allowed persistent backup
1406
1654
  if (!allow_persistent) {
@@ -1448,8 +1696,8 @@ Status StressTest::TestApproximateSize(
1448
1696
  std::string key2_str = Key(key2);
1449
1697
  Range range{Slice(key1_str), Slice(key2_str)};
1450
1698
  SizeApproximationOptions sao;
1451
- sao.include_memtabtles = thread->rand.OneIn(2);
1452
- if (sao.include_memtabtles) {
1699
+ sao.include_memtables = thread->rand.OneIn(2);
1700
+ if (sao.include_memtables) {
1453
1701
  sao.include_files = thread->rand.OneIn(2);
1454
1702
  }
1455
1703
  if (thread->rand.OneIn(2)) {
@@ -1512,6 +1760,8 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
1512
1760
  if (s.ok()) {
1513
1761
  Options options(options_);
1514
1762
  options.listeners.clear();
1763
+ // Avoid race condition in trash handling after delete checkpoint_db
1764
+ options.sst_file_manager.reset();
1515
1765
  std::vector<ColumnFamilyDescriptor> cf_descs;
1516
1766
  // TODO(ajkr): `column_family_names_` is not safe to access here when
1517
1767
  // `clear_column_family_one_in != 0`. But we can't easily switch to
@@ -1578,6 +1828,9 @@ void StressTest::TestGetProperty(ThreadState* thread) const {
1578
1828
  std::unordered_set<std::string> unknownPropertyNames = {
1579
1829
  DB::Properties::kEstimateOldestKeyTime,
1580
1830
  DB::Properties::kOptionsStatistics,
1831
+ DB::Properties::
1832
+ kLiveSstFilesSizeAtTemperature, // similar to levelPropertyNames, it
1833
+ // requires a number suffix
1581
1834
  };
1582
1835
  unknownPropertyNames.insert(levelPropertyNames.begin(),
1583
1836
  levelPropertyNames.end());
@@ -1600,6 +1853,14 @@ void StressTest::TestGetProperty(ThreadState* thread) const {
1600
1853
  thread->shared->SetVerificationFailure();
1601
1854
  }
1602
1855
  }
1856
+ if (ppt_name_and_info.second.handle_map != nullptr) {
1857
+ std::map<std::string, std::string> prop_map;
1858
+ if (!db_->GetMapProperty(ppt_name_and_info.first, &prop_map)) {
1859
+ fprintf(stderr, "Failed to get Map property: %s\n",
1860
+ ppt_name_and_info.first.c_str());
1861
+ thread->shared->SetVerificationFailure();
1862
+ }
1863
+ }
1603
1864
  }
1604
1865
  }
1605
1866
 
@@ -1631,6 +1892,10 @@ void StressTest::TestCompactFiles(ThreadState* thread,
1631
1892
  ROCKSDB_NAMESPACE::ColumnFamilyMetaData cf_meta_data;
1632
1893
  db_->GetColumnFamilyMetaData(column_family, &cf_meta_data);
1633
1894
 
1895
+ if (cf_meta_data.levels.empty()) {
1896
+ return;
1897
+ }
1898
+
1634
1899
  // Randomly compact up to three consecutive files from a level
1635
1900
  const int kMaxRetry = 3;
1636
1901
  for (int attempt = 0; attempt < kMaxRetry; ++attempt) {
@@ -1676,6 +1941,9 @@ void StressTest::TestCompactFiles(ThreadState* thread,
1676
1941
 
1677
1942
  Status StressTest::TestFlush(const std::vector<int>& rand_column_families) {
1678
1943
  FlushOptions flush_opts;
1944
+ if (FLAGS_atomic_flush) {
1945
+ return db_->Flush(flush_opts, column_families_);
1946
+ }
1679
1947
  std::vector<ColumnFamilyHandle*> cfhs;
1680
1948
  std::for_each(rand_column_families.begin(), rand_column_families.end(),
1681
1949
  [this, &cfhs](int k) { cfhs.push_back(column_families_[k]); });
@@ -1694,7 +1962,7 @@ Status StressTest::TestPauseBackground(ThreadState* thread) {
1694
1962
  // 1 chance in 625 of pausing full 16s.)
1695
1963
  int pwr2_micros =
1696
1964
  std::min(thread->rand.Uniform(25), thread->rand.Uniform(25));
1697
- db_stress_env->SleepForMicroseconds(1 << pwr2_micros);
1965
+ clock_->SleepForMicroseconds(1 << pwr2_micros);
1698
1966
  return db_->ContinueBackgroundWork();
1699
1967
  }
1700
1968
 
@@ -1703,6 +1971,9 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
1703
1971
  const std::string& keystr, uint64_t i) {
1704
1972
  Slice key = keystr;
1705
1973
  ColumnFamilyHandle* column_family = column_families_[rand_column_family];
1974
+ // This `ReadOptions` is for validation purposes. Ignore
1975
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
1976
+ ReadOptions ropt;
1706
1977
  #ifndef ROCKSDB_LITE
1707
1978
  auto db_impl = static_cast_with_check<DBImpl>(db_->GetRootDB());
1708
1979
  const bool ww_snapshot = thread->rand.OneIn(10);
@@ -1712,8 +1983,19 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
1712
1983
  #else
1713
1984
  const Snapshot* snapshot = db_->GetSnapshot();
1714
1985
  #endif // !ROCKSDB_LITE
1715
- ReadOptions ropt;
1716
1986
  ropt.snapshot = snapshot;
1987
+
1988
+ // Ideally, we want snapshot taking and timestamp generation to be atomic
1989
+ // here, so that the snapshot corresponds to the timestamp. However, it is
1990
+ // not possible with current GetSnapshot() API.
1991
+ std::string ts_str;
1992
+ Slice ts;
1993
+ if (FLAGS_user_timestamp_size > 0) {
1994
+ ts_str = GenerateTimestampForRead();
1995
+ ts = ts_str;
1996
+ ropt.timestamp = &ts;
1997
+ }
1998
+
1717
1999
  std::string value_at;
1718
2000
  // When taking a snapshot, we also read a key from that snapshot. We
1719
2001
  // will later read the same key before releasing the snapshot and
@@ -1735,10 +2017,14 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
1735
2017
  }
1736
2018
  }
1737
2019
 
1738
- ThreadState::SnapshotState snap_state = {
1739
- snapshot, rand_column_family, column_family->GetName(),
1740
- keystr, status_at, value_at,
1741
- key_vec};
2020
+ ThreadState::SnapshotState snap_state = {snapshot,
2021
+ rand_column_family,
2022
+ column_family->GetName(),
2023
+ keystr,
2024
+ status_at,
2025
+ value_at,
2026
+ key_vec,
2027
+ ts_str};
1742
2028
  uint64_t hold_for = FLAGS_snapshot_hold_ops;
1743
2029
  if (FLAGS_long_running_snapshots) {
1744
2030
  // Hold 10% of snapshots for 10x more
@@ -1840,9 +2126,18 @@ uint32_t StressTest::GetRangeHash(ThreadState* thread, const Snapshot* snapshot,
1840
2126
  const Slice& end_key) {
1841
2127
  const std::string kCrcCalculatorSepearator = ";";
1842
2128
  uint32_t crc = 0;
2129
+ // This `ReadOptions` is for validation purposes. Ignore
2130
+ // `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
1843
2131
  ReadOptions ro;
1844
2132
  ro.snapshot = snapshot;
1845
2133
  ro.total_order_seek = true;
2134
+ std::string ts_str;
2135
+ Slice ts;
2136
+ if (FLAGS_user_timestamp_size > 0) {
2137
+ ts_str = GenerateTimestampForRead();
2138
+ ts = ts_str;
2139
+ ro.timestamp = &ts;
2140
+ }
1846
2141
  std::unique_ptr<Iterator> it(db_->NewIterator(ro, column_family));
1847
2142
  for (it->Seek(start_key);
1848
2143
  it->Valid() && options_.comparator->Compare(it->key(), end_key) <= 0;
@@ -1868,8 +2163,30 @@ void StressTest::PrintEnv() const {
1868
2163
  fprintf(stdout, "Format version : %d\n", FLAGS_format_version);
1869
2164
  fprintf(stdout, "TransactionDB : %s\n",
1870
2165
  FLAGS_use_txn ? "true" : "false");
2166
+
2167
+ if (FLAGS_use_txn) {
2168
+ #ifndef ROCKSDB_LITE
2169
+ fprintf(stdout, "Two write queues: : %s\n",
2170
+ FLAGS_two_write_queues ? "true" : "false");
2171
+ fprintf(stdout, "Write policy : %d\n",
2172
+ static_cast<int>(FLAGS_txn_write_policy));
2173
+ if (static_cast<uint64_t>(TxnDBWritePolicy::WRITE_PREPARED) ==
2174
+ FLAGS_txn_write_policy ||
2175
+ static_cast<uint64_t>(TxnDBWritePolicy::WRITE_UNPREPARED) ==
2176
+ FLAGS_txn_write_policy) {
2177
+ fprintf(stdout, "Snapshot cache bits : %d\n",
2178
+ static_cast<int>(FLAGS_wp_snapshot_cache_bits));
2179
+ fprintf(stdout, "Commit cache bits : %d\n",
2180
+ static_cast<int>(FLAGS_wp_commit_cache_bits));
2181
+ }
2182
+ fprintf(stdout, "last cwb for recovery : %s\n",
2183
+ FLAGS_use_only_the_last_commit_time_batch_for_recovery ? "true"
2184
+ : "false");
2185
+ #endif // !ROCKSDB_LITE
2186
+ }
2187
+
1871
2188
  #ifndef ROCKSDB_LITE
1872
- fprintf(stdout, "BlobDB : %s\n",
2189
+ fprintf(stdout, "Stacked BlobDB : %s\n",
1873
2190
  FLAGS_use_blob_db ? "true" : "false");
1874
2191
  #endif // !ROCKSDB_LITE
1875
2192
  fprintf(stdout, "Read only mode : %s\n",
@@ -1886,7 +2203,7 @@ void StressTest::PrintEnv() const {
1886
2203
  (unsigned long)FLAGS_ops_per_thread);
1887
2204
  std::string ttl_state("unused");
1888
2205
  if (FLAGS_ttl > 0) {
1889
- ttl_state = NumberToString(FLAGS_ttl);
2206
+ ttl_state = ToString(FLAGS_ttl);
1890
2207
  }
1891
2208
  fprintf(stdout, "Time to live(sec) : %s\n", ttl_state.c_str());
1892
2209
  fprintf(stdout, "Read percentage : %d%%\n", FLAGS_readpercent);
@@ -1897,6 +2214,7 @@ void StressTest::PrintEnv() const {
1897
2214
  fprintf(stdout, "No overwrite percentage : %d%%\n",
1898
2215
  FLAGS_nooverwritepercent);
1899
2216
  fprintf(stdout, "Iterate percentage : %d%%\n", FLAGS_iterpercent);
2217
+ fprintf(stdout, "Custom ops percentage : %d%%\n", FLAGS_customopspercent);
1900
2218
  fprintf(stdout, "DB-write-buffer-size : %" PRIu64 "\n",
1901
2219
  FLAGS_db_write_buffer_size);
1902
2220
  fprintf(stdout, "Write-buffer-size : %d\n", FLAGS_write_buffer_size);
@@ -1944,13 +2262,16 @@ void StressTest::PrintEnv() const {
1944
2262
 
1945
2263
  fprintf(stdout, "Memtablerep : %s\n", memtablerep);
1946
2264
 
1947
- fprintf(stdout, "Test kill odd : %d\n", rocksdb_kill_odds);
1948
- if (!rocksdb_kill_exclude_prefixes.empty()) {
2265
+ #ifndef NDEBUG
2266
+ KillPoint* kp = KillPoint::GetInstance();
2267
+ fprintf(stdout, "Test kill odd : %d\n", kp->rocksdb_kill_odds);
2268
+ if (!kp->rocksdb_kill_exclude_prefixes.empty()) {
1949
2269
  fprintf(stdout, "Skipping kill points prefixes:\n");
1950
- for (auto& p : rocksdb_kill_exclude_prefixes) {
2270
+ for (auto& p : kp->rocksdb_kill_exclude_prefixes) {
1951
2271
  fprintf(stdout, " %s\n", p.c_str());
1952
2272
  }
1953
2273
  }
2274
+ #endif
1954
2275
  fprintf(stdout, "Periodic Compaction Secs : %" PRIu64 "\n",
1955
2276
  FLAGS_periodic_compaction_seconds);
1956
2277
  fprintf(stdout, "Compaction TTL : %" PRIu64 "\n",
@@ -1965,9 +2286,18 @@ void StressTest::PrintEnv() const {
1965
2286
  static_cast<int>(FLAGS_level_compaction_dynamic_level_bytes));
1966
2287
  fprintf(stdout, "Read fault one in : %d\n", FLAGS_read_fault_one_in);
1967
2288
  fprintf(stdout, "Write fault one in : %d\n", FLAGS_write_fault_one_in);
2289
+ fprintf(stdout, "Open metadata write fault one in:\n");
2290
+ fprintf(stdout, " %d\n",
2291
+ FLAGS_open_metadata_write_fault_one_in);
1968
2292
  fprintf(stdout, "Sync fault injection : %d\n", FLAGS_sync_fault_injection);
1969
2293
  fprintf(stdout, "Best efforts recovery : %d\n",
1970
2294
  static_cast<int>(FLAGS_best_efforts_recovery));
2295
+ fprintf(stdout, "Fail if OPTIONS file error: %d\n",
2296
+ static_cast<int>(FLAGS_fail_if_options_file_error));
2297
+ fprintf(stdout, "User timestamp size bytes : %d\n",
2298
+ static_cast<int>(FLAGS_user_timestamp_size));
2299
+ fprintf(stdout, "WAL compression : %s\n",
2300
+ FLAGS_wal_compression.c_str());
1971
2301
 
1972
2302
  fprintf(stdout, "------------------------------------------------\n");
1973
2303
  }
@@ -1991,6 +2321,8 @@ void StressTest::Open() {
1991
2321
  block_based_options.block_cache_compressed = compressed_cache_;
1992
2322
  block_based_options.checksum = checksum_type_e;
1993
2323
  block_based_options.block_size = FLAGS_block_size;
2324
+ block_based_options.reserve_table_reader_memory =
2325
+ FLAGS_reserve_table_reader_memory;
1994
2326
  block_based_options.format_version =
1995
2327
  static_cast<uint32_t>(FLAGS_format_version);
1996
2328
  block_based_options.index_block_restart_interval =
@@ -1999,8 +2331,13 @@ void StressTest::Open() {
1999
2331
  block_based_options.partition_filters = FLAGS_partition_filters;
2000
2332
  block_based_options.optimize_filters_for_memory =
2001
2333
  FLAGS_optimize_filters_for_memory;
2334
+ block_based_options.detect_filter_construct_corruption =
2335
+ FLAGS_detect_filter_construct_corruption;
2002
2336
  block_based_options.index_type =
2003
2337
  static_cast<BlockBasedTableOptions::IndexType>(FLAGS_index_type);
2338
+ block_based_options.prepopulate_block_cache =
2339
+ static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
2340
+ FLAGS_prepopulate_block_cache);
2004
2341
  options_.table_factory.reset(
2005
2342
  NewBlockBasedTableFactory(block_based_options));
2006
2343
  options_.db_write_buffer_size = FLAGS_db_write_buffer_size;
@@ -2015,6 +2352,7 @@ void StressTest::Open() {
2015
2352
  options_.memtable_prefix_bloom_size_ratio =
2016
2353
  FLAGS_memtable_prefix_bloom_size_ratio;
2017
2354
  options_.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
2355
+ options_.disable_auto_compactions = FLAGS_disable_auto_compactions;
2018
2356
  options_.max_background_compactions = FLAGS_max_background_compactions;
2019
2357
  options_.max_background_flushes = FLAGS_max_background_flushes;
2020
2358
  options_.compaction_style =
@@ -2052,12 +2390,16 @@ void StressTest::Open() {
2052
2390
  FLAGS_compression_zstd_max_train_bytes;
2053
2391
  options_.compression_opts.parallel_threads =
2054
2392
  FLAGS_compression_parallel_threads;
2393
+ options_.compression_opts.max_dict_buffer_bytes =
2394
+ FLAGS_compression_max_dict_buffer_bytes;
2055
2395
  options_.create_if_missing = true;
2056
2396
  options_.max_manifest_file_size = FLAGS_max_manifest_file_size;
2057
2397
  options_.inplace_update_support = FLAGS_in_place_update;
2058
2398
  options_.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
2059
2399
  options_.allow_concurrent_memtable_write =
2060
2400
  FLAGS_allow_concurrent_memtable_write;
2401
+ options_.experimental_mempurge_threshold =
2402
+ FLAGS_experimental_mempurge_threshold;
2061
2403
  options_.periodic_compaction_seconds = FLAGS_periodic_compaction_seconds;
2062
2404
  options_.ttl = FLAGS_compaction_ttl;
2063
2405
  options_.enable_pipelined_write = FLAGS_enable_pipelined_write;
@@ -2083,6 +2425,24 @@ void StressTest::Open() {
2083
2425
  options_.file_checksum_gen_factory =
2084
2426
  GetFileChecksumImpl(FLAGS_file_checksum_impl);
2085
2427
  options_.track_and_verify_wals_in_manifest = true;
2428
+
2429
+ // Integrated BlobDB
2430
+ options_.enable_blob_files = FLAGS_enable_blob_files;
2431
+ options_.min_blob_size = FLAGS_min_blob_size;
2432
+ options_.blob_file_size = FLAGS_blob_file_size;
2433
+ options_.blob_compression_type =
2434
+ StringToCompressionType(FLAGS_blob_compression_type.c_str());
2435
+ options_.enable_blob_garbage_collection =
2436
+ FLAGS_enable_blob_garbage_collection;
2437
+ options_.blob_garbage_collection_age_cutoff =
2438
+ FLAGS_blob_garbage_collection_age_cutoff;
2439
+ options_.blob_garbage_collection_force_threshold =
2440
+ FLAGS_blob_garbage_collection_force_threshold;
2441
+ options_.blob_compaction_readahead_size =
2442
+ FLAGS_blob_compaction_readahead_size;
2443
+
2444
+ options_.wal_compression =
2445
+ StringToCompressionType(FLAGS_wal_compression.c_str());
2086
2446
  } else {
2087
2447
  #ifdef ROCKSDB_LITE
2088
2448
  fprintf(stderr, "--options_file not supported in lite mode\n");
@@ -2108,9 +2468,6 @@ void StressTest::Open() {
2108
2468
  10 /* fairness */,
2109
2469
  FLAGS_rate_limit_bg_reads ? RateLimiter::Mode::kReadsOnly
2110
2470
  : RateLimiter::Mode::kWritesOnly));
2111
- if (FLAGS_rate_limit_bg_reads) {
2112
- options_.new_table_reader_for_compaction_inputs = true;
2113
- }
2114
2471
  }
2115
2472
  if (FLAGS_sst_file_manager_bytes_per_sec > 0 ||
2116
2473
  FLAGS_sst_file_manager_bytes_per_truncate > 0) {
@@ -2171,10 +2528,38 @@ void StressTest::Open() {
2171
2528
 
2172
2529
  options_.best_efforts_recovery = FLAGS_best_efforts_recovery;
2173
2530
  options_.paranoid_file_checks = FLAGS_paranoid_file_checks;
2531
+ options_.fail_if_options_file_error = FLAGS_fail_if_options_file_error;
2532
+
2533
+ if ((options_.enable_blob_files || options_.enable_blob_garbage_collection ||
2534
+ FLAGS_allow_setting_blob_options_dynamically) &&
2535
+ FLAGS_best_efforts_recovery) {
2536
+ fprintf(stderr,
2537
+ "Integrated BlobDB is currently incompatible with best-effort "
2538
+ "recovery\n");
2539
+ exit(1);
2540
+ }
2541
+
2542
+ fprintf(stdout,
2543
+ "Integrated BlobDB: blob files enabled %d, min blob size %" PRIu64
2544
+ ", blob file size %" PRIu64
2545
+ ", blob compression type %s, blob GC enabled %d, cutoff %f, force "
2546
+ "threshold %f, blob compaction readahead size %" PRIu64 "\n",
2547
+ options_.enable_blob_files, options_.min_blob_size,
2548
+ options_.blob_file_size,
2549
+ CompressionTypeToString(options_.blob_compression_type).c_str(),
2550
+ options_.enable_blob_garbage_collection,
2551
+ options_.blob_garbage_collection_age_cutoff,
2552
+ options_.blob_garbage_collection_force_threshold,
2553
+ options_.blob_compaction_readahead_size);
2174
2554
 
2175
2555
  fprintf(stdout, "DB path: [%s]\n", FLAGS_db.c_str());
2176
2556
 
2177
2557
  Status s;
2558
+
2559
+ if (FLAGS_user_timestamp_size > 0) {
2560
+ CheckAndSetOptionsForUserTimestamp();
2561
+ }
2562
+
2178
2563
  if (FLAGS_ttl == -1) {
2179
2564
  std::vector<std::string> existing_column_families;
2180
2565
  s = DB::ListColumnFamilies(DBOptions(options_), FLAGS_db,
@@ -2224,36 +2609,130 @@ void StressTest::Open() {
2224
2609
  column_family_names_.push_back(name);
2225
2610
  }
2226
2611
  options_.listeners.clear();
2227
- options_.listeners.emplace_back(
2228
- new DbStressListener(FLAGS_db, options_.db_paths, cf_descriptors));
2612
+ #ifndef ROCKSDB_LITE
2613
+ options_.listeners.emplace_back(new DbStressListener(
2614
+ FLAGS_db, options_.db_paths, cf_descriptors, db_stress_listener_env));
2615
+ #endif // !ROCKSDB_LITE
2229
2616
  options_.create_missing_column_families = true;
2230
2617
  if (!FLAGS_use_txn) {
2231
- #ifndef ROCKSDB_LITE
2232
- if (FLAGS_use_blob_db) {
2233
- blob_db::BlobDBOptions blob_db_options;
2234
- blob_db_options.min_blob_size = FLAGS_blob_db_min_blob_size;
2235
- blob_db_options.bytes_per_sync = FLAGS_blob_db_bytes_per_sync;
2236
- blob_db_options.blob_file_size = FLAGS_blob_db_file_size;
2237
- blob_db_options.enable_garbage_collection = FLAGS_blob_db_enable_gc;
2238
- blob_db_options.garbage_collection_cutoff = FLAGS_blob_db_gc_cutoff;
2239
-
2240
- blob_db::BlobDB* blob_db = nullptr;
2241
- s = blob_db::BlobDB::Open(options_, blob_db_options, FLAGS_db,
2242
- cf_descriptors, &column_families_, &blob_db);
2243
- if (s.ok()) {
2244
- db_ = blob_db;
2618
+ #ifndef NDEBUG
2619
+ // Determine whether we need to ingest file metadata write failures
2620
+ // during DB reopen. If it does, enable it.
2621
+ // Only ingest metadata error if it is reopening, as initial open
2622
+ // failure doesn't need to be handled.
2623
+ // TODO cover transaction DB is not covered in this fault test too.
2624
+ bool ingest_meta_error = false;
2625
+ bool ingest_write_error = false;
2626
+ bool ingest_read_error = false;
2627
+ if ((FLAGS_open_metadata_write_fault_one_in ||
2628
+ FLAGS_open_write_fault_one_in || FLAGS_open_read_fault_one_in) &&
2629
+ fault_fs_guard
2630
+ ->FileExists(FLAGS_db + "/CURRENT", IOOptions(), nullptr)
2631
+ .ok()) {
2632
+ if (!FLAGS_sync) {
2633
+ // When DB Stress is not sync mode, we expect all WAL writes to
2634
+ // WAL is durable. Buffering unsynced writes will cause false
2635
+ // positive in crash tests. Before we figure out a way to
2636
+ // solve it, skip WAL from failure injection.
2637
+ fault_fs_guard->SetSkipDirectWritableTypes({kWalFile});
2638
+ }
2639
+ ingest_meta_error = FLAGS_open_metadata_write_fault_one_in;
2640
+ ingest_write_error = FLAGS_open_write_fault_one_in;
2641
+ ingest_read_error = FLAGS_open_read_fault_one_in;
2642
+ if (ingest_meta_error) {
2643
+ fault_fs_guard->EnableMetadataWriteErrorInjection();
2644
+ fault_fs_guard->SetRandomMetadataWriteError(
2645
+ FLAGS_open_metadata_write_fault_one_in);
2646
+ }
2647
+ if (ingest_write_error) {
2648
+ fault_fs_guard->SetFilesystemDirectWritable(false);
2649
+ fault_fs_guard->EnableWriteErrorInjection();
2650
+ fault_fs_guard->SetRandomWriteError(
2651
+ static_cast<uint32_t>(FLAGS_seed), FLAGS_open_write_fault_one_in,
2652
+ IOStatus::IOError("Injected Open Error"),
2653
+ /*inject_for_all_file_types=*/true, /*types=*/{});
2245
2654
  }
2246
- } else
2655
+ if (ingest_read_error) {
2656
+ fault_fs_guard->SetRandomReadError(FLAGS_open_read_fault_one_in);
2657
+ }
2658
+ }
2659
+ while (true) {
2660
+ #endif // NDEBUG
2661
+ #ifndef ROCKSDB_LITE
2662
+ // StackableDB-based BlobDB
2663
+ if (FLAGS_use_blob_db) {
2664
+ blob_db::BlobDBOptions blob_db_options;
2665
+ blob_db_options.min_blob_size = FLAGS_blob_db_min_blob_size;
2666
+ blob_db_options.bytes_per_sync = FLAGS_blob_db_bytes_per_sync;
2667
+ blob_db_options.blob_file_size = FLAGS_blob_db_file_size;
2668
+ blob_db_options.enable_garbage_collection = FLAGS_blob_db_enable_gc;
2669
+ blob_db_options.garbage_collection_cutoff = FLAGS_blob_db_gc_cutoff;
2670
+
2671
+ blob_db::BlobDB* blob_db = nullptr;
2672
+ s = blob_db::BlobDB::Open(options_, blob_db_options, FLAGS_db,
2673
+ cf_descriptors, &column_families_,
2674
+ &blob_db);
2675
+ if (s.ok()) {
2676
+ db_ = blob_db;
2677
+ }
2678
+ } else
2247
2679
  #endif // !ROCKSDB_LITE
2248
- {
2249
- if (db_preload_finished_.load() && FLAGS_read_only) {
2250
- s = DB::OpenForReadOnly(DBOptions(options_), FLAGS_db, cf_descriptors,
2251
- &column_families_, &db_);
2252
- } else {
2253
- s = DB::Open(DBOptions(options_), FLAGS_db, cf_descriptors,
2254
- &column_families_, &db_);
2680
+ {
2681
+ if (db_preload_finished_.load() && FLAGS_read_only) {
2682
+ s = DB::OpenForReadOnly(DBOptions(options_), FLAGS_db,
2683
+ cf_descriptors, &column_families_, &db_);
2684
+ } else {
2685
+ s = DB::Open(DBOptions(options_), FLAGS_db, cf_descriptors,
2686
+ &column_families_, &db_);
2687
+ }
2688
+ }
2689
+
2690
+ #ifndef NDEBUG
2691
+ if (ingest_meta_error || ingest_write_error || ingest_read_error) {
2692
+ fault_fs_guard->SetFilesystemDirectWritable(true);
2693
+ fault_fs_guard->DisableMetadataWriteErrorInjection();
2694
+ fault_fs_guard->DisableWriteErrorInjection();
2695
+ fault_fs_guard->SetSkipDirectWritableTypes({});
2696
+ fault_fs_guard->SetRandomReadError(0);
2697
+ if (s.ok()) {
2698
+ // Ingested errors might happen in background compactions. We
2699
+ // wait for all compactions to finish to make sure DB is in
2700
+ // clean state before executing queries.
2701
+ s = static_cast_with_check<DBImpl>(db_->GetRootDB())
2702
+ ->TEST_WaitForCompact(true);
2703
+ if (!s.ok()) {
2704
+ for (auto cf : column_families_) {
2705
+ delete cf;
2706
+ }
2707
+ column_families_.clear();
2708
+ delete db_;
2709
+ db_ = nullptr;
2710
+ }
2711
+ }
2712
+ if (!s.ok()) {
2713
+ // After failure to opening a DB due to IO error, retry should
2714
+ // successfully open the DB with correct data if no IO error shows
2715
+ // up.
2716
+ ingest_meta_error = false;
2717
+ ingest_write_error = false;
2718
+ ingest_read_error = false;
2719
+
2720
+ Random rand(static_cast<uint32_t>(FLAGS_seed));
2721
+ if (rand.OneIn(2)) {
2722
+ fault_fs_guard->DeleteFilesCreatedAfterLastDirSync(IOOptions(),
2723
+ nullptr);
2724
+ }
2725
+ if (rand.OneIn(3)) {
2726
+ fault_fs_guard->DropUnsyncedFileData();
2727
+ } else if (rand.OneIn(2)) {
2728
+ fault_fs_guard->DropRandomUnsyncedFileData(&rand);
2729
+ }
2730
+ continue;
2731
+ }
2255
2732
  }
2733
+ break;
2256
2734
  }
2735
+ #endif // NDEBUG
2257
2736
  } else {
2258
2737
  #ifndef ROCKSDB_LITE
2259
2738
  TransactionDBOptions txn_db_options;
@@ -2265,7 +2744,13 @@ void StressTest::Open() {
2265
2744
  options_.unordered_write = true;
2266
2745
  options_.two_write_queues = true;
2267
2746
  txn_db_options.skip_concurrency_control = true;
2747
+ } else {
2748
+ options_.two_write_queues = FLAGS_two_write_queues;
2268
2749
  }
2750
+ txn_db_options.wp_snapshot_cache_bits =
2751
+ static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
2752
+ txn_db_options.wp_commit_cache_bits =
2753
+ static_cast<size_t>(FLAGS_wp_commit_cache_bits);
2269
2754
  s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
2270
2755
  cf_descriptors, &column_families_, &txn_db_);
2271
2756
  if (!s.ok()) {
@@ -2297,7 +2782,7 @@ void StressTest::Open() {
2297
2782
  assert(!s.ok() || column_families_.size() ==
2298
2783
  static_cast<size_t>(FLAGS_column_families));
2299
2784
 
2300
- if (FLAGS_test_secondary) {
2785
+ if (s.ok() && FLAGS_test_secondary) {
2301
2786
  #ifndef ROCKSDB_LITE
2302
2787
  secondaries_.resize(FLAGS_threads);
2303
2788
  std::fill(secondaries_.begin(), secondaries_.end(), nullptr);
@@ -2318,13 +2803,16 @@ void StressTest::Open() {
2318
2803
  break;
2319
2804
  }
2320
2805
  }
2321
- assert(s.ok());
2322
2806
  #else
2323
2807
  fprintf(stderr, "Secondary is not supported in RocksDBLite\n");
2324
2808
  exit(1);
2325
2809
  #endif
2326
2810
  }
2327
- if (FLAGS_continuous_verification_interval > 0 && !cmp_db_) {
2811
+ // Secondary instance does not support write-prepared/write-unprepared
2812
+ // transactions, thus just disable secondary instance if we use
2813
+ // transaction.
2814
+ if (s.ok() && FLAGS_continuous_verification_interval > 0 &&
2815
+ !FLAGS_use_txn && !cmp_db_) {
2328
2816
  Options tmp_opts;
2329
2817
  // TODO(yanqin) support max_open_files != -1 for secondary instance.
2330
2818
  tmp_opts.max_open_files = -1;
@@ -2374,7 +2862,7 @@ void StressTest::Reopen(ThreadState* thread) {
2374
2862
  // the db via a callbac ii) they hold on to a snapshot and the upcoming
2375
2863
  // ::Close would complain about it.
2376
2864
  const bool write_prepared = FLAGS_use_txn && FLAGS_txn_write_policy != 0;
2377
- bool bg_canceled = false;
2865
+ bool bg_canceled __attribute__((unused)) = false;
2378
2866
  if (write_prepared || thread->rand.OneIn(2)) {
2379
2867
  const bool wait =
2380
2868
  write_prepared || static_cast<bool>(thread->rand.OneIn(2));
@@ -2382,7 +2870,6 @@ void StressTest::Reopen(ThreadState* thread) {
2382
2870
  bg_canceled = wait;
2383
2871
  }
2384
2872
  assert(!write_prepared || bg_canceled);
2385
- (void) bg_canceled;
2386
2873
  #else
2387
2874
  (void) thread;
2388
2875
  #endif
@@ -2420,11 +2907,80 @@ void StressTest::Reopen(ThreadState* thread) {
2420
2907
  secondaries_.clear();
2421
2908
 
2422
2909
  num_times_reopened_++;
2423
- auto now = db_stress_env->NowMicros();
2910
+ auto now = clock_->NowMicros();
2424
2911
  fprintf(stdout, "%s Reopening database for the %dth time\n",
2425
- db_stress_env->TimeToString(now / 1000000).c_str(),
2426
- num_times_reopened_);
2912
+ clock_->TimeToString(now / 1000000).c_str(), num_times_reopened_);
2427
2913
  Open();
2914
+
2915
+ if ((FLAGS_sync_fault_injection || FLAGS_disable_wal) && IsStateTracked()) {
2916
+ Status s = thread->shared->SaveAtAndAfter(db_);
2917
+ if (!s.ok()) {
2918
+ fprintf(stderr, "Error enabling history tracing: %s\n",
2919
+ s.ToString().c_str());
2920
+ exit(1);
2921
+ }
2922
+ }
2923
+ }
2924
+
2925
+ void StressTest::CheckAndSetOptionsForUserTimestamp() {
2926
+ assert(FLAGS_user_timestamp_size > 0);
2927
+ const Comparator* const cmp = test::BytewiseComparatorWithU64TsWrapper();
2928
+ assert(cmp);
2929
+ if (FLAGS_user_timestamp_size != cmp->timestamp_size()) {
2930
+ fprintf(stderr,
2931
+ "Only -user_timestamp_size=%d is supported in stress test.\n",
2932
+ static_cast<int>(cmp->timestamp_size()));
2933
+ exit(1);
2934
+ }
2935
+ if (FLAGS_use_merge || FLAGS_use_full_merge_v1) {
2936
+ fprintf(stderr, "Merge does not support timestamp yet.\n");
2937
+ exit(1);
2938
+ }
2939
+ if (FLAGS_delrangepercent > 0) {
2940
+ fprintf(stderr, "DeleteRange does not support timestamp yet.\n");
2941
+ exit(1);
2942
+ }
2943
+ if (FLAGS_use_txn) {
2944
+ fprintf(stderr, "TransactionDB does not support timestamp yet.\n");
2945
+ exit(1);
2946
+ }
2947
+ if (FLAGS_read_only) {
2948
+ fprintf(stderr, "When opened as read-only, timestamp not supported.\n");
2949
+ exit(1);
2950
+ }
2951
+ if (FLAGS_test_secondary || FLAGS_secondary_catch_up_one_in > 0 ||
2952
+ FLAGS_continuous_verification_interval > 0) {
2953
+ fprintf(stderr, "Secondary instance does not support timestamp.\n");
2954
+ exit(1);
2955
+ }
2956
+ if (FLAGS_checkpoint_one_in > 0) {
2957
+ fprintf(stderr,
2958
+ "-checkpoint_one_in=%d requires "
2959
+ "DBImplReadOnly, which is not supported with timestamp\n",
2960
+ FLAGS_checkpoint_one_in);
2961
+ exit(1);
2962
+ }
2963
+ #ifndef ROCKSDB_LITE
2964
+ if (FLAGS_enable_blob_files || FLAGS_use_blob_db) {
2965
+ fprintf(stderr, "BlobDB not supported with timestamp.\n");
2966
+ exit(1);
2967
+ }
2968
+ #endif // !ROCKSDB_LITE
2969
+ if (FLAGS_enable_compaction_filter) {
2970
+ fprintf(stderr, "CompactionFilter not supported with timestamp.\n");
2971
+ exit(1);
2972
+ }
2973
+ if (FLAGS_test_cf_consistency || FLAGS_test_batches_snapshots) {
2974
+ fprintf(stderr,
2975
+ "Due to per-key ts-seq ordering constraint, only the (default) "
2976
+ "non-batched test is supported with timestamp.\n");
2977
+ exit(1);
2978
+ }
2979
+ if (FLAGS_ingest_external_file_one_in > 0) {
2980
+ fprintf(stderr, "Bulk loading may not support timestamp yet.\n");
2981
+ exit(1);
2982
+ }
2983
+ options_.comparator = cmp;
2428
2984
  }
2429
2985
  } // namespace ROCKSDB_NAMESPACE
2430
2986
  #endif // GFLAGS