@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
@@ -124,6 +124,25 @@ TEST(WideColumnSerializationTest, SerializeDeserialize) {
124
124
  }
125
125
  }
126
126
 
127
+ TEST(WideColumnSerializationTest, SerializeWithPrepend) {
128
+ Slice value_of_default("baz");
129
+ WideColumns other_columns{{"foo", "bar"}, {"hello", "world"}};
130
+
131
+ std::string output;
132
+ ASSERT_OK(WideColumnSerialization::Serialize(value_of_default, other_columns,
133
+ output));
134
+
135
+ Slice input(output);
136
+
137
+ WideColumns deserialized_columns;
138
+ ASSERT_OK(WideColumnSerialization::Deserialize(input, deserialized_columns));
139
+
140
+ WideColumns expected_columns{{kDefaultWideColumnName, value_of_default},
141
+ other_columns[0],
142
+ other_columns[1]};
143
+ ASSERT_EQ(deserialized_columns, expected_columns);
144
+ }
145
+
127
146
  TEST(WideColumnSerializationTest, SerializeDuplicateError) {
128
147
  WideColumns columns{{"foo", "bar"}, {"foo", "baz"}};
129
148
  std::string output;
@@ -132,6 +151,16 @@ TEST(WideColumnSerializationTest, SerializeDuplicateError) {
132
151
  WideColumnSerialization::Serialize(columns, output).IsCorruption());
133
152
  }
134
153
 
154
+ TEST(WideColumnSerializationTest, SerializeWithPrependDuplicateError) {
155
+ Slice value_of_default("baz");
156
+ WideColumns other_columns{{kDefaultWideColumnName, "dup"}, {"foo", "bar"}};
157
+
158
+ std::string output;
159
+ ASSERT_TRUE(WideColumnSerialization::Serialize(value_of_default,
160
+ other_columns, output)
161
+ .IsCorruption());
162
+ }
163
+
135
164
  TEST(WideColumnSerializationTest, SerializeOutOfOrderError) {
136
165
  WideColumns columns{{"hello", "world"}, {"foo", "bar"}};
137
166
  std::string output;
@@ -303,6 +332,7 @@ TEST(WideColumnSerializationTest, DeserializeColumnsOutOfOrder) {
303
332
  } // namespace ROCKSDB_NAMESPACE
304
333
 
305
334
  int main(int argc, char** argv) {
335
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
306
336
  ::testing::InitGoogleTest(&argc, argv);
307
337
  return RUN_ALL_TESTS();
308
338
  }
@@ -9,6 +9,10 @@
9
9
 
10
10
  namespace ROCKSDB_NAMESPACE {
11
11
 
12
+ const Slice kDefaultWideColumnName;
13
+
14
+ const WideColumns kNoWideColumns;
15
+
12
16
  Status PinnableWideColumns::CreateIndexForWideColumns() {
13
17
  Slice value_copy = value_;
14
18
 
@@ -1353,8 +1353,31 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1353
1353
  return WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1354
1354
  }
1355
1355
 
1356
- return Status::InvalidArgument(
1357
- "Cannot call this method on column family enabling timestamp");
1356
+ needs_in_place_update_ts_ = true;
1357
+ has_key_with_ts_ = true;
1358
+ std::string dummy_ts(ts_sz, '\0');
1359
+ std::array<Slice, 2> begin_key_with_ts{{begin_key, dummy_ts}};
1360
+ std::array<Slice, 2> end_key_with_ts{{end_key, dummy_ts}};
1361
+ return WriteBatchInternal::DeleteRange(
1362
+ this, cf_id, SliceParts(begin_key_with_ts.data(), 2),
1363
+ SliceParts(end_key_with_ts.data(), 2));
1364
+ }
1365
+
1366
+ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1367
+ const Slice& begin_key, const Slice& end_key,
1368
+ const Slice& ts) {
1369
+ const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1370
+ if (!s.ok()) {
1371
+ return s;
1372
+ }
1373
+ assert(column_family);
1374
+ has_key_with_ts_ = true;
1375
+ uint32_t cf_id = column_family->GetID();
1376
+ std::array<Slice, 2> key_with_ts{{begin_key, ts}};
1377
+ std::array<Slice, 2> end_key_with_ts{{end_key, ts}};
1378
+ return WriteBatchInternal::DeleteRange(this, cf_id,
1379
+ SliceParts(key_with_ts.data(), 2),
1380
+ SliceParts(end_key_with_ts.data(), 2));
1358
1381
  }
1359
1382
 
1360
1383
  Status WriteBatchInternal::DeleteRange(WriteBatch* b, uint32_t column_family_id,
@@ -1928,10 +1951,9 @@ class MemTableInserter : public WriteBatch::Handler {
1928
1951
  // always 0 in
1929
1952
  // non-recovery, regular write code-path)
1930
1953
  // * If recovering_log_number_ < cf_mems_->GetLogNumber(), this means that
1931
- // column
1932
- // family already contains updates from this log. We can't apply updates
1933
- // twice because of update-in-place or merge workloads -- ignore the
1934
- // update
1954
+ // column family already contains updates from this log. We can't apply
1955
+ // updates twice because of update-in-place or merge workloads -- ignore
1956
+ // the update
1935
1957
  *s = Status::OK();
1936
1958
  return false;
1937
1959
  }
@@ -2331,7 +2353,8 @@ class MemTableInserter : public WriteBatch::Handler {
2331
2353
  cfd->ioptions()->table_factory->Name() + " in CF " +
2332
2354
  cfd->GetName());
2333
2355
  }
2334
- int cmp = cfd->user_comparator()->Compare(begin_key, end_key);
2356
+ int cmp =
2357
+ cfd->user_comparator()->CompareWithoutTimestamp(begin_key, end_key);
2335
2358
  if (cmp > 0) {
2336
2359
  // TODO(ajkr): refactor `SeekToColumnFamily()` so it returns a `Status`.
2337
2360
  ret_status.PermitUncheckedError();
@@ -314,8 +314,12 @@ class TimestampUpdater : public WriteBatch::Handler {
314
314
  }
315
315
 
316
316
  Status DeleteRangeCF(uint32_t cf, const Slice& begin_key,
317
- const Slice&) override {
318
- return UpdateTimestamp(cf, begin_key);
317
+ const Slice& end_key) override {
318
+ Status s = UpdateTimestamp(cf, begin_key, true /* is_key */);
319
+ if (s.ok()) {
320
+ s = UpdateTimestamp(cf, end_key, false /* is_key */);
321
+ }
322
+ return s;
319
323
  }
320
324
 
321
325
  Status MergeCF(uint32_t cf, const Slice& key, const Slice&) override {
@@ -341,13 +345,15 @@ class TimestampUpdater : public WriteBatch::Handler {
341
345
  Status MarkNoop(bool /*empty_batch*/) override { return Status::OK(); }
342
346
 
343
347
  private:
344
- Status UpdateTimestamp(uint32_t cf, const Slice& key) {
345
- Status s = UpdateTimestampImpl(cf, key, idx_);
348
+ // @param is_key specifies whether the update is for key or value.
349
+ Status UpdateTimestamp(uint32_t cf, const Slice& buf, bool is_key = true) {
350
+ Status s = UpdateTimestampImpl(cf, buf, idx_, is_key);
346
351
  ++idx_;
347
352
  return s;
348
353
  }
349
354
 
350
- Status UpdateTimestampImpl(uint32_t cf, const Slice& key, size_t /*idx*/) {
355
+ Status UpdateTimestampImpl(uint32_t cf, const Slice& buf, size_t /*idx*/,
356
+ bool is_key) {
351
357
  if (timestamp_.empty()) {
352
358
  return Status::InvalidArgument("Timestamp is empty");
353
359
  }
@@ -361,22 +367,27 @@ class TimestampUpdater : public WriteBatch::Handler {
361
367
  } else if (cf_ts_sz != timestamp_.size()) {
362
368
  return Status::InvalidArgument("timestamp size mismatch");
363
369
  }
364
- UpdateProtectionInformationIfNeeded(key, timestamp_);
370
+ UpdateProtectionInformationIfNeeded(buf, timestamp_, is_key);
365
371
 
366
- char* ptr = const_cast<char*>(key.data() + key.size() - cf_ts_sz);
372
+ char* ptr = const_cast<char*>(buf.data() + buf.size() - cf_ts_sz);
367
373
  assert(ptr);
368
374
  memcpy(ptr, timestamp_.data(), timestamp_.size());
369
375
  return Status::OK();
370
376
  }
371
377
 
372
- void UpdateProtectionInformationIfNeeded(const Slice& key, const Slice& ts) {
378
+ void UpdateProtectionInformationIfNeeded(const Slice& buf, const Slice& ts,
379
+ bool is_key) {
373
380
  if (prot_info_ != nullptr) {
374
381
  const size_t ts_sz = ts.size();
375
- SliceParts old_key(&key, 1);
376
- Slice key_no_ts(key.data(), key.size() - ts_sz);
377
- std::array<Slice, 2> new_key_cmpts{{key_no_ts, ts}};
378
- SliceParts new_key(new_key_cmpts.data(), 2);
379
- prot_info_->entries_[idx_].UpdateK(old_key, new_key);
382
+ SliceParts old(&buf, 1);
383
+ Slice old_no_ts(buf.data(), buf.size() - ts_sz);
384
+ std::array<Slice, 2> new_key_cmpts{{old_no_ts, ts}};
385
+ SliceParts new_parts(new_key_cmpts.data(), 2);
386
+ if (is_key) {
387
+ prot_info_->entries_[idx_].UpdateK(old, new_parts);
388
+ } else {
389
+ prot_info_->entries_[idx_].UpdateV(old, new_parts);
390
+ }
380
391
  }
381
392
  }
382
393
 
@@ -962,15 +962,15 @@ TEST_F(WriteBatchTest, SanityChecks) {
962
962
  ASSERT_TRUE(wb.Delete(nullptr, "key", "ts").IsInvalidArgument());
963
963
  ASSERT_TRUE(wb.SingleDelete(nullptr, "key", "ts").IsInvalidArgument());
964
964
  ASSERT_TRUE(wb.Merge(nullptr, "key", "ts", "value").IsNotSupported());
965
- ASSERT_TRUE(
966
- wb.DeleteRange(nullptr, "begin_key", "end_key", "ts").IsNotSupported());
965
+ ASSERT_TRUE(wb.DeleteRange(nullptr, "begin_key", "end_key", "ts")
966
+ .IsInvalidArgument());
967
967
 
968
968
  ASSERT_TRUE(wb.Put(&cf4, "key", "ts", "value").IsInvalidArgument());
969
969
  ASSERT_TRUE(wb.Delete(&cf4, "key", "ts").IsInvalidArgument());
970
970
  ASSERT_TRUE(wb.SingleDelete(&cf4, "key", "ts").IsInvalidArgument());
971
971
  ASSERT_TRUE(wb.Merge(&cf4, "key", "ts", "value").IsNotSupported());
972
972
  ASSERT_TRUE(
973
- wb.DeleteRange(&cf4, "begin_key", "end_key", "ts").IsNotSupported());
973
+ wb.DeleteRange(&cf4, "begin_key", "end_key", "ts").IsInvalidArgument());
974
974
 
975
975
  constexpr size_t wrong_ts_sz = 1 + sizeof(uint64_t);
976
976
  std::string ts(wrong_ts_sz, '\0');
@@ -980,7 +980,7 @@ TEST_F(WriteBatchTest, SanityChecks) {
980
980
  ASSERT_TRUE(wb.SingleDelete(&cf0, "key", ts).IsInvalidArgument());
981
981
  ASSERT_TRUE(wb.Merge(&cf0, "key", ts, "value").IsNotSupported());
982
982
  ASSERT_TRUE(
983
- wb.DeleteRange(&cf0, "begin_key", "end_key", ts).IsNotSupported());
983
+ wb.DeleteRange(&cf0, "begin_key", "end_key", ts).IsInvalidArgument());
984
984
 
985
985
  // Sanity checks for the new WriteBatch APIs without extra 'ts' arg.
986
986
  WriteBatch wb1(0, 0, 0, wrong_ts_sz);
@@ -1107,6 +1107,7 @@ TEST_F(WriteBatchTest, CommitWithTimestamp) {
1107
1107
  } // namespace ROCKSDB_NAMESPACE
1108
1108
 
1109
1109
  int main(int argc, char** argv) {
1110
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
1110
1111
  ::testing::InitGoogleTest(&argc, argv);
1111
1112
  return RUN_ALL_TESTS();
1112
1113
  }
@@ -447,6 +447,7 @@ TEST_F(WriteCallbackTest, WriteCallBackTest) {
447
447
  } // namespace ROCKSDB_NAMESPACE
448
448
 
449
449
  int main(int argc, char** argv) {
450
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
450
451
  ::testing::InitGoogleTest(&argc, argv);
451
452
  return RUN_ALL_TESTS();
452
453
  }
@@ -242,6 +242,7 @@ TEST_F(WriteControllerTest, CreditAccumulation) {
242
242
  } // namespace ROCKSDB_NAMESPACE
243
243
 
244
244
  int main(int argc, char** argv) {
245
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
245
246
  ::testing::InitGoogleTest(&argc, argv);
246
247
  return RUN_ALL_TESTS();
247
248
  }
@@ -26,31 +26,41 @@ class BatchedOpsStressTest : public StressTest {
26
26
  const std::vector<int>& rand_column_families,
27
27
  const std::vector<int64_t>& rand_keys,
28
28
  char (&value)[100]) override {
29
- uint32_t value_base =
29
+ assert(!rand_column_families.empty());
30
+ assert(!rand_keys.empty());
31
+
32
+ const std::string key_suffix = Key(rand_keys[0]);
33
+
34
+ const uint32_t value_base =
30
35
  thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
31
- size_t sz = GenerateValue(value_base, value, sizeof(value));
32
- Slice v(value, sz);
33
- std::string keys[10] = {"9", "8", "7", "6", "5", "4", "3", "2", "1", "0"};
34
- std::string values[10] = {"9", "8", "7", "6", "5", "4", "3", "2", "1", "0"};
35
- Slice value_slices[10];
36
+ const size_t sz = GenerateValue(value_base, value, sizeof(value));
37
+ const std::string value_suffix = Slice(value, sz).ToString();
38
+
36
39
  WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
37
40
  FLAGS_batch_protection_bytes_per_key,
38
41
  FLAGS_user_timestamp_size);
39
- Status s;
40
- auto cfh = column_families_[rand_column_families[0]];
41
- std::string key_str = Key(rand_keys[0]);
42
- for (int i = 0; i < 10; i++) {
43
- keys[i] += key_str;
44
- values[i] += v.ToString();
45
- value_slices[i] = values[i];
42
+
43
+ ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
44
+ assert(cfh);
45
+
46
+ for (int i = 9; i >= 0; --i) {
47
+ const std::string prefix = std::to_string(i);
48
+
49
+ const std::string k = prefix + key_suffix;
50
+ const std::string v = prefix + value_suffix;
51
+
46
52
  if (FLAGS_use_merge) {
47
- batch.Merge(cfh, keys[i], value_slices[i]);
53
+ batch.Merge(cfh, k, v);
54
+ } else if (FLAGS_use_put_entity_one_in > 0 &&
55
+ (value_base % FLAGS_use_put_entity_one_in) == 0) {
56
+ batch.PutEntity(cfh, k, GenerateWideColumns(value_base, v));
48
57
  } else {
49
- batch.Put(cfh, keys[i], value_slices[i]);
58
+ batch.Put(cfh, k, v);
50
59
  }
51
60
  }
52
61
 
53
- s = db_->Write(write_opts, &batch);
62
+ const Status s = db_->Write(write_opts, &batch);
63
+
54
64
  if (!s.ok()) {
55
65
  fprintf(stderr, "multiput error: %s\n", s.ToString().c_str());
56
66
  thread->stats.AddErrors(1);
@@ -254,88 +264,122 @@ class BatchedOpsStressTest : public StressTest {
254
264
  Status TestPrefixScan(ThreadState* thread, const ReadOptions& readoptions,
255
265
  const std::vector<int>& rand_column_families,
256
266
  const std::vector<int64_t>& rand_keys) override {
257
- size_t prefix_to_use =
258
- (FLAGS_prefix_size < 0) ? 7 : static_cast<size_t>(FLAGS_prefix_size);
259
- std::string key_str = Key(rand_keys[0]);
260
- Slice key = key_str;
261
- auto cfh = column_families_[rand_column_families[0]];
262
- std::string prefixes[10] = {"0", "1", "2", "3", "4",
263
- "5", "6", "7", "8", "9"};
264
- Slice prefix_slices[10];
265
- ReadOptions readoptionscopy[10];
266
- const Snapshot* snapshot = db_->GetSnapshot();
267
- Iterator* iters[10];
268
- std::string upper_bounds[10];
269
- Slice ub_slices[10];
270
- Status s = Status::OK();
271
- for (int i = 0; i < 10; i++) {
272
- prefixes[i] += key.ToString();
273
- prefixes[i].resize(prefix_to_use);
274
- prefix_slices[i] = Slice(prefixes[i]);
275
- readoptionscopy[i] = readoptions;
276
- readoptionscopy[i].snapshot = snapshot;
267
+ assert(!rand_column_families.empty());
268
+ assert(!rand_keys.empty());
269
+
270
+ const std::string key = Key(rand_keys[0]);
271
+
272
+ assert(FLAGS_prefix_size > 0);
273
+ const size_t prefix_to_use = static_cast<size_t>(FLAGS_prefix_size);
274
+
275
+ constexpr size_t num_prefixes = 10;
276
+
277
+ std::array<std::string, num_prefixes> prefixes;
278
+ std::array<Slice, num_prefixes> prefix_slices;
279
+ std::array<ReadOptions, num_prefixes> ro_copies;
280
+ std::array<std::string, num_prefixes> upper_bounds;
281
+ std::array<Slice, num_prefixes> ub_slices;
282
+ std::array<std::unique_ptr<Iterator>, num_prefixes> iters;
283
+
284
+ const Snapshot* const snapshot = db_->GetSnapshot();
285
+
286
+ ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
287
+ assert(cfh);
288
+
289
+ for (size_t i = 0; i < num_prefixes; ++i) {
290
+ prefixes[i] = std::to_string(i) + key;
291
+ prefix_slices[i] = Slice(prefixes[i].data(), prefix_to_use);
292
+
293
+ ro_copies[i] = readoptions;
294
+ ro_copies[i].snapshot = snapshot;
277
295
  if (thread->rand.OneIn(2) &&
278
296
  GetNextPrefix(prefix_slices[i], &(upper_bounds[i]))) {
279
297
  // For half of the time, set the upper bound to the next prefix
280
- ub_slices[i] = Slice(upper_bounds[i]);
281
- readoptionscopy[i].iterate_upper_bound = &(ub_slices[i]);
298
+ ub_slices[i] = upper_bounds[i];
299
+ ro_copies[i].iterate_upper_bound = &(ub_slices[i]);
282
300
  }
283
- iters[i] = db_->NewIterator(readoptionscopy[i], cfh);
301
+
302
+ iters[i].reset(db_->NewIterator(ro_copies[i], cfh));
284
303
  iters[i]->Seek(prefix_slices[i]);
285
304
  }
286
305
 
287
- long count = 0;
306
+ uint64_t count = 0;
307
+
288
308
  while (iters[0]->Valid() && iters[0]->key().starts_with(prefix_slices[0])) {
289
- count++;
290
- std::string values[10];
309
+ ++count;
310
+
311
+ std::array<std::string, num_prefixes> values;
312
+
291
313
  // get list of all values for this iteration
292
- for (int i = 0; i < 10; i++) {
314
+ for (size_t i = 0; i < num_prefixes; ++i) {
293
315
  // no iterator should finish before the first one
294
316
  assert(iters[i]->Valid() &&
295
317
  iters[i]->key().starts_with(prefix_slices[i]));
296
318
  values[i] = iters[i]->value().ToString();
297
319
 
298
- char expected_first = (prefixes[i])[0];
299
- char actual_first = (values[i])[0];
320
+ // make sure the first character of the value is the expected digit
321
+ const char expected_first = prefixes[i][0];
322
+ const char actual_first = values[i][0];
300
323
 
301
324
  if (actual_first != expected_first) {
302
325
  fprintf(stderr, "error expected first = %c actual = %c\n",
303
326
  expected_first, actual_first);
304
327
  }
305
- (values[i])[0] = ' '; // blank out the differing character
306
- }
307
- // make sure all values are equivalent
308
- for (int i = 0; i < 10; i++) {
328
+
329
+ values[i][0] = ' '; // blank out the differing character
330
+
331
+ // make sure all values are equivalent
309
332
  if (values[i] != values[0]) {
310
333
  fprintf(stderr,
311
- "error : %d, inconsistent values for prefix %s: %s, %s\n", i,
312
- prefixes[i].c_str(), StringToHex(values[0]).c_str(),
334
+ "error : %" ROCKSDB_PRIszt
335
+ ", inconsistent values for prefix %s: %s, %s\n",
336
+ i, prefix_slices[i].ToString(/* hex */ true).c_str(),
337
+ StringToHex(values[0]).c_str(),
313
338
  StringToHex(values[i]).c_str());
314
339
  // we continue after error rather than exiting so that we can
315
340
  // find more errors if any
316
341
  }
342
+
343
+ // make sure value() and columns() are consistent
344
+ // note: in these tests, value base is stored after a single-digit
345
+ // prefix
346
+ Slice value_base_slice = iters[i]->value();
347
+ value_base_slice.remove_prefix(1);
348
+
349
+ const WideColumns expected_columns = GenerateExpectedWideColumns(
350
+ GetValueBase(value_base_slice), iters[i]->value());
351
+ if (iters[i]->columns() != expected_columns) {
352
+ fprintf(stderr,
353
+ "error : %" ROCKSDB_PRIszt
354
+ ", value and columns inconsistent for prefix %s: %s\n",
355
+ i, prefix_slices[i].ToString(/* hex */ true).c_str(),
356
+ DebugString(iters[i]->value(), iters[i]->columns(),
357
+ expected_columns)
358
+ .c_str());
359
+ }
360
+
317
361
  iters[i]->Next();
318
362
  }
319
363
  }
320
364
 
321
365
  // cleanup iterators and snapshot
322
- for (int i = 0; i < 10; i++) {
366
+ for (size_t i = 0; i < num_prefixes; ++i) {
323
367
  // if the first iterator finished, they should have all finished
324
368
  assert(!iters[i]->Valid() ||
325
369
  !iters[i]->key().starts_with(prefix_slices[i]));
326
370
  assert(iters[i]->status().ok());
327
- delete iters[i];
328
371
  }
372
+
329
373
  db_->ReleaseSnapshot(snapshot);
330
374
 
331
- if (s.ok()) {
332
- thread->stats.AddPrefixes(1, count);
333
- } else {
334
- fprintf(stderr, "TestPrefixScan error: %s\n", s.ToString().c_str());
335
- thread->stats.AddErrors(1);
336
- }
375
+ thread->stats.AddPrefixes(1, count);
337
376
 
338
- return s;
377
+ return Status::OK();
378
+ }
379
+
380
+ Slice GetValueBaseSlice(Slice slice) override {
381
+ slice.remove_prefix(1);
382
+ return slice;
339
383
  }
340
384
 
341
385
  void VerifyDb(ThreadState* /* thread */) const override {}