@nxtedition/rocksdb 10.1.5 → 10.2.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 (255) hide show
  1. package/binding.cc +19 -11
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -5
  3. package/deps/rocksdb/rocksdb/Makefile +38 -15
  4. package/deps/rocksdb/rocksdb/TARGETS +10 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -0
  6. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +4 -4
  7. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +4 -2
  8. package/deps/rocksdb/rocksdb/db/builder.cc +2 -2
  9. package/deps/rocksdb/rocksdb/db/builder.h +1 -1
  10. package/deps/rocksdb/rocksdb/db/c.cc +205 -6
  11. package/deps/rocksdb/rocksdb/db/c_test.c +189 -1
  12. package/deps/rocksdb/rocksdb/db/column_family.cc +28 -0
  13. package/deps/rocksdb/rocksdb/db/column_family.h +17 -0
  14. package/deps/rocksdb/rocksdb/db/column_family_test.cc +234 -60
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +8 -1
  16. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -9
  17. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +4 -4
  18. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -0
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +22 -25
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +2 -0
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +112 -0
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +72 -21
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +2 -0
  25. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +77 -0
  26. package/deps/rocksdb/rocksdb/db/convenience.cc +3 -0
  27. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +269 -112
  28. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +107 -43
  29. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +93 -24
  30. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +5 -5
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +157 -68
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +56 -15
  33. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +78 -105
  34. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +39 -9
  35. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
  36. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +21 -14
  37. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +107 -63
  38. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +43 -2
  39. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +4 -0
  40. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +6 -0
  41. package/deps/rocksdb/rocksdb/db/db_test.cc +10 -2
  42. package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
  43. package/deps/rocksdb/rocksdb/db/db_test_util.cc +5 -0
  44. package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -6
  45. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +92 -2
  46. package/deps/rocksdb/rocksdb/db/error_handler.cc +34 -39
  47. package/deps/rocksdb/rocksdb/db/error_handler.h +3 -4
  48. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/event_helpers.cc +6 -3
  50. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +71 -15
  51. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +11 -0
  52. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +383 -4
  53. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +88 -72
  54. package/deps/rocksdb/rocksdb/db/flush_job.cc +30 -3
  55. package/deps/rocksdb/rocksdb/db/flush_job.h +14 -0
  56. package/deps/rocksdb/rocksdb/db/internal_stats.cc +60 -1
  57. package/deps/rocksdb/rocksdb/db/internal_stats.h +20 -1
  58. package/deps/rocksdb/rocksdb/db/log_writer.cc +24 -0
  59. package/deps/rocksdb/rocksdb/db/log_writer.h +5 -0
  60. package/deps/rocksdb/rocksdb/db/memtable.cc +6 -4
  61. package/deps/rocksdb/rocksdb/db/memtable.h +10 -10
  62. package/deps/rocksdb/rocksdb/db/memtable_list.cc +4 -4
  63. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +10 -3
  64. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +8 -10
  65. package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
  66. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +30 -0
  67. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +9 -0
  68. package/deps/rocksdb/rocksdb/db/table_cache.cc +17 -2
  69. package/deps/rocksdb/rocksdb/db/table_cache.h +9 -1
  70. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +9 -2
  71. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +3 -1
  72. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +3 -3
  73. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +7 -7
  74. package/deps/rocksdb/rocksdb/db/version_edit.cc +0 -1
  75. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -6
  76. package/deps/rocksdb/rocksdb/db/version_set.cc +54 -31
  77. package/deps/rocksdb/rocksdb/db/version_set.h +14 -7
  78. package/deps/rocksdb/rocksdb/db/wal_manager.cc +37 -29
  79. package/deps/rocksdb/rocksdb/db/wal_manager.h +6 -5
  80. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +6 -0
  81. package/deps/rocksdb/rocksdb/db/write_batch.cc +54 -23
  82. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +46 -5
  83. package/deps/rocksdb/rocksdb/db/write_thread.cc +53 -5
  84. package/deps/rocksdb/rocksdb/db/write_thread.h +36 -4
  85. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  86. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -0
  87. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +57 -17
  88. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +11 -3
  89. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -4
  90. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +10 -25
  91. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +25 -88
  92. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_filters.cc +93 -0
  93. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_filters.h +16 -0
  94. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +43 -0
  95. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +109 -21
  96. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -0
  97. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +666 -205
  98. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +55 -10
  99. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -16
  100. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +19 -0
  101. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +5 -0
  102. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +782 -494
  103. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +21 -0
  104. package/deps/rocksdb/rocksdb/env/env.cc +6 -0
  105. package/deps/rocksdb/rocksdb/env/io_posix.cc +0 -1
  106. package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
  107. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +34 -19
  108. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +29 -32
  109. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +41 -15
  110. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -2
  111. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +63 -0
  112. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +16 -5
  113. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +5 -0
  114. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +0 -16
  115. package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +16 -0
  116. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +21 -0
  117. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +76 -3
  118. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +17 -0
  119. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +12 -6
  120. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +31 -0
  121. package/deps/rocksdb/rocksdb/include/rocksdb/user_write_callback.h +29 -0
  122. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +4 -2
  123. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +0 -1
  124. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +17 -8
  125. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +2 -2
  126. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +46 -0
  127. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +7 -0
  128. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  129. package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -2
  130. package/deps/rocksdb/rocksdb/options/cf_options.h +6 -2
  131. package/deps/rocksdb/rocksdb/options/db_options.cc +8 -0
  132. package/deps/rocksdb/rocksdb/options/db_options.h +9 -5
  133. package/deps/rocksdb/rocksdb/options/options.cc +3 -0
  134. package/deps/rocksdb/rocksdb/options/options_helper.cc +1 -0
  135. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  136. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +2 -2
  137. package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -0
  138. package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
  139. package/deps/rocksdb/rocksdb/src.mk +4 -0
  140. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +1 -2
  141. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +4 -2
  142. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +15 -0
  143. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +102 -41
  144. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +15 -7
  145. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -3
  146. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -6
  147. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +31 -0
  148. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -0
  149. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +10 -5
  150. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +11 -15
  151. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +17 -11
  152. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +5 -2
  153. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -21
  154. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +9 -11
  155. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -16
  156. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -2
  157. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +14 -9
  158. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +4 -1
  159. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +82 -41
  160. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +13 -14
  161. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +18 -22
  162. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +51 -13
  163. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -0
  164. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +3 -11
  165. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -3
  166. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +9 -10
  167. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +3 -2
  168. package/deps/rocksdb/rocksdb/table/format.cc +1 -2
  169. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +18 -13
  170. package/deps/rocksdb/rocksdb/table/merging_iterator.h +5 -3
  171. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +2 -2
  172. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +1 -1
  173. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +3 -1
  174. package/deps/rocksdb/rocksdb/table/table_builder.h +8 -7
  175. package/deps/rocksdb/rocksdb/table/table_reader.h +9 -0
  176. package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -0
  177. package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -0
  178. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +19 -0
  179. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +434 -110
  180. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +3 -1
  181. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +3 -0
  182. package/deps/rocksdb/rocksdb/util/aligned_storage.h +24 -0
  183. package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
  184. package/deps/rocksdb/rocksdb/util/random.cc +2 -1
  185. package/deps/rocksdb/rocksdb/util/stderr_logger.h +1 -1
  186. package/deps/rocksdb/rocksdb/util/udt_util.cc +33 -0
  187. package/deps/rocksdb/rocksdb/util/udt_util.h +7 -0
  188. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +33 -0
  189. package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
  190. package/deps/rocksdb/rocksdb/util/xxhash.h +10 -3
  191. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +13 -13
  192. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +104 -48
  193. package/deps/rocksdb/rocksdb/utilities/debug.cc +16 -4
  194. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +647 -235
  195. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -157
  196. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +144 -0
  197. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +45 -0
  198. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector_test.cc +139 -0
  199. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +12 -0
  200. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +3 -0
  201. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +105 -6
  202. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +64 -8
  203. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -0
  204. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +43 -5
  205. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +5 -0
  206. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +154 -6
  207. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +1 -1
  208. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +158 -2
  209. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +16 -11
  210. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +4 -4
  211. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +9 -8
  212. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +2 -1
  213. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +43 -7
  214. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -0
  215. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +1 -1
  216. package/package.json +1 -1
  217. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  218. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  219. package/.tap/test-results/node_modules/abstract-level/test/chained-batch-test.js.tap +0 -0
  220. package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
  221. package/.tap/test-results/test/abstract-level-test.js.tap +0 -1077
  222. package/.tap/test-results/test/batch-test.js.tap +0 -12
  223. package/.tap/test-results/test/chained-batch-gc-test.js.tap +0 -11
  224. package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +0 -135
  225. package/.tap/test-results/test/clear-gc-test.js.tap +0 -13
  226. package/.tap/test-results/test/column-test.js.tap +0 -55
  227. package/.tap/test-results/test/common.js.tap +0 -0
  228. package/.tap/test-results/test/compression-test.js.tap +0 -30
  229. package/.tap/test-results/test/db-identity.js.tap +0 -12
  230. package/.tap/test-results/test/electron.js.tap +0 -0
  231. package/.tap/test-results/test/env-cleanup-hook-test.js.tap +0 -40
  232. package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
  233. package/.tap/test-results/test/gc.js.tap +0 -0
  234. package/.tap/test-results/test/getproperty-test.js.tap +0 -29
  235. package/.tap/test-results/test/iterator-gc-test.js.tap +0 -15
  236. package/.tap/test-results/test/iterator-hwm-test.js.tap +0 -131
  237. package/.tap/test-results/test/iterator-recursion-test.js.tap +0 -12
  238. package/.tap/test-results/test/iterator-starvation-test.js.tap +0 -73
  239. package/.tap/test-results/test/iterator-test.js.tap +0 -6
  240. package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
  241. package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
  242. package/.tap/test-results/test/leak-tester.js.tap +0 -0
  243. package/.tap/test-results/test/lock-test.js.tap +0 -18
  244. package/.tap/test-results/test/lock.js.tap +0 -0
  245. package/.tap/test-results/test/make.js.tap +0 -0
  246. package/.tap/test-results/test/max-rev-merge.js.tap +0 -0
  247. package/.tap/test-results/test/merge-operator-test.js.tap +0 -12
  248. package/.tap/test-results/test/mkdir-test.js.tap +0 -15
  249. package/.tap/test-results/test/segfault-test.js.tap +0 -76
  250. package/.tap/test-results/test/stack-blower.js.tap +0 -0
  251. package/deps/rocksdb/rocksdb/README.md +0 -29
  252. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  253. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  254. package/deps/rocksdb/rocksdb/port/README +0 -10
  255. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
package/binding.cc CHANGED
@@ -445,8 +445,7 @@ struct Iterator final : public BaseIterator {
445
445
  values_(values),
446
446
  keyEncoding_(keyEncoding),
447
447
  valueEncoding_(valueEncoding),
448
- highWaterMarkBytes_(highWaterMarkBytes) {
449
- }
448
+ highWaterMarkBytes_(highWaterMarkBytes) {}
450
449
 
451
450
  void Seek(const rocksdb::Slice& target) override {
452
451
  first_ = true;
@@ -975,12 +974,17 @@ NAPI_METHOD(db_get_many) {
975
974
  rocksdb::ColumnFamilyHandle* column = database->db->DefaultColumnFamily();
976
975
  NAPI_STATUS_THROWS(GetProperty(env, options, "column", column));
977
976
 
977
+ bool takeSnapshot = true;
978
+ NAPI_STATUS_THROWS(GetProperty(env, options, "snapshot", takeSnapshot));
979
+
978
980
  auto callback = argv[3];
979
981
 
980
- auto snapshot = std::shared_ptr<const rocksdb::Snapshot>(
981
- database->db->GetSnapshot(), [database](auto ptr) { database->db->ReleaseSnapshot(ptr); });
982
+ std::shared_ptr<const rocksdb::Snapshot> snapshot;
983
+ if (takeSnapshot) {
984
+ snapshot.reset(database->db->GetSnapshot(), [=](const auto ptr) { database->db->ReleaseSnapshot(ptr); });
985
+ }
982
986
 
983
- std::vector<rocksdb::PinnableSlice> keys { size };
987
+ std::vector<rocksdb::PinnableSlice> keys{size};
984
988
 
985
989
  for (uint32_t n = 0; n < size; n++) {
986
990
  napi_value element;
@@ -1012,7 +1016,8 @@ NAPI_METHOD(db_get_many) {
1012
1016
  state.keys[n] = keys[n];
1013
1017
  }
1014
1018
 
1015
- database->db->MultiGet(readOptions, column, size, state.keys.data(), state.values.data(), state.statuses.data());
1019
+ database->db->MultiGet(readOptions, column, size, state.keys.data(), state.values.data(),
1020
+ state.statuses.data());
1016
1021
 
1017
1022
  return rocksdb::Status::OK();
1018
1023
  },
@@ -1230,8 +1235,13 @@ NAPI_METHOD(iterator_init) {
1230
1235
  rocksdb::ColumnFamilyHandle* column = database->db->DefaultColumnFamily();
1231
1236
  NAPI_STATUS_THROWS(GetProperty(env, options, "column", column));
1232
1237
 
1233
- std::shared_ptr<const rocksdb::Snapshot> snapshot(database->db->GetSnapshot(),
1234
- [=](const auto ptr) { database->db->ReleaseSnapshot(ptr); });
1238
+ bool takeSnapshot = !tailing;
1239
+ NAPI_STATUS_THROWS(GetProperty(env, options, "snapshot", takeSnapshot));
1240
+
1241
+ std::shared_ptr<const rocksdb::Snapshot> snapshot;
1242
+ if (takeSnapshot) {
1243
+ snapshot.reset(database->db->GetSnapshot(), [=](const auto ptr) { database->db->ReleaseSnapshot(ptr); });
1244
+ }
1235
1245
 
1236
1246
  auto iterator = std::unique_ptr<Iterator>(new Iterator(database, column, reverse, keys, values, limit, lt, lte, gt,
1237
1247
  gte, fillCache, keyEncoding, valueEncoding, highWaterMarkBytes,
@@ -1477,9 +1487,7 @@ NAPI_METHOD(batch_write) {
1477
1487
  writeOptions.low_pri = lowPriority;
1478
1488
  return database->db->Write(writeOptions, batch);
1479
1489
  },
1480
- [=](int64_t& seq, auto env, auto& argv) {
1481
- return napi_ok;
1482
- });
1490
+ [=](int64_t& seq, auto env, auto& argv) { return napi_ok; });
1483
1491
 
1484
1492
  return result;
1485
1493
  }
@@ -267,8 +267,8 @@ endif(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
267
267
  if(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
268
268
  CHECK_C_COMPILER_FLAG("-march=loongarch64" HAS_LOONGARCH64)
269
269
  if(HAS_LOONGARCH64)
270
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=loongarch64 -mtune=loongarch64")
271
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=loongarch64 -mtune=loongarch64")
270
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=loongarch64 -mtune=loongarch64")
271
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=loongarch64 -mtune=loongarch64")
272
272
  endif(HAS_LOONGARCH64)
273
273
  endif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64")
274
274
 
@@ -488,6 +488,8 @@ if(CMAKE_SYSTEM_NAME MATCHES "Cygwin")
488
488
  add_definitions(-fno-builtin-memcmp -DCYGWIN)
489
489
  elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
490
490
  add_definitions(-DOS_MACOSX)
491
+ elseif(CMAKE_SYSTEM_NAME MATCHES "iOS")
492
+ add_definitions(-DOS_MACOSX -DIOS_CROSS_COMPILE)
491
493
  elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
492
494
  add_definitions(-DOS_LINUX)
493
495
  elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
@@ -615,7 +617,7 @@ if(USE_FOLLY)
615
617
  FMT_INST_PATH)
616
618
  exec_program(ls ARGS -d ${FOLLY_INST_PATH}/../gflags* OUTPUT_VARIABLE
617
619
  GFLAGS_INST_PATH)
618
- set(Boost_DIR ${BOOST_INST_PATH}/lib/cmake/Boost-1.78.0)
620
+ set(Boost_DIR ${BOOST_INST_PATH}/lib/cmake/Boost-1.83.0)
619
621
  if(EXISTS ${FMT_INST_PATH}/lib64)
620
622
  set(fmt_DIR ${FMT_INST_PATH}/lib64/cmake/fmt)
621
623
  else()
@@ -691,6 +693,7 @@ set(SOURCES
691
693
  db/db_impl/db_impl_write.cc
692
694
  db/db_impl/db_impl_compaction_flush.cc
693
695
  db/db_impl/db_impl_files.cc
696
+ db/db_impl/db_impl_follower.cc
694
697
  db/db_impl/db_impl_open.cc
695
698
  db/db_impl/db_impl_debug.cc
696
699
  db/db_impl/db_impl_experimental.cc
@@ -748,6 +751,7 @@ set(SOURCES
748
751
  env/env_encryption.cc
749
752
  env/file_system.cc
750
753
  env/file_system_tracer.cc
754
+ env/fs_on_demand.cc
751
755
  env/fs_remap.cc
752
756
  env/mock_env.cc
753
757
  env/unique_id_gen.cc
@@ -935,6 +939,7 @@ set(SOURCES
935
939
  utilities/persistent_cache/volatile_tier_impl.cc
936
940
  utilities/simulator_cache/cache_simulator.cc
937
941
  utilities/simulator_cache/sim_cache.cc
942
+ utilities/table_properties_collectors/compact_for_tiering_collector.cc
938
943
  utilities/table_properties_collectors/compact_on_deletion_collector.cc
939
944
  utilities/trace/file_trace_reader_writer.cc
940
945
  utilities/trace/replayer_impl.cc
@@ -1037,10 +1042,8 @@ endif()
1037
1042
 
1038
1043
  else()
1039
1044
  list(APPEND SOURCES
1040
- db/db_impl/db_impl_follower.cc
1041
1045
  port/port_posix.cc
1042
1046
  env/env_posix.cc
1043
- env/fs_on_demand.cc
1044
1047
  env/fs_posix.cc
1045
1048
  env/io_posix.cc)
1046
1049
  endif()
@@ -1049,6 +1052,7 @@ if(USE_FOLLY_LITE)
1049
1052
  list(APPEND SOURCES
1050
1053
  third-party/folly/folly/container/detail/F14Table.cpp
1051
1054
  third-party/folly/folly/detail/Futex.cpp
1055
+ third-party/folly/folly/lang/Exception.cpp
1052
1056
  third-party/folly/folly/lang/SafeAssert.cpp
1053
1057
  third-party/folly/folly/lang/ToAscii.cpp
1054
1058
  third-party/folly/folly/ScopeGuard.cpp
@@ -1056,6 +1060,12 @@ if(USE_FOLLY_LITE)
1056
1060
  third-party/folly/folly/synchronization/DistributedMutex.cpp
1057
1061
  third-party/folly/folly/synchronization/ParkingLot.cpp)
1058
1062
  include_directories(${PROJECT_SOURCE_DIR}/third-party/folly)
1063
+ exec_program(python3 ${PROJECT_SOURCE_DIR}/third-party/folly ARGS
1064
+ build/fbcode_builder/getdeps.py show-source-dir boost OUTPUT_VARIABLE
1065
+ BOOST_SOURCE_PATH)
1066
+ exec_program(ls ARGS -d ${BOOST_SOURCE_PATH}/boost* OUTPUT_VARIABLE
1067
+ BOOST_INCLUDE_DIR)
1068
+ include_directories(${BOOST_INCLUDE_DIR})
1059
1069
  add_definitions(-DUSE_FOLLY -DFOLLY_NO_CONFIG)
1060
1070
  list(APPEND THIRDPARTY_LIBS glog)
1061
1071
  endif()
@@ -1479,6 +1489,7 @@ if(WITH_TESTS)
1479
1489
  utilities/persistent_cache/persistent_cache_test.cc
1480
1490
  utilities/simulator_cache/cache_simulator_test.cc
1481
1491
  utilities/simulator_cache/sim_cache_test.cc
1492
+ utilities/table_properties_collectors/compact_for_tiering_collector_test.cc
1482
1493
  utilities/table_properties_collectors/compact_on_deletion_collector_test.cc
1483
1494
  utilities/transactions/optimistic_transaction_test.cc
1484
1495
  utilities/transactions/transaction_test.cc
@@ -103,6 +103,7 @@ dummy := $(shell (export ROCKSDB_ROOT="$(CURDIR)"; \
103
103
  export LIB_MODE="$(LIB_MODE)"; \
104
104
  export ROCKSDB_CXX_STANDARD="$(ROCKSDB_CXX_STANDARD)"; \
105
105
  export USE_FOLLY="$(USE_FOLLY)"; \
106
+ export USE_FOLLY_LITE="$(USE_FOLLY_LITE)"; \
106
107
  "$(CURDIR)/build_tools/build_detect_platform" "$(CURDIR)/make_config.mk"))
107
108
  # this file is generated by the previous line to set build flags and sources
108
109
  include make_config.mk
@@ -500,6 +501,17 @@ endif
500
501
  ifeq ($(USE_FOLLY_LITE),1)
501
502
  # Path to the Folly source code and include files
502
503
  FOLLY_DIR = ./third-party/folly
504
+ ifneq ($(strip $(BOOST_SOURCE_PATH)),)
505
+ BOOST_INCLUDE = $(shell (ls -d $(BOOST_SOURCE_PATH)/boost*/))
506
+ # AIX: pre-defined system headers are surrounded by an extern "C" block
507
+ ifeq ($(PLATFORM), OS_AIX)
508
+ PLATFORM_CCFLAGS += -I$(BOOST_INCLUDE)
509
+ PLATFORM_CXXFLAGS += -I$(BOOST_INCLUDE)
510
+ else
511
+ PLATFORM_CCFLAGS += -isystem $(BOOST_INCLUDE)
512
+ PLATFORM_CXXFLAGS += -isystem $(BOOST_INCLUDE)
513
+ endif
514
+ endif # BOOST_SOURCE_PATH
503
515
  # AIX: pre-defined system headers are surrounded by an extern "C" block
504
516
  ifeq ($(PLATFORM), OS_AIX)
505
517
  PLATFORM_CCFLAGS += -I$(FOLLY_DIR)
@@ -636,26 +648,37 @@ TESTS = $(patsubst %.cc, %, $(notdir $(TEST_MAIN_SOURCES)))
636
648
  TESTS += $(patsubst %.c, %, $(notdir $(TEST_MAIN_SOURCES_C)))
637
649
  TESTS += $(PLUGIN_TESTS)
638
650
 
639
- # `make check-headers` to very that each header file includes its own
640
- # dependencies
651
+ # `make check-headers` to verify that each header file includes its own deps
652
+ # and that public headers do not depend on internal headers
641
653
  ifneq ($(filter check-headers, $(MAKECMDGOALS)),)
642
654
  # TODO: add/support JNI headers
643
655
  DEV_HEADER_DIRS := $(sort include/ $(dir $(ALL_SOURCES)))
644
656
  # Some headers like in port/ are platform-specific
645
- DEV_HEADERS := $(shell $(FIND) $(DEV_HEADER_DIRS) -type f -name '*.h' | grep -E -v 'port/|plugin/|lua/|range_tree/')
657
+ DEV_HEADERS_TO_CHECK := $(shell $(FIND) $(DEV_HEADER_DIRS) -type f -name '*.h' | grep -E -v 'port/|plugin/|lua/|range_tree/')
658
+ PUBLIC_HEADERS_TO_CHECK := $(shell $(FIND) include/ -type f -name '*.h' | grep -E -v 'lua/')
646
659
  else
647
- DEV_HEADERS :=
660
+ DEV_HEADERS_TO_CHECK :=
661
+ PUBLIC_HEADERS_TO_CHECK :=
648
662
  endif
649
- HEADER_OK_FILES = $(patsubst %.h, %.h.ok, $(DEV_HEADERS))
663
+ HEADER_OK_FILES = $(patsubst %.h, %.h.ok, $(DEV_HEADERS_TO_CHECK)) \
664
+ $(patsubst %.h, %.h.pub, $(PUBLIC_HEADERS_TO_CHECK))
650
665
 
651
666
  AM_V_CCH = $(am__v_CCH_$(V))
652
667
  am__v_CCH_ = $(am__v_CCH_$(AM_DEFAULT_VERBOSITY))
653
668
  am__v_CCH_0 = @echo " CC.h " $<;
654
669
  am__v_CCH_1 =
655
670
 
671
+ # verify headers include their own dependencies, under dev build settings
656
672
  %.h.ok: %.h # .h.ok not actually created, so re-checked on each invocation
657
673
  # -DROCKSDB_NAMESPACE=42 ensures the namespace header is included
658
- $(AM_V_CCH) echo '#include "$<"' | $(CXX) $(CXXFLAGS) -DROCKSDB_NAMESPACE=42 -x c++ -c - -o /dev/null
674
+ $(AM_V_CCH) echo '#include "$<"' | $(CXX) $(CXXFLAGS) \
675
+ -DROCKSDB_NAMESPACE=42 -x c++ -c - -o /dev/null
676
+
677
+ # verify public headers do not depend on internal headers, under typical
678
+ # user build settings
679
+ %.h.pub: %.h # .h.pub not actually created, so re-checked on each invocation
680
+ $(AM_V_CCH) cd include/ && echo '#include "$(patsubst include/%,%,$<)"' | \
681
+ $(CXX) -I. -DROCKSDB_NAMESPACE=42 -x c++ -c - -o /dev/null
659
682
 
660
683
  check-headers: $(HEADER_OK_FILES)
661
684
 
@@ -1631,6 +1654,9 @@ compaction_job_stats_test: $(OBJ_DIR)/db/compaction/compaction_job_stats_test.o
1631
1654
  compaction_service_test: $(OBJ_DIR)/db/compaction/compaction_service_test.o $(TEST_LIBRARY) $(LIBRARY)
1632
1655
  $(AM_LINK)
1633
1656
 
1657
+ compact_for_tiering_collector_test: $(OBJ_DIR)/utilities/table_properties_collectors/compact_for_tiering_collector_test.o $(TEST_LIBRARY) $(LIBRARY)
1658
+ $(AM_LINK)
1659
+
1634
1660
  compact_on_deletion_collector_test: $(OBJ_DIR)/utilities/table_properties_collectors/compact_on_deletion_collector_test.o $(TEST_LIBRARY) $(LIBRARY)
1635
1661
  $(AM_LINK)
1636
1662
 
@@ -2113,8 +2139,8 @@ ZLIB_DOWNLOAD_BASE ?= http://zlib.net
2113
2139
  BZIP2_VER ?= 1.0.8
2114
2140
  BZIP2_SHA256 ?= ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
2115
2141
  BZIP2_DOWNLOAD_BASE ?= http://sourceware.org/pub/bzip2
2116
- SNAPPY_VER ?= 1.1.8
2117
- SNAPPY_SHA256 ?= 16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f
2142
+ SNAPPY_VER ?= 1.2.1
2143
+ SNAPPY_SHA256 ?= 736aeb64d86566d2236ddffa2865ee5d7a82d26c9016b36218fcc27ea4f09f86
2118
2144
  SNAPPY_DOWNLOAD_BASE ?= https://github.com/google/snappy/archive
2119
2145
  LZ4_VER ?= 1.9.4
2120
2146
  LZ4_SHA256 ?= 0b0e3aa07c8c063ddf40b082bdf7e37a1562bda40a0ff5272957f3e987e0e54b
@@ -2211,7 +2237,7 @@ libsnappy.a: snappy-$(SNAPPY_VER).tar.gz
2211
2237
  -rm -rf snappy-$(SNAPPY_VER)
2212
2238
  tar xvzf snappy-$(SNAPPY_VER).tar.gz
2213
2239
  mkdir snappy-$(SNAPPY_VER)/build
2214
- cd snappy-$(SNAPPY_VER)/build && CFLAGS='$(ARCHFLAG) ${JAVA_STATIC_DEPS_CCFLAGS} ${EXTRA_CFLAGS}' CXXFLAGS='$(ARCHFLAG) ${JAVA_STATIC_DEPS_CXXFLAGS} ${EXTRA_CXXFLAGS}' LDFLAGS='${JAVA_STATIC_DEPS_LDFLAGS} ${EXTRA_LDFLAGS}' cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ${PLATFORM_CMAKE_FLAGS} .. && $(MAKE) ${SNAPPY_MAKE_TARGET}
2240
+ cd snappy-$(SNAPPY_VER)/build && CFLAGS='$(ARCHFLAG) ${JAVA_STATIC_DEPS_CCFLAGS} ${EXTRA_CFLAGS}' CXXFLAGS='$(ARCHFLAG) ${JAVA_STATIC_DEPS_CXXFLAGS} ${EXTRA_CXXFLAGS}' LDFLAGS='${JAVA_STATIC_DEPS_LDFLAGS} ${EXTRA_LDFLAGS}' cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DSNAPPY_BUILD_BENCHMARKS=OFF -DSNAPPY_BUILD_TESTS=OFF --compile-no-warning-as-error ${PLATFORM_CMAKE_FLAGS} .. && $(MAKE) ${SNAPPY_MAKE_TARGET}
2215
2241
  cp snappy-$(SNAPPY_VER)/build/libsnappy.a .
2216
2242
 
2217
2243
  lz4-$(LZ4_VER).tar.gz:
@@ -2458,14 +2484,13 @@ checkout_folly:
2458
2484
  fi
2459
2485
  @# Pin to a particular version for public CI, so that PR authors don't
2460
2486
  @# need to worry about folly breaking our integration. Update periodically
2461
- cd third-party/folly && git reset --hard beacd86d63cd71c904632262e6c36f60874d78ba
2462
- @# A hack to remove boost dependency.
2463
- @# NOTE: this hack is only needed if building using USE_FOLLY_LITE
2464
- perl -pi -e 's/^(#include <boost)/\/\/$$1/' third-party/folly/folly/functional/Invoke.h
2487
+ cd third-party/folly && git reset --hard c48fdd205c1c291651749d532b8055fe822bba25
2465
2488
  @# NOTE: this hack is required for clang in some cases
2466
2489
  perl -pi -e 's/int rv = syscall/int rv = (int)syscall/' third-party/folly/folly/detail/Futex.cpp
2467
2490
  @# NOTE: this hack is required for gcc in some cases
2468
2491
  perl -pi -e 's/(__has_include.<experimental.memory_resource>.)/__cpp_rtti && $$1/' third-party/folly/folly/memory/MemoryResource.h
2492
+ @# NOTE: boost source will be needed for any build including `USE_FOLLY_LITE` builds as those depend on boost headers
2493
+ cd third-party/folly && $(PYTHON) build/fbcode_builder/getdeps.py fetch boost
2469
2494
 
2470
2495
  CXX_M_FLAGS = $(filter -m%, $(CXXFLAGS))
2471
2496
 
@@ -2477,8 +2502,6 @@ build_folly:
2477
2502
  echo "Please run checkout_folly first"; \
2478
2503
  false; \
2479
2504
  fi
2480
- # Restore the original version of Invoke.h with boost dependency
2481
- cd third-party/folly && ${GIT_COMMAND} checkout folly/functional/Invoke.h
2482
2505
  cd third-party/folly && \
2483
2506
  CXXFLAGS=" $(CXX_M_FLAGS) -DHAVE_CXX11_ATOMIC " $(PYTHON) build/fbcode_builder/getdeps.py build --no-tests
2484
2507
 
@@ -317,6 +317,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
317
317
  "utilities/persistent_cache/volatile_tier_impl.cc",
318
318
  "utilities/simulator_cache/cache_simulator.cc",
319
319
  "utilities/simulator_cache/sim_cache.cc",
320
+ "utilities/table_properties_collectors/compact_for_tiering_collector.cc",
320
321
  "utilities/table_properties_collectors/compact_on_deletion_collector.cc",
321
322
  "utilities/trace/file_trace_reader_writer.cc",
322
323
  "utilities/trace/replayer_impl.cc",
@@ -394,6 +395,7 @@ rocks_cpp_library_wrapper(name="rocksdb_stress_lib", srcs=[
394
395
  "db_stress_tool/cf_consistency_stress.cc",
395
396
  "db_stress_tool/db_stress_common.cc",
396
397
  "db_stress_tool/db_stress_driver.cc",
398
+ "db_stress_tool/db_stress_filters.cc",
397
399
  "db_stress_tool/db_stress_gflags.cc",
398
400
  "db_stress_tool/db_stress_listener.cc",
399
401
  "db_stress_tool/db_stress_shared_state.cc",
@@ -411,6 +413,8 @@ rocks_cpp_library_wrapper(name="rocksdb_stress_lib", srcs=[
411
413
  ], headers=None)
412
414
 
413
415
 
416
+ cpp_binary_wrapper(name="ldb", srcs=["tools/ldb.cc"], deps=[":rocksdb_tools_lib"], extra_preprocessor_flags=[], extra_bench_libs=False)
417
+
414
418
  cpp_binary_wrapper(name="db_stress", srcs=["db_stress_tool/db_stress.cc"], deps=[":rocksdb_stress_lib"], extra_preprocessor_flags=[], extra_bench_libs=False)
415
419
 
416
420
  cpp_binary_wrapper(name="cache_bench", srcs=["cache/cache_bench.cc"], deps=[":rocksdb_cache_bench_tools_lib"], extra_preprocessor_flags=[], extra_bench_libs=False)
@@ -4624,6 +4628,12 @@ cpp_unittest_wrapper(name="compact_files_test",
4624
4628
  extra_compiler_flags=[])
4625
4629
 
4626
4630
 
4631
+ cpp_unittest_wrapper(name="compact_for_tiering_collector_test",
4632
+ srcs=["utilities/table_properties_collectors/compact_for_tiering_collector_test.cc"],
4633
+ deps=[":rocksdb_test_lib"],
4634
+ extra_compiler_flags=[])
4635
+
4636
+
4627
4637
  cpp_unittest_wrapper(name="compact_on_deletion_collector_test",
4628
4638
  srcs=["utilities/table_properties_collectors/compact_on_deletion_collector_test.cc"],
4629
4639
  deps=[":rocksdb_test_lib"],
@@ -18,6 +18,7 @@
18
18
  #include "cache/lru_cache.h"
19
19
  #include "cache/typed_cache.h"
20
20
  #include "port/stack_trace.h"
21
+ #include "table/block_based/block_cache.h"
21
22
  #include "test_util/secondary_cache_test_util.h"
22
23
  #include "test_util/testharness.h"
23
24
  #include "util/coding.h"
@@ -1017,6 +1018,63 @@ INSTANTIATE_TEST_CASE_P(CacheTestInstance, CacheTest,
1017
1018
  INSTANTIATE_TEST_CASE_P(CacheTestInstance, LRUCacheTest,
1018
1019
  testing::Values(secondary_cache_test_util::kLRU));
1019
1020
 
1021
+ TEST(MiscBlockCacheTest, UncacheAggressivenessAdvisor) {
1022
+ // Aggressiveness to a sequence of Report() calls (as string of 0s and 1s)
1023
+ // exactly until the first ShouldContinue() == false.
1024
+ const std::vector<std::pair<uint32_t, Slice>> expectedTraces{
1025
+ // Aggressiveness 1 aborts on first unsuccessful erasure.
1026
+ {1, "0"},
1027
+ {1, "11111111111111111111110"},
1028
+ // For sufficient evidence, aggressiveness 2 requires a minimum of two
1029
+ // unsuccessful erasures.
1030
+ {2, "00"},
1031
+ {2, "0110"},
1032
+ {2, "1100"},
1033
+ {2, "011111111111111111111111111111111111111111111111111111111111111100"},
1034
+ {2, "0111111111111111111111111111111111110"},
1035
+ // For sufficient evidence, aggressiveness 3 and higher require a minimum
1036
+ // of three unsuccessful erasures.
1037
+ {3, "000"},
1038
+ {3, "01010"},
1039
+ {3, "111000"},
1040
+ {3, "00111111111111111111111111111111111100"},
1041
+ {3, "00111111111111111111110"},
1042
+
1043
+ {4, "000"},
1044
+ {4, "01010"},
1045
+ {4, "111000"},
1046
+ {4, "001111111111111111111100"},
1047
+ {4, "0011111111111110"},
1048
+
1049
+ {6, "000"},
1050
+ {6, "01010"},
1051
+ {6, "111000"},
1052
+ {6, "00111111111111100"},
1053
+ {6, "0011111110"},
1054
+
1055
+ // 69 -> 50% threshold, now up to minimum of 4
1056
+ {69, "0000"},
1057
+ {69, "010000"},
1058
+ {69, "01010000"},
1059
+ {69, "101010100010101000"},
1060
+
1061
+ // 230 -> 10% threshold, appropriately higher minimum
1062
+ {230, "000000000000"},
1063
+ {230, "0000000000010000000000"},
1064
+ {230, "00000000000100000000010000000000"}};
1065
+ for (const auto& [aggressiveness, t] : expectedTraces) {
1066
+ SCOPED_TRACE("aggressiveness=" + std::to_string(aggressiveness) + " with " +
1067
+ t.ToString());
1068
+ UncacheAggressivenessAdvisor uaa(aggressiveness);
1069
+ for (size_t i = 0; i < t.size(); ++i) {
1070
+ SCOPED_TRACE("i=" + std::to_string(i));
1071
+ ASSERT_TRUE(uaa.ShouldContinue());
1072
+ uaa.Report(t[i] & 1);
1073
+ }
1074
+ ASSERT_FALSE(uaa.ShouldContinue());
1075
+ }
1076
+ }
1077
+
1020
1078
  } // namespace ROCKSDB_NAMESPACE
1021
1079
 
1022
1080
  int main(int argc, char** argv) {
@@ -138,10 +138,10 @@ Status ArenaWrappedDBIter::Refresh(const Snapshot* snapshot) {
138
138
  reinit_internal_iter();
139
139
  break;
140
140
  } else {
141
- delete *memtable_range_tombstone_iter_;
142
- *memtable_range_tombstone_iter_ = new TruncatedRangeDelIterator(
143
- std::unique_ptr<FragmentedRangeTombstoneIterator>(t),
144
- &cfd->internal_comparator(), nullptr, nullptr);
141
+ *memtable_range_tombstone_iter_ =
142
+ std::make_unique<TruncatedRangeDelIterator>(
143
+ std::unique_ptr<FragmentedRangeTombstoneIterator>(t),
144
+ &cfd->internal_comparator(), nullptr, nullptr);
145
145
  }
146
146
  }
147
147
  db_impl->ReturnAndCleanupSuperVersion(cfd, sv);
@@ -55,7 +55,8 @@ class ArenaWrappedDBIter : public Iterator {
55
55
  db_iter_->SetIter(iter);
56
56
  }
57
57
 
58
- void SetMemtableRangetombstoneIter(TruncatedRangeDelIterator** iter) {
58
+ void SetMemtableRangetombstoneIter(
59
+ std::unique_ptr<TruncatedRangeDelIterator>* iter) {
59
60
  memtable_range_tombstone_iter_ = iter;
60
61
  }
61
62
 
@@ -110,7 +111,8 @@ class ArenaWrappedDBIter : public Iterator {
110
111
  bool allow_refresh_ = true;
111
112
  // If this is nullptr, it means the mutable memtable does not contain range
112
113
  // tombstone when added under this DBIter.
113
- TruncatedRangeDelIterator** memtable_range_tombstone_iter_ = nullptr;
114
+ std::unique_ptr<TruncatedRangeDelIterator>* memtable_range_tombstone_iter_ =
115
+ nullptr;
114
116
  };
115
117
 
116
118
  // Generate the arena wrapped iterator class.
@@ -64,7 +64,7 @@ Status BuildTable(
64
64
  std::vector<std::unique_ptr<FragmentedRangeTombstoneIterator>>
65
65
  range_del_iters,
66
66
  FileMetaData* meta, std::vector<BlobFileAddition>* blob_file_additions,
67
- std::vector<SequenceNumber> snapshots,
67
+ std::vector<SequenceNumber> snapshots, SequenceNumber earliest_snapshot,
68
68
  SequenceNumber earliest_write_conflict_snapshot,
69
69
  SequenceNumber job_snapshot, SnapshotChecker* snapshot_checker,
70
70
  bool paranoid_file_checks, InternalStats* internal_stats,
@@ -195,7 +195,7 @@ Status BuildTable(
195
195
 
196
196
  const std::atomic<bool> kManualCompactionCanceledFalse{false};
197
197
  CompactionIterator c_iter(
198
- iter, ucmp, &merge, kMaxSequenceNumber, &snapshots,
198
+ iter, ucmp, &merge, kMaxSequenceNumber, &snapshots, earliest_snapshot,
199
199
  earliest_write_conflict_snapshot, job_snapshot, snapshot_checker, env,
200
200
  ShouldReportDetailedTime(env, ioptions.stats),
201
201
  true /* internal key corruption is not ok */, range_del_agg.get(),
@@ -57,7 +57,7 @@ Status BuildTable(
57
57
  std::vector<std::unique_ptr<FragmentedRangeTombstoneIterator>>
58
58
  range_del_iters,
59
59
  FileMetaData* meta, std::vector<BlobFileAddition>* blob_file_additions,
60
- std::vector<SequenceNumber> snapshots,
60
+ std::vector<SequenceNumber> snapshots, SequenceNumber earliest_snapshot,
61
61
  SequenceNumber earliest_write_conflict_snapshot,
62
62
  SequenceNumber job_snapshot, SnapshotChecker* snapshot_checker,
63
63
  bool paranoid_file_checks, InternalStats* internal_stats,