@nxtedition/rocksdb 7.1.20 → 7.1.21

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 (262) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
  2. package/deps/rocksdb/rocksdb/Makefile +1 -1
  3. package/deps/rocksdb/rocksdb/TARGETS +2 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
  11. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
  13. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
  15. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
  18. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
  19. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
  27. package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
  29. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  47. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  48. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
  49. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
  50. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
  51. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
  60. package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
  61. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
  62. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
  63. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
  64. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
  65. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
  67. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
  72. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
  73. package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
  74. package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
  75. package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
  76. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
  77. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
  78. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
  79. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
  80. package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
  82. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
  83. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
  84. package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
  85. package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
  86. package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
  87. package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
  88. package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
  89. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  90. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  91. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
  92. package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
  93. package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
  94. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
  95. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
  98. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
  99. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  100. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
  102. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
  103. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
  104. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
  105. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
  106. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
  107. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
  108. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
  109. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
  110. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
  111. package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
  112. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
  113. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
  114. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
  116. package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
  117. package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
  118. package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
  120. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
  121. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
  122. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
  123. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
  124. package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
  126. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
  129. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
  130. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
  142. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
  143. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
  144. package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
  145. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
  146. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
  147. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
  148. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
  149. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
  150. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
  151. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
  152. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
  153. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
  154. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
  155. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
  157. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
  160. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
  162. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  164. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
  165. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
  166. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  167. package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
  168. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
  169. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  170. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  172. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
  173. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  174. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  175. package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
  176. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
  177. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  178. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  179. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
  180. package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
  181. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  182. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  183. package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
  184. package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
  185. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
  186. package/deps/rocksdb/rocksdb/src.mk +1 -0
  187. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
  188. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
  189. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
  192. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
  195. package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
  196. package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
  197. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
  198. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
  199. package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
  200. package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
  201. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
  202. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
  203. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
  204. package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
  205. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
  206. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
  207. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  208. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
  209. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
  210. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  211. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
  212. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
  213. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
  214. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
  215. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
  216. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
  217. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
  218. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
  219. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
  220. package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
  221. package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
  222. package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
  223. package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
  224. package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
  225. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
  226. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
  227. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
  228. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
  229. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
  230. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
  231. package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
  232. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
  233. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
  234. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
  235. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
  236. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
  237. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
  239. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
  240. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
  241. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
  242. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
  243. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
  244. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
  245. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
  246. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
  247. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
  248. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
  249. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
  250. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
  251. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
  252. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
  253. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
  254. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
  255. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
  256. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
  257. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
  258. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
  259. package/index.js +12 -4
  260. package/package.json +1 -1
  261. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  262. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -9,6 +9,7 @@
9
9
 
10
10
  #ifdef GFLAGS
11
11
  #pragma once
12
+
12
13
  #include "db_stress_tool/db_stress_common.h"
13
14
  #include "db_stress_tool/db_stress_shared_state.h"
14
15
 
@@ -34,13 +35,10 @@ class StressTest {
34
35
  // The initialization work is split into two parts to avoid a circular
35
36
  // dependency with `SharedState`.
36
37
  virtual void FinishInitDb(SharedState*);
37
-
38
38
  void TrackExpectedState(SharedState* shared);
39
-
40
39
  void OperateDb(ThreadState* thread);
41
40
  virtual void VerifyDb(ThreadState* thread) const = 0;
42
41
  virtual void ContinuouslyVerifyDb(ThreadState* /*thread*/) const = 0;
43
-
44
42
  void PrintStatistics();
45
43
 
46
44
  protected:
@@ -54,6 +52,18 @@ class StressTest {
54
52
  Status SetOptions(ThreadState* thread);
55
53
 
56
54
  #ifndef ROCKSDB_LITE
55
+ // For transactionsDB, there can be txns prepared but not yet committeed
56
+ // right before previous stress run crash.
57
+ // They will be recovered and processed through
58
+ // ProcessRecoveredPreparedTxnsHelper on the start of current stress run.
59
+ void ProcessRecoveredPreparedTxns(SharedState* shared);
60
+
61
+ // Default implementation will first update ExpectedState to be
62
+ // `SharedState::UNKNOWN` for each keys in `txn` and then randomly
63
+ // commit or rollback `txn`.
64
+ virtual void ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
65
+ SharedState* shared);
66
+
57
67
  Status NewTxn(WriteOptions& write_opts, Transaction** txn);
58
68
 
59
69
  Status CommitTxn(Transaction* txn, ThreadState* thread = nullptr);
@@ -129,6 +139,8 @@ class StressTest {
129
139
  return column_families_[column_family_id];
130
140
  }
131
141
 
142
+ virtual Slice GetValueBaseSlice(Slice slice) { return slice; }
143
+
132
144
  #ifndef ROCKSDB_LITE
133
145
  // Generated a list of keys that close to boundaries of SST keys.
134
146
  // If there isn't any SST file in the DB, return empty list.
@@ -222,6 +234,13 @@ class StressTest {
222
234
  int64_t key, Slice value_from_db,
223
235
  Slice value_from_expected) const;
224
236
 
237
+ void VerificationAbort(SharedState* shared, int cf, int64_t key,
238
+ const Slice& value, const WideColumns& columns,
239
+ const WideColumns& expected_columns) const;
240
+
241
+ static std::string DebugString(const Slice& value, const WideColumns& columns,
242
+ const WideColumns& expected_columns);
243
+
225
244
  void PrintEnv() const;
226
245
 
227
246
  void Open(SharedState* shared);
@@ -235,7 +254,8 @@ class StressTest {
235
254
  TransactionDBOptions& /*txn_db_opts*/) {}
236
255
  #endif
237
256
 
238
- void MaybeUseOlderTimestampForPointLookup(ThreadState* thread,
257
+ // Returns whether the timestamp of read_opts is updated.
258
+ bool MaybeUseOlderTimestampForPointLookup(ThreadState* thread,
239
259
  std::string& ts_str,
240
260
  Slice& ts_slice,
241
261
  ReadOptions& read_opts);
@@ -286,6 +286,24 @@ int db_stress_tool(int argc, char** argv) {
286
286
  exit(1);
287
287
  }
288
288
 
289
+ if (FLAGS_use_txn && FLAGS_sync_fault_injection &&
290
+ FLAGS_txn_write_policy != 0) {
291
+ fprintf(stderr,
292
+ "For TransactionDB, correctness testing with unsync data loss is "
293
+ "currently compatible with only write committed policy\n");
294
+ exit(1);
295
+ }
296
+
297
+ if (FLAGS_use_put_entity_one_in > 0 &&
298
+ (FLAGS_ingest_external_file_one_in > 0 || FLAGS_use_merge ||
299
+ FLAGS_use_full_merge_v1 || FLAGS_use_txn || FLAGS_test_multi_ops_txns ||
300
+ FLAGS_user_timestamp_size > 0)) {
301
+ fprintf(stderr,
302
+ "PutEntity is currently incompatible with SstFileWriter, Merge,"
303
+ " transactions, and user-defined timestamps\n");
304
+ exit(1);
305
+ }
306
+
289
307
  #ifndef NDEBUG
290
308
  KillPoint* kp = KillPoint::GetInstance();
291
309
  kp->rocksdb_kill_odds = FLAGS_kill_random_test;
@@ -7,6 +7,7 @@
7
7
 
8
8
  #include "db_stress_tool/expected_state.h"
9
9
 
10
+ #include "db/wide/wide_column_serialization.h"
10
11
  #include "db_stress_tool/db_stress_common.h"
11
12
  #include "db_stress_tool/db_stress_shared_state.h"
12
13
  #include "rocksdb/trace_reader_writer.h"
@@ -343,7 +344,9 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
343
344
  public WriteBatch::Handler {
344
345
  public:
345
346
  ExpectedStateTraceRecordHandler(uint64_t max_write_ops, ExpectedState* state)
346
- : max_write_ops_(max_write_ops), state_(state) {}
347
+ : max_write_ops_(max_write_ops),
348
+ state_(state),
349
+ buffered_writes_(nullptr) {}
347
350
 
348
351
  ~ExpectedStateTraceRecordHandler() { assert(IsDone()); }
349
352
 
@@ -391,12 +394,62 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
391
394
  }
392
395
  uint32_t value_id = GetValueBase(value);
393
396
 
397
+ bool should_buffer_write = !(buffered_writes_ == nullptr);
398
+ if (should_buffer_write) {
399
+ return WriteBatchInternal::Put(buffered_writes_.get(), column_family_id,
400
+ key, value);
401
+ }
402
+
394
403
  state_->Put(column_family_id, static_cast<int64_t>(key_id), value_id,
395
404
  false /* pending */);
396
405
  ++num_write_ops_;
397
406
  return Status::OK();
398
407
  }
399
408
 
409
+ Status PutEntityCF(uint32_t column_family_id, const Slice& key_with_ts,
410
+ const Slice& entity) override {
411
+ Slice key =
412
+ StripTimestampFromUserKey(key_with_ts, FLAGS_user_timestamp_size);
413
+
414
+ uint64_t key_id = 0;
415
+ if (!GetIntVal(key.ToString(), &key_id)) {
416
+ return Status::Corruption("Unable to parse key", key.ToString());
417
+ }
418
+
419
+ Slice entity_copy = entity;
420
+ WideColumns columns;
421
+ if (!WideColumnSerialization::Deserialize(entity_copy, columns).ok()) {
422
+ return Status::Corruption("Unable to deserialize entity",
423
+ entity.ToString(/* hex */ true));
424
+ }
425
+
426
+ if (columns.empty() || columns[0].name() != kDefaultWideColumnName) {
427
+ return Status::Corruption("Cannot find default column in entity",
428
+ entity.ToString(/* hex */ true));
429
+ }
430
+
431
+ const Slice& value_of_default = columns[0].value();
432
+
433
+ const uint32_t value_base = GetValueBase(value_of_default);
434
+
435
+ if (columns != GenerateExpectedWideColumns(value_base, value_of_default)) {
436
+ return Status::Corruption("Wide columns in entity inconsistent",
437
+ entity.ToString(/* hex */ true));
438
+ }
439
+
440
+ if (buffered_writes_) {
441
+ return WriteBatchInternal::PutEntity(buffered_writes_.get(),
442
+ column_family_id, key, columns);
443
+ }
444
+
445
+ state_->Put(column_family_id, static_cast<int64_t>(key_id), value_base,
446
+ false /* pending */);
447
+
448
+ ++num_write_ops_;
449
+
450
+ return Status::OK();
451
+ }
452
+
400
453
  Status DeleteCF(uint32_t column_family_id,
401
454
  const Slice& key_with_ts) override {
402
455
  Slice key =
@@ -406,6 +459,12 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
406
459
  return Status::Corruption("unable to parse key", key.ToString());
407
460
  }
408
461
 
462
+ bool should_buffer_write = !(buffered_writes_ == nullptr);
463
+ if (should_buffer_write) {
464
+ return WriteBatchInternal::Delete(buffered_writes_.get(),
465
+ column_family_id, key);
466
+ }
467
+
409
468
  state_->Delete(column_family_id, static_cast<int64_t>(key_id),
410
469
  false /* pending */);
411
470
  ++num_write_ops_;
@@ -414,6 +473,18 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
414
473
 
415
474
  Status SingleDeleteCF(uint32_t column_family_id,
416
475
  const Slice& key_with_ts) override {
476
+ bool should_buffer_write = !(buffered_writes_ == nullptr);
477
+ if (should_buffer_write) {
478
+ Slice key =
479
+ StripTimestampFromUserKey(key_with_ts, FLAGS_user_timestamp_size);
480
+ Slice ts =
481
+ ExtractTimestampFromUserKey(key_with_ts, FLAGS_user_timestamp_size);
482
+ std::array<Slice, 2> key_with_ts_arr{{key, ts}};
483
+ return WriteBatchInternal::SingleDelete(
484
+ buffered_writes_.get(), column_family_id,
485
+ SliceParts(key_with_ts_arr.data(), 2));
486
+ }
487
+
417
488
  return DeleteCF(column_family_id, key_with_ts);
418
489
  }
419
490
 
@@ -433,6 +504,12 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
433
504
  return Status::Corruption("unable to parse end key", end_key.ToString());
434
505
  }
435
506
 
507
+ bool should_buffer_write = !(buffered_writes_ == nullptr);
508
+ if (should_buffer_write) {
509
+ return WriteBatchInternal::DeleteRange(
510
+ buffered_writes_.get(), column_family_id, begin_key, end_key);
511
+ }
512
+
436
513
  state_->DeleteRange(column_family_id, static_cast<int64_t>(begin_key_id),
437
514
  static_cast<int64_t>(end_key_id), false /* pending */);
438
515
  ++num_write_ops_;
@@ -443,13 +520,64 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
443
520
  const Slice& value) override {
444
521
  Slice key =
445
522
  StripTimestampFromUserKey(key_with_ts, FLAGS_user_timestamp_size);
523
+
524
+ bool should_buffer_write = !(buffered_writes_ == nullptr);
525
+ if (should_buffer_write) {
526
+ return WriteBatchInternal::Merge(buffered_writes_.get(), column_family_id,
527
+ key, value);
528
+ }
529
+
446
530
  return PutCF(column_family_id, key, value);
447
531
  }
448
532
 
533
+ Status MarkBeginPrepare(bool = false) override {
534
+ assert(!buffered_writes_);
535
+ buffered_writes_.reset(new WriteBatch());
536
+ return Status::OK();
537
+ }
538
+
539
+ Status MarkEndPrepare(const Slice& xid) override {
540
+ assert(buffered_writes_);
541
+ std::string xid_str = xid.ToString();
542
+ assert(xid_to_buffered_writes_.find(xid_str) ==
543
+ xid_to_buffered_writes_.end());
544
+
545
+ xid_to_buffered_writes_[xid_str].swap(buffered_writes_);
546
+
547
+ buffered_writes_.reset();
548
+
549
+ return Status::OK();
550
+ }
551
+
552
+ Status MarkCommit(const Slice& xid) override {
553
+ std::string xid_str = xid.ToString();
554
+ assert(xid_to_buffered_writes_.find(xid_str) !=
555
+ xid_to_buffered_writes_.end());
556
+ assert(xid_to_buffered_writes_.at(xid_str));
557
+
558
+ Status s = xid_to_buffered_writes_.at(xid_str)->Iterate(this);
559
+ xid_to_buffered_writes_.erase(xid_str);
560
+
561
+ return s;
562
+ }
563
+
564
+ Status MarkRollback(const Slice& xid) override {
565
+ std::string xid_str = xid.ToString();
566
+ assert(xid_to_buffered_writes_.find(xid_str) !=
567
+ xid_to_buffered_writes_.end());
568
+ assert(xid_to_buffered_writes_.at(xid_str));
569
+ xid_to_buffered_writes_.erase(xid_str);
570
+
571
+ return Status::OK();
572
+ }
573
+
449
574
  private:
450
575
  uint64_t num_write_ops_ = 0;
451
576
  uint64_t max_write_ops_;
452
577
  ExpectedState* state_;
578
+ std::unordered_map<std::string, std::unique_ptr<WriteBatch>>
579
+ xid_to_buffered_writes_;
580
+ std::unique_ptr<WriteBatch> buffered_writes_;
453
581
  };
454
582
 
455
583
  } // anonymous namespace
@@ -329,6 +329,10 @@ void MultiOpsTxnsStressTest::FinishInitDb(SharedState* shared) {
329
329
  if (FLAGS_enable_compaction_filter) {
330
330
  // TODO (yanqin) enable compaction filter
331
331
  }
332
+ #ifndef ROCKSDB_LITE
333
+ ProcessRecoveredPreparedTxns(shared);
334
+ #endif
335
+
332
336
  ReopenAndPreloadDbIfNeeded(shared);
333
337
  // TODO (yanqin) parallelize if key space is large
334
338
  for (auto& key_gen : key_gen_for_a_) {
@@ -1353,6 +1357,18 @@ uint32_t MultiOpsTxnsStressTest::GenerateNextC(ThreadState* thread) {
1353
1357
  }
1354
1358
 
1355
1359
  #ifndef ROCKSDB_LITE
1360
+ void MultiOpsTxnsStressTest::ProcessRecoveredPreparedTxnsHelper(
1361
+ Transaction* txn, SharedState*) {
1362
+ thread_local Random rand(static_cast<uint32_t>(FLAGS_seed));
1363
+ if (rand.OneIn(2)) {
1364
+ Status s = txn->Commit();
1365
+ assert(s.ok());
1366
+ } else {
1367
+ Status s = txn->Rollback();
1368
+ assert(s.ok());
1369
+ }
1370
+ }
1371
+
1356
1372
  Status MultiOpsTxnsStressTest::WriteToCommitTimeWriteBatch(Transaction& txn) {
1357
1373
  WriteBatch* ctwb = txn.GetCommitTimeWriteBatch();
1358
1374
  assert(ctwb);
@@ -1776,6 +1792,12 @@ void CheckAndSetOptionsForMultiOpsTxnStressTest() {
1776
1792
  exit(1);
1777
1793
  }
1778
1794
  }
1795
+ if (FLAGS_sync_fault_injection == 1) {
1796
+ fprintf(stderr,
1797
+ "Sync fault injection is currently not supported in "
1798
+ "-test_multi_ops_txns\n");
1799
+ exit(1);
1800
+ }
1779
1801
  #else
1780
1802
  fprintf(stderr, "-test_multi_ops_txns not supported in ROCKSDB_LITE mode\n");
1781
1803
  exit(1);
@@ -345,6 +345,10 @@ class MultiOpsTxnsStressTest : public StressTest {
345
345
  uint32_t GenerateNextC(ThreadState* thread);
346
346
 
347
347
  #ifndef ROCKSDB_LITE
348
+ // Randomly commit or rollback `txn`
349
+ void ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
350
+ SharedState*) override;
351
+
348
352
  // Some applications, e.g. MyRocks writes a KV pair to the database via
349
353
  // commit-time-write-batch (ctwb) in additional to the transaction's regular
350
354
  // write batch. The key is usually constant representing some system