@nxtedition/rocksdb 8.2.0 → 8.2.2

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 (321) hide show
  1. package/binding.cc +3 -3
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
  3. package/deps/rocksdb/rocksdb/Makefile +10 -5
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -345
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
  15. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
  17. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
  25. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
  29. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
  30. package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
  31. package/deps/rocksdb/rocksdb/db/builder.h +2 -2
  32. package/deps/rocksdb/rocksdb/db/c.cc +76 -5
  33. package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
  34. package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
  50. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
  51. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  52. package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
  53. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
  55. package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
  58. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
  71. package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
  72. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
  73. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
  74. package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
  75. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
  76. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
  77. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
  78. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
  79. package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
  80. package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
  81. package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
  82. package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
  83. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
  84. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
  85. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
  86. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
  87. package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
  88. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  89. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
  90. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
  91. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
  92. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
  93. package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
  94. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
  95. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
  96. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
  97. package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
  98. package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
  99. package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
  100. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
  101. package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
  102. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
  103. package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
  104. package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
  105. package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
  106. package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
  107. package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
  108. package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
  109. package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
  110. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
  111. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
  113. package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
  114. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
  115. package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
  116. package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
  117. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
  118. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
  119. package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
  120. package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
  121. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
  122. package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
  123. package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
  124. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
  125. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
  126. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  127. package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
  128. package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
  129. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
  130. package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
  131. package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
  145. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
  146. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
  149. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
  150. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
  151. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
  152. package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
  153. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  154. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
  155. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
  156. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
  157. package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
  158. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  159. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
  160. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
  161. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
  162. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
  163. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
  164. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
  165. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
  166. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
  167. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
  168. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
  169. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
  171. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
  173. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
  174. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
  175. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
  176. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
  177. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
  178. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
  179. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
  186. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
  188. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
  189. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
  192. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
  193. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  194. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
  195. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
  196. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
  197. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
  198. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
  199. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
  200. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
  201. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  202. package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
  203. package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
  204. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
  205. package/deps/rocksdb/rocksdb/options/options.cc +12 -53
  206. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  207. package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
  208. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
  209. package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
  210. package/deps/rocksdb/rocksdb/port/lang.h +27 -0
  211. package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
  212. package/deps/rocksdb/rocksdb/src.mk +2 -0
  213. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
  214. package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
  215. package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
  216. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
  217. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
  218. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
  219. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
  220. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
  221. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
  222. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
  223. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
  224. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
  225. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
  226. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
  228. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
  229. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
  230. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
  232. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
  233. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
  234. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
  235. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
  236. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
  237. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
  238. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
  239. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
  240. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
  241. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
  242. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
  243. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
  244. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
  245. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
  247. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
  248. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
  249. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
  250. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
  251. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  252. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  253. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
  254. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
  255. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
  256. package/deps/rocksdb/rocksdb/table/format.cc +4 -4
  257. package/deps/rocksdb/rocksdb/table/format.h +1 -1
  258. package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
  259. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
  260. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  261. package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
  262. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
  263. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
  264. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
  266. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
  267. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
  268. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
  269. package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
  270. package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
  271. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
  272. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
  275. package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
  277. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
  278. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
  279. package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
  280. package/deps/rocksdb/rocksdb/util/compression.h +1 -1
  281. package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
  282. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
  283. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
  284. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  285. package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
  286. package/deps/rocksdb/rocksdb/util/math.h +12 -7
  287. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
  288. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
  289. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
  290. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
  291. package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
  292. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
  293. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  294. package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
  295. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
  296. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
  297. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
  298. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
  299. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  300. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
  301. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
  302. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
  303. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
  304. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
  305. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
  306. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
  307. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
  308. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
  309. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
  310. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
  311. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
  312. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
  313. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
  314. package/package.json +1 -1
  315. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  316. package/prebuilds/linux-x64/node.napi.node +0 -0
  317. /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
  318. /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
  319. /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
  320. /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
  321. /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
@@ -31,6 +31,7 @@ namespace ROCKSDB_NAMESPACE {
31
31
  namespace {
32
32
  static std::shared_ptr<ROCKSDB_NAMESPACE::Env> env_guard;
33
33
  static std::shared_ptr<ROCKSDB_NAMESPACE::Env> env_wrapper_guard;
34
+ static std::shared_ptr<ROCKSDB_NAMESPACE::Env> legacy_env_wrapper_guard;
34
35
  static std::shared_ptr<ROCKSDB_NAMESPACE::CompositeEnvWrapper>
35
36
  dbsl_env_wrapper_guard;
36
37
  static std::shared_ptr<CompositeEnvWrapper> fault_env_guard;
@@ -104,7 +105,11 @@ int db_stress_tool(int argc, char** argv) {
104
105
  // legacy EnvWrapper. This is a workaround to prevent MultiGet and scans
105
106
  // from failing when IO uring is disabled. The EnvWrapper
106
107
  // has a default implementation of ReadAsync that redirects to Read.
107
- env_wrapper_guard = std::make_shared<EnvWrapper>(env_wrapper_guard);
108
+ legacy_env_wrapper_guard = std::make_shared<EnvWrapper>(raw_env);
109
+ env_wrapper_guard = std::make_shared<CompositeEnvWrapper>(
110
+ legacy_env_wrapper_guard,
111
+ std::make_shared<DbStressFSWrapper>(
112
+ legacy_env_wrapper_guard->GetFileSystem()));
108
113
  }
109
114
  db_stress_env = env_wrapper_guard.get();
110
115
 
@@ -3,88 +3,125 @@
3
3
  // COPYING file in the root directory) and Apache 2.0 License
4
4
  // (found in the LICENSE.Apache file in the root directory).
5
5
 
6
+ #include <atomic>
6
7
  #ifdef GFLAGS
7
8
 
8
- #include "db_stress_tool/expected_state.h"
9
9
 
10
10
  #include "db/wide/wide_column_serialization.h"
11
11
  #include "db_stress_tool/db_stress_common.h"
12
12
  #include "db_stress_tool/db_stress_shared_state.h"
13
+ #include "db_stress_tool/expected_state.h"
13
14
  #include "rocksdb/trace_reader_writer.h"
14
15
  #include "rocksdb/trace_record_result.h"
15
16
 
16
17
  namespace ROCKSDB_NAMESPACE {
17
-
18
18
  ExpectedState::ExpectedState(size_t max_key, size_t num_column_families)
19
19
  : max_key_(max_key),
20
20
  num_column_families_(num_column_families),
21
21
  values_(nullptr) {}
22
22
 
23
23
  void ExpectedState::ClearColumnFamily(int cf) {
24
- std::fill(&Value(cf, 0 /* key */), &Value(cf + 1, 0 /* key */),
25
- SharedState::DELETION_SENTINEL);
24
+ const uint32_t del_mask = ExpectedValue::GetDelMask();
25
+ std::fill(&Value(cf, 0 /* key */), &Value(cf + 1, 0 /* key */), del_mask);
26
26
  }
27
27
 
28
- void ExpectedState::Put(int cf, int64_t key, uint32_t value_base,
29
- bool pending) {
30
- if (!pending) {
31
- // prevent expected-value update from reordering before Write
32
- std::atomic_thread_fence(std::memory_order_release);
33
- }
34
- Value(cf, key).store(pending ? SharedState::UNKNOWN_SENTINEL : value_base,
35
- std::memory_order_relaxed);
36
- if (pending) {
37
- // prevent Write from reordering before expected-value update
38
- std::atomic_thread_fence(std::memory_order_release);
39
- }
28
+ void ExpectedState::Precommit(int cf, int64_t key, const ExpectedValue& value) {
29
+ Value(cf, key).store(value.Read());
30
+ // To prevent low-level instruction reordering that results
31
+ // in db write happens before setting pending state in expected value
32
+ std::atomic_thread_fence(std::memory_order_release);
40
33
  }
41
34
 
42
- uint32_t ExpectedState::Get(int cf, int64_t key) const {
43
- return Value(cf, key);
35
+ PendingExpectedValue ExpectedState::PreparePut(int cf, int64_t key) {
36
+ ExpectedValue expected_value = Load(cf, key);
37
+ const ExpectedValue orig_expected_value = expected_value;
38
+ expected_value.Put(true /* pending */);
39
+ const ExpectedValue pending_expected_value = expected_value;
40
+ expected_value.Put(false /* pending */);
41
+ const ExpectedValue final_expected_value = expected_value;
42
+ Precommit(cf, key, pending_expected_value);
43
+ return PendingExpectedValue(&Value(cf, key), orig_expected_value,
44
+ final_expected_value);
44
45
  }
45
46
 
46
- bool ExpectedState::Delete(int cf, int64_t key, bool pending) {
47
- if (Value(cf, key) == SharedState::DELETION_SENTINEL) {
48
- return false;
49
- }
50
- Put(cf, key, SharedState::DELETION_SENTINEL, pending);
51
- return true;
47
+ ExpectedValue ExpectedState::Get(int cf, int64_t key) { return Load(cf, key); }
48
+
49
+ PendingExpectedValue ExpectedState::PrepareDelete(int cf, int64_t key,
50
+ bool* prepared) {
51
+ ExpectedValue expected_value = Load(cf, key);
52
+ const ExpectedValue orig_expected_value = expected_value;
53
+ bool res = expected_value.Delete(true /* pending */);
54
+ if (prepared) {
55
+ *prepared = res;
56
+ }
57
+ if (!res) {
58
+ return PendingExpectedValue(&Value(cf, key), orig_expected_value,
59
+ orig_expected_value);
60
+ }
61
+ const ExpectedValue pending_expected_value = expected_value;
62
+ expected_value.Delete(false /* pending */);
63
+ const ExpectedValue final_expected_value = expected_value;
64
+ Precommit(cf, key, pending_expected_value);
65
+ return PendingExpectedValue(&Value(cf, key), orig_expected_value,
66
+ final_expected_value);
52
67
  }
53
68
 
54
- bool ExpectedState::SingleDelete(int cf, int64_t key, bool pending) {
55
- return Delete(cf, key, pending);
69
+ PendingExpectedValue ExpectedState::PrepareSingleDelete(int cf, int64_t key) {
70
+ return PrepareDelete(cf, key);
56
71
  }
57
72
 
58
- int ExpectedState::DeleteRange(int cf, int64_t begin_key, int64_t end_key,
59
- bool pending) {
60
- int covered = 0;
73
+ std::vector<PendingExpectedValue> ExpectedState::PrepareDeleteRange(
74
+ int cf, int64_t begin_key, int64_t end_key) {
75
+ std::vector<PendingExpectedValue> pending_expected_values;
61
76
  for (int64_t key = begin_key; key < end_key; ++key) {
62
- if (Delete(cf, key, pending)) {
63
- ++covered;
77
+ bool prepared = false;
78
+ PendingExpectedValue pending_expected_value =
79
+ PrepareDelete(cf, key, &prepared);
80
+ if (prepared) {
81
+ pending_expected_values.push_back(pending_expected_value);
64
82
  }
65
83
  }
66
- return covered;
84
+ return pending_expected_values;
67
85
  }
68
86
 
69
87
  bool ExpectedState::Exists(int cf, int64_t key) {
70
- // UNKNOWN_SENTINEL counts as exists. That assures a key for which overwrite
71
- // is disallowed can't be accidentally added a second time, in which case
72
- // SingleDelete wouldn't be able to properly delete the key. It does allow
73
- // the case where a SingleDelete might be added which covers nothing, but
74
- // that's not a correctness issue.
75
- uint32_t expected_value = Value(cf, key).load();
76
- return expected_value != SharedState::DELETION_SENTINEL;
88
+ return Load(cf, key).Exists();
77
89
  }
78
90
 
79
91
  void ExpectedState::Reset() {
92
+ const uint32_t del_mask = ExpectedValue::GetDelMask();
80
93
  for (size_t i = 0; i < num_column_families_; ++i) {
81
94
  for (size_t j = 0; j < max_key_; ++j) {
82
- Value(static_cast<int>(i), j)
83
- .store(SharedState::DELETION_SENTINEL, std::memory_order_relaxed);
95
+ Value(static_cast<int>(i), j).store(del_mask, std::memory_order_relaxed);
84
96
  }
85
97
  }
86
98
  }
87
99
 
100
+ void ExpectedState::SyncPut(int cf, int64_t key, uint32_t value_base) {
101
+ ExpectedValue expected_value = Load(cf, key);
102
+ expected_value.SyncPut(value_base);
103
+ Value(cf, key).store(expected_value.Read());
104
+ }
105
+
106
+ void ExpectedState::SyncPendingPut(int cf, int64_t key) {
107
+ ExpectedValue expected_value = Load(cf, key);
108
+ expected_value.SyncPendingPut();
109
+ Value(cf, key).store(expected_value.Read());
110
+ }
111
+
112
+ void ExpectedState::SyncDelete(int cf, int64_t key) {
113
+ ExpectedValue expected_value = Load(cf, key);
114
+ expected_value.SyncDelete();
115
+ Value(cf, key).store(expected_value.Read());
116
+ }
117
+
118
+ void ExpectedState::SyncDeleteRange(int cf, int64_t begin_key,
119
+ int64_t end_key) {
120
+ for (int64_t key = begin_key; key < end_key; ++key) {
121
+ SyncDelete(cf, key);
122
+ }
123
+ }
124
+
88
125
  FileExpectedState::FileExpectedState(std::string expected_state_file_path,
89
126
  size_t max_key, size_t num_column_families)
90
127
  : ExpectedState(max_key, num_column_families),
@@ -385,7 +422,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
385
422
  if (!GetIntVal(key.ToString(), &key_id)) {
386
423
  return Status::Corruption("unable to parse key", key.ToString());
387
424
  }
388
- uint32_t value_id = GetValueBase(value);
425
+ uint32_t value_base = GetValueBase(value);
389
426
 
390
427
  bool should_buffer_write = !(buffered_writes_ == nullptr);
391
428
  if (should_buffer_write) {
@@ -393,8 +430,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
393
430
  key, value);
394
431
  }
395
432
 
396
- state_->Put(column_family_id, static_cast<int64_t>(key_id), value_id,
397
- false /* pending */);
433
+ state_->SyncPut(column_family_id, static_cast<int64_t>(key_id), value_base);
398
434
  ++num_write_ops_;
399
435
  return Status::OK();
400
436
  }
@@ -431,8 +467,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
431
467
 
432
468
  const uint32_t value_base = GetValueBase(columns.front().value());
433
469
 
434
- state_->Put(column_family_id, static_cast<int64_t>(key_id), value_base,
435
- false /* pending */);
470
+ state_->SyncPut(column_family_id, static_cast<int64_t>(key_id), value_base);
436
471
 
437
472
  ++num_write_ops_;
438
473
 
@@ -454,8 +489,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
454
489
  column_family_id, key);
455
490
  }
456
491
 
457
- state_->Delete(column_family_id, static_cast<int64_t>(key_id),
458
- false /* pending */);
492
+ state_->SyncDelete(column_family_id, static_cast<int64_t>(key_id));
459
493
  ++num_write_ops_;
460
494
  return Status::OK();
461
495
  }
@@ -499,8 +533,9 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
499
533
  buffered_writes_.get(), column_family_id, begin_key, end_key);
500
534
  }
501
535
 
502
- state_->DeleteRange(column_family_id, static_cast<int64_t>(begin_key_id),
503
- static_cast<int64_t>(end_key_id), false /* pending */);
536
+ state_->SyncDeleteRange(column_family_id,
537
+ static_cast<int64_t>(begin_key_id),
538
+ static_cast<int64_t>(end_key_id));
504
539
  ++num_write_ops_;
505
540
  return Status::OK();
506
541
  }
@@ -13,6 +13,7 @@
13
13
  #include <memory>
14
14
 
15
15
  #include "db/dbformat.h"
16
+ #include "db_stress_tool/expected_value.h"
16
17
  #include "file/file_util.h"
17
18
  #include "rocksdb/db.h"
18
19
  #include "rocksdb/env.h"
@@ -22,9 +23,8 @@
22
23
  #include "util/string_util.h"
23
24
 
24
25
  namespace ROCKSDB_NAMESPACE {
25
-
26
- // An `ExpectedState` provides read/write access to expected values for every
27
- // key.
26
+ // `ExpectedState` provides read/write access to expected values stored in
27
+ // `ExpectedState` for every key.
28
28
  class ExpectedState {
29
29
  public:
30
30
  explicit ExpectedState(size_t max_key, size_t num_column_families);
@@ -38,43 +38,79 @@ class ExpectedState {
38
38
  // Requires external locking covering all keys in `cf`.
39
39
  void ClearColumnFamily(int cf);
40
40
 
41
- // @param pending True if the update may have started but is not yet
42
- // guaranteed finished. This is useful for crash-recovery testing when the
43
- // process may crash before updating the expected values array.
41
+ // Prepare a Put that will be started but not finished yet
42
+ // This is useful for crash-recovery testing when the process may crash
43
+ // before updating the corresponding expected value
44
44
  //
45
- // Requires external locking covering `key` in `cf`.
46
- void Put(int cf, int64_t key, uint32_t value_base, bool pending);
45
+ // Requires external locking covering `key` in `cf` to prevent concurrent
46
+ // write or delete to the same `key`.
47
+ PendingExpectedValue PreparePut(int cf, int64_t key);
47
48
 
48
- // Requires external locking covering `key` in `cf`.
49
- uint32_t Get(int cf, int64_t key) const;
49
+ // Does not requires external locking.
50
+ ExpectedValue Get(int cf, int64_t key);
50
51
 
51
- // @param pending See comment above Put()
52
- // Returns true if the key was not yet deleted.
52
+ // Prepare a Delete that will be started but not finished yet
53
+ // This is useful for crash-recovery testing when the process may crash
54
+ // before updating the corresponding expected value
53
55
  //
54
- // Requires external locking covering `key` in `cf`.
55
- bool Delete(int cf, int64_t key, bool pending);
56
+ // Requires external locking covering `key` in `cf` to prevent concurrent
57
+ // write or delete to the same `key`.
58
+ PendingExpectedValue PrepareDelete(int cf, int64_t key,
59
+ bool* prepared = nullptr);
60
+
61
+ // Requires external locking covering `key` in `cf` to prevent concurrent
62
+ // write or delete to the same `key`.
63
+ PendingExpectedValue PrepareSingleDelete(int cf, int64_t key);
64
+
65
+ // Requires external locking covering keys in `[begin_key, end_key)` in `cf`
66
+ // to prevent concurrent write or delete to the same `key`.
67
+ std::vector<PendingExpectedValue> PrepareDeleteRange(int cf,
68
+ int64_t begin_key,
69
+ int64_t end_key);
70
+
71
+ // Update the expected value for start of an incomplete write or delete
72
+ // operation on the key assoicated with this expected value
73
+ void Precommit(int cf, int64_t key, const ExpectedValue& value);
74
+
75
+ // Requires external locking covering `key` in `cf` to prevent concurrent
76
+ // delete to the same `key`.
77
+ bool Exists(int cf, int64_t key);
56
78
 
57
- // @param pending See comment above Put()
58
- // Returns true if the key was not yet deleted.
79
+ // Sync the `value_base` to the corresponding expected value
59
80
  //
60
- // Requires external locking covering `key` in `cf`.
61
- bool SingleDelete(int cf, int64_t key, bool pending);
81
+ // Requires external locking covering `key` in `cf` or be in single thread
82
+ // to prevent concurrent write or delete to the same `key`
83
+ void SyncPut(int cf, int64_t key, uint32_t value_base);
62
84
 
63
- // @param pending See comment above Put()
64
- // Returns number of keys deleted by the call.
85
+ // Sync the corresponding expected value to be pending Put
65
86
  //
66
- // Requires external locking covering keys in `[begin_key, end_key)` in `cf`.
67
- int DeleteRange(int cf, int64_t begin_key, int64_t end_key, bool pending);
87
+ // Requires external locking covering `key` in `cf` or be in single thread
88
+ // to prevent concurrent write or delete to the same `key`
89
+ void SyncPendingPut(int cf, int64_t key);
68
90
 
69
- // Requires external locking covering `key` in `cf`.
70
- bool Exists(int cf, int64_t key);
91
+ // Sync the corresponding expected value to be deleted
92
+ //
93
+ // Requires external locking covering `key` in `cf` or be in single thread
94
+ // to prevent concurrent write or delete to the same `key`
95
+ void SyncDelete(int cf, int64_t key);
96
+
97
+ // Sync the corresponding expected values to be deleted
98
+ //
99
+ // Requires external locking covering keys in `[begin_key, end_key)` in `cf`
100
+ // to prevent concurrent write or delete to the same `key`
101
+ void SyncDeleteRange(int cf, int64_t begin_key, int64_t end_key);
71
102
 
72
103
  private:
73
- // Requires external locking covering `key` in `cf`.
104
+ // Does not requires external locking.
74
105
  std::atomic<uint32_t>& Value(int cf, int64_t key) const {
75
106
  return values_[cf * max_key_ + key];
76
107
  }
77
108
 
109
+ // Does not requires external locking
110
+ ExpectedValue Load(int cf, int64_t key) const {
111
+ return ExpectedValue(Value(cf, key).load());
112
+ }
113
+
78
114
  const size_t max_key_;
79
115
  const size_t num_column_families_;
80
116
 
@@ -160,45 +196,52 @@ class ExpectedStateManager {
160
196
  // Requires external locking covering all keys in `cf`.
161
197
  void ClearColumnFamily(int cf) { return latest_->ClearColumnFamily(cf); }
162
198
 
163
- // @param pending True if the update may have started but is not yet
164
- // guaranteed finished. This is useful for crash-recovery testing when the
165
- // process may crash before updating the expected values array.
166
- //
167
- // Requires external locking covering `key` in `cf`.
168
- void Put(int cf, int64_t key, uint32_t value_base, bool pending) {
169
- return latest_->Put(cf, key, value_base, pending);
199
+ // See ExpectedState::PreparePut()
200
+ PendingExpectedValue PreparePut(int cf, int64_t key) {
201
+ return latest_->PreparePut(cf, key);
170
202
  }
171
203
 
172
- // Requires external locking covering `key` in `cf`.
173
- uint32_t Get(int cf, int64_t key) const { return latest_->Get(cf, key); }
204
+ // See ExpectedState::Get()
205
+ ExpectedValue Get(int cf, int64_t key) { return latest_->Get(cf, key); }
174
206
 
175
- // @param pending See comment above Put()
176
- // Returns true if the key was not yet deleted.
177
- //
178
- // Requires external locking covering `key` in `cf`.
179
- bool Delete(int cf, int64_t key, bool pending) {
180
- return latest_->Delete(cf, key, pending);
207
+ // See ExpectedState::PrepareDelete()
208
+ PendingExpectedValue PrepareDelete(int cf, int64_t key) {
209
+ return latest_->PrepareDelete(cf, key);
181
210
  }
182
211
 
183
- // @param pending See comment above Put()
184
- // Returns true if the key was not yet deleted.
185
- //
186
- // Requires external locking covering `key` in `cf`.
187
- bool SingleDelete(int cf, int64_t key, bool pending) {
188
- return latest_->SingleDelete(cf, key, pending);
212
+ // See ExpectedState::PrepareSingleDelete()
213
+ PendingExpectedValue PrepareSingleDelete(int cf, int64_t key) {
214
+ return latest_->PrepareSingleDelete(cf, key);
189
215
  }
190
216
 
191
- // @param pending See comment above Put()
192
- // Returns number of keys deleted by the call.
193
- //
194
- // Requires external locking covering keys in `[begin_key, end_key)` in `cf`.
195
- int DeleteRange(int cf, int64_t begin_key, int64_t end_key, bool pending) {
196
- return latest_->DeleteRange(cf, begin_key, end_key, pending);
217
+ // See ExpectedState::PrepareDeleteRange()
218
+ std::vector<PendingExpectedValue> PrepareDeleteRange(int cf,
219
+ int64_t begin_key,
220
+ int64_t end_key) {
221
+ return latest_->PrepareDeleteRange(cf, begin_key, end_key);
197
222
  }
198
223
 
199
- // Requires external locking covering `key` in `cf`.
224
+ // See ExpectedState::Exists()
200
225
  bool Exists(int cf, int64_t key) { return latest_->Exists(cf, key); }
201
226
 
227
+ // See ExpectedState::SyncPut()
228
+ void SyncPut(int cf, int64_t key, uint32_t value_base) {
229
+ return latest_->SyncPut(cf, key, value_base);
230
+ }
231
+
232
+ // See ExpectedState::SyncPendingPut()
233
+ void SyncPendingPut(int cf, int64_t key) {
234
+ return latest_->SyncPendingPut(cf, key);
235
+ }
236
+
237
+ // See ExpectedState::SyncDelete()
238
+ void SyncDelete(int cf, int64_t key) { return latest_->SyncDelete(cf, key); }
239
+
240
+ // See ExpectedState::SyncDeleteRange()
241
+ void SyncDeleteRange(int cf, int64_t begin_key, int64_t end_key) {
242
+ return latest_->SyncDeleteRange(cf, begin_key, end_key);
243
+ }
244
+
202
245
  protected:
203
246
  const size_t max_key_;
204
247
  const size_t num_column_families_;
@@ -281,7 +324,6 @@ class AnonExpectedStateManager : public ExpectedStateManager {
281
324
  // member function.
282
325
  Status Open() override;
283
326
  };
284
-
285
327
  } // namespace ROCKSDB_NAMESPACE
286
328
 
287
329
  #endif // GFLAGS
@@ -0,0 +1,122 @@
1
+ // Copyright (c) 2021-present, Facebook, Inc. All rights reserved.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+
6
+ #ifdef GFLAGS
7
+
8
+ #include "db_stress_tool/expected_value.h"
9
+
10
+ #include <atomic>
11
+
12
+ namespace ROCKSDB_NAMESPACE {
13
+ void ExpectedValue::Put(bool pending) {
14
+ if (pending) {
15
+ SetPendingWrite();
16
+ } else {
17
+ SetValueBase(NextValueBase());
18
+ ClearDeleted();
19
+ ClearPendingWrite();
20
+ }
21
+ }
22
+
23
+ bool ExpectedValue::Delete(bool pending) {
24
+ if (!Exists()) {
25
+ return false;
26
+ }
27
+ if (pending) {
28
+ SetPendingDel();
29
+ } else {
30
+ SetDelCounter(NextDelCounter());
31
+ SetDeleted();
32
+ ClearPendingDel();
33
+ }
34
+ return true;
35
+ }
36
+
37
+ void ExpectedValue::SyncPut(uint32_t value_base) {
38
+ assert(ExpectedValue::IsValueBaseValid(value_base));
39
+
40
+ SetValueBase(value_base);
41
+ ClearDeleted();
42
+ ClearPendingWrite();
43
+
44
+ // This is needed in case crash happens during a pending delete of the key
45
+ // assocated with this expected value
46
+ ClearPendingDel();
47
+ }
48
+
49
+ void ExpectedValue::SyncPendingPut() { Put(true /* pending */); }
50
+
51
+ void ExpectedValue::SyncDelete() {
52
+ Delete(false /* pending */);
53
+ // This is needed in case crash happens during a pending write of the key
54
+ // assocated with this expected value
55
+ ClearPendingWrite();
56
+ }
57
+
58
+ uint32_t ExpectedValue::GetFinalValueBase() const {
59
+ return PendingWrite() ? NextValueBase() : GetValueBase();
60
+ }
61
+
62
+ uint32_t ExpectedValue::GetFinalDelCounter() const {
63
+ return PendingDelete() ? NextDelCounter() : GetDelCounter();
64
+ }
65
+
66
+ bool ExpectedValueHelper::MustHaveNotExisted(
67
+ ExpectedValue pre_read_expected_value,
68
+ ExpectedValue post_read_expected_value) {
69
+ const bool pre_read_expected_deleted = pre_read_expected_value.IsDeleted();
70
+
71
+ const uint32_t pre_read_expected_value_base =
72
+ pre_read_expected_value.GetValueBase();
73
+
74
+ const uint32_t post_read_expected_final_value_base =
75
+ post_read_expected_value.GetFinalValueBase();
76
+
77
+ const bool during_read_no_write_happened =
78
+ (pre_read_expected_value_base == post_read_expected_final_value_base);
79
+ return pre_read_expected_deleted && during_read_no_write_happened;
80
+ }
81
+
82
+ bool ExpectedValueHelper::MustHaveExisted(
83
+ ExpectedValue pre_read_expected_value,
84
+ ExpectedValue post_read_expected_value) {
85
+ const bool pre_read_expected_not_deleted =
86
+ !pre_read_expected_value.IsDeleted();
87
+
88
+ const uint32_t pre_read_expected_del_counter =
89
+ pre_read_expected_value.GetDelCounter();
90
+ const uint32_t post_read_expected_final_del_counter =
91
+ post_read_expected_value.GetFinalDelCounter();
92
+
93
+ const bool during_read_no_delete_happened =
94
+ (pre_read_expected_del_counter == post_read_expected_final_del_counter);
95
+
96
+ return pre_read_expected_not_deleted && during_read_no_delete_happened;
97
+ }
98
+
99
+ bool ExpectedValueHelper::InExpectedValueBaseRange(
100
+ uint32_t value_base, ExpectedValue pre_read_expected_value,
101
+ ExpectedValue post_read_expected_value) {
102
+ assert(ExpectedValue::IsValueBaseValid(value_base));
103
+
104
+ const uint32_t pre_read_expected_value_base =
105
+ pre_read_expected_value.GetValueBase();
106
+ const uint32_t post_read_expected_final_value_base =
107
+ post_read_expected_value.GetFinalValueBase();
108
+
109
+ if (pre_read_expected_value_base <= post_read_expected_final_value_base) {
110
+ const uint32_t lower_bound = pre_read_expected_value_base;
111
+ const uint32_t upper_bound = post_read_expected_final_value_base;
112
+ return lower_bound <= value_base && value_base <= upper_bound;
113
+ } else {
114
+ const uint32_t upper_bound_1 = post_read_expected_final_value_base;
115
+ const uint32_t lower_bound_2 = pre_read_expected_value_base;
116
+ const uint32_t upper_bound_2 = ExpectedValue::GetValueBaseMask();
117
+ return (value_base <= upper_bound_1) ||
118
+ (lower_bound_2 <= value_base && value_base <= upper_bound_2);
119
+ }
120
+ }
121
+ } // namespace ROCKSDB_NAMESPACE
122
+ #endif // GFLAGS