@nxtedition/rocksdb 8.2.7 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -56,7 +56,7 @@ StressTest::StressTest()
56
56
  filter_policy_(CreateFilterPolicy()),
57
57
  db_(nullptr),
58
58
  txn_db_(nullptr),
59
-
59
+ optimistic_txn_db_(nullptr),
60
60
  db_aptr_(nullptr),
61
61
  clock_(db_stress_env->GetSystemClock().get()),
62
62
  new_column_family_name_(1),
@@ -129,11 +129,20 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
129
129
  if (FLAGS_cache_type == "clock_cache") {
130
130
  fprintf(stderr, "Old clock cache implementation has been removed.\n");
131
131
  exit(1);
132
- } else if (FLAGS_cache_type == "hyper_clock_cache") {
133
- HyperClockCacheOptions opts(static_cast<size_t>(capacity),
134
- FLAGS_block_size /*estimated_entry_charge*/,
132
+ } else if (EndsWith(FLAGS_cache_type, "hyper_clock_cache")) {
133
+ size_t estimated_entry_charge;
134
+ if (FLAGS_cache_type == "fixed_hyper_clock_cache" ||
135
+ FLAGS_cache_type == "hyper_clock_cache") {
136
+ estimated_entry_charge = FLAGS_block_size;
137
+ } else if (FLAGS_cache_type == "auto_hyper_clock_cache") {
138
+ estimated_entry_charge = 0;
139
+ } else {
140
+ fprintf(stderr, "Cache type not supported.");
141
+ exit(1);
142
+ }
143
+ HyperClockCacheOptions opts(FLAGS_cache_size, estimated_entry_charge,
135
144
  num_shard_bits);
136
- opts.secondary_cache = std::move(secondary_cache);
145
+ opts.hash_seed = BitwiseAnd(FLAGS_seed, INT32_MAX);
137
146
  return opts.MakeSharedCache();
138
147
  } else if (FLAGS_cache_type == "lru_cache") {
139
148
  LRUCacheOptions opts;
@@ -301,7 +310,7 @@ void StressTest::FinishInitDb(SharedState* shared) {
301
310
  exit(1);
302
311
  }
303
312
  }
304
- if (FLAGS_use_txn) {
313
+ if (FLAGS_use_txn && !FLAGS_use_optimistic_txn) {
305
314
  // It's OK here without sync because unsynced data cannot be lost at this
306
315
  // point
307
316
  // - even with sync_fault_injection=1 as the
@@ -490,7 +499,6 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
490
499
 
491
500
  const Slice v(value, sz);
492
501
 
493
-
494
502
  std::string ts;
495
503
  if (FLAGS_user_timestamp_size > 0) {
496
504
  ts = GetNowNanos();
@@ -504,14 +512,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
504
512
  s = db_->Merge(write_opts, cfh, key, v);
505
513
  }
506
514
  } else {
507
- Transaction* txn;
508
- s = NewTxn(write_opts, &txn);
509
- if (s.ok()) {
510
- s = txn->Merge(cfh, key, v);
511
- if (s.ok()) {
512
- s = CommitTxn(txn);
513
- }
514
- }
515
+ s = ExecuteTransaction(
516
+ write_opts, /*thread=*/nullptr,
517
+ [&](Transaction& txn) { return txn.Merge(cfh, key, v); });
515
518
  }
516
519
  } else if (FLAGS_use_put_entity_one_in > 0) {
517
520
  s = db_->PutEntity(write_opts, cfh, key,
@@ -524,14 +527,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
524
527
  s = db_->Put(write_opts, cfh, key, v);
525
528
  }
526
529
  } else {
527
- Transaction* txn;
528
- s = NewTxn(write_opts, &txn);
529
- if (s.ok()) {
530
- s = txn->Put(cfh, key, v);
531
- if (s.ok()) {
532
- s = CommitTxn(txn);
533
- }
534
- }
530
+ s = ExecuteTransaction(
531
+ write_opts, /*thread=*/nullptr,
532
+ [&](Transaction& txn) { return txn.Put(cfh, key, v); });
535
533
  }
536
534
  }
537
535
 
@@ -556,6 +554,7 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
556
554
  delete db_;
557
555
  db_ = nullptr;
558
556
  txn_db_ = nullptr;
557
+ optimistic_txn_db_ = nullptr;
559
558
 
560
559
  db_preload_finished_.store(true);
561
560
  auto now = clock_->NowMicros();
@@ -628,74 +627,116 @@ void StressTest::ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
628
627
  }
629
628
  }
630
629
 
631
- Status StressTest::NewTxn(WriteOptions& write_opts, Transaction** txn) {
630
+ Status StressTest::NewTxn(WriteOptions& write_opts,
631
+ std::unique_ptr<Transaction>* out_txn) {
632
632
  if (!FLAGS_use_txn) {
633
633
  return Status::InvalidArgument("NewTxn when FLAGS_use_txn is not set");
634
634
  }
635
635
  write_opts.disableWAL = FLAGS_disable_wal;
636
636
  static std::atomic<uint64_t> txn_id = {0};
637
- TransactionOptions txn_options;
638
- txn_options.use_only_the_last_commit_time_batch_for_recovery =
639
- FLAGS_use_only_the_last_commit_time_batch_for_recovery;
640
- txn_options.lock_timeout = 600000; // 10 min
641
- txn_options.deadlock_detect = true;
642
- *txn = txn_db_->BeginTransaction(write_opts, txn_options);
643
- auto istr = std::to_string(txn_id.fetch_add(1));
644
- Status s = (*txn)->SetName("xid" + istr);
645
- return s;
637
+ if (FLAGS_use_optimistic_txn) {
638
+ out_txn->reset(optimistic_txn_db_->BeginTransaction(write_opts));
639
+ return Status::OK();
640
+ } else {
641
+ TransactionOptions txn_options;
642
+ txn_options.use_only_the_last_commit_time_batch_for_recovery =
643
+ FLAGS_use_only_the_last_commit_time_batch_for_recovery;
644
+ txn_options.lock_timeout = 600000; // 10 min
645
+ txn_options.deadlock_detect = true;
646
+ out_txn->reset(txn_db_->BeginTransaction(write_opts, txn_options));
647
+ auto istr = std::to_string(txn_id.fetch_add(1));
648
+ Status s = (*out_txn)->SetName("xid" + istr);
649
+ return s;
650
+ }
646
651
  }
647
652
 
648
- Status StressTest::CommitTxn(Transaction* txn, ThreadState* thread) {
653
+ Status StressTest::CommitTxn(Transaction& txn, ThreadState* thread) {
649
654
  if (!FLAGS_use_txn) {
650
655
  return Status::InvalidArgument("CommitTxn when FLAGS_use_txn is not set");
651
656
  }
652
- assert(txn_db_);
653
- Status s = txn->Prepare();
654
- std::shared_ptr<const Snapshot> timestamped_snapshot;
655
- if (s.ok()) {
656
- if (thread && FLAGS_create_timestamped_snapshot_one_in &&
657
- thread->rand.OneIn(FLAGS_create_timestamped_snapshot_one_in)) {
658
- uint64_t ts = db_stress_env->NowNanos();
659
- s = txn->CommitAndTryCreateSnapshot(/*notifier=*/nullptr, ts,
660
- &timestamped_snapshot);
661
-
662
- std::pair<Status, std::shared_ptr<const Snapshot>> res;
663
- if (thread->tid == 0) {
664
- uint64_t now = db_stress_env->NowNanos();
665
- res = txn_db_->CreateTimestampedSnapshot(now);
666
- if (res.first.ok()) {
667
- assert(res.second);
668
- assert(res.second->GetTimestamp() == now);
669
- if (timestamped_snapshot) {
670
- assert(res.second->GetTimestamp() >
671
- timestamped_snapshot->GetTimestamp());
657
+ Status s = Status::OK();
658
+ if (FLAGS_use_optimistic_txn) {
659
+ assert(optimistic_txn_db_);
660
+ s = txn.Commit();
661
+ } else {
662
+ assert(txn_db_);
663
+ s = txn.Prepare();
664
+ std::shared_ptr<const Snapshot> timestamped_snapshot;
665
+ if (s.ok()) {
666
+ if (thread && FLAGS_create_timestamped_snapshot_one_in &&
667
+ thread->rand.OneIn(FLAGS_create_timestamped_snapshot_one_in)) {
668
+ uint64_t ts = db_stress_env->NowNanos();
669
+ s = txn.CommitAndTryCreateSnapshot(/*notifier=*/nullptr, ts,
670
+ &timestamped_snapshot);
671
+
672
+ std::pair<Status, std::shared_ptr<const Snapshot>> res;
673
+ if (thread->tid == 0) {
674
+ uint64_t now = db_stress_env->NowNanos();
675
+ res = txn_db_->CreateTimestampedSnapshot(now);
676
+ if (res.first.ok()) {
677
+ assert(res.second);
678
+ assert(res.second->GetTimestamp() == now);
679
+ if (timestamped_snapshot) {
680
+ assert(res.second->GetTimestamp() >
681
+ timestamped_snapshot->GetTimestamp());
682
+ }
683
+ } else {
684
+ assert(!res.second);
672
685
  }
673
- } else {
674
- assert(!res.second);
675
686
  }
687
+ } else {
688
+ s = txn.Commit();
676
689
  }
677
- } else {
678
- s = txn->Commit();
690
+ }
691
+ if (thread && FLAGS_create_timestamped_snapshot_one_in > 0 &&
692
+ thread->rand.OneInOpt(50000)) {
693
+ uint64_t now = db_stress_env->NowNanos();
694
+ constexpr uint64_t time_diff = static_cast<uint64_t>(1000) * 1000 * 1000;
695
+ txn_db_->ReleaseTimestampedSnapshotsOlderThan(now - time_diff);
679
696
  }
680
697
  }
681
- if (thread && FLAGS_create_timestamped_snapshot_one_in > 0 &&
682
- thread->rand.OneInOpt(50000)) {
683
- uint64_t now = db_stress_env->NowNanos();
684
- constexpr uint64_t time_diff = static_cast<uint64_t>(1000) * 1000 * 1000;
685
- txn_db_->ReleaseTimestampedSnapshotsOlderThan(now - time_diff);
686
- }
687
- delete txn;
688
698
  return s;
689
699
  }
690
700
 
691
- Status StressTest::RollbackTxn(Transaction* txn) {
692
- if (!FLAGS_use_txn) {
693
- return Status::InvalidArgument(
694
- "RollbackTxn when FLAGS_use_txn is not"
695
- " set");
701
+ Status StressTest::ExecuteTransaction(
702
+ WriteOptions& write_opts, ThreadState* thread,
703
+ std::function<Status(Transaction&)>&& ops) {
704
+ std::unique_ptr<Transaction> txn;
705
+ Status s = NewTxn(write_opts, &txn);
706
+ std::string try_again_messages;
707
+ if (s.ok()) {
708
+ for (int tries = 1;; ++tries) {
709
+ s = ops(*txn);
710
+ if (s.ok()) {
711
+ s = CommitTxn(*txn, thread);
712
+ if (s.ok()) {
713
+ break;
714
+ }
715
+ }
716
+ // Optimistic txn might return TryAgain, in which case rollback
717
+ // and try again.
718
+ if (!s.IsTryAgain() || !FLAGS_use_optimistic_txn) {
719
+ break;
720
+ }
721
+ // Record and report historical TryAgain messages for debugging
722
+ try_again_messages +=
723
+ std::to_string(SystemClock::Default()->NowMicros() / 1000);
724
+ try_again_messages += "ms ";
725
+ try_again_messages += s.getState();
726
+ try_again_messages += "\n";
727
+ // In theory, each Rollback after TryAgain should have an independent
728
+ // chance of success, so too many retries could indicate something is
729
+ // not working properly.
730
+ if (tries >= 10) {
731
+ s = Status::TryAgain(try_again_messages);
732
+ break;
733
+ }
734
+ s = txn->Rollback();
735
+ if (!s.ok()) {
736
+ break;
737
+ }
738
+ }
696
739
  }
697
- Status s = txn->Rollback();
698
- delete txn;
699
740
  return s;
700
741
  }
701
742
 
@@ -907,12 +948,28 @@ void StressTest::OperateDb(ThreadState* thread) {
907
948
  }
908
949
 
909
950
  if (thread->rand.OneInOpt(FLAGS_verify_checksum_one_in)) {
951
+ ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
952
+ ThreadStatusUtil::SetThreadOperation(
953
+ ThreadStatus::OperationType::OP_VERIFY_DB_CHECKSUM);
910
954
  Status status = db_->VerifyChecksum();
955
+ ThreadStatusUtil::ResetThreadStatus();
911
956
  if (!status.ok()) {
912
957
  VerificationAbort(shared, "VerifyChecksum status not OK", status);
913
958
  }
914
959
  }
915
960
 
961
+ if (thread->rand.OneInOpt(FLAGS_verify_file_checksums_one_in)) {
962
+ ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
963
+ ThreadStatusUtil::SetThreadOperation(
964
+ ThreadStatus::OperationType::OP_VERIFY_FILE_CHECKSUMS);
965
+ Status status = db_->VerifyFileChecksums(read_opts);
966
+ ThreadStatusUtil::ResetThreadStatus();
967
+ if (!status.ok()) {
968
+ VerificationAbort(shared, "VerifyFileChecksums status not OK",
969
+ status);
970
+ }
971
+ }
972
+
916
973
  if (thread->rand.OneInOpt(FLAGS_get_property_one_in)) {
917
974
  TestGetProperty(thread);
918
975
  }
@@ -1012,10 +1069,18 @@ void StressTest::OperateDb(ThreadState* thread) {
1012
1069
  // If its the last iteration, ensure that multiget_batch_size is 1
1013
1070
  multiget_batch_size = std::max(multiget_batch_size, 1);
1014
1071
  rand_keys = GenerateNKeys(thread, multiget_batch_size, i);
1072
+ ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
1073
+ ThreadStatusUtil::SetThreadOperation(
1074
+ ThreadStatus::OperationType::OP_MULTIGET);
1015
1075
  TestMultiGet(thread, read_opts, rand_column_families, rand_keys);
1076
+ ThreadStatusUtil::ResetThreadStatus();
1016
1077
  i += multiget_batch_size - 1;
1017
1078
  } else {
1079
+ ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
1080
+ ThreadStatusUtil::SetThreadOperation(
1081
+ ThreadStatus::OperationType::OP_GET);
1018
1082
  TestGet(thread, read_opts, rand_column_families, rand_keys);
1083
+ ThreadStatusUtil::ResetThreadStatus();
1019
1084
  }
1020
1085
  } else if (prob_op < prefix_bound) {
1021
1086
  assert(static_cast<int>(FLAGS_readpercent) <= prob_op);
@@ -1044,8 +1109,12 @@ void StressTest::OperateDb(ThreadState* thread) {
1044
1109
  if (!FLAGS_skip_verifydb &&
1045
1110
  thread->rand.OneInOpt(
1046
1111
  FLAGS_verify_iterator_with_expected_state_one_in)) {
1112
+ ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
1113
+ ThreadStatusUtil::SetThreadOperation(
1114
+ ThreadStatus::OperationType::OP_DBITERATOR);
1047
1115
  TestIterateAgainstExpected(thread, read_opts, rand_column_families,
1048
1116
  rand_keys);
1117
+ ThreadStatusUtil::ResetThreadStatus();
1049
1118
  } else {
1050
1119
  int num_seeks = static_cast<int>(std::min(
1051
1120
  std::max(static_cast<uint64_t>(thread->rand.Uniform(4)),
@@ -1054,7 +1123,11 @@ void StressTest::OperateDb(ThreadState* thread) {
1054
1123
  static_cast<uint64_t>(1))));
1055
1124
  rand_keys = GenerateNKeys(thread, num_seeks, i);
1056
1125
  i += num_seeks - 1;
1126
+ ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
1127
+ ThreadStatusUtil::SetThreadOperation(
1128
+ ThreadStatus::OperationType::OP_DBITERATOR);
1057
1129
  TestIterate(thread, read_opts, rand_column_families, rand_keys);
1130
+ ThreadStatusUtil::ResetThreadStatus();
1058
1131
  }
1059
1132
  } else {
1060
1133
  assert(iterate_bound <= prob_op);
@@ -2311,24 +2384,39 @@ void StressTest::PrintEnv() const {
2311
2384
  fprintf(stdout, "Format version : %d\n", FLAGS_format_version);
2312
2385
  fprintf(stdout, "TransactionDB : %s\n",
2313
2386
  FLAGS_use_txn ? "true" : "false");
2314
-
2315
2387
  if (FLAGS_use_txn) {
2316
- fprintf(stdout, "Two write queues: : %s\n",
2317
- FLAGS_two_write_queues ? "true" : "false");
2318
- fprintf(stdout, "Write policy : %d\n",
2319
- static_cast<int>(FLAGS_txn_write_policy));
2320
- if (static_cast<uint64_t>(TxnDBWritePolicy::WRITE_PREPARED) ==
2321
- FLAGS_txn_write_policy ||
2322
- static_cast<uint64_t>(TxnDBWritePolicy::WRITE_UNPREPARED) ==
2323
- FLAGS_txn_write_policy) {
2324
- fprintf(stdout, "Snapshot cache bits : %d\n",
2325
- static_cast<int>(FLAGS_wp_snapshot_cache_bits));
2326
- fprintf(stdout, "Commit cache bits : %d\n",
2327
- static_cast<int>(FLAGS_wp_commit_cache_bits));
2328
- }
2329
- fprintf(stdout, "last cwb for recovery : %s\n",
2330
- FLAGS_use_only_the_last_commit_time_batch_for_recovery ? "true"
2331
- : "false");
2388
+ fprintf(stdout, "TransactionDB Type : %s\n",
2389
+ FLAGS_use_optimistic_txn ? "Optimistic" : "Pessimistic");
2390
+ if (FLAGS_use_optimistic_txn) {
2391
+ fprintf(stdout, "OCC Validation Type : %d\n",
2392
+ static_cast<int>(FLAGS_occ_validation_policy));
2393
+ if (static_cast<uint64_t>(OccValidationPolicy::kValidateParallel) ==
2394
+ FLAGS_occ_validation_policy) {
2395
+ fprintf(stdout, "Share Lock Buckets : %s\n",
2396
+ FLAGS_share_occ_lock_buckets ? "true" : "false");
2397
+ if (FLAGS_share_occ_lock_buckets) {
2398
+ fprintf(stdout, "Lock Bucket Count : %d\n",
2399
+ static_cast<int>(FLAGS_occ_lock_bucket_count));
2400
+ }
2401
+ }
2402
+ } else {
2403
+ fprintf(stdout, "Two write queues: : %s\n",
2404
+ FLAGS_two_write_queues ? "true" : "false");
2405
+ fprintf(stdout, "Write policy : %d\n",
2406
+ static_cast<int>(FLAGS_txn_write_policy));
2407
+ if (static_cast<uint64_t>(TxnDBWritePolicy::WRITE_PREPARED) ==
2408
+ FLAGS_txn_write_policy ||
2409
+ static_cast<uint64_t>(TxnDBWritePolicy::WRITE_UNPREPARED) ==
2410
+ FLAGS_txn_write_policy) {
2411
+ fprintf(stdout, "Snapshot cache bits : %d\n",
2412
+ static_cast<int>(FLAGS_wp_snapshot_cache_bits));
2413
+ fprintf(stdout, "Commit cache bits : %d\n",
2414
+ static_cast<int>(FLAGS_wp_commit_cache_bits));
2415
+ }
2416
+ fprintf(stdout, "last cwb for recovery : %s\n",
2417
+ FLAGS_use_only_the_last_commit_time_batch_for_recovery ? "true"
2418
+ : "false");
2419
+ }
2332
2420
  }
2333
2421
 
2334
2422
  fprintf(stdout, "Stacked BlobDB : %s\n",
@@ -2477,6 +2565,7 @@ void StressTest::PrintEnv() const {
2477
2565
  void StressTest::Open(SharedState* shared) {
2478
2566
  assert(db_ == nullptr);
2479
2567
  assert(txn_db_ == nullptr);
2568
+ assert(optimistic_txn_db_ == nullptr);
2480
2569
  if (!InitializeOptionsFromFile(options_)) {
2481
2570
  InitializeOptionsFromFlags(cache_, filter_policy_, options_);
2482
2571
  }
@@ -2670,8 +2759,7 @@ void StressTest::Open(SharedState* shared) {
2670
2759
  // Ingested errors might happen in background compactions. We
2671
2760
  // wait for all compactions to finish to make sure DB is in
2672
2761
  // clean state before executing queries.
2673
- s = static_cast_with_check<DBImpl>(db_->GetRootDB())
2674
- ->WaitForCompact();
2762
+ s = db_->GetRootDB()->WaitForCompact(WaitForCompactOptions());
2675
2763
  if (!s.ok()) {
2676
2764
  for (auto cf : column_families_) {
2677
2765
  delete cf;
@@ -2705,36 +2793,65 @@ void StressTest::Open(SharedState* shared) {
2705
2793
  break;
2706
2794
  }
2707
2795
  } else {
2708
- TransactionDBOptions txn_db_options;
2709
- assert(FLAGS_txn_write_policy <= TxnDBWritePolicy::WRITE_UNPREPARED);
2710
- txn_db_options.write_policy =
2711
- static_cast<TxnDBWritePolicy>(FLAGS_txn_write_policy);
2712
- if (FLAGS_unordered_write) {
2713
- assert(txn_db_options.write_policy == TxnDBWritePolicy::WRITE_PREPARED);
2714
- options_.unordered_write = true;
2715
- options_.two_write_queues = true;
2716
- txn_db_options.skip_concurrency_control = true;
2796
+ if (FLAGS_use_optimistic_txn) {
2797
+ OptimisticTransactionDBOptions optimistic_txn_db_options;
2798
+ optimistic_txn_db_options.validate_policy =
2799
+ static_cast<OccValidationPolicy>(FLAGS_occ_validation_policy);
2800
+
2801
+ if (FLAGS_share_occ_lock_buckets) {
2802
+ optimistic_txn_db_options.shared_lock_buckets =
2803
+ MakeSharedOccLockBuckets(FLAGS_occ_lock_bucket_count);
2804
+ } else {
2805
+ optimistic_txn_db_options.occ_lock_buckets =
2806
+ FLAGS_occ_lock_bucket_count;
2807
+ optimistic_txn_db_options.shared_lock_buckets = nullptr;
2808
+ }
2809
+ s = OptimisticTransactionDB::Open(
2810
+ options_, optimistic_txn_db_options, FLAGS_db, cf_descriptors,
2811
+ &column_families_, &optimistic_txn_db_);
2812
+ if (!s.ok()) {
2813
+ fprintf(stderr, "Error in opening the OptimisticTransactionDB [%s]\n",
2814
+ s.ToString().c_str());
2815
+ fflush(stderr);
2816
+ }
2817
+ assert(s.ok());
2818
+ {
2819
+ db_ = optimistic_txn_db_;
2820
+ db_aptr_.store(optimistic_txn_db_, std::memory_order_release);
2821
+ }
2717
2822
  } else {
2718
- options_.two_write_queues = FLAGS_two_write_queues;
2719
- }
2720
- txn_db_options.wp_snapshot_cache_bits =
2721
- static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
2722
- txn_db_options.wp_commit_cache_bits =
2723
- static_cast<size_t>(FLAGS_wp_commit_cache_bits);
2724
- PrepareTxnDbOptions(shared, txn_db_options);
2725
- s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
2726
- cf_descriptors, &column_families_, &txn_db_);
2727
- if (!s.ok()) {
2728
- fprintf(stderr, "Error in opening the TransactionDB [%s]\n",
2729
- s.ToString().c_str());
2730
- fflush(stderr);
2731
- }
2732
- assert(s.ok());
2823
+ TransactionDBOptions txn_db_options;
2824
+ assert(FLAGS_txn_write_policy <= TxnDBWritePolicy::WRITE_UNPREPARED);
2825
+ txn_db_options.write_policy =
2826
+ static_cast<TxnDBWritePolicy>(FLAGS_txn_write_policy);
2827
+ if (FLAGS_unordered_write) {
2828
+ assert(txn_db_options.write_policy ==
2829
+ TxnDBWritePolicy::WRITE_PREPARED);
2830
+ options_.unordered_write = true;
2831
+ options_.two_write_queues = true;
2832
+ txn_db_options.skip_concurrency_control = true;
2833
+ } else {
2834
+ options_.two_write_queues = FLAGS_two_write_queues;
2835
+ }
2836
+ txn_db_options.wp_snapshot_cache_bits =
2837
+ static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
2838
+ txn_db_options.wp_commit_cache_bits =
2839
+ static_cast<size_t>(FLAGS_wp_commit_cache_bits);
2840
+ PrepareTxnDbOptions(shared, txn_db_options);
2841
+ s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
2842
+ cf_descriptors, &column_families_, &txn_db_);
2843
+ if (!s.ok()) {
2844
+ fprintf(stderr, "Error in opening the TransactionDB [%s]\n",
2845
+ s.ToString().c_str());
2846
+ fflush(stderr);
2847
+ }
2848
+ assert(s.ok());
2733
2849
 
2734
- // Do not swap the order of the following.
2735
- {
2736
- db_ = txn_db_;
2737
- db_aptr_.store(txn_db_, std::memory_order_release);
2850
+ // Do not swap the order of the following.
2851
+ {
2852
+ db_ = txn_db_;
2853
+ db_aptr_.store(txn_db_, std::memory_order_release);
2854
+ }
2738
2855
  }
2739
2856
  }
2740
2857
  if (!s.ok()) {
@@ -2812,10 +2929,12 @@ void StressTest::Reopen(ThreadState* thread) {
2812
2929
  }
2813
2930
  assert(s.ok());
2814
2931
  }
2815
- assert(txn_db_ == nullptr || db_ == txn_db_);
2932
+ assert((txn_db_ == nullptr && optimistic_txn_db_ == nullptr) ||
2933
+ (db_ == txn_db_ || db_ == optimistic_txn_db_));
2816
2934
  delete db_;
2817
2935
  db_ = nullptr;
2818
2936
  txn_db_ = nullptr;
2937
+ optimistic_txn_db_ = nullptr;
2819
2938
 
2820
2939
  num_times_reopened_++;
2821
2940
  auto now = clock_->NowMicros();
@@ -3087,6 +3206,9 @@ void InitializeOptionsFromFlags(
3087
3206
  "cannot be used because ZSTD 1.4.5+ is not linked with the binary."
3088
3207
  " zstd dictionary trainer will be used.\n");
3089
3208
  }
3209
+ if (FLAGS_compression_checksum) {
3210
+ options.compression_opts.checksum = true;
3211
+ }
3090
3212
  options.max_manifest_file_size = FLAGS_max_manifest_file_size;
3091
3213
  options.inplace_update_support = FLAGS_in_place_update;
3092
3214
  options.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
@@ -3210,6 +3332,11 @@ void InitializeOptionsFromFlags(
3210
3332
  options.allow_data_in_errors = FLAGS_allow_data_in_errors;
3211
3333
 
3212
3334
  options.enable_thread_tracking = FLAGS_enable_thread_tracking;
3335
+
3336
+ options.memtable_max_range_deletions = FLAGS_memtable_max_range_deletions;
3337
+
3338
+ options.bottommost_file_compaction_delay =
3339
+ FLAGS_bottommost_file_compaction_delay;
3213
3340
  }
3214
3341
 
3215
3342
  void InitializeOptionsGeneral(
@@ -17,6 +17,7 @@ namespace ROCKSDB_NAMESPACE {
17
17
  class SystemClock;
18
18
  class Transaction;
19
19
  class TransactionDB;
20
+ class OptimisticTransactionDB;
20
21
  struct TransactionDBOptions;
21
22
 
22
23
  class StressTest {
@@ -63,11 +64,14 @@ class StressTest {
63
64
  virtual void ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
64
65
  SharedState* shared);
65
66
 
66
- Status NewTxn(WriteOptions& write_opts, Transaction** txn);
67
+ // ExecuteTransaction is recommended instead
68
+ Status NewTxn(WriteOptions& write_opts,
69
+ std::unique_ptr<Transaction>* out_txn);
70
+ Status CommitTxn(Transaction& txn, ThreadState* thread = nullptr);
67
71
 
68
- Status CommitTxn(Transaction* txn, ThreadState* thread = nullptr);
69
-
70
- Status RollbackTxn(Transaction* txn);
72
+ // Creates a transaction, executes `ops`, and tries to commit
73
+ Status ExecuteTransaction(WriteOptions& write_opts, ThreadState* thread,
74
+ std::function<Status(Transaction&)>&& ops);
71
75
 
72
76
  virtual void MaybeClearOneColumnFamily(ThreadState* /* thread */) {}
73
77
 
@@ -261,6 +265,7 @@ class StressTest {
261
265
  std::shared_ptr<const FilterPolicy> filter_policy_;
262
266
  DB* db_;
263
267
  TransactionDB* txn_db_;
268
+ OptimisticTransactionDB* optimistic_txn_db_;
264
269
 
265
270
  // Currently only used in MultiOpsTxnsStressTest
266
271
  std::atomic<DB*> db_aptr_;
@@ -274,6 +274,14 @@ int db_stress_tool(int argc, char** argv) {
274
274
  CheckAndSetOptionsForMultiOpsTxnStressTest();
275
275
  }
276
276
 
277
+ if (!FLAGS_use_txn && FLAGS_use_optimistic_txn) {
278
+ fprintf(
279
+ stderr,
280
+ "You cannot set use_optimistic_txn true while use_txn is false. Please "
281
+ "set use_txn true if you want to use OptimisticTransactionDB\n");
282
+ exit(1);
283
+ }
284
+
277
285
  if (FLAGS_create_timestamped_snapshot_one_in > 0) {
278
286
  if (!FLAGS_use_txn) {
279
287
  fprintf(stderr, "timestamped snapshot supported only in TransactionDB\n");
@@ -291,8 +299,8 @@ int db_stress_tool(int argc, char** argv) {
291
299
  exit(1);
292
300
  }
293
301
 
294
- if (FLAGS_use_txn && FLAGS_sync_fault_injection &&
295
- FLAGS_txn_write_policy != 0) {
302
+ if (FLAGS_use_txn && !FLAGS_use_optimistic_txn &&
303
+ FLAGS_sync_fault_injection && FLAGS_txn_write_policy != 0) {
296
304
  fprintf(stderr,
297
305
  "For TransactionDB, correctness testing with unsync data loss is "
298
306
  "currently compatible with only write committed policy\n");
@@ -300,11 +308,10 @@ int db_stress_tool(int argc, char** argv) {
300
308
  }
301
309
 
302
310
  if (FLAGS_use_put_entity_one_in > 0 &&
303
- (FLAGS_ingest_external_file_one_in > 0 || FLAGS_use_merge ||
304
- FLAGS_use_full_merge_v1 || FLAGS_use_txn || FLAGS_test_multi_ops_txns ||
305
- FLAGS_user_timestamp_size > 0)) {
311
+ (FLAGS_use_merge || FLAGS_use_full_merge_v1 || FLAGS_use_txn ||
312
+ FLAGS_test_multi_ops_txns || FLAGS_user_timestamp_size > 0)) {
306
313
  fprintf(stderr,
307
- "PutEntity is currently incompatible with SstFileWriter, Merge,"
314
+ "PutEntity is currently incompatible with Merge,"
308
315
  " transactions, and user-defined timestamps\n");
309
316
  exit(1);
310
317
  }
@@ -31,6 +31,8 @@ class ExpectedValue {
31
31
  return IsValuePartValid(value_base, VALUE_BASE_MASK);
32
32
  }
33
33
 
34
+ ExpectedValue() : expected_value_(DEL_MASK) {}
35
+
34
36
  explicit ExpectedValue(uint32_t expected_value)
35
37
  : expected_value_(expected_value) {}
36
38