@nxtedition/rocksdb 10.1.4 → 10.1.6

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 (266) hide show
  1. package/binding.cc +16 -12
  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/index.js +1 -2
  217. package/package.json +1 -1
  218. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  219. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  220. package/util.h +25 -2
  221. package/.tap/test-results/node_modules/abstract-level/test/chained-batch-test.js.tap +0 -0
  222. package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
  223. package/.tap/test-results/test/abstract-level-test.js.tap +0 -1077
  224. package/.tap/test-results/test/batch-test.js.tap +0 -12
  225. package/.tap/test-results/test/chained-batch-gc-test.js.tap +0 -11
  226. package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +0 -135
  227. package/.tap/test-results/test/clear-gc-test.js.tap +0 -13
  228. package/.tap/test-results/test/column-test.js.tap +0 -55
  229. package/.tap/test-results/test/common.js.tap +0 -0
  230. package/.tap/test-results/test/compression-test.js.tap +0 -30
  231. package/.tap/test-results/test/db-identity.js.tap +0 -12
  232. package/.tap/test-results/test/electron.js.tap +0 -0
  233. package/.tap/test-results/test/env-cleanup-hook-test.js.tap +0 -40
  234. package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
  235. package/.tap/test-results/test/gc.js.tap +0 -0
  236. package/.tap/test-results/test/getproperty-test.js.tap +0 -29
  237. package/.tap/test-results/test/iterator-gc-test.js.tap +0 -15
  238. package/.tap/test-results/test/iterator-hwm-test.js.tap +0 -131
  239. package/.tap/test-results/test/iterator-recursion-test.js.tap +0 -12
  240. package/.tap/test-results/test/iterator-starvation-test.js.tap +0 -73
  241. package/.tap/test-results/test/iterator-test.js.tap +0 -6
  242. package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
  243. package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
  244. package/.tap/test-results/test/leak-tester.js.tap +0 -0
  245. package/.tap/test-results/test/lock-test.js.tap +0 -18
  246. package/.tap/test-results/test/lock.js.tap +0 -0
  247. package/.tap/test-results/test/make.js.tap +0 -0
  248. package/.tap/test-results/test/max-rev-merge.js.tap +0 -0
  249. package/.tap/test-results/test/merge-operator-test.js.tap +0 -12
  250. package/.tap/test-results/test/mkdir-test.js.tap +0 -15
  251. package/.tap/test-results/test/segfault-test.js.tap +0 -76
  252. package/.tap/test-results/test/stack-blower.js.tap +0 -0
  253. package/deps/rocksdb/rocksdb/README.md +0 -29
  254. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  255. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  256. package/deps/rocksdb/rocksdb/port/README +0 -10
  257. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  258. package/tmp/000099.sst +0 -0
  259. package/tmp/000102.sst +0 -0
  260. package/tmp/000103.log +0 -0
  261. package/tmp/CURRENT +0 -1
  262. package/tmp/IDENTITY +0 -1
  263. package/tmp/LOCK +0 -0
  264. package/tmp/MANIFEST-000104 +0 -0
  265. package/tmp/OPTIONS-000098 +0 -207
  266. package/tmp/OPTIONS-000106 +0 -207
@@ -487,7 +487,7 @@ Status ReadFooterFromFile(const IOOptions& opts, RandomAccessFileReader* file,
487
487
  file->file_name());
488
488
  }
489
489
 
490
- std::string footer_buf;
490
+ std::array<char, Footer::kMaxEncodedLength + 1> footer_buf;
491
491
  AlignedBuf internal_buf;
492
492
  Slice footer_input;
493
493
  uint64_t read_offset = (file_size > Footer::kMaxEncodedLength)
@@ -508,7 +508,6 @@ Status ReadFooterFromFile(const IOOptions& opts, RandomAccessFileReader* file,
508
508
  s = file->Read(opts, read_offset, Footer::kMaxEncodedLength,
509
509
  &footer_input, nullptr, &internal_buf);
510
510
  } else {
511
- footer_buf.reserve(Footer::kMaxEncodedLength);
512
511
  s = file->Read(opts, read_offset, Footer::kMaxEncodedLength,
513
512
  &footer_input, footer_buf.data(), nullptr);
514
513
  }
@@ -96,8 +96,9 @@ class MergingIterator : public InternalIterator {
96
96
  // could be updated. In that case, this merging iterator is only responsible
97
97
  // for freeing the new range tombstone iterator that it has pointers to in
98
98
  // range_tombstone_iters_.
99
- void AddRangeTombstoneIterator(TruncatedRangeDelIterator* iter) {
100
- range_tombstone_iters_.emplace_back(iter);
99
+ void AddRangeTombstoneIterator(
100
+ std::unique_ptr<TruncatedRangeDelIterator>&& iter) {
101
+ range_tombstone_iters_.emplace_back(std::move(iter));
101
102
  }
102
103
 
103
104
  // Called by MergingIteratorBuilder when all point iterators and range
@@ -125,9 +126,7 @@ class MergingIterator : public InternalIterator {
125
126
  }
126
127
 
127
128
  ~MergingIterator() override {
128
- for (auto child : range_tombstone_iters_) {
129
- delete child;
130
- }
129
+ range_tombstone_iters_.clear();
131
130
 
132
131
  for (auto& child : children_) {
133
132
  child.iter.DeleteIter(is_arena_mode_);
@@ -624,7 +623,8 @@ class MergingIterator : public InternalIterator {
624
623
  // Invariant(rti): pinned_heap_item_[i] is in minHeap_ iff
625
624
  // range_tombstone_iters_[i]->Valid() and at most one pinned_heap_item_[i] is
626
625
  // in minHeap_.
627
- std::vector<TruncatedRangeDelIterator*> range_tombstone_iters_;
626
+ std::vector<std::unique_ptr<TruncatedRangeDelIterator>>
627
+ range_tombstone_iters_;
628
628
 
629
629
  // Levels (indices into range_tombstone_iters_/children_ ) that currently have
630
630
  // "active" range tombstones. See comments above MergingIterator for meaning
@@ -841,7 +841,8 @@ void MergingIterator::SeekImpl(const Slice& target, size_t starting_level,
841
841
  prefetched_target.emplace_back(
842
842
  level, current_search_key.GetInternalKey().ToString());
843
843
  }
844
- auto range_tombstone_iter = range_tombstone_iters_[level];
844
+ UnownedPtr<TruncatedRangeDelIterator> range_tombstone_iter =
845
+ range_tombstone_iters_[level].get();
845
846
  if (range_tombstone_iter) {
846
847
  range_tombstone_iter->SeekInternalKey(
847
848
  current_search_key.GetInternalKey());
@@ -1125,7 +1126,8 @@ void MergingIterator::SeekForPrevImpl(const Slice& target,
1125
1126
  prefetched_target.emplace_back(
1126
1127
  level, current_search_key.GetInternalKey().ToString());
1127
1128
  }
1128
- auto range_tombstone_iter = range_tombstone_iters_[level];
1129
+ UnownedPtr<TruncatedRangeDelIterator> range_tombstone_iter =
1130
+ range_tombstone_iters_[level].get();
1129
1131
  if (range_tombstone_iter) {
1130
1132
  range_tombstone_iter->SeekForPrev(current_search_key.GetUserKey());
1131
1133
  if (range_tombstone_iter->Valid()) {
@@ -1349,7 +1351,8 @@ void MergingIterator::SwitchToForward() {
1349
1351
  ParseInternalKey(target, &pik, false /* log_err_key */)
1350
1352
  .PermitUncheckedError();
1351
1353
  for (size_t i = 0; i < range_tombstone_iters_.size(); ++i) {
1352
- auto iter = range_tombstone_iters_[i];
1354
+ UnownedPtr<TruncatedRangeDelIterator> iter =
1355
+ range_tombstone_iters_[i].get();
1353
1356
  if (iter) {
1354
1357
  iter->Seek(pik.user_key);
1355
1358
  // The while loop is needed as the Seek() call above is only for user
@@ -1395,7 +1398,8 @@ void MergingIterator::SwitchToBackward() {
1395
1398
  ParseInternalKey(target, &pik, false /* log_err_key */)
1396
1399
  .PermitUncheckedError();
1397
1400
  for (size_t i = 0; i < range_tombstone_iters_.size(); ++i) {
1398
- auto iter = range_tombstone_iters_[i];
1401
+ UnownedPtr<TruncatedRangeDelIterator> iter =
1402
+ range_tombstone_iters_[i].get();
1399
1403
  if (iter) {
1400
1404
  iter->SeekForPrev(pik.user_key);
1401
1405
  // Since the SeekForPrev() call above is only for user key,
@@ -1690,8 +1694,9 @@ void MergeIteratorBuilder::AddIterator(InternalIterator* iter) {
1690
1694
  }
1691
1695
 
1692
1696
  void MergeIteratorBuilder::AddPointAndTombstoneIterator(
1693
- InternalIterator* point_iter, TruncatedRangeDelIterator* tombstone_iter,
1694
- TruncatedRangeDelIterator*** tombstone_iter_ptr) {
1697
+ InternalIterator* point_iter,
1698
+ std::unique_ptr<TruncatedRangeDelIterator>&& tombstone_iter,
1699
+ std::unique_ptr<TruncatedRangeDelIterator>** tombstone_iter_ptr) {
1695
1700
  // tombstone_iter_ptr != nullptr means point_iter is a LevelIterator.
1696
1701
  bool add_range_tombstone = tombstone_iter ||
1697
1702
  !merge_iter->range_tombstone_iters_.empty() ||
@@ -1711,7 +1716,7 @@ void MergeIteratorBuilder::AddPointAndTombstoneIterator(
1711
1716
  merge_iter->children_.size() - 1) {
1712
1717
  merge_iter->AddRangeTombstoneIterator(nullptr);
1713
1718
  }
1714
- merge_iter->AddRangeTombstoneIterator(tombstone_iter);
1719
+ merge_iter->AddRangeTombstoneIterator(std::move(tombstone_iter));
1715
1720
  }
1716
1721
 
1717
1722
  if (tombstone_iter_ptr) {
@@ -70,8 +70,10 @@ class MergeIteratorBuilder {
70
70
  // point iterators are not LevelIterator, then range tombstone iterator is
71
71
  // only added to the merging iter if there is a non-null `tombstone_iter`.
72
72
  void AddPointAndTombstoneIterator(
73
- InternalIterator* point_iter, TruncatedRangeDelIterator* tombstone_iter,
74
- TruncatedRangeDelIterator*** tombstone_iter_ptr = nullptr);
73
+ InternalIterator* point_iter,
74
+ std::unique_ptr<TruncatedRangeDelIterator>&& tombstone_iter,
75
+ std::unique_ptr<TruncatedRangeDelIterator>** tombstone_iter_ptr =
76
+ nullptr);
75
77
 
76
78
  // Get arena used to build the merging iterator. It is called one a child
77
79
  // iterator needs to be allocated.
@@ -91,7 +93,7 @@ class MergeIteratorBuilder {
91
93
  Arena* arena;
92
94
  // Used to set LevelIterator.range_tombstone_iter_.
93
95
  // See AddRangeTombstoneIterator() implementation for more detail.
94
- std::vector<std::pair<size_t, TruncatedRangeDelIterator***>>
96
+ std::vector<std::pair<size_t, std::unique_ptr<TruncatedRangeDelIterator>**>>
95
97
  range_del_iter_ptrs_;
96
98
  };
97
99
 
@@ -119,8 +119,8 @@ PlainTableBuilder::PlainTableBuilder(
119
119
  assert(factory);
120
120
 
121
121
  std::unique_ptr<InternalTblPropColl> collector{
122
- factory->CreateInternalTblPropColl(column_family_id,
123
- level_at_creation)};
122
+ factory->CreateInternalTblPropColl(column_family_id, level_at_creation,
123
+ ioptions.num_levels)};
124
124
  if (collector) {
125
125
  table_properties_collectors_.emplace_back(std::move(collector));
126
126
  }
@@ -140,7 +140,7 @@ Status SstFileReader::VerifyNumEntries(const ReadOptions& read_options) {
140
140
  uint64_t num_read = 0;
141
141
  for (; internal_iter->Valid(); internal_iter->Next()) {
142
142
  ++num_read;
143
- };
143
+ }
144
144
  s = internal_iter->status();
145
145
  if (!s.ok()) {
146
146
  return s;
@@ -79,7 +79,9 @@ class SstFileWriterPropertiesCollectorFactory
79
79
  : version_(version), global_seqno_(global_seqno) {}
80
80
 
81
81
  InternalTblPropColl* CreateInternalTblPropColl(
82
- uint32_t /*column_family_id*/, int /* level_at_creation */) override {
82
+ uint32_t /*column_family_id*/, int /* level_at_creation */,
83
+ int /* num_levels */,
84
+ SequenceNumber /* last_level_inclusive_max_seqno_threshold */) override {
83
85
  return new SstFileWriterPropertiesCollector(version_, global_seqno_);
84
86
  }
85
87
 
@@ -99,7 +99,7 @@ struct TableReaderOptions {
99
99
  bool user_defined_timestamps_persisted;
100
100
  };
101
101
 
102
- struct TableBuilderOptions {
102
+ struct TableBuilderOptions : public TablePropertiesCollectorFactory::Context {
103
103
  TableBuilderOptions(
104
104
  const ImmutableOptions& _ioptions, const MutableCFOptions& _moptions,
105
105
  const ReadOptions& _read_options, const WriteOptions& _write_options,
@@ -113,8 +113,13 @@ struct TableBuilderOptions {
113
113
  const int64_t _oldest_key_time = 0,
114
114
  const uint64_t _file_creation_time = 0, const std::string& _db_id = "",
115
115
  const std::string& _db_session_id = "",
116
- const uint64_t _target_file_size = 0, const uint64_t _cur_file_num = 0)
117
- : ioptions(_ioptions),
116
+ const uint64_t _target_file_size = 0, const uint64_t _cur_file_num = 0,
117
+ const SequenceNumber _last_level_inclusive_max_seqno_threshold =
118
+ kMaxSequenceNumber)
119
+ : TablePropertiesCollectorFactory::Context(
120
+ _column_family_id, _level, _ioptions.num_levels,
121
+ _last_level_inclusive_max_seqno_threshold),
122
+ ioptions(_ioptions),
118
123
  moptions(_moptions),
119
124
  read_options(_read_options),
120
125
  write_options(_write_options),
@@ -122,14 +127,12 @@ struct TableBuilderOptions {
122
127
  internal_tbl_prop_coll_factories(_internal_tbl_prop_coll_factories),
123
128
  compression_type(_compression_type),
124
129
  compression_opts(_compression_opts),
125
- column_family_id(_column_family_id),
126
130
  column_family_name(_column_family_name),
127
131
  oldest_key_time(_oldest_key_time),
128
132
  target_file_size(_target_file_size),
129
133
  file_creation_time(_file_creation_time),
130
134
  db_id(_db_id),
131
135
  db_session_id(_db_session_id),
132
- level_at_creation(_level),
133
136
  is_bottommost(_is_bottommost),
134
137
  reason(_reason),
135
138
  cur_file_num(_cur_file_num) {}
@@ -142,7 +145,6 @@ struct TableBuilderOptions {
142
145
  const InternalTblPropCollFactories* internal_tbl_prop_coll_factories;
143
146
  const CompressionType compression_type;
144
147
  const CompressionOptions& compression_opts;
145
- const uint32_t column_family_id;
146
148
  const std::string& column_family_name;
147
149
  const int64_t oldest_key_time;
148
150
  const uint64_t target_file_size;
@@ -150,7 +152,6 @@ struct TableBuilderOptions {
150
152
  const std::string db_id;
151
153
  const std::string db_session_id;
152
154
  // BEGIN for FilterBuildingContext
153
- const int level_at_creation;
154
155
  const bool is_bottommost;
155
156
  const TableFileCreationReason reason;
156
157
  // END for FilterBuildingContext
@@ -188,6 +188,15 @@ class TableReader {
188
188
  TableReaderCaller /*caller*/) {
189
189
  return Status::NotSupported("VerifyChecksum() not supported");
190
190
  }
191
+
192
+ // Tell the reader that the file should now be obsolete, e.g. as a hint
193
+ // to delete relevant cache entries on destruction. (It might not be safe
194
+ // to "unpin" cache entries until destruction time.) NOTE: must be thread
195
+ // safe because multiple table cache references might all mark this file as
196
+ // obsolete when they are released (the last of which destroys this reader).
197
+ virtual void MarkObsolete(uint32_t /*uncache_aggressiveness*/) {
198
+ // no-op as default
199
+ }
191
200
  };
192
201
 
193
202
  } // namespace ROCKSDB_NAMESPACE
@@ -46,6 +46,7 @@ const std::set<uint32_t> kFooterFormatVersionsToTest{
46
46
  kDefaultFormatVersion,
47
47
  kLatestFormatVersion,
48
48
  };
49
+ const ReadOptionsNoIo kReadOptionsNoIo;
49
50
 
50
51
  std::string RandomKey(Random* rnd, int len, RandomKeyType type) {
51
52
  // Make sure to generate a wide variety of characters so we
@@ -898,5 +898,11 @@ int RegisterTestObjects(ObjectLibrary& library, const std::string& /*arg*/);
898
898
 
899
899
  // Register the testutil classes with the default ObjectRegistry/Library
900
900
  void RegisterTestLibrary(const std::string& arg = "");
901
+
902
+ struct ReadOptionsNoIo : public ReadOptions {
903
+ ReadOptionsNoIo() { read_tier = ReadTier::kBlockCacheTier; }
904
+ };
905
+ extern const ReadOptionsNoIo kReadOptionsNoIo;
906
+
901
907
  } // namespace test
902
908
  } // namespace ROCKSDB_NAMESPACE
@@ -544,12 +544,20 @@ DEFINE_int32(universal_compression_size_percent, -1,
544
544
  "The percentage of the database to compress for universal "
545
545
  "compaction. -1 means compress everything.");
546
546
 
547
+ DEFINE_int32(universal_max_read_amp, -1,
548
+ "The limit on the number of sorted runs");
549
+
547
550
  DEFINE_bool(universal_allow_trivial_move, false,
548
551
  "Allow trivial move in universal compaction.");
549
552
 
550
553
  DEFINE_bool(universal_incremental, false,
551
554
  "Enable incremental compactions in universal compaction.");
552
555
 
556
+ DEFINE_int32(
557
+ universal_stop_style,
558
+ (int32_t)ROCKSDB_NAMESPACE::CompactionOptionsUniversal().stop_style,
559
+ "Universal compaction stop style.");
560
+
553
561
  DEFINE_int64(cache_size, 32 << 20, // 32MB
554
562
  "Number of bytes to use as a cache of uncompressed data");
555
563
 
@@ -704,6 +712,12 @@ DEFINE_int64(prepopulate_block_cache, 0,
704
712
  "Pre-populate hot/warm blocks in block cache. 0 to disable and 1 "
705
713
  "to insert during flush");
706
714
 
715
+ DEFINE_uint32(uncache_aggressiveness,
716
+ ROCKSDB_NAMESPACE::ColumnFamilyOptions().uncache_aggressiveness,
717
+ "Aggressiveness of erasing cache entries that are likely "
718
+ "obsolete. 0 = disabled, 1 = minimum, 100 = moderate, 10000 = "
719
+ "normal max");
720
+
707
721
  DEFINE_bool(use_data_block_hash_index, false,
708
722
  "if use kDataBlockBinaryAndHash "
709
723
  "instead of kDataBlockBinarySearch. "
@@ -4285,6 +4299,7 @@ class Benchmark {
4285
4299
  FLAGS_level_compaction_dynamic_level_bytes;
4286
4300
  options.max_bytes_for_level_multiplier =
4287
4301
  FLAGS_max_bytes_for_level_multiplier;
4302
+ options.uncache_aggressiveness = FLAGS_uncache_aggressiveness;
4288
4303
  Status s =
4289
4304
  CreateMemTableRepFactory(config_options, &options.memtable_factory);
4290
4305
  if (!s.ok()) {
@@ -4664,10 +4679,14 @@ class Benchmark {
4664
4679
  options.compaction_options_universal.compression_size_percent =
4665
4680
  FLAGS_universal_compression_size_percent;
4666
4681
  }
4682
+ options.compaction_options_universal.max_read_amp =
4683
+ FLAGS_universal_max_read_amp;
4667
4684
  options.compaction_options_universal.allow_trivial_move =
4668
4685
  FLAGS_universal_allow_trivial_move;
4669
4686
  options.compaction_options_universal.incremental =
4670
4687
  FLAGS_universal_incremental;
4688
+ options.compaction_options_universal.stop_style =
4689
+ static_cast<CompactionStopStyle>(FLAGS_universal_stop_style);
4671
4690
  if (FLAGS_thread_status_per_interval > 0) {
4672
4691
  options.enable_thread_tracking = true;
4673
4692
  }