@nxtedition/rocksdb 13.1.4 → 13.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 (237) hide show
  1. package/binding.cc +43 -16
  2. package/deps/rocksdb/rocksdb/{TARGETS → BUCK} +27 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +3 -1
  4. package/deps/rocksdb/rocksdb/Makefile +2 -2
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +3 -1
  6. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
  7. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +34 -9
  8. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +7 -6
  9. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +5 -1
  10. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +22 -14
  11. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +149 -0
  12. package/deps/rocksdb/rocksdb/db/builder.cc +13 -24
  13. package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +35 -10
  14. package/deps/rocksdb/rocksdb/db/column_family.cc +21 -10
  15. package/deps/rocksdb/rocksdb/db/column_family.h +15 -8
  16. package/deps/rocksdb/rocksdb/db/column_family_test.cc +98 -7
  17. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +126 -16
  18. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +51 -5
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +2 -2
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -8
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +24 -0
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +52 -22
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -7
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +36 -9
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +6 -0
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +30 -17
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +26 -23
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +43 -33
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +6 -5
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +19 -9
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -5
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +632 -411
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +171 -51
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -5
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +37 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +51 -11
  37. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +10 -3
  38. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +350 -154
  39. package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +62 -27
  41. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +68 -1
  42. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +91 -0
  43. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +134 -70
  44. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +71 -23
  45. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -16
  46. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +47 -33
  47. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +27 -19
  48. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +38 -25
  49. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -3
  50. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +7 -4
  51. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +258 -42
  52. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +161 -9
  53. package/deps/rocksdb/rocksdb/db/db_iter.cc +118 -86
  54. package/deps/rocksdb/rocksdb/db/db_iter.h +44 -17
  55. package/deps/rocksdb/rocksdb/db/db_options_test.cc +27 -6
  56. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -16
  57. package/deps/rocksdb/rocksdb/db/db_test2.cc +60 -15
  58. package/deps/rocksdb/rocksdb/db/db_test_util.cc +97 -44
  59. package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -1
  60. package/deps/rocksdb/rocksdb/db/dbformat.cc +15 -5
  61. package/deps/rocksdb/rocksdb/db/dbformat.h +137 -55
  62. package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
  63. package/deps/rocksdb/rocksdb/db/experimental.cc +54 -0
  64. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +663 -8
  65. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +152 -91
  66. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +134 -11
  67. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +55 -9
  68. package/deps/rocksdb/rocksdb/db/flush_job.cc +52 -29
  69. package/deps/rocksdb/rocksdb/db/flush_job.h +5 -3
  70. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +18 -12
  71. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +23 -29
  72. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -2
  73. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +2 -0
  74. package/deps/rocksdb/rocksdb/db/internal_stats.cc +9 -6
  75. package/deps/rocksdb/rocksdb/db/internal_stats.h +54 -0
  76. package/deps/rocksdb/rocksdb/db/job_context.h +1 -1
  77. package/deps/rocksdb/rocksdb/db/log_reader.cc +6 -7
  78. package/deps/rocksdb/rocksdb/db/manifest_ops.cc +47 -0
  79. package/deps/rocksdb/rocksdb/db/manifest_ops.h +20 -0
  80. package/deps/rocksdb/rocksdb/db/memtable.cc +165 -64
  81. package/deps/rocksdb/rocksdb/db/memtable.h +422 -243
  82. package/deps/rocksdb/rocksdb/db/memtable_list.cc +99 -68
  83. package/deps/rocksdb/rocksdb/db/memtable_list.h +63 -38
  84. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +28 -25
  85. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +118 -60
  86. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +344 -89
  87. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +2 -3
  88. package/deps/rocksdb/rocksdb/db/repair.cc +15 -14
  89. package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -13
  90. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +7 -0
  91. package/deps/rocksdb/rocksdb/db/table_cache.cc +62 -65
  92. package/deps/rocksdb/rocksdb/db/table_cache.h +70 -76
  93. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +5 -6
  94. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
  95. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +8 -7
  96. package/deps/rocksdb/rocksdb/db/version_builder.cc +17 -19
  97. package/deps/rocksdb/rocksdb/db/version_builder.h +13 -12
  98. package/deps/rocksdb/rocksdb/db/version_edit.h +30 -0
  99. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +3 -5
  100. package/deps/rocksdb/rocksdb/db/version_set.cc +89 -129
  101. package/deps/rocksdb/rocksdb/db/version_set.h +12 -4
  102. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -2
  103. package/deps/rocksdb/rocksdb/db/version_set_test.cc +12 -8
  104. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +0 -15
  105. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -2
  106. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +9 -7
  107. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +0 -8
  108. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +28 -2
  109. package/deps/rocksdb/rocksdb/db/write_batch.cc +32 -10
  110. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +9 -0
  111. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +2 -1
  112. package/deps/rocksdb/rocksdb/db/write_thread.cc +3 -1
  113. package/deps/rocksdb/rocksdb/db/write_thread.h +6 -2
  114. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +15 -0
  115. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +7 -0
  116. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
  117. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -2
  118. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +100 -22
  119. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -4
  120. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +34 -8
  121. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +223 -78
  122. package/deps/rocksdb/rocksdb/env/file_system.cc +6 -1
  123. package/deps/rocksdb/rocksdb/env/fs_posix.cc +53 -0
  124. package/deps/rocksdb/rocksdb/env/io_posix.cc +63 -17
  125. package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
  126. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +132 -48
  127. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +92 -24
  128. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +727 -109
  129. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +3 -4
  130. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +1 -1
  131. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +8 -0
  132. package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +20 -1
  133. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +9 -0
  134. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +9 -5
  135. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -0
  136. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +10 -2
  137. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -0
  138. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +7 -0
  139. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +34 -37
  140. package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +21 -0
  141. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +56 -28
  142. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -0
  143. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +36 -28
  144. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +11 -0
  145. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
  146. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +84 -60
  147. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +102 -0
  148. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +89 -2
  149. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +32 -0
  150. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +30 -1
  151. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +23 -2
  152. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  153. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -0
  154. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +79 -21
  155. package/deps/rocksdb/rocksdb/memtable/skiplist.h +41 -18
  156. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -5
  157. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +169 -0
  158. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +400 -0
  159. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -0
  160. package/deps/rocksdb/rocksdb/options/cf_options.cc +137 -82
  161. package/deps/rocksdb/rocksdb/options/cf_options.h +18 -6
  162. package/deps/rocksdb/rocksdb/options/configurable.cc +31 -17
  163. package/deps/rocksdb/rocksdb/options/configurable_helper.h +7 -6
  164. package/deps/rocksdb/rocksdb/options/options_helper.cc +10 -8
  165. package/deps/rocksdb/rocksdb/options/options_parser.cc +74 -54
  166. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +89 -0
  167. package/deps/rocksdb/rocksdb/options/options_test.cc +112 -26
  168. package/deps/rocksdb/rocksdb/port/port.h +5 -9
  169. package/deps/rocksdb/rocksdb/src.mk +8 -0
  170. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +4 -0
  171. package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -7
  172. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -0
  173. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +62 -80
  174. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +13 -3
  175. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +16 -5
  176. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +38 -7
  177. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +12 -4
  178. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +4 -1
  179. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +4 -1
  180. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +204 -1
  181. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
  182. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
  183. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +4 -0
  184. package/deps/rocksdb/rocksdb/table/format.cc +3 -3
  185. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +4 -1
  186. package/deps/rocksdb/rocksdb/table/mock_table.cc +0 -50
  187. package/deps/rocksdb/rocksdb/table/mock_table.h +53 -0
  188. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +4 -0
  189. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
  190. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +10 -5
  191. package/deps/rocksdb/rocksdb/table/table_builder.h +3 -1
  192. package/deps/rocksdb/rocksdb/table/table_properties.cc +181 -0
  193. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +5 -5
  194. package/deps/rocksdb/rocksdb/table/table_test.cc +71 -64
  195. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +45 -45
  196. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +35 -35
  197. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +43 -43
  198. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +41 -4
  199. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +1 -0
  200. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +1 -1
  201. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +13 -0
  202. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +24 -5
  203. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +7 -0
  204. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +0 -52
  205. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +1 -10
  206. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +92 -0
  207. package/deps/rocksdb/rocksdb/util/thread_operation.h +1 -0
  208. package/deps/rocksdb/rocksdb/util/udt_util.cc +50 -4
  209. package/deps/rocksdb/rocksdb/util/udt_util.h +24 -11
  210. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +26 -13
  211. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -16
  212. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +2 -0
  213. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +214 -0
  214. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.h +60 -0
  215. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +124 -0
  216. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +441 -0
  217. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +34 -3
  218. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +7 -2
  219. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +437 -0
  220. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +34 -11
  221. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +14 -7
  222. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +7 -1
  223. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +17 -0
  224. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +69 -0
  225. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +20 -0
  226. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1290 -0
  227. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +324 -0
  228. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +18 -1
  229. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +8 -1
  230. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -12
  231. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +32 -3
  232. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +33 -2
  233. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +721 -9
  234. package/deps/rocksdb/rocksdb.gyp +2 -0
  235. package/package.json +1 -1
  236. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  237. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -105,6 +105,7 @@ class Repairer {
105
105
  SanitizeOptions(immutable_db_options_, default_cf_opts)),
106
106
  default_iopts_(
107
107
  ImmutableOptions(immutable_db_options_, default_cf_opts_)),
108
+ default_mopts_(MutableCFOptions(default_cf_opts_)),
108
109
  unknown_cf_opts_(
109
110
  SanitizeOptions(immutable_db_options_, unknown_cf_opts)),
110
111
  create_unknown_cfs_(create_unknown_cfs),
@@ -261,6 +262,7 @@ class Repairer {
261
262
  const InternalKeyComparator icmp_;
262
263
  const ColumnFamilyOptions default_cf_opts_;
263
264
  const ImmutableOptions default_iopts_; // table_cache_ holds reference
265
+ const MutableCFOptions default_mopts_;
264
266
  const ColumnFamilyOptions unknown_cf_opts_;
265
267
  const bool create_unknown_cfs_;
266
268
  std::shared_ptr<Cache> raw_table_cache_;
@@ -411,9 +413,12 @@ class Repairer {
411
413
  if (record_status.ok()) {
412
414
  const UnorderedMap<uint32_t, size_t>& record_ts_sz =
413
415
  reader.GetRecordedTimestampSize();
416
+ // Use same value for `seq_per_batch` and `batch_per_txn` as
417
+ // WriteBatchInternal::InsertInto does below.
414
418
  record_status = HandleWriteBatchTimestampSizeDifference(
415
419
  &batch, running_ts_sz, record_ts_sz,
416
- TimestampSizeConsistencyMode::kVerifyConsistency);
420
+ TimestampSizeConsistencyMode::kVerifyConsistency,
421
+ /* seq_per_batch */ false, /* batch_per_txn */ true);
417
422
  if (record_status.ok()) {
418
423
  record_status =
419
424
  WriteBatchInternal::InsertInto(&batch, cf_mems, nullptr, nullptr);
@@ -444,7 +449,7 @@ class Repairer {
444
449
  Arena arena;
445
450
  ScopedArenaPtr<InternalIterator> iter(
446
451
  mem->NewIterator(ro, /*seqno_to_time_mapping=*/nullptr, &arena,
447
- /*prefix_extractor=*/nullptr));
452
+ /*prefix_extractor=*/nullptr, /*for_flush=*/true));
448
453
  int64_t _current_time = 0;
449
454
  immutable_db_options_.clock->GetCurrentTime(&_current_time)
450
455
  .PermitUncheckedError(); // ignore error
@@ -472,10 +477,10 @@ class Repairer {
472
477
  write_option, cfd->internal_comparator(),
473
478
  cfd->internal_tbl_prop_coll_factories(), kNoCompression,
474
479
  default_compression, cfd->GetID(), cfd->GetName(), -1 /* level */,
475
- false /* is_bottommost */, TableFileCreationReason::kRecovery,
476
- 0 /* oldest_key_time */, 0 /* file_creation_time */,
477
- "DB Repairer" /* db_id */, db_session_id_, 0 /*target_file_size*/,
478
- meta.fd.GetNumber());
480
+ current_time /* newest_key_time */, false /* is_bottommost */,
481
+ TableFileCreationReason::kRecovery, 0 /* oldest_key_time */,
482
+ 0 /* file_creation_time */, "DB Repairer" /* db_id */, db_session_id_,
483
+ 0 /*target_file_size*/, meta.fd.GetNumber());
479
484
 
480
485
  SeqnoToTimeMapping empty_seqno_to_time_mapping;
481
486
  status = BuildTable(
@@ -537,8 +542,7 @@ class Repairer {
537
542
  // TODO: plumb Env::IOActivity, Env::IOPriority
538
543
  const ReadOptions read_options;
539
544
  status = table_cache_->GetTableProperties(
540
- file_options_, read_options, icmp_, t->meta, &props,
541
- 0 /* block_protection_bytes_per_key */);
545
+ file_options_, read_options, icmp_, t->meta, &props, default_mopts_);
542
546
  }
543
547
  if (status.ok()) {
544
548
  auto s =
@@ -602,15 +606,13 @@ class Repairer {
602
606
  ropts.total_order_seek = true;
603
607
  InternalIterator* iter = table_cache_->NewIterator(
604
608
  ropts, file_options_, cfd->internal_comparator(), t->meta,
605
- nullptr /* range_del_agg */,
606
- cfd->GetLatestMutableCFOptions()->prefix_extractor,
609
+ nullptr /* range_del_agg */, *cfd->GetLatestMutableCFOptions(),
607
610
  /*table_reader_ptr=*/nullptr, /*file_read_hist=*/nullptr,
608
611
  TableReaderCaller::kRepair, /*arena=*/nullptr, /*skip_filters=*/false,
609
612
  /*level=*/-1, /*max_file_size_for_l0_meta_pin=*/0,
610
613
  /*smallest_compaction_key=*/nullptr,
611
614
  /*largest_compaction_key=*/nullptr,
612
- /*allow_unprepared_value=*/false,
613
- cfd->GetLatestMutableCFOptions()->block_protection_bytes_per_key);
615
+ /*allow_unprepared_value=*/false);
614
616
  ParsedInternalKey parsed;
615
617
  for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
616
618
  Slice key = iter->key();
@@ -651,8 +653,7 @@ class Repairer {
651
653
  std::unique_ptr<FragmentedRangeTombstoneIterator> r_iter;
652
654
  status = table_cache_->GetRangeTombstoneIterator(
653
655
  ropts, cfd->internal_comparator(), t->meta,
654
- cfd->GetLatestMutableCFOptions()->block_protection_bytes_per_key,
655
- &r_iter);
656
+ *cfd->GetLatestMutableCFOptions(), &r_iter);
656
657
 
657
658
  if (r_iter) {
658
659
  r_iter->SeekToFirst();
@@ -60,19 +60,6 @@ class RepairTest : public DBTestBase {
60
60
  ASSERT_GT(verify_passed, 0);
61
61
  SyncPoint::GetInstance()->DisableProcessing();
62
62
  }
63
-
64
- std::vector<FileMetaData*> GetLevelFileMetadatas(int level, int cf = 0) {
65
- VersionSet* const versions = dbfull()->GetVersionSet();
66
- assert(versions);
67
- ColumnFamilyData* const cfd =
68
- versions->GetColumnFamilySet()->GetColumnFamily(cf);
69
- assert(cfd);
70
- Version* const current = cfd->current();
71
- assert(current);
72
- VersionStorageInfo* const storage_info = current->storage_info();
73
- assert(storage_info);
74
- return storage_info->LevelFiles(level);
75
- }
76
63
  };
77
64
 
78
65
  TEST_F(RepairTest, SortRepairedDBL0ByEpochNumber) {
@@ -55,4 +55,11 @@ class WritePreparedSnapshotChecker : public SnapshotChecker {
55
55
  const WritePreparedTxnDB* const txn_db_;
56
56
  };
57
57
 
58
+ bool DataIsDefinitelyInSnapshot(SequenceNumber seqno, SequenceNumber snapshot,
59
+ const SnapshotChecker* snapshot_checker);
60
+
61
+ bool DataIsDefinitelyNotInSnapshot(SequenceNumber seqno,
62
+ SequenceNumber snapshot,
63
+ const SnapshotChecker* snapshot_checker);
64
+
58
65
  } // namespace ROCKSDB_NAMESPACE
@@ -91,10 +91,9 @@ Status TableCache::GetTableReader(
91
91
  const ReadOptions& ro, const FileOptions& file_options,
92
92
  const InternalKeyComparator& internal_comparator,
93
93
  const FileMetaData& file_meta, bool sequential_mode,
94
- uint8_t block_protection_bytes_per_key, HistogramImpl* file_read_hist,
95
- std::unique_ptr<TableReader>* table_reader,
96
- const std::shared_ptr<const SliceTransform>& prefix_extractor,
97
- bool skip_filters, int level, bool prefetch_index_and_filter_in_cache,
94
+ HistogramImpl* file_read_hist, std::unique_ptr<TableReader>* table_reader,
95
+ const MutableCFOptions& mutable_cf_options, bool skip_filters, int level,
96
+ bool prefetch_index_and_filter_in_cache,
98
97
  size_t max_file_size_for_l0_meta_pin, Temperature file_temperature) {
99
98
  std::string fname = TableFileName(
100
99
  ioptions_.cf_paths, file_meta.fd.GetNumber(), file_meta.fd.GetPathId());
@@ -146,13 +145,14 @@ Status TableCache::GetTableReader(
146
145
  } else {
147
146
  expected_unique_id = kNullUniqueId64x2; // null ID == no verification
148
147
  }
149
- s = ioptions_.table_factory->NewTableReader(
148
+ s = mutable_cf_options.table_factory->NewTableReader(
150
149
  ro,
151
150
  TableReaderOptions(
152
- ioptions_, prefix_extractor, file_options, internal_comparator,
153
- block_protection_bytes_per_key, skip_filters, immortal_tables_,
154
- false /* force_direct_prefetch */, level, block_cache_tracer_,
155
- max_file_size_for_l0_meta_pin, db_session_id_,
151
+ ioptions_, mutable_cf_options.prefix_extractor, file_options,
152
+ internal_comparator,
153
+ mutable_cf_options.block_protection_bytes_per_key, skip_filters,
154
+ immortal_tables_, false /* force_direct_prefetch */, level,
155
+ block_cache_tracer_, max_file_size_for_l0_meta_pin, db_session_id_,
156
156
  file_meta.fd.GetNumber(), expected_unique_id,
157
157
  file_meta.fd.largest_seqno, file_meta.tail_size,
158
158
  file_meta.user_defined_timestamps_persisted),
@@ -173,10 +173,9 @@ Status TableCache::FindTable(
173
173
  const ReadOptions& ro, const FileOptions& file_options,
174
174
  const InternalKeyComparator& internal_comparator,
175
175
  const FileMetaData& file_meta, TypedHandle** handle,
176
- uint8_t block_protection_bytes_per_key,
177
- const std::shared_ptr<const SliceTransform>& prefix_extractor,
178
- const bool no_io, HistogramImpl* file_read_hist, bool skip_filters,
179
- int level, bool prefetch_index_and_filter_in_cache,
176
+ const MutableCFOptions& mutable_cf_options, const bool no_io,
177
+ HistogramImpl* file_read_hist, bool skip_filters, int level,
178
+ bool prefetch_index_and_filter_in_cache,
180
179
  size_t max_file_size_for_l0_meta_pin, Temperature file_temperature) {
181
180
  PERF_TIMER_GUARD_WITH_CLOCK(find_table_nanos, ioptions_.clock);
182
181
  uint64_t number = file_meta.fd.GetNumber();
@@ -199,9 +198,8 @@ Status TableCache::FindTable(
199
198
 
200
199
  std::unique_ptr<TableReader> table_reader;
201
200
  Status s = GetTableReader(ro, file_options, internal_comparator, file_meta,
202
- false /* sequential mode */,
203
- block_protection_bytes_per_key, file_read_hist,
204
- &table_reader, prefix_extractor, skip_filters,
201
+ false /* sequential mode */, file_read_hist,
202
+ &table_reader, mutable_cf_options, skip_filters,
205
203
  level, prefetch_index_and_filter_in_cache,
206
204
  max_file_size_for_l0_meta_pin, file_temperature);
207
205
  if (!s.ok()) {
@@ -225,13 +223,12 @@ InternalIterator* TableCache::NewIterator(
225
223
  const ReadOptions& options, const FileOptions& file_options,
226
224
  const InternalKeyComparator& icomparator, const FileMetaData& file_meta,
227
225
  RangeDelAggregator* range_del_agg,
228
- const std::shared_ptr<const SliceTransform>& prefix_extractor,
229
- TableReader** table_reader_ptr, HistogramImpl* file_read_hist,
230
- TableReaderCaller caller, Arena* arena, bool skip_filters, int level,
231
- size_t max_file_size_for_l0_meta_pin,
226
+ const MutableCFOptions& mutable_cf_options, TableReader** table_reader_ptr,
227
+ HistogramImpl* file_read_hist, TableReaderCaller caller, Arena* arena,
228
+ bool skip_filters, int level, size_t max_file_size_for_l0_meta_pin,
232
229
  const InternalKey* smallest_compaction_key,
233
230
  const InternalKey* largest_compaction_key, bool allow_unprepared_value,
234
- uint8_t block_protection_bytes_per_key, const SequenceNumber* read_seqno,
231
+ const SequenceNumber* read_seqno,
235
232
  std::unique_ptr<TruncatedRangeDelIterator>* range_del_iter) {
236
233
  PERF_TIMER_GUARD(new_table_iterator_nanos);
237
234
 
@@ -246,7 +243,7 @@ InternalIterator* TableCache::NewIterator(
246
243
  table_reader = fd.table_reader;
247
244
  if (table_reader == nullptr) {
248
245
  s = FindTable(options, file_options, icomparator, file_meta, &handle,
249
- block_protection_bytes_per_key, prefix_extractor,
246
+ mutable_cf_options,
250
247
  options.read_tier == kBlockCacheTier /* no_io */,
251
248
  file_read_hist, skip_filters, level,
252
249
  true /* prefetch_index_and_filter_in_cache */,
@@ -262,8 +259,9 @@ InternalIterator* TableCache::NewIterator(
262
259
  result = NewEmptyInternalIterator<Slice>(arena);
263
260
  } else {
264
261
  result = table_reader->NewIterator(
265
- options, prefix_extractor.get(), arena, skip_filters, caller,
266
- file_options.compaction_readahead_size, allow_unprepared_value);
262
+ options, mutable_cf_options.prefix_extractor.get(), arena,
263
+ skip_filters, caller, file_options.compaction_readahead_size,
264
+ allow_unprepared_value);
267
265
  }
268
266
  if (handle != nullptr) {
269
267
  cache_.RegisterReleaseAsCleanup(handle, *result);
@@ -330,7 +328,7 @@ InternalIterator* TableCache::NewIterator(
330
328
  Status TableCache::GetRangeTombstoneIterator(
331
329
  const ReadOptions& options,
332
330
  const InternalKeyComparator& internal_comparator,
333
- const FileMetaData& file_meta, uint8_t block_protection_bytes_per_key,
331
+ const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options,
334
332
  std::unique_ptr<FragmentedRangeTombstoneIterator>* out_iter) {
335
333
  assert(out_iter);
336
334
  const FileDescriptor& fd = file_meta.fd;
@@ -339,7 +337,7 @@ Status TableCache::GetRangeTombstoneIterator(
339
337
  TypedHandle* handle = nullptr;
340
338
  if (t == nullptr) {
341
339
  s = FindTable(options, file_options_, internal_comparator, file_meta,
342
- &handle, block_protection_bytes_per_key);
340
+ &handle, mutable_cf_options);
343
341
  if (s.ok()) {
344
342
  t = cache_.Value(handle);
345
343
  }
@@ -431,14 +429,13 @@ bool TableCache::GetFromRowCache(const Slice& user_key, IterKey& row_cache_key,
431
429
  return found;
432
430
  }
433
431
 
434
- Status TableCache::Get(
435
- const ReadOptions& options,
436
- const InternalKeyComparator& internal_comparator,
437
- const FileMetaData& file_meta, const Slice& k, GetContext* get_context,
438
- uint8_t block_protection_bytes_per_key,
439
- const std::shared_ptr<const SliceTransform>& prefix_extractor,
440
- HistogramImpl* file_read_hist, bool skip_filters, int level,
441
- size_t max_file_size_for_l0_meta_pin) {
432
+ Status TableCache::Get(const ReadOptions& options,
433
+ const InternalKeyComparator& internal_comparator,
434
+ const FileMetaData& file_meta, const Slice& k,
435
+ GetContext* get_context,
436
+ const MutableCFOptions& mutable_cf_options,
437
+ HistogramImpl* file_read_hist, bool skip_filters,
438
+ int level, size_t max_file_size_for_l0_meta_pin) {
442
439
  auto& fd = file_meta.fd;
443
440
  std::string* row_cache_entry = nullptr;
444
441
  bool done = false;
@@ -463,7 +460,7 @@ Status TableCache::Get(
463
460
  if (s.ok() && !done) {
464
461
  if (t == nullptr) {
465
462
  s = FindTable(options, file_options_, internal_comparator, file_meta,
466
- &handle, block_protection_bytes_per_key, prefix_extractor,
463
+ &handle, mutable_cf_options,
467
464
  options.read_tier == kBlockCacheTier /* no_io */,
468
465
  file_read_hist, skip_filters, level,
469
466
  true /* prefetch_index_and_filter_in_cache */,
@@ -492,7 +489,8 @@ Status TableCache::Get(
492
489
  }
493
490
  if (s.ok()) {
494
491
  get_context->SetReplayLog(row_cache_entry); // nullptr if no cache.
495
- s = t->Get(options, k, get_context, prefix_extractor.get(), skip_filters);
492
+ s = t->Get(options, k, get_context,
493
+ mutable_cf_options.prefix_extractor.get(), skip_filters);
496
494
  get_context->SetReplayLog(nullptr);
497
495
  } else if (options.read_tier == kBlockCacheTier && s.IsIncomplete()) {
498
496
  // Couldn't find table in cache and couldn't open it because of no_io.
@@ -545,11 +543,9 @@ void TableCache::UpdateRangeTombstoneSeqnums(
545
543
  Status TableCache::MultiGetFilter(
546
544
  const ReadOptions& options,
547
545
  const InternalKeyComparator& internal_comparator,
548
- const FileMetaData& file_meta,
549
- const std::shared_ptr<const SliceTransform>& prefix_extractor,
546
+ const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options,
550
547
  HistogramImpl* file_read_hist, int level,
551
- MultiGetContext::Range* mget_range, TypedHandle** table_handle,
552
- uint8_t block_protection_bytes_per_key) {
548
+ MultiGetContext::Range* mget_range, TypedHandle** table_handle) {
553
549
  auto& fd = file_meta.fd;
554
550
  IterKey row_cache_key;
555
551
  std::string row_cache_entry_buffer;
@@ -568,7 +564,7 @@ Status TableCache::MultiGetFilter(
568
564
  mget_range->end());
569
565
  if (t == nullptr) {
570
566
  s = FindTable(options, file_options_, internal_comparator, file_meta,
571
- &handle, block_protection_bytes_per_key, prefix_extractor,
567
+ &handle, mutable_cf_options,
572
568
  options.read_tier == kBlockCacheTier /* no_io */,
573
569
  file_read_hist,
574
570
  /*skip_filters=*/false, level,
@@ -580,7 +576,8 @@ Status TableCache::MultiGetFilter(
580
576
  *table_handle = handle;
581
577
  }
582
578
  if (s.ok()) {
583
- s = t->MultiGetFilter(options, prefix_extractor.get(), mget_range);
579
+ s = t->MultiGetFilter(options, mutable_cf_options.prefix_extractor.get(),
580
+ mget_range);
584
581
  }
585
582
  if (s.ok() && !options.ignore_range_deletions) {
586
583
  // Update the range tombstone sequence numbers for the keys here
@@ -601,8 +598,7 @@ Status TableCache::GetTableProperties(
601
598
  const InternalKeyComparator& internal_comparator,
602
599
  const FileMetaData& file_meta,
603
600
  std::shared_ptr<const TableProperties>* properties,
604
- uint8_t block_protection_bytes_per_key,
605
- const std::shared_ptr<const SliceTransform>& prefix_extractor, bool no_io) {
601
+ const MutableCFOptions& mutable_cf_options, bool no_io) {
606
602
  auto table_reader = file_meta.fd.table_reader;
607
603
  // table already been pre-loaded?
608
604
  if (table_reader) {
@@ -613,8 +609,7 @@ Status TableCache::GetTableProperties(
613
609
 
614
610
  TypedHandle* table_handle = nullptr;
615
611
  Status s = FindTable(read_options, file_options, internal_comparator,
616
- file_meta, &table_handle, block_protection_bytes_per_key,
617
- prefix_extractor, no_io);
612
+ file_meta, &table_handle, mutable_cf_options, no_io);
618
613
  if (!s.ok()) {
619
614
  return s;
620
615
  }
@@ -627,14 +622,15 @@ Status TableCache::GetTableProperties(
627
622
 
628
623
  Status TableCache::ApproximateKeyAnchors(
629
624
  const ReadOptions& ro, const InternalKeyComparator& internal_comparator,
630
- const FileMetaData& file_meta, uint8_t block_protection_bytes_per_key,
625
+ const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options,
626
+
631
627
  std::vector<TableReader::Anchor>& anchors) {
632
628
  Status s;
633
629
  TableReader* t = file_meta.fd.table_reader;
634
630
  TypedHandle* handle = nullptr;
635
631
  if (t == nullptr) {
636
632
  s = FindTable(ro, file_options_, internal_comparator, file_meta, &handle,
637
- block_protection_bytes_per_key);
633
+ mutable_cf_options);
638
634
  if (s.ok()) {
639
635
  t = cache_.Value(handle);
640
636
  }
@@ -651,8 +647,7 @@ Status TableCache::ApproximateKeyAnchors(
651
647
  size_t TableCache::GetMemoryUsageByTableReader(
652
648
  const FileOptions& file_options, const ReadOptions& read_options,
653
649
  const InternalKeyComparator& internal_comparator,
654
- const FileMetaData& file_meta, uint8_t block_protection_bytes_per_key,
655
- const std::shared_ptr<const SliceTransform>& prefix_extractor) {
650
+ const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options) {
656
651
  auto table_reader = file_meta.fd.table_reader;
657
652
  // table already been pre-loaded?
658
653
  if (table_reader) {
@@ -660,9 +655,9 @@ size_t TableCache::GetMemoryUsageByTableReader(
660
655
  }
661
656
 
662
657
  TypedHandle* table_handle = nullptr;
663
- Status s = FindTable(read_options, file_options, internal_comparator,
664
- file_meta, &table_handle, block_protection_bytes_per_key,
665
- prefix_extractor, true /* no_io */);
658
+ Status s =
659
+ FindTable(read_options, file_options, internal_comparator, file_meta,
660
+ &table_handle, mutable_cf_options, true /* no_io */);
666
661
  if (!s.ok()) {
667
662
  return 0;
668
663
  }
@@ -681,16 +676,14 @@ uint64_t TableCache::ApproximateOffsetOf(
681
676
  const ReadOptions& read_options, const Slice& key,
682
677
  const FileMetaData& file_meta, TableReaderCaller caller,
683
678
  const InternalKeyComparator& internal_comparator,
684
- uint8_t block_protection_bytes_per_key,
685
- const std::shared_ptr<const SliceTransform>& prefix_extractor) {
679
+ const MutableCFOptions& mutable_cf_options) {
686
680
  uint64_t result = 0;
687
681
  TableReader* table_reader = file_meta.fd.table_reader;
688
682
  TypedHandle* table_handle = nullptr;
689
683
  if (table_reader == nullptr) {
690
684
  Status s =
691
685
  FindTable(read_options, file_options_, internal_comparator, file_meta,
692
- &table_handle, block_protection_bytes_per_key,
693
- prefix_extractor, false /* no_io */);
686
+ &table_handle, mutable_cf_options, false /* no_io */);
694
687
  if (s.ok()) {
695
688
  table_reader = cache_.Value(table_handle);
696
689
  }
@@ -710,16 +703,14 @@ uint64_t TableCache::ApproximateSize(
710
703
  const ReadOptions& read_options, const Slice& start, const Slice& end,
711
704
  const FileMetaData& file_meta, TableReaderCaller caller,
712
705
  const InternalKeyComparator& internal_comparator,
713
- uint8_t block_protection_bytes_per_key,
714
- const std::shared_ptr<const SliceTransform>& prefix_extractor) {
706
+ const MutableCFOptions& mutable_cf_options) {
715
707
  uint64_t result = 0;
716
708
  TableReader* table_reader = file_meta.fd.table_reader;
717
709
  TypedHandle* table_handle = nullptr;
718
710
  if (table_reader == nullptr) {
719
711
  Status s =
720
712
  FindTable(read_options, file_options_, internal_comparator, file_meta,
721
- &table_handle, block_protection_bytes_per_key,
722
- prefix_extractor, false /* no_io */);
713
+ &table_handle, mutable_cf_options, false /* no_io */);
723
714
  if (s.ok()) {
724
715
  table_reader = cache_.Value(table_handle);
725
716
  }
@@ -735,13 +726,19 @@ uint64_t TableCache::ApproximateSize(
735
726
  return result;
736
727
  }
737
728
 
738
- void TableCache::ReleaseObsolete(Cache* cache, Cache::Handle* h,
729
+ void TableCache::ReleaseObsolete(Cache* cache, uint64_t file_number,
730
+ Cache::Handle* h,
739
731
  uint32_t uncache_aggressiveness) {
740
732
  CacheInterface typed_cache(cache);
741
733
  TypedHandle* table_handle = reinterpret_cast<TypedHandle*>(h);
742
- TableReader* table_reader = typed_cache.Value(table_handle);
743
- table_reader->MarkObsolete(uncache_aggressiveness);
744
- typed_cache.ReleaseAndEraseIfLastRef(table_handle);
734
+ if (table_handle == nullptr) {
735
+ table_handle = typed_cache.Lookup(GetSliceForFileNumber(&file_number));
736
+ }
737
+ if (table_handle != nullptr) {
738
+ TableReader* table_reader = typed_cache.Value(table_handle);
739
+ table_reader->MarkObsolete(uncache_aggressiveness);
740
+ typed_cache.ReleaseAndEraseIfLastRef(table_handle);
741
+ }
745
742
  }
746
743
 
747
744
  } // namespace ROCKSDB_NAMESPACE