@nxtedition/rocksdb 13.5.12 → 14.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 (232) hide show
  1. package/binding.cc +33 -2
  2. package/binding.gyp +2 -2
  3. package/chained-batch.js +9 -16
  4. package/deps/rocksdb/rocksdb/BUCK +18 -1
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +10 -3
  6. package/deps/rocksdb/rocksdb/Makefile +20 -9
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +90 -13
  8. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +88 -75
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.h +44 -36
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +184 -148
  11. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +5 -11
  12. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +116 -47
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +3 -6
  15. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -1
  16. package/deps/rocksdb/rocksdb/db/builder.cc +4 -2
  17. package/deps/rocksdb/rocksdb/db/c.cc +207 -0
  18. package/deps/rocksdb/rocksdb/db/c_test.c +72 -0
  19. package/deps/rocksdb/rocksdb/db/column_family.cc +3 -2
  20. package/deps/rocksdb/rocksdb/db/column_family.h +5 -0
  21. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -0
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -0
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +51 -38
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +29 -12
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +5 -10
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +566 -366
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +131 -4
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +1 -0
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +4 -4
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +13 -14
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +12 -7
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -10
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +97 -76
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +11 -14
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +1 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +8 -0
  38. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +16 -3
  39. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +1 -0
  40. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +448 -1
  41. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +22 -20
  42. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +4 -1
  43. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -5
  44. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +7 -3
  45. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/db_iter.cc +104 -0
  47. package/deps/rocksdb/rocksdb/db/db_iter.h +4 -11
  48. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +331 -58
  49. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +129 -0
  50. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -0
  51. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +40 -0
  52. package/deps/rocksdb/rocksdb/db/db_test2.cc +25 -15
  53. package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -24
  54. package/deps/rocksdb/rocksdb/db/db_test_util.h +29 -14
  55. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +69 -36
  56. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +0 -1
  57. package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
  58. package/deps/rocksdb/rocksdb/db/experimental.cc +5 -4
  59. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +8 -1
  60. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +275 -79
  61. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +23 -5
  62. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +591 -175
  63. package/deps/rocksdb/rocksdb/db/flush_job.cc +3 -4
  64. package/deps/rocksdb/rocksdb/db/log_reader.cc +5 -2
  65. package/deps/rocksdb/rocksdb/db/memtable.cc +84 -35
  66. package/deps/rocksdb/rocksdb/db/memtable.h +39 -34
  67. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -0
  68. package/deps/rocksdb/rocksdb/db/merge_operator.cc +1 -1
  69. package/deps/rocksdb/rocksdb/db/multi_scan.cc +11 -5
  70. package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -1
  71. package/deps/rocksdb/rocksdb/db/version_edit.h +1 -1
  72. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +34 -14
  73. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +28 -5
  74. package/deps/rocksdb/rocksdb/db/version_set.cc +159 -14
  75. package/deps/rocksdb/rocksdb/db/version_set.h +2 -0
  76. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -1
  77. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +60 -0
  78. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +16 -1
  79. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +75 -10
  80. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.cc +28 -0
  81. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +2 -0
  82. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -1
  83. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +50 -2
  84. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +57 -0
  85. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +0 -4
  86. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +266 -35
  87. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  88. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -6
  89. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +18 -2
  90. package/deps/rocksdb/rocksdb/env/env.cc +12 -0
  91. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -0
  92. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +2 -0
  93. package/deps/rocksdb/rocksdb/env/fs_posix.cc +9 -5
  94. package/deps/rocksdb/rocksdb/env/io_posix.cc +4 -2
  95. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +19 -0
  96. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +33 -31
  97. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +42 -9
  98. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +93 -0
  99. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +43 -49
  100. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +4 -3
  101. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +8 -6
  102. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +487 -0
  103. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +11 -12
  104. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +135 -1
  105. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -0
  106. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +12 -0
  107. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -1
  108. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +8 -0
  109. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +12 -8
  110. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +3 -0
  111. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +19 -9
  112. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +219 -24
  113. package/deps/rocksdb/rocksdb/include/rocksdb/point_lock_bench_tool.h +14 -0
  114. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +2 -2
  115. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +1 -1
  116. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +7 -0
  117. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +16 -0
  118. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +16 -4
  119. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +13 -0
  120. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +4 -0
  121. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +0 -2
  122. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +45 -0
  123. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +1 -1
  124. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +1 -1
  125. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +6 -1
  126. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +21 -0
  127. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  128. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +3 -3
  129. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +77 -51
  130. package/deps/rocksdb/rocksdb/memtable/skiplist.h +10 -13
  131. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +16 -7
  132. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +9 -4
  133. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -0
  134. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  135. package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -1
  136. package/deps/rocksdb/rocksdb/options/cf_options.h +6 -2
  137. package/deps/rocksdb/rocksdb/options/options.cc +2 -0
  138. package/deps/rocksdb/rocksdb/options/options_helper.cc +9 -8
  139. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +9 -5
  140. package/deps/rocksdb/rocksdb/port/mmap.cc +1 -1
  141. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -0
  142. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +4 -0
  143. package/deps/rocksdb/rocksdb/src.mk +8 -2
  144. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1125 -765
  145. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +35 -24
  146. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +29 -4
  147. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +732 -256
  148. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +225 -16
  149. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +102 -26
  150. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
  151. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +2 -75
  152. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +433 -141
  153. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -0
  154. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +17 -10
  155. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy_impl.h +20 -0
  156. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +112 -85
  157. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +191 -36
  158. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +2 -2
  159. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  160. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +108 -31
  161. package/deps/rocksdb/rocksdb/table/external_table.cc +7 -3
  162. package/deps/rocksdb/rocksdb/table/format.cc +6 -12
  163. package/deps/rocksdb/rocksdb/table/format.h +10 -0
  164. package/deps/rocksdb/rocksdb/table/internal_iterator.h +1 -1
  165. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -1
  166. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -1
  167. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +5 -0
  168. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -1
  169. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +118 -46
  170. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +9 -8
  171. package/deps/rocksdb/rocksdb/table/table_builder.h +5 -0
  172. package/deps/rocksdb/rocksdb/table/table_properties.cc +16 -0
  173. package/deps/rocksdb/rocksdb/table/table_test.cc +1540 -155
  174. package/deps/rocksdb/rocksdb/test_util/testutil.h +21 -5
  175. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -5
  176. package/deps/rocksdb/rocksdb/tools/ldb.cc +1 -2
  177. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +2 -0
  178. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -3
  179. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +133 -165
  180. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +173 -64
  181. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +69 -0
  182. package/deps/rocksdb/rocksdb/util/atomic.h +6 -0
  183. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +29 -20
  184. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +10 -6
  185. package/deps/rocksdb/rocksdb/util/bit_fields.h +338 -0
  186. package/deps/rocksdb/rocksdb/util/coding.h +3 -3
  187. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -2
  188. package/deps/rocksdb/rocksdb/util/compression.cc +777 -82
  189. package/deps/rocksdb/rocksdb/util/compression.h +5 -0
  190. package/deps/rocksdb/rocksdb/util/compression_test.cc +5 -3
  191. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +2 -2
  192. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +15 -14
  193. package/deps/rocksdb/rocksdb/util/interval_test.cc +102 -0
  194. package/deps/rocksdb/rocksdb/util/semaphore.h +164 -0
  195. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +10 -6
  196. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -2
  197. package/deps/rocksdb/rocksdb/util/slice_test.cc +136 -0
  198. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  199. package/deps/rocksdb/rocksdb/util/string_util.cc +2 -16
  200. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -1
  201. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -1
  202. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +7 -4
  203. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +35 -14
  204. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +2 -0
  205. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +5 -2
  206. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/any_lock_manager_test.h +244 -0
  207. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_bench.cc +18 -0
  208. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_bench_tool.cc +159 -0
  209. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +1244 -161
  210. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +66 -12
  211. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_stress_test.cc +103 -0
  212. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +1275 -8
  213. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +40 -262
  214. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test_common.h +78 -0
  215. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_validation_test_runner.h +469 -0
  216. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +2 -6
  217. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +4 -0
  218. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +9 -1
  219. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +18 -9
  220. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +2 -0
  221. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +2 -1
  222. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +72 -44
  223. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +92 -15
  224. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +6 -20
  225. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +143 -112
  226. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +23 -16
  227. package/index.js +3 -3
  228. package/package.json +1 -1
  229. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  230. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  231. package/util.h +38 -12
  232. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.cc +0 -17
@@ -35,51 +35,71 @@
35
35
 
36
36
  namespace ROCKSDB_NAMESPACE {
37
37
 
38
+ constexpr std::array DBAsBaseDB_TransactionTest_Params = {
39
+ std::make_tuple(false, false, WRITE_COMMITTED, kOrderedWrite),
40
+ std::make_tuple(false, true, WRITE_COMMITTED, kOrderedWrite),
41
+ std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite),
42
+ std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite),
43
+ std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite),
44
+ std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite),
45
+ std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite)};
46
+
38
47
  INSTANTIATE_TEST_CASE_P(
39
48
  DBAsBaseDB, TransactionTest,
40
- ::testing::Values(
41
- std::make_tuple(false, false, WRITE_COMMITTED, kOrderedWrite),
42
- std::make_tuple(false, true, WRITE_COMMITTED, kOrderedWrite),
43
- std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite),
44
- std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite),
45
- std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite),
46
- std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite),
47
- std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite)));
49
+ ::testing::ValuesIn(WRAP_PARAM_WITH_PER_KEY_POINT_LOCK_MANAGER_PARAMS(
50
+ WRAP_PARAM(bool, bool, TxnDBWritePolicy, WriteOrdering),
51
+ DBAsBaseDB_TransactionTest_Params)));
52
+
53
+ constexpr std::array DBAsBaseDB_TransactionStressTest_Params = {
54
+ std::make_tuple(false, false, WRITE_COMMITTED, kOrderedWrite),
55
+ std::make_tuple(false, true, WRITE_COMMITTED, kOrderedWrite),
56
+ std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite),
57
+ std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite),
58
+ std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite),
59
+ std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite),
60
+ std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite)};
61
+
48
62
  INSTANTIATE_TEST_CASE_P(
49
63
  DBAsBaseDB, TransactionStressTest,
50
- ::testing::Values(
51
- std::make_tuple(false, false, WRITE_COMMITTED, kOrderedWrite),
52
- std::make_tuple(false, true, WRITE_COMMITTED, kOrderedWrite),
53
- std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite),
54
- std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite),
55
- std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite),
56
- std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite),
57
- std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite)));
64
+ ::testing::ValuesIn(WRAP_PARAM_WITH_PER_KEY_POINT_LOCK_MANAGER_PARAMS(
65
+ WRAP_PARAM(bool, bool, TxnDBWritePolicy, WriteOrdering),
66
+ DBAsBaseDB_TransactionStressTest_Params)));
67
+
68
+ constexpr std::array StackableDBAsBaseDB_TransactionTest_Params = {
69
+ std::make_tuple(true, true, WRITE_COMMITTED, kOrderedWrite),
70
+ std::make_tuple(true, true, WRITE_PREPARED, kOrderedWrite),
71
+ std::make_tuple(true, true, WRITE_UNPREPARED, kOrderedWrite)};
72
+
58
73
  INSTANTIATE_TEST_CASE_P(
59
74
  StackableDBAsBaseDB, TransactionTest,
60
- ::testing::Values(
61
- std::make_tuple(true, true, WRITE_COMMITTED, kOrderedWrite),
62
- std::make_tuple(true, true, WRITE_PREPARED, kOrderedWrite),
63
- std::make_tuple(true, true, WRITE_UNPREPARED, kOrderedWrite)));
75
+ ::testing::ValuesIn(WRAP_PARAM_WITH_PER_KEY_POINT_LOCK_MANAGER_PARAMS(
76
+ WRAP_PARAM(bool, bool, TxnDBWritePolicy, WriteOrdering),
77
+ StackableDBAsBaseDB_TransactionTest_Params)));
64
78
 
65
79
  // MySQLStyleTransactionTest takes far too long for valgrind to run. Only do it
66
80
  // in full mode (`ROCKSDB_FULL_VALGRIND_RUN` compiler flag is set).
67
81
  #if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
82
+
83
+ constexpr std::array MySQLStyleTransactionTest_Params = {
84
+ std::make_tuple(false, false, WRITE_COMMITTED, kOrderedWrite, false),
85
+ std::make_tuple(false, true, WRITE_COMMITTED, kOrderedWrite, false),
86
+ std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite, false),
87
+ std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite, true),
88
+ std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite, false),
89
+ std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite, true),
90
+ std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite, false),
91
+ std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite, true),
92
+ std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite, false),
93
+ std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite, true),
94
+ std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite, false),
95
+ std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite, true)};
96
+
68
97
  INSTANTIATE_TEST_CASE_P(
69
98
  MySQLStyleTransactionTest, MySQLStyleTransactionTest,
70
- ::testing::Values(
71
- std::make_tuple(false, false, WRITE_COMMITTED, kOrderedWrite, false),
72
- std::make_tuple(false, true, WRITE_COMMITTED, kOrderedWrite, false),
73
- std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite, false),
74
- std::make_tuple(false, false, WRITE_PREPARED, kOrderedWrite, true),
75
- std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite, false),
76
- std::make_tuple(false, true, WRITE_PREPARED, kOrderedWrite, true),
77
- std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite, false),
78
- std::make_tuple(false, false, WRITE_UNPREPARED, kOrderedWrite, true),
79
- std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite, false),
80
- std::make_tuple(false, true, WRITE_UNPREPARED, kOrderedWrite, true),
81
- std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite, false),
82
- std::make_tuple(false, true, WRITE_PREPARED, kUnorderedWrite, true)));
99
+ ::testing::ValuesIn(WRAP_PARAM_WITH_PER_KEY_POINT_LOCK_MANAGER_PARAMS(
100
+ WRAP_PARAM(bool, bool, TxnDBWritePolicy, WriteOrdering, bool),
101
+ MySQLStyleTransactionTest_Params)));
102
+
83
103
  #endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
84
104
 
85
105
  TEST_P(TransactionTest, TestUpperBoundUponDeletion) {
@@ -5777,8 +5797,8 @@ Status TransactionStressTestInserter(
5777
5797
  TransactionOptions txn_options;
5778
5798
  txn_options.use_only_the_last_commit_time_batch_for_recovery = true;
5779
5799
 
5780
- // Inside the inserter we might also retake the snapshot. We do both since two
5781
- // separte functions are engaged for each.
5800
+ // Inside the inserter we might also retake the snapshot. We do both since
5801
+ // two separte functions are engaged for each.
5782
5802
  txn_options.set_snapshot = rand->OneIn(2);
5783
5803
 
5784
5804
  RandomTransactionInserter inserter(
@@ -8862,7 +8882,7 @@ TEST_P(TransactionTest, SecondaryIndexOnKey) {
8862
8882
  }
8863
8883
  }
8864
8884
 
8865
- TEST_F(TransactionDBTest, CollapseKey) {
8885
+ TEST_P(TransactionDBTest, CollapseKey) {
8866
8886
  ASSERT_OK(ReOpen());
8867
8887
  ASSERT_OK(db->Put({}, "hello", "world"));
8868
8888
  ASSERT_OK(db->Flush({}));
@@ -8911,7 +8931,7 @@ TEST_F(TransactionDBTest, CollapseKey) {
8911
8931
  }
8912
8932
  }
8913
8933
 
8914
- TEST_F(TransactionDBTest, FlushedLogWithPendingPrepareIsSynced) {
8934
+ TEST_P(TransactionDBTest, FlushedLogWithPendingPrepareIsSynced) {
8915
8935
  // Repro for a bug where we missed a necessary sync of the old WAL during
8916
8936
  // memtable flush. It happened due to applying an optimization to skip syncing
8917
8937
  // the old WAL in too many scenarios (all memtable flushes on single CF
@@ -8956,8 +8976,9 @@ TEST_F(TransactionDBTest, FlushedLogWithPendingPrepareIsSynced) {
8956
8976
  }
8957
8977
  }
8958
8978
 
8959
- class CommitBypassMemtableTest : public DBTestBase,
8960
- public ::testing::WithParamInterface<bool> {
8979
+ class CommitBypassMemtableTest
8980
+ : public DBTestBase,
8981
+ public ::testing::WithParamInterface<std::tuple<bool, bool>> {
8961
8982
  public:
8962
8983
  CommitBypassMemtableTest() : DBTestBase("commit_bypass_memtable_test", true) {
8963
8984
  SetUpTransactionDB();
@@ -8968,12 +8989,11 @@ class CommitBypassMemtableTest : public DBTestBase,
8968
8989
  Options options;
8969
8990
  TransactionDBOptions txn_db_opts;
8970
8991
 
8971
- void SetUpTransactionDB(
8972
- bool atomic_flush = false) {
8992
+ void SetUpTransactionDB(bool atomic_flush = false) {
8973
8993
  options = CurrentOptions();
8974
8994
  options.create_if_missing = true;
8975
8995
  options.allow_2pc = true;
8976
- options.two_write_queues = GetParam();
8996
+ options.two_write_queues = std::get<0>(GetParam());
8977
8997
  // Avoid write stall
8978
8998
  options.max_write_buffer_number = 8;
8979
8999
  options.atomic_flush = atomic_flush;
@@ -8982,13 +9002,16 @@ class CommitBypassMemtableTest : public DBTestBase,
8982
9002
  Destroy(options, true);
8983
9003
 
8984
9004
  txn_db_opts.write_policy = TxnDBWritePolicy::WRITE_COMMITTED;
9005
+ txn_db_opts.use_per_key_point_lock_mgr = std::get<1>(GetParam());
8985
9006
  ASSERT_OK(TransactionDB::Open(options, txn_db_opts, dbname_, &txn_db));
8986
9007
  ASSERT_NE(txn_db, nullptr);
8987
9008
  db_ = txn_db;
8988
9009
  }
8989
9010
  };
8990
9011
 
8991
- INSTANTIATE_TEST_CASE_P(, CommitBypassMemtableTest, testing::Bool());
9012
+ INSTANTIATE_TEST_CASE_P(, CommitBypassMemtableTest,
9013
+ ::testing::Combine(::testing::Bool(),
9014
+ ::testing::Bool()));
8992
9015
 
8993
9016
  // TODO: parameterize other tests in the file with commit_bypass_memtable
8994
9017
  TEST_P(CommitBypassMemtableTest, SingleCFUpdate) {
@@ -9776,7 +9799,7 @@ TEST_P(CommitBypassMemtableTest, MergeMiniStress) {
9776
9799
  }
9777
9800
  }
9778
9801
 
9779
- TEST_F(TransactionDBTest, SelfDeadlockBug) {
9802
+ TEST_P(TransactionDBTest, SelfDeadlockBug) {
9780
9803
  ASSERT_OK(ReOpen());
9781
9804
 
9782
9805
  // Create two transactions
@@ -9820,6 +9843,11 @@ TEST_F(TransactionDBTest, SelfDeadlockBug) {
9820
9843
  delete txn2;
9821
9844
  }
9822
9845
 
9846
+ INSTANTIATE_TEST_CASE_P(
9847
+ TransactionDBBasicTest, TransactionDBTest,
9848
+ ::testing::Combine(/*user_per_key_point_lock_manager=*/::testing::Bool(),
9849
+ /*deadlock_timeout_us=*/::testing::Values(0, 1000)));
9850
+
9823
9851
  TEST_P(CommitBypassMemtableTest,
9824
9852
  OptimizeLargeTxnCommitWriteBatchSizeThreshold) {
9825
9853
  // Tests TransactionOptions::large_txn_commit_optimize_byte_threshold
@@ -49,14 +49,18 @@ class TransactionTestBase : public ::testing::Test {
49
49
 
50
50
  TransactionDBOptions txn_db_options;
51
51
  bool use_stackable_db_;
52
+ int64_t deadlock_timeout_us_;
52
53
 
53
54
  TransactionTestBase(bool use_stackable_db, bool two_write_queue,
54
55
  TxnDBWritePolicy write_policy,
55
- WriteOrdering write_ordering)
56
+ WriteOrdering write_ordering,
57
+ bool use_per_key_point_lock_mgr,
58
+ int64_t deadlock_timeout_us)
56
59
  : db(nullptr),
57
60
  special_env(Env::Default()),
58
61
  env(nullptr),
59
- use_stackable_db_(use_stackable_db) {
62
+ use_stackable_db_(use_stackable_db),
63
+ deadlock_timeout_us_(deadlock_timeout_us) {
60
64
  options.create_if_missing = true;
61
65
  options.max_write_buffer_number = 2;
62
66
  options.write_buffer_size = 4 * 1024;
@@ -77,6 +81,7 @@ class TransactionTestBase : public ::testing::Test {
77
81
  txn_db_options.default_lock_timeout = 0;
78
82
  txn_db_options.write_policy = write_policy;
79
83
  txn_db_options.rollback_merge_operands = true;
84
+ txn_db_options.use_per_key_point_lock_mgr = use_per_key_point_lock_mgr;
80
85
  // This will stress write unprepared, by forcing write batch flush on every
81
86
  // write.
82
87
  txn_db_options.default_write_batch_flush_threshold = 1;
@@ -481,30 +486,35 @@ class TransactionTestBase : public ::testing::Test {
481
486
 
482
487
  class TransactionTest
483
488
  : public TransactionTestBase,
484
- virtual public ::testing::WithParamInterface<
485
- std::tuple<bool, bool, TxnDBWritePolicy, WriteOrdering>> {
489
+ virtual public ::testing::WithParamInterface<std::tuple<
490
+ bool, bool, TxnDBWritePolicy, WriteOrdering, bool, int64_t>> {
486
491
  public:
487
492
  TransactionTest()
488
493
  : TransactionTestBase(std::get<0>(GetParam()), std::get<1>(GetParam()),
489
- std::get<2>(GetParam()), std::get<3>(GetParam())){};
494
+ std::get<2>(GetParam()), std::get<3>(GetParam()),
495
+ std::get<4>(GetParam()), std::get<5>(GetParam())) {}
490
496
  };
491
497
 
492
- class TransactionDBTest : public TransactionTestBase {
498
+ class TransactionDBTest
499
+ : public TransactionTestBase,
500
+ virtual public ::testing::WithParamInterface<std::tuple<bool, int64_t>> {
493
501
  public:
494
502
  TransactionDBTest()
495
- : TransactionTestBase(false, false, WRITE_COMMITTED, kOrderedWrite) {}
503
+ : TransactionTestBase(false, false, WRITE_COMMITTED, kOrderedWrite,
504
+ std::get<0>(GetParam()), std::get<1>(GetParam())) {}
496
505
  };
497
506
 
498
507
  class TransactionStressTest : public TransactionTest {};
499
508
 
500
509
  class MySQLStyleTransactionTest
501
510
  : public TransactionTestBase,
502
- virtual public ::testing::WithParamInterface<
503
- std::tuple<bool, bool, TxnDBWritePolicy, WriteOrdering, bool>> {
511
+ virtual public ::testing::WithParamInterface<std::tuple<
512
+ bool, bool, TxnDBWritePolicy, WriteOrdering, bool, bool, int64_t>> {
504
513
  public:
505
514
  MySQLStyleTransactionTest()
506
515
  : TransactionTestBase(std::get<0>(GetParam()), std::get<1>(GetParam()),
507
- std::get<2>(GetParam()), std::get<3>(GetParam())),
516
+ std::get<2>(GetParam()), std::get<3>(GetParam()),
517
+ std::get<5>(GetParam()), std::get<6>(GetParam())),
508
518
  with_slow_threads_(std::get<4>(GetParam())) {
509
519
  if (with_slow_threads_ &&
510
520
  (txn_db_options.write_policy == WRITE_PREPARED ||
@@ -527,11 +537,13 @@ class MySQLStyleTransactionTest
527
537
 
528
538
  class WriteCommittedTxnWithTsTest
529
539
  : public TransactionTestBase,
530
- public ::testing::WithParamInterface<std::tuple<bool, bool, bool>> {
540
+ public ::testing::WithParamInterface<
541
+ std::tuple<bool, bool, bool, bool, int64_t>> {
531
542
  public:
532
543
  WriteCommittedTxnWithTsTest()
533
544
  : TransactionTestBase(std::get<0>(GetParam()), std::get<1>(GetParam()),
534
- WRITE_COMMITTED, kOrderedWrite) {}
545
+ WRITE_COMMITTED, kOrderedWrite,
546
+ std::get<3>(GetParam()), std::get<4>(GetParam())) {}
535
547
  ~WriteCommittedTxnWithTsTest() override {
536
548
  for (auto* h : handles_) {
537
549
  delete h;
@@ -567,12 +579,13 @@ class WriteCommittedTxnWithTsTest
567
579
 
568
580
  class TimestampedSnapshotWithTsSanityCheck
569
581
  : public TransactionTestBase,
570
- public ::testing::WithParamInterface<
571
- std::tuple<bool, bool, TxnDBWritePolicy, WriteOrdering>> {
582
+ public ::testing::WithParamInterface<std::tuple<
583
+ bool, bool, TxnDBWritePolicy, WriteOrdering, bool, int64_t>> {
572
584
  public:
573
585
  explicit TimestampedSnapshotWithTsSanityCheck()
574
586
  : TransactionTestBase(std::get<0>(GetParam()), std::get<1>(GetParam()),
575
- std::get<2>(GetParam()), std::get<3>(GetParam())) {}
587
+ std::get<2>(GetParam()), std::get<3>(GetParam()),
588
+ std::get<4>(GetParam()), std::get<5>(GetParam())) {}
576
589
  ~TimestampedSnapshotWithTsSanityCheck() override {
577
590
  for (auto* h : handles_) {
578
591
  delete h;
@@ -583,4 +596,68 @@ class TimestampedSnapshotWithTsSanityCheck
583
596
  std::vector<ColumnFamilyHandle*> handles_{};
584
597
  };
585
598
 
599
+ // The following templates causes a bug in GCC 14, ignore the error for now
600
+ #if defined(__GNUC__) && __GNUC__ == 14
601
+ #pragma GCC diagnostic push
602
+ #pragma GCC diagnostic ignored "-Wstringop-overflow"
603
+ #endif
604
+
605
+ // Wrap existing params with per-key point lock manager parameters
606
+ template <typename TargetParamType, typename SourceParamType, std::size_t... Is>
607
+ std::vector<TargetParamType> WrapParamWithPerKeyPointLockManagerParamsImpl(
608
+ SourceParamType&& source_param, std::index_sequence<Is...>) {
609
+ std::vector<TargetParamType> wrapped_params;
610
+ // Use original PointLockManager
611
+ wrapped_params.push_back(TargetParamType(
612
+ std::get<Is>(std::forward<SourceParamType>(source_param))..., false,
613
+ INT64_C(0)));
614
+ // Use PerKeyPointLockManager with deadlock timeout 0
615
+ wrapped_params.push_back(TargetParamType(
616
+ std::get<Is>(std::forward<SourceParamType>(source_param))..., true,
617
+ INT64_C(0)));
618
+ // Use PerKeyPointLockManager with deadlock timeout 1000
619
+ wrapped_params.push_back(TargetParamType(
620
+ std::get<Is>(std::forward<SourceParamType>(source_param))..., true,
621
+ INT64_C(1000)));
622
+
623
+ return wrapped_params;
624
+ }
625
+
626
+ template <typename TargetParamType, typename SourceParamType>
627
+ std::vector<TargetParamType> WrapParamWithPerKeyPointLockManagerParams(
628
+ SourceParamType&& source_param) {
629
+ // Get the size of the source param
630
+ constexpr std::size_t N = std::tuple_size_v<std::decay_t<SourceParamType>>;
631
+ // Create an index sequence from 0 to N-1
632
+ return WrapParamWithPerKeyPointLockManagerParamsImpl<TargetParamType>(
633
+ std::forward<SourceParamType>(source_param),
634
+ std::make_index_sequence<N>{});
635
+ }
636
+
637
+ template <typename TargetParamType, typename SourceParamType, size_t M>
638
+ std::vector<TargetParamType> WrapParamsWithPerKeyPointLockManagerParams(
639
+ std::array<SourceParamType, M> source_param) {
640
+ std::vector<TargetParamType> wrapped_params;
641
+ for (auto& param : source_param) {
642
+ // Create an index sequence from 0 to N-1
643
+ auto new_params =
644
+ WrapParamWithPerKeyPointLockManagerParams<TargetParamType>(
645
+ std::forward<SourceParamType>(param));
646
+ wrapped_params.insert(wrapped_params.end(), new_params.begin(),
647
+ new_params.end());
648
+ }
649
+ return wrapped_params;
650
+ }
651
+
652
+ #if defined(__GNUC__) && __GNUC__ == 14
653
+ #pragma GCC diagnostic pop
654
+ #endif
655
+
656
+ #define WRAP_PARAM(...) __VA_ARGS__
657
+
658
+ #define WRAP_PARAM_WITH_PER_KEY_POINT_LOCK_MANAGER_PARAMS(SOURCE_PARAM_TYPES, \
659
+ PARAMS) \
660
+ WrapParamsWithPerKeyPointLockManagerParams< \
661
+ std::tuple<SOURCE_PARAM_TYPES, bool, int64_t>>(PARAMS)
662
+
586
663
  } // namespace ROCKSDB_NAMESPACE
@@ -14,26 +14,12 @@
14
14
  namespace ROCKSDB_NAMESPACE {
15
15
 
16
16
  INSTANTIATE_TEST_CASE_P(
17
- DBAsBaseDB, WriteCommittedTxnWithTsTest,
18
- ::testing::Values(std::make_tuple(false, /*two_write_queue=*/false,
19
- /*enable_indexing=*/false),
20
- std::make_tuple(false, /*two_write_queue=*/true,
21
- /*enable_indexing=*/false),
22
- std::make_tuple(false, /*two_write_queue=*/false,
23
- /*enable_indexing=*/true),
24
- std::make_tuple(false, /*two_write_queue=*/true,
25
- /*enable_indexing=*/true)));
26
-
27
- INSTANTIATE_TEST_CASE_P(
28
- DBAsStackableDB, WriteCommittedTxnWithTsTest,
29
- ::testing::Values(std::make_tuple(true, /*two_write_queue=*/false,
30
- /*enable_indexing=*/false),
31
- std::make_tuple(true, /*two_write_queue=*/true,
32
- /*enable_indexing=*/false),
33
- std::make_tuple(true, /*two_write_queue=*/false,
34
- /*enable_indexing=*/true),
35
- std::make_tuple(true, /*two_write_queue=*/true,
36
- /*enable_indexing=*/true)));
17
+ DBAsBaseDBAndStackableDB, WriteCommittedTxnWithTsTest,
18
+ ::testing::Combine(/*use_stackable_db=*/::testing::Bool(),
19
+ /*two_write_queue=*/::testing::Bool(),
20
+ /*enable_indexing=*/::testing::Bool(),
21
+ /*use_per_key_point_lock_mgr=*/::testing::Bool(),
22
+ /*deadlock_timeout_us=*/::testing::Values(0, 1000)));
37
23
 
38
24
  TEST_P(WriteCommittedTxnWithTsTest, SanityChecks) {
39
25
  ASSERT_OK(ReOpenNoDelete());