@nxtedition/rocksdb 13.5.13 → 14.0.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 (232) hide show
  1. package/binding.cc +33 -2
  2. package/binding.gyp +2 -2
  3. package/chained-batch.js +9 -16
  4. package/deps/rocksdb/rocksdb/BUCK +18 -1
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +10 -3
  6. package/deps/rocksdb/rocksdb/Makefile +20 -9
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +90 -13
  8. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +88 -75
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.h +44 -36
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +184 -148
  11. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +5 -11
  12. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +116 -47
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +3 -6
  15. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -1
  16. package/deps/rocksdb/rocksdb/db/builder.cc +4 -2
  17. package/deps/rocksdb/rocksdb/db/c.cc +207 -0
  18. package/deps/rocksdb/rocksdb/db/c_test.c +72 -0
  19. package/deps/rocksdb/rocksdb/db/column_family.cc +3 -2
  20. package/deps/rocksdb/rocksdb/db/column_family.h +5 -0
  21. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -0
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -0
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +51 -38
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +29 -12
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +5 -10
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +566 -366
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +131 -4
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +1 -0
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +4 -4
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +13 -14
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +12 -7
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -10
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +97 -76
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +11 -14
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +1 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +8 -0
  38. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +16 -3
  39. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +1 -0
  40. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +448 -1
  41. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +22 -20
  42. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +4 -1
  43. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -5
  44. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +7 -3
  45. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/db_iter.cc +104 -0
  47. package/deps/rocksdb/rocksdb/db/db_iter.h +4 -11
  48. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +331 -58
  49. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +129 -0
  50. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -0
  51. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +40 -0
  52. package/deps/rocksdb/rocksdb/db/db_test2.cc +25 -15
  53. package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -24
  54. package/deps/rocksdb/rocksdb/db/db_test_util.h +29 -14
  55. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +69 -36
  56. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +0 -1
  57. package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
  58. package/deps/rocksdb/rocksdb/db/experimental.cc +5 -4
  59. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +8 -1
  60. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +275 -79
  61. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +23 -5
  62. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +591 -175
  63. package/deps/rocksdb/rocksdb/db/flush_job.cc +3 -4
  64. package/deps/rocksdb/rocksdb/db/log_reader.cc +5 -2
  65. package/deps/rocksdb/rocksdb/db/memtable.cc +84 -35
  66. package/deps/rocksdb/rocksdb/db/memtable.h +39 -34
  67. package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -0
  68. package/deps/rocksdb/rocksdb/db/merge_operator.cc +1 -1
  69. package/deps/rocksdb/rocksdb/db/multi_scan.cc +11 -5
  70. package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -1
  71. package/deps/rocksdb/rocksdb/db/version_edit.h +1 -1
  72. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +34 -14
  73. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +28 -5
  74. package/deps/rocksdb/rocksdb/db/version_set.cc +159 -14
  75. package/deps/rocksdb/rocksdb/db/version_set.h +2 -0
  76. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -1
  77. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +60 -0
  78. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +16 -1
  79. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +75 -10
  80. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.cc +28 -0
  81. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +2 -0
  82. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -1
  83. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +50 -2
  84. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +57 -0
  85. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +0 -4
  86. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +266 -35
  87. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
  88. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -6
  89. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +18 -2
  90. package/deps/rocksdb/rocksdb/env/env.cc +12 -0
  91. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -0
  92. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +2 -0
  93. package/deps/rocksdb/rocksdb/env/fs_posix.cc +9 -5
  94. package/deps/rocksdb/rocksdb/env/io_posix.cc +4 -2
  95. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +19 -0
  96. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +33 -31
  97. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +42 -9
  98. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +93 -0
  99. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +43 -49
  100. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +4 -3
  101. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +8 -6
  102. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +487 -0
  103. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +11 -12
  104. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +135 -1
  105. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -0
  106. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +12 -0
  107. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -1
  108. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +8 -0
  109. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +12 -8
  110. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +3 -0
  111. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +19 -9
  112. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +219 -24
  113. package/deps/rocksdb/rocksdb/include/rocksdb/point_lock_bench_tool.h +14 -0
  114. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +2 -2
  115. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +1 -1
  116. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +7 -0
  117. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +16 -0
  118. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +16 -4
  119. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +13 -0
  120. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +4 -0
  121. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +0 -2
  122. package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +45 -0
  123. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +1 -1
  124. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +1 -1
  125. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +6 -1
  126. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +21 -0
  127. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  128. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +3 -3
  129. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +77 -51
  130. package/deps/rocksdb/rocksdb/memtable/skiplist.h +10 -13
  131. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +16 -7
  132. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +9 -4
  133. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -0
  134. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  135. package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -1
  136. package/deps/rocksdb/rocksdb/options/cf_options.h +6 -2
  137. package/deps/rocksdb/rocksdb/options/options.cc +2 -0
  138. package/deps/rocksdb/rocksdb/options/options_helper.cc +9 -8
  139. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +9 -5
  140. package/deps/rocksdb/rocksdb/port/mmap.cc +1 -1
  141. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -0
  142. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +4 -0
  143. package/deps/rocksdb/rocksdb/src.mk +8 -2
  144. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1125 -765
  145. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +35 -24
  146. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +29 -4
  147. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +732 -256
  148. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +225 -16
  149. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +102 -26
  150. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
  151. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +2 -75
  152. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +433 -141
  153. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -0
  154. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +17 -10
  155. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy_impl.h +20 -0
  156. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +112 -85
  157. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +191 -36
  158. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +2 -2
  159. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
  160. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +108 -31
  161. package/deps/rocksdb/rocksdb/table/external_table.cc +7 -3
  162. package/deps/rocksdb/rocksdb/table/format.cc +6 -12
  163. package/deps/rocksdb/rocksdb/table/format.h +10 -0
  164. package/deps/rocksdb/rocksdb/table/internal_iterator.h +1 -1
  165. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -1
  166. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -1
  167. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +5 -0
  168. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -1
  169. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +118 -46
  170. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +9 -8
  171. package/deps/rocksdb/rocksdb/table/table_builder.h +5 -0
  172. package/deps/rocksdb/rocksdb/table/table_properties.cc +16 -0
  173. package/deps/rocksdb/rocksdb/table/table_test.cc +1540 -155
  174. package/deps/rocksdb/rocksdb/test_util/testutil.h +21 -5
  175. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -5
  176. package/deps/rocksdb/rocksdb/tools/ldb.cc +1 -2
  177. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +2 -0
  178. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -3
  179. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +133 -165
  180. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +173 -64
  181. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +69 -0
  182. package/deps/rocksdb/rocksdb/util/atomic.h +6 -0
  183. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +29 -20
  184. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +10 -6
  185. package/deps/rocksdb/rocksdb/util/bit_fields.h +338 -0
  186. package/deps/rocksdb/rocksdb/util/coding.h +3 -3
  187. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -2
  188. package/deps/rocksdb/rocksdb/util/compression.cc +777 -82
  189. package/deps/rocksdb/rocksdb/util/compression.h +5 -0
  190. package/deps/rocksdb/rocksdb/util/compression_test.cc +5 -3
  191. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +2 -2
  192. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +15 -14
  193. package/deps/rocksdb/rocksdb/util/interval_test.cc +102 -0
  194. package/deps/rocksdb/rocksdb/util/semaphore.h +164 -0
  195. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +10 -6
  196. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -2
  197. package/deps/rocksdb/rocksdb/util/slice_test.cc +136 -0
  198. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  199. package/deps/rocksdb/rocksdb/util/string_util.cc +2 -16
  200. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -1
  201. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -1
  202. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +7 -4
  203. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +35 -14
  204. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +2 -0
  205. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +5 -2
  206. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/any_lock_manager_test.h +244 -0
  207. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_bench.cc +18 -0
  208. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_bench_tool.cc +159 -0
  209. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +1244 -161
  210. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +66 -12
  211. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_stress_test.cc +103 -0
  212. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +1275 -8
  213. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +40 -262
  214. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test_common.h +78 -0
  215. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_validation_test_runner.h +469 -0
  216. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +2 -6
  217. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +4 -0
  218. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +9 -1
  219. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +18 -9
  220. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +2 -0
  221. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +2 -1
  222. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +72 -44
  223. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +92 -15
  224. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +6 -20
  225. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +143 -112
  226. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +23 -16
  227. package/index.js +3 -3
  228. package/package.json +1 -1
  229. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  230. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  231. package/util.h +38 -12
  232. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.cc +0 -17
@@ -1118,11 +1118,11 @@ class DB {
1118
1118
  // // Check ex.what()
1119
1119
  // }
1120
1120
  virtual std::unique_ptr<MultiScan> NewMultiScan(
1121
- const ReadOptions& /*options*/, ColumnFamilyHandle* /*column_family*/,
1122
- const std::vector<ScanOptions>& /*scan_opts*/) {
1121
+ const ReadOptions& /*options*/, ColumnFamilyHandle* column_family,
1122
+ const MultiScanArgs& /*scan_opts*/) {
1123
1123
  std::unique_ptr<Iterator> iter(NewErrorIterator(Status::NotSupported()));
1124
- std::unique_ptr<MultiScan> ms_iter =
1125
- std::make_unique<MultiScan>(std::move(iter));
1124
+ std::unique_ptr<MultiScan> ms_iter = std::make_unique<MultiScan>(
1125
+ column_family->GetComparator(), std::move(iter));
1126
1126
  return ms_iter;
1127
1127
  }
1128
1128
 
@@ -1966,7 +1966,9 @@ class DB {
1966
1966
  // In the first mode we will try to find the lowest possible level that
1967
1967
  // the file can fit in, and ingest the file into this level (2). A file that
1968
1968
  // have a key range that overlap with the memtable key range will require us
1969
- // to Flush the memtable first before ingesting the file.
1969
+ // to Flush the memtable first before ingesting the file. If ingested files
1970
+ // have any overlap with each other, level and sequence number assignment
1971
+ // ensure later files overwrite earlier files.
1970
1972
  // In the second mode we will always ingest in the bottom most level (see
1971
1973
  // docs to IngestExternalFileOptions::ingest_behind).
1972
1974
  // For a column family that enables user-defined timestamps, ingesting
@@ -1984,7 +1986,7 @@ class DB {
1984
1986
  // even if the file compression doesn't match the level compression
1985
1987
  // (3) If IngestExternalFileOptions->ingest_behind is set to true,
1986
1988
  // we always ingest at the bottommost level, which should be reserved
1987
- // for this purpose (see DBOPtions::allow_ingest_behind flag).
1989
+ // for this purpose (see ColumnFamilyOptions::cf_allow_ingest_behind).
1988
1990
  // (4) If IngestExternalFileOptions->fail_if_not_bottommost_level is set to
1989
1991
  // true, then this method can return Status:TryAgain() indicating that
1990
1992
  // the files cannot be ingested to the bottommost level, and it is the
@@ -2245,12 +2247,9 @@ inline Status DB::GetApproximateSizes(ColumnFamilyHandle* column_family,
2245
2247
  uint64_t* sizes,
2246
2248
  SizeApproximationFlags include_flags) {
2247
2249
  SizeApproximationOptions options;
2248
- options.include_memtables =
2249
- ((include_flags & SizeApproximationFlags::INCLUDE_MEMTABLES) !=
2250
- SizeApproximationFlags::NONE);
2251
- options.include_files =
2252
- ((include_flags & SizeApproximationFlags::INCLUDE_FILES) !=
2253
- SizeApproximationFlags::NONE);
2250
+ using enum SizeApproximationFlags; // Require C++20 support
2251
+ options.include_memtables = ((include_flags & INCLUDE_MEMTABLES) != NONE);
2252
+ options.include_files = ((include_flags & INCLUDE_FILES) != NONE);
2254
2253
  return GetApproximateSizes(options, column_family, ranges, n, sizes);
2255
2254
  }
2256
2255
 
@@ -456,7 +456,141 @@ class Env : public Customizable {
456
456
  kGetEntity = 8,
457
457
  kMultiGetEntity = 9,
458
458
  kGetFileChecksumsFromCurrentManifest = 10,
459
- kUnknown, // Keep last for easy array of non-unknowns
459
+ // Enums after this, up to 0x7F, are reserved for future use for the public
460
+ // RocksDB API (i.e. they should be "non-custom" IO activities). Make sure
461
+ // to also update IOActivityToString when adding new values.
462
+
463
+ kCustomIOActivity80 = 0x80,
464
+ kFirstCustomIOActivity = kCustomIOActivity80,
465
+ kCustomIOActivity81 = 0x81,
466
+ kCustomIOActivity82 = 0x82,
467
+ kCustomIOActivity83 = 0x83,
468
+ kCustomIOActivity84 = 0x84,
469
+ kCustomIOActivity85 = 0x85,
470
+ kCustomIOActivity86 = 0x86,
471
+ kCustomIOActivity87 = 0x87,
472
+ kCustomIOActivity88 = 0x88,
473
+ kCustomIOActivity89 = 0x89,
474
+ kCustomIOActivity8A = 0x8A,
475
+ kCustomIOActivity8B = 0x8B,
476
+ kCustomIOActivity8C = 0x8C,
477
+ kCustomIOActivity8D = 0x8D,
478
+ kCustomIOActivity8E = 0x8E,
479
+ kCustomIOActivity8F = 0x8F,
480
+ kCustomIOActivity90 = 0x90,
481
+ kCustomIOActivity91 = 0x91,
482
+ kCustomIOActivity92 = 0x92,
483
+ kCustomIOActivity93 = 0x93,
484
+ kCustomIOActivity94 = 0x94,
485
+ kCustomIOActivity95 = 0x95,
486
+ kCustomIOActivity96 = 0x96,
487
+ kCustomIOActivity97 = 0x97,
488
+ kCustomIOActivity98 = 0x98,
489
+ kCustomIOActivity99 = 0x99,
490
+ kCustomIOActivity9A = 0x9A,
491
+ kCustomIOActivity9B = 0x9B,
492
+ kCustomIOActivity9C = 0x9C,
493
+ kCustomIOActivity9D = 0x9D,
494
+ kCustomIOActivity9E = 0x9E,
495
+ kCustomIOActivity9F = 0x9F,
496
+ kCustomIOActivityA0 = 0xA0,
497
+ kCustomIOActivityA1 = 0xA1,
498
+ kCustomIOActivityA2 = 0xA2,
499
+ kCustomIOActivityA3 = 0xA3,
500
+ kCustomIOActivityA4 = 0xA4,
501
+ kCustomIOActivityA5 = 0xA5,
502
+ kCustomIOActivityA6 = 0xA6,
503
+ kCustomIOActivityA7 = 0xA7,
504
+ kCustomIOActivityA8 = 0xA8,
505
+ kCustomIOActivityA9 = 0xA9,
506
+ kCustomIOActivityAA = 0xAA,
507
+ kCustomIOActivityAB = 0xAB,
508
+ kCustomIOActivityAC = 0xAC,
509
+ kCustomIOActivityAD = 0xAD,
510
+ kCustomIOActivityAE = 0xAE,
511
+ kCustomIOActivityAF = 0xAF,
512
+ kCustomIOActivityB0 = 0xB0,
513
+ kCustomIOActivityB1 = 0xB1,
514
+ kCustomIOActivityB2 = 0xB2,
515
+ kCustomIOActivityB3 = 0xB3,
516
+ kCustomIOActivityB4 = 0xB4,
517
+ kCustomIOActivityB5 = 0xB5,
518
+ kCustomIOActivityB6 = 0xB6,
519
+ kCustomIOActivityB7 = 0xB7,
520
+ kCustomIOActivityB8 = 0xB8,
521
+ kCustomIOActivityB9 = 0xB9,
522
+ kCustomIOActivityBA = 0xBA,
523
+ kCustomIOActivityBB = 0xBB,
524
+ kCustomIOActivityBC = 0xBC,
525
+ kCustomIOActivityBD = 0xBD,
526
+ kCustomIOActivityBE = 0xBE,
527
+ kCustomIOActivityBF = 0xBF,
528
+ kCustomIOActivityC0 = 0xC0,
529
+ kCustomIOActivityC1 = 0xC1,
530
+ kCustomIOActivityC2 = 0xC2,
531
+ kCustomIOActivityC3 = 0xC3,
532
+ kCustomIOActivityC4 = 0xC4,
533
+ kCustomIOActivityC5 = 0xC5,
534
+ kCustomIOActivityC6 = 0xC6,
535
+ kCustomIOActivityC7 = 0xC7,
536
+ kCustomIOActivityC8 = 0xC8,
537
+ kCustomIOActivityC9 = 0xC9,
538
+ kCustomIOActivityCA = 0xCA,
539
+ kCustomIOActivityCB = 0xCB,
540
+ kCustomIOActivityCC = 0xCC,
541
+ kCustomIOActivityCD = 0xCD,
542
+ kCustomIOActivityCE = 0xCE,
543
+ kCustomIOActivityCF = 0xCF,
544
+ kCustomIOActivityD0 = 0xD0,
545
+ kCustomIOActivityD1 = 0xD1,
546
+ kCustomIOActivityD2 = 0xD2,
547
+ kCustomIOActivityD3 = 0xD3,
548
+ kCustomIOActivityD4 = 0xD4,
549
+ kCustomIOActivityD5 = 0xD5,
550
+ kCustomIOActivityD6 = 0xD6,
551
+ kCustomIOActivityD7 = 0xD7,
552
+ kCustomIOActivityD8 = 0xD8,
553
+ kCustomIOActivityD9 = 0xD9,
554
+ kCustomIOActivityDA = 0xDA,
555
+ kCustomIOActivityDB = 0xDB,
556
+ kCustomIOActivityDC = 0xDC,
557
+ kCustomIOActivityDD = 0xDD,
558
+ kCustomIOActivityDE = 0xDE,
559
+ kCustomIOActivityDF = 0xDF,
560
+ kCustomIOActivityE0 = 0xE0,
561
+ kCustomIOActivityE1 = 0xE1,
562
+ kCustomIOActivityE2 = 0xE2,
563
+ kCustomIOActivityE3 = 0xE3,
564
+ kCustomIOActivityE4 = 0xE4,
565
+ kCustomIOActivityE5 = 0xE5,
566
+ kCustomIOActivityE6 = 0xE6,
567
+ kCustomIOActivityE7 = 0xE7,
568
+ kCustomIOActivityE8 = 0xE8,
569
+ kCustomIOActivityE9 = 0xE9,
570
+ kCustomIOActivityEA = 0xEA,
571
+ kCustomIOActivityEB = 0xEB,
572
+ kCustomIOActivityEC = 0xEC,
573
+ kCustomIOActivityED = 0xED,
574
+ kCustomIOActivityEE = 0xEE,
575
+ kCustomIOActivityEF = 0xEF,
576
+ kCustomIOActivityF0 = 0xF0,
577
+ kCustomIOActivityF1 = 0xF1,
578
+ kCustomIOActivityF2 = 0xF2,
579
+ kCustomIOActivityF3 = 0xF3,
580
+ kCustomIOActivityF4 = 0xF4,
581
+ kCustomIOActivityF5 = 0xF5,
582
+ kCustomIOActivityF6 = 0xF6,
583
+ kCustomIOActivityF7 = 0xF7,
584
+ kCustomIOActivityF8 = 0xF8,
585
+ kCustomIOActivityF9 = 0xF9,
586
+ kCustomIOActivityFA = 0xFA,
587
+ kCustomIOActivityFB = 0xFB,
588
+ kCustomIOActivityFC = 0xFC,
589
+ kCustomIOActivityFD = 0xFD,
590
+ kCustomIOActivityFE = 0xFE,
591
+ kLastCustomIOActivity = kCustomIOActivityFE,
592
+
593
+ kUnknown = 0xFF, // Keep last as unknown
460
594
  };
461
595
 
462
596
  static std::string IOActivityToString(IOActivity activity);
@@ -24,6 +24,7 @@
24
24
  #include <functional>
25
25
  #include <limits>
26
26
  #include <memory>
27
+ #include <shared_mutex>
27
28
  #include <sstream>
28
29
  #include <string>
29
30
  #include <unordered_map>
@@ -254,6 +255,10 @@ struct IODebugContext {
254
255
  // Arbitrary structure containing cost information about the IO request
255
256
  std::any cost_info;
256
257
 
258
+ // FileSystem implementations can use this mutex to synchronize concurrent
259
+ // reads/writes as needed (e.g. to update the counters or cost_info field)
260
+ std::shared_mutex mutex;
261
+
257
262
  IODebugContext() {}
258
263
 
259
264
  // Copy constructor
@@ -32,22 +32,34 @@ struct FileIOByTemperature {
32
32
  uint64_t hot_file_bytes_read;
33
33
  // the number of bytes read to Temperature::kWarm file
34
34
  uint64_t warm_file_bytes_read;
35
+ // the number of bytes read to Temperature::kCool file
36
+ uint64_t cool_file_bytes_read;
35
37
  // the number of bytes read to Temperature::kCold file
36
38
  uint64_t cold_file_bytes_read;
39
+ // the number of bytes read to Temperature::kIce file
40
+ uint64_t ice_file_bytes_read;
37
41
  // total number of reads to Temperature::kHot file
38
42
  uint64_t hot_file_read_count;
39
43
  // total number of reads to Temperature::kWarm file
40
44
  uint64_t warm_file_read_count;
45
+ // total number of reads to Temperature::kCool file
46
+ uint64_t cool_file_read_count;
41
47
  // total number of reads to Temperature::kCold file
42
48
  uint64_t cold_file_read_count;
49
+ // total number of reads to Temperature::kIce file
50
+ uint64_t ice_file_read_count;
43
51
  // reset all the statistics to 0.
44
52
  void Reset() {
45
53
  hot_file_bytes_read = 0;
46
54
  warm_file_bytes_read = 0;
55
+ cool_file_bytes_read = 0;
47
56
  cold_file_bytes_read = 0;
57
+ ice_file_bytes_read = 0;
48
58
  hot_file_read_count = 0;
49
59
  warm_file_read_count = 0;
60
+ cool_file_read_count = 0;
50
61
  cold_file_read_count = 0;
62
+ ice_file_read_count = 0;
51
63
  }
52
64
  };
53
65
 
@@ -109,7 +109,7 @@ class Iterator : public IteratorBase {
109
109
  //
110
110
  // If Prepare() is called, it overrides the iterate_upper_bound in
111
111
  // ReadOptions
112
- virtual void Prepare(const std::vector<ScanOptions>& /*scan_opts*/) {}
112
+ virtual void Prepare(const MultiScanArgs& /*scan_opts*/) {}
113
113
  };
114
114
 
115
115
  // Return an empty iterator (yields nothing).
@@ -32,10 +32,18 @@ struct LDBOptions {
32
32
 
33
33
  class LDBTool {
34
34
  public:
35
+ // DEPRECATED because this function does not return, which can result in
36
+ // memory leaks being reported because of the default Options() etc. not being
37
+ // destroyed.
35
38
  void Run(
36
39
  int argc, char** argv, Options db_options = Options(),
37
40
  const LDBOptions& ldb_options = LDBOptions(),
38
41
  const std::vector<ColumnFamilyDescriptor>* column_families = nullptr);
42
+
43
+ int RunAndReturn(
44
+ int argc, char** argv, const Options& db_options = Options(),
45
+ const LDBOptions& ldb_options = LDBOptions(),
46
+ const std::vector<ColumnFamilyDescriptor>* column_families = nullptr);
39
47
  };
40
48
 
41
49
  } // namespace ROCKSDB_NAMESPACE
@@ -38,6 +38,7 @@
38
38
  #include <stdint.h>
39
39
  #include <stdlib.h>
40
40
 
41
+ #include <functional>
41
42
  #include <memory>
42
43
  #include <stdexcept>
43
44
  #include <unordered_set>
@@ -201,11 +202,12 @@ class MemTableRep {
201
202
  bool (*callback_func)(void* arg, const char* entry));
202
203
 
203
204
  // Same as Get() but performs data integrity validation.
204
- virtual Status GetAndValidate(const LookupKey& /* k */,
205
- void* /* callback_args */,
206
- bool (* /* callback_func */)(void* arg,
207
- const char* entry),
208
- bool /*allow_data_in_error*/) {
205
+ virtual Status GetAndValidate(
206
+ const LookupKey& /* k */, void* /* callback_args */,
207
+ bool (* /* callback_func */)(void* arg, const char* entry),
208
+ bool /* allow_data_in_error */, bool /* detect_key_out_of_order */,
209
+ const std::function<Status(const char*, bool)>&
210
+ /* key_validation_callback */) {
209
211
  return Status::NotSupported("GetAndValidate() not implemented.");
210
212
  }
211
213
 
@@ -276,9 +278,11 @@ class MemTableRep {
276
278
  // Seek and perform integrity validations on the skip list.
277
279
  // Iterator becomes invalid and Corruption is returned if a
278
280
  // corruption is found.
279
- virtual Status SeekAndValidate(const Slice& /* internal_key */,
280
- const char* /* memtable_key */,
281
- bool /* allow_data_in_errors */) {
281
+ virtual Status SeekAndValidate(
282
+ const Slice& /* internal_key */, const char* /* memtable_key */,
283
+ bool /* allow_data_in_errors */, bool /* detect_key_out_of_order */,
284
+ const std::function<Status(const char*, bool)>&
285
+ /* key_validation_callback */) {
282
286
  return Status::NotSupported("SeekAndValidate() not implemented.");
283
287
  }
284
288
 
@@ -239,6 +239,9 @@ struct ColumnFamilyMetaData {
239
239
  // The name of the column family.
240
240
  std::string name;
241
241
  // The metadata of all levels in this column family.
242
+ // levels[i] contains files in level i.
243
+ // For level 0, files with recent updates are ordered first.
244
+ // For level 1+, files are ordered by increasing key range.
242
245
  std::vector<LevelMetaData> levels;
243
246
 
244
247
  // The total size of all blob files
@@ -97,7 +97,13 @@ class Scan {
97
97
 
98
98
  ScanIterator() : db_iter_(nullptr), valid_(false) {}
99
99
 
100
- ~ScanIterator() { assert(status_.ok()); }
100
+ ~ScanIterator() {
101
+ if (!status_.ok()) {
102
+ fprintf(stderr, "ScanIterator status: %s\n",
103
+ status_.ToString().c_str());
104
+ assert(false);
105
+ }
106
+ }
101
107
 
102
108
  ScanIterator& operator++() {
103
109
  if (!valid_) {
@@ -152,12 +158,12 @@ class Scan {
152
158
  // A Status exception is thrown if there is an error.
153
159
  class MultiScan {
154
160
  public:
155
- MultiScan(const ReadOptions& read_options,
156
- const std::vector<ScanOptions>& scan_opts, DB* db,
157
- ColumnFamilyHandle* cfh);
161
+ MultiScan(const ReadOptions& read_options, const MultiScanArgs& scan_opts,
162
+ DB* db, ColumnFamilyHandle* cfh);
158
163
 
159
- explicit MultiScan(std::unique_ptr<Iterator>&& db_iter)
160
- : db_iter_(std::move(db_iter)) {}
164
+ explicit MultiScan(const Comparator* comp,
165
+ std::unique_ptr<Iterator>&& db_iter)
166
+ : scan_opts_(comp), db_iter_(std::move(db_iter)) {}
161
167
 
162
168
  class MultiScanIterator {
163
169
  public:
@@ -185,6 +191,10 @@ class MultiScan {
185
191
  if (scan_opts_.empty()) {
186
192
  throw std::logic_error("Zero scans in multi-scan");
187
193
  }
194
+ status_ = db_iter_->status();
195
+ if (!status_.ok()) {
196
+ throw MultiScanException(status_);
197
+ }
188
198
  db_iter_->Seek(*scan_opts_[idx_].range.start);
189
199
  status_ = db_iter_->status();
190
200
  if (!status_.ok()) {
@@ -220,15 +230,15 @@ class MultiScan {
220
230
  };
221
231
 
222
232
  MultiScanIterator begin() {
223
- return MultiScanIterator(scan_opts_, db_, cfh_, read_options_,
224
- &upper_bound_, db_iter_);
233
+ return MultiScanIterator(scan_opts_.GetScanRanges(), db_, cfh_,
234
+ read_options_, &upper_bound_, db_iter_);
225
235
  }
226
236
 
227
237
  std::nullptr_t end() { return nullptr; }
228
238
 
229
239
  private:
230
240
  ReadOptions read_options_;
231
- const std::vector<ScanOptions> scan_opts_;
241
+ const MultiScanArgs scan_opts_;
232
242
  DB* db_;
233
243
  ColumnFamilyHandle* cfh_;
234
244
  Slice upper_bound_;