@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
@@ -787,6 +787,46 @@ TEST_P(DBTablePropertiesTest, RatioBasedDeletionTriggeredCompactionMarking) {
787
787
  }
788
788
  }
789
789
 
790
+ TEST_F(DBTablePropertiesTest, KeyLargestSmallestSeqno) {
791
+ ASSERT_OK(db_->Put(WriteOptions(), "key1", "value1"));
792
+ ASSERT_OK(db_->Put(WriteOptions(), "key2", "value2"));
793
+ ASSERT_OK(db_->Put(WriteOptions(), "key3", "value3"));
794
+ ASSERT_OK(db_->Flush(FlushOptions()));
795
+
796
+ {
797
+ TablePropertiesCollection props;
798
+ ASSERT_OK(db_->GetPropertiesOfAllTables(&props));
799
+ ASSERT_EQ(1U, props.size());
800
+
801
+ auto table_props = props.begin()->second;
802
+
803
+ ASSERT_TRUE(table_props->HasKeyLargestSeqno());
804
+ ASSERT_TRUE(table_props->HasKeySmallestSeqno());
805
+
806
+ ASSERT_EQ(table_props->key_largest_seqno,
807
+ table_props->key_smallest_seqno + 2);
808
+ ASSERT_GT(table_props->key_largest_seqno, 0U);
809
+ ASSERT_GT(table_props->key_smallest_seqno, 0U);
810
+ }
811
+
812
+ // Becomes zero after compaction
813
+ {
814
+ CompactRangeOptions cro;
815
+ cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
816
+ ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
817
+ TablePropertiesCollection props;
818
+ ASSERT_OK(db_->GetPropertiesOfAllTables(&props));
819
+ ASSERT_EQ(1U, props.size());
820
+
821
+ auto table_props = props.begin()->second;
822
+ ASSERT_TRUE(table_props->HasKeyLargestSeqno());
823
+ ASSERT_TRUE(table_props->HasKeySmallestSeqno());
824
+
825
+ ASSERT_EQ(table_props->key_largest_seqno, table_props->key_smallest_seqno);
826
+ ASSERT_EQ(table_props->key_largest_seqno, 0U);
827
+ }
828
+ }
829
+
790
830
  INSTANTIATE_TEST_CASE_P(DBTablePropertiesTest, DBTablePropertiesTest,
791
831
  ::testing::Values("kCompactionStyleLevel",
792
832
  "kCompactionStyleUniversal"));
@@ -6063,15 +6063,9 @@ TEST_F(DBTest2, VariousFileTemperatures) {
6063
6063
  };
6064
6064
 
6065
6065
  // We don't have enough non-unknown temps to confidently distinguish that
6066
- // a specific setting caused a specific outcome, in a single run. This is a
6067
- // reasonable work-around without blowing up test time. Only returns
6068
- // non-unknown temperatures.
6069
- auto RandomTemp = [] {
6070
- static std::vector<Temperature> temps = {
6071
- Temperature::kHot, Temperature::kWarm, Temperature::kCold};
6072
- return temps[Random::GetTLSInstance()->Uniform(
6073
- static_cast<int>(temps.size()))];
6074
- };
6066
+ // a specific setting caused a specific outcome, in a single run. Using
6067
+ // RandomKnownTemperature() is a reasonable work-around without blowing up
6068
+ // test time.
6075
6069
 
6076
6070
  auto test_fs = std::make_shared<MyTestFS>(env_->GetFileSystem());
6077
6071
  std::unique_ptr<Env> env(new CompositeEnvWrapper(env_, test_fs));
@@ -6087,22 +6081,22 @@ TEST_F(DBTest2, VariousFileTemperatures) {
6087
6081
  options.env = env.get();
6088
6082
  test_fs->Reset();
6089
6083
  if (use_optimize) {
6090
- test_fs->optimize_manifest_temperature = RandomTemp();
6084
+ test_fs->optimize_manifest_temperature = RandomKnownTemperature();
6091
6085
  test_fs->expected_manifest_temperature =
6092
6086
  test_fs->optimize_manifest_temperature;
6093
- test_fs->optimize_wal_temperature = RandomTemp();
6087
+ test_fs->optimize_wal_temperature = RandomKnownTemperature();
6094
6088
  test_fs->expected_wal_temperature = test_fs->optimize_wal_temperature;
6095
6089
  }
6096
6090
  if (use_temp_options) {
6097
- options.metadata_write_temperature = RandomTemp();
6091
+ options.metadata_write_temperature = RandomKnownTemperature();
6098
6092
  test_fs->expected_manifest_temperature =
6099
6093
  options.metadata_write_temperature;
6100
6094
  test_fs->expected_other_metadata_temperature =
6101
6095
  options.metadata_write_temperature;
6102
- options.wal_write_temperature = RandomTemp();
6096
+ options.wal_write_temperature = RandomKnownTemperature();
6103
6097
  test_fs->expected_wal_temperature = options.wal_write_temperature;
6104
- options.last_level_temperature = RandomTemp();
6105
- options.default_write_temperature = RandomTemp();
6098
+ options.last_level_temperature = RandomKnownTemperature();
6099
+ options.default_write_temperature = RandomKnownTemperature();
6106
6100
  }
6107
6101
 
6108
6102
  DestroyAndReopen(options);
@@ -7466,11 +7460,27 @@ TEST_F(DBTest2, GetFileChecksumsFromCurrentManifest_CRC32) {
7466
7460
  FlushOptions fopts;
7467
7461
  fopts.wait = true;
7468
7462
  Random rnd(test::RandomSeed());
7463
+
7464
+ // Write 4 files into the default column family.
7469
7465
  for (int i = 0; i < 4; i++) {
7470
7466
  ASSERT_OK(db->Put(wopts, Key(i), rnd.RandomString(100)));
7471
7467
  ASSERT_OK(db->Flush(fopts));
7472
7468
  }
7473
7469
 
7470
+ // Create a new column family, write 1 file into it and drop it.
7471
+ ColumnFamilyHandle* cf;
7472
+ ASSERT_OK(
7473
+ db->CreateColumnFamily(ColumnFamilyOptions(), "soon_to_be_deleted", &cf));
7474
+ ASSERT_OK(db->Put(wopts, cf, "some_key", "some_value"));
7475
+ ASSERT_OK(db->Flush(fopts, cf));
7476
+
7477
+ // Drop column family should generate corresponding version edit
7478
+ // in manifest, which we expect to be correctly interpreted by
7479
+ // GetFileChecksumsFromCurrentManifest API after db close.
7480
+ ASSERT_OK(db->DropColumnFamily(cf));
7481
+ delete cf;
7482
+ cf = nullptr;
7483
+
7474
7484
  // Obtain rich files metadata for source of truth.
7475
7485
  std::vector<LiveFileMetaData> live_files;
7476
7486
  db->GetLiveFilesMetaData(&live_files);
@@ -71,9 +71,9 @@ DBTestBase::DBTestBase(const std::string path, bool env_do_fsync)
71
71
  if (getenv("MEM_ENV")) {
72
72
  mem_env_ = MockEnv::Create(base_env, base_env->GetSystemClock());
73
73
  }
74
- if (getenv("ENCRYPTED_ENV")) {
74
+ if (auto ee = getenv("ENCRYPTED_ENV")) {
75
75
  std::shared_ptr<EncryptionProvider> provider;
76
- std::string provider_id = getenv("ENCRYPTED_ENV");
76
+ std::string provider_id = ee;
77
77
  if (provider_id.find('=') == std::string::npos &&
78
78
  !EndsWith(provider_id, "://test")) {
79
79
  provider_id = provider_id + "://test";
@@ -366,11 +366,6 @@ Options DBTestBase::GetOptions(
366
366
  table_options.block_cache = NewLRUCache(/* too small */ 1);
367
367
  }
368
368
 
369
- // Test anticipated new default as much as reasonably possible (and remove
370
- // this code when obsolete)
371
- assert(!table_options.decouple_partitioned_filters);
372
- table_options.decouple_partitioned_filters = true;
373
-
374
369
  bool can_allow_mmap = IsMemoryMappedAccessSupported();
375
370
  switch (option_config) {
376
371
  case kHashSkipList:
@@ -1159,16 +1154,18 @@ size_t DBTestBase::CountLiveFiles() {
1159
1154
  }
1160
1155
 
1161
1156
  int DBTestBase::NumTableFilesAtLevel(int level, int cf) {
1162
- std::string property;
1163
- if (cf == 0) {
1164
- // default cfd
1165
- EXPECT_TRUE(db_->GetProperty(
1166
- "rocksdb.num-files-at-level" + std::to_string(level), &property));
1167
- } else {
1168
- EXPECT_TRUE(db_->GetProperty(
1169
- handles_[cf], "rocksdb.num-files-at-level" + std::to_string(level),
1170
- &property));
1157
+ return NumTableFilesAtLevel(level,
1158
+ cf ? handles_[cf] : db_->DefaultColumnFamily());
1159
+ }
1160
+
1161
+ int DBTestBase::NumTableFilesAtLevel(int level, ColumnFamilyHandle* cfh,
1162
+ DB* db) {
1163
+ if (!db) {
1164
+ db = db_;
1171
1165
  }
1166
+ std::string property;
1167
+ EXPECT_TRUE(db->GetProperty(
1168
+ cfh, "rocksdb.num-files-at-level" + std::to_string(level), &property));
1172
1169
  return atoi(property.c_str());
1173
1170
  }
1174
1171
 
@@ -1201,12 +1198,22 @@ int DBTestBase::TotalTableFiles(int cf, int levels) {
1201
1198
 
1202
1199
  // Return spread of files per level
1203
1200
  std::string DBTestBase::FilesPerLevel(int cf) {
1204
- int num_levels =
1205
- (cf == 0) ? db_->NumberLevels() : db_->NumberLevels(handles_[cf]);
1201
+ if (cf == 0) {
1202
+ return FilesPerLevel(db_->DefaultColumnFamily());
1203
+ } else {
1204
+ return FilesPerLevel(handles_[cf]);
1205
+ }
1206
+ }
1207
+
1208
+ std::string DBTestBase::FilesPerLevel(ColumnFamilyHandle* cfh, DB* db) {
1209
+ if (!db) {
1210
+ db = db_;
1211
+ }
1212
+ int num_levels = db->NumberLevels(cfh);
1206
1213
  std::string result;
1207
1214
  size_t last_non_zero_offset = 0;
1208
1215
  for (int level = 0; level < num_levels; level++) {
1209
- int f = NumTableFilesAtLevel(level, cf);
1216
+ int f = NumTableFilesAtLevel(level, cfh, db);
1210
1217
  char buf[100];
1211
1218
  snprintf(buf, sizeof(buf), "%s%d", (level ? "," : ""), f);
1212
1219
  result += buf;
@@ -1339,12 +1346,14 @@ void DBTestBase::FillLevels(const std::string& smallest,
1339
1346
  }
1340
1347
 
1341
1348
  void DBTestBase::MoveFilesToLevel(int level, int cf) {
1349
+ MoveFilesToLevel(level, cf ? handles_[cf] : db_->DefaultColumnFamily());
1350
+ }
1351
+
1352
+ void DBTestBase::MoveFilesToLevel(int level, ColumnFamilyHandle* column_family,
1353
+ DB* db) {
1354
+ DBImpl* db_impl = db ? static_cast<DBImpl*>(db) : dbfull();
1342
1355
  for (int l = 0; l < level; ++l) {
1343
- if (cf > 0) {
1344
- EXPECT_OK(dbfull()->TEST_CompactRange(l, nullptr, nullptr, handles_[cf]));
1345
- } else {
1346
- EXPECT_OK(dbfull()->TEST_CompactRange(l, nullptr, nullptr));
1347
- }
1356
+ EXPECT_OK(db_impl->TEST_CompactRange(l, nullptr, nullptr, column_family));
1348
1357
  }
1349
1358
  }
1350
1359
 
@@ -1863,4 +1872,13 @@ template class TargetCacheChargeTrackingCache<
1863
1872
  CacheEntryRole::kBlockBasedTableReader>;
1864
1873
  template class TargetCacheChargeTrackingCache<CacheEntryRole::kFileMetadata>;
1865
1874
 
1875
+ const std::vector<Temperature> kKnownTemperatures = {
1876
+ Temperature::kHot, Temperature::kWarm, Temperature::kCool,
1877
+ Temperature::kCold, Temperature::kIce};
1878
+
1879
+ Temperature RandomKnownTemperature() {
1880
+ return kKnownTemperatures[Random::GetTLSInstance()->Uniform(
1881
+ static_cast<int>(kKnownTemperatures.size()))];
1882
+ }
1883
+
1866
1884
  } // namespace ROCKSDB_NAMESPACE
@@ -1280,6 +1280,9 @@ class DBTestBase : public testing::Test {
1280
1280
 
1281
1281
  int NumTableFilesAtLevel(int level, int cf = 0);
1282
1282
 
1283
+ int NumTableFilesAtLevel(int level, ColumnFamilyHandle* column_family,
1284
+ DB* db = nullptr);
1285
+
1283
1286
  double CompressionRatioAtLevel(int level, int cf = 0);
1284
1287
 
1285
1288
  int TotalTableFiles(int cf = 0, int levels = -1);
@@ -1289,6 +1292,8 @@ class DBTestBase : public testing::Test {
1289
1292
  // Return spread of files per level
1290
1293
  std::string FilesPerLevel(int cf = 0);
1291
1294
 
1295
+ std::string FilesPerLevel(ColumnFamilyHandle* cfh, DB* db = nullptr);
1296
+
1292
1297
  size_t CountFiles();
1293
1298
 
1294
1299
  Status CountFiles(size_t* count);
@@ -1320,6 +1325,9 @@ class DBTestBase : public testing::Test {
1320
1325
 
1321
1326
  void MoveFilesToLevel(int level, int cf = 0);
1322
1327
 
1328
+ void MoveFilesToLevel(int level, ColumnFamilyHandle* column_family,
1329
+ DB* db = nullptr);
1330
+
1323
1331
  void DumpFileCounts(const char* label);
1324
1332
 
1325
1333
  std::string DumpSSTableList();
@@ -1430,20 +1438,23 @@ class DBTestBase : public testing::Test {
1430
1438
  std::replace(tp_string.begin(), tp_string.end(), ';', ' ');
1431
1439
  std::replace(tp_string.begin(), tp_string.end(), '=', ' ');
1432
1440
  ResetTableProperties(tp);
1433
- sscanf(tp_string.c_str(),
1434
- "# data blocks %" SCNu64 " # entries %" SCNu64
1435
- " # deletions %" SCNu64 " # merge operands %" SCNu64
1436
- " # range deletions %" SCNu64 " raw key size %" SCNu64
1437
- " raw average key size %lf "
1438
- " raw value size %" SCNu64
1439
- " raw average value size %lf "
1440
- " data block size %" SCNu64 " index block size (user-key? %" SCNu64
1441
- ", delta-value? %" SCNu64 ") %" SCNu64 " filter block size %" SCNu64,
1442
- &tp->num_data_blocks, &tp->num_entries, &tp->num_deletions,
1443
- &tp->num_merge_operands, &tp->num_range_deletions, &tp->raw_key_size,
1444
- &dummy_double, &tp->raw_value_size, &dummy_double, &tp->data_size,
1445
- &tp->index_key_is_user_key, &tp->index_value_is_delta_encoded,
1446
- &tp->index_size, &tp->filter_size);
1441
+ int count = sscanf(
1442
+ tp_string.c_str(),
1443
+ "# data blocks %" SCNu64 " # entries %" SCNu64 " # deletions %" SCNu64
1444
+ " # merge operands %" SCNu64 " # range deletions %" SCNu64
1445
+ " raw key size %" SCNu64
1446
+ " raw average key size %lf "
1447
+ " raw value size %" SCNu64
1448
+ " raw average value size %lf "
1449
+ " data block size %" SCNu64 " data uncompressed size %" SCNu64
1450
+ " index block size (user-key? %" SCNu64 ", delta-value? %" SCNu64
1451
+ ") %" SCNu64 " filter block size %" SCNu64,
1452
+ &tp->num_data_blocks, &tp->num_entries, &tp->num_deletions,
1453
+ &tp->num_merge_operands, &tp->num_range_deletions, &tp->raw_key_size,
1454
+ &dummy_double, &tp->raw_value_size, &dummy_double, &tp->data_size,
1455
+ &tp->uncompressed_data_size, &tp->index_key_is_user_key,
1456
+ &tp->index_value_is_delta_encoded, &tp->index_size, &tp->filter_size);
1457
+ ASSERT_EQ(count, 15);
1447
1458
  }
1448
1459
 
1449
1460
  private: // Prone to error on direct use
@@ -1456,4 +1467,8 @@ class DBTestBase : public testing::Test {
1456
1467
  // unique ids.
1457
1468
  void VerifySstUniqueIds(const TablePropertiesCollection& props);
1458
1469
 
1470
+ // Excludes kUnknown
1471
+ extern const std::vector<Temperature> kKnownTemperatures;
1472
+ Temperature RandomKnownTemperature();
1473
+
1459
1474
  } // namespace ROCKSDB_NAMESPACE
@@ -2106,46 +2106,79 @@ TEST_F(DBTestUniversalCompaction2, OverlappingL0) {
2106
2106
  }
2107
2107
 
2108
2108
  TEST_F(DBTestUniversalCompaction2, IngestBehind) {
2109
- const int kNumKeys = 3000;
2110
- const int kWindowSize = 100;
2111
- const int kNumDelsTrigger = 90;
2112
-
2113
- Options opts = CurrentOptions();
2114
- opts.table_properties_collector_factories.emplace_back(
2115
- NewCompactOnDeletionCollectorFactory(kWindowSize, kNumDelsTrigger));
2116
- opts.compaction_style = kCompactionStyleUniversal;
2117
- opts.level0_file_num_compaction_trigger = 2;
2118
- opts.compression = kNoCompression;
2119
- opts.allow_ingest_behind = true;
2120
- opts.compaction_options_universal.size_ratio = 10;
2121
- opts.compaction_options_universal.min_merge_width = 2;
2122
- opts.compaction_options_universal.max_size_amplification_percent = 200;
2123
- Reopen(opts);
2124
-
2125
- // add an L1 file to prevent tombstones from dropping due to obsolescence
2126
- // during flush
2127
- int i;
2128
- for (i = 0; i < 2000; ++i) {
2129
- ASSERT_OK(Put(Key(i), "val"));
2130
- }
2131
- ASSERT_OK(Flush());
2132
- // MoveFilesToLevel(6);
2133
- ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
2134
-
2135
- for (i = 1999; i < kNumKeys; ++i) {
2136
- if (i >= kNumKeys - kWindowSize &&
2137
- i < kNumKeys - kWindowSize + kNumDelsTrigger) {
2138
- ASSERT_OK(Delete(Key(i)));
2109
+ for (bool cf_option : {false, true}) {
2110
+ SCOPED_TRACE("cf_option = " + std::to_string(cf_option));
2111
+ const int kNumKeys = 3000;
2112
+ const int kWindowSize = 100;
2113
+ const int kNumDelsTrigger = 90;
2114
+
2115
+ Options opts = CurrentOptions();
2116
+ opts.table_properties_collector_factories.emplace_back(
2117
+ NewCompactOnDeletionCollectorFactory(kWindowSize, kNumDelsTrigger));
2118
+ opts.compaction_style = kCompactionStyleUniversal;
2119
+ opts.level0_file_num_compaction_trigger = 2;
2120
+ opts.compression = kNoCompression;
2121
+ if (cf_option) {
2122
+ opts.cf_allow_ingest_behind = true;
2139
2123
  } else {
2124
+ opts.allow_ingest_behind = true;
2125
+ }
2126
+ opts.compaction_options_universal.size_ratio = 10;
2127
+ opts.compaction_options_universal.min_merge_width = 2;
2128
+ opts.compaction_options_universal.max_size_amplification_percent = 200;
2129
+ Reopen(opts);
2130
+
2131
+ // add an L1 file to prevent tombstones from dropping due to obsolescence
2132
+ // during flush
2133
+ int i;
2134
+ for (i = 0; i < 2000; ++i) {
2140
2135
  ASSERT_OK(Put(Key(i), "val"));
2141
2136
  }
2142
- }
2143
- ASSERT_OK(Flush());
2137
+ ASSERT_OK(Flush());
2138
+ // MoveFilesToLevel(6);
2139
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
2140
+
2141
+ for (i = 1999; i < kNumKeys; ++i) {
2142
+ if (i >= kNumKeys - kWindowSize &&
2143
+ i < kNumKeys - kWindowSize + kNumDelsTrigger) {
2144
+ ASSERT_OK(Delete(Key(i)));
2145
+ } else {
2146
+ ASSERT_OK(Put(Key(i), "val"));
2147
+ }
2148
+ }
2149
+ ASSERT_OK(Flush());
2144
2150
 
2145
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
2146
- ASSERT_EQ(0, NumTableFilesAtLevel(0));
2147
- ASSERT_EQ(0, NumTableFilesAtLevel(6));
2148
- ASSERT_GT(NumTableFilesAtLevel(5), 0);
2151
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
2152
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
2153
+ ASSERT_EQ(0, NumTableFilesAtLevel(6));
2154
+ ASSERT_GT(NumTableFilesAtLevel(5), 0);
2155
+
2156
+ if (cf_option) {
2157
+ // Test that another CF does not allow ingest behind
2158
+ ColumnFamilyHandle* new_cfh;
2159
+ Options new_cf_option;
2160
+ new_cf_option.compaction_style = kCompactionStyleUniversal;
2161
+ new_cf_option.num_levels = 7;
2162
+ // CreateColumnFamilies({"new_cf"}, new_cf_option);
2163
+ ASSERT_OK(db_->CreateColumnFamily(new_cf_option, "new_cf", &new_cfh));
2164
+ // handles_.push_back(new_cfh);
2165
+ for (i = 0; i < 10; ++i) {
2166
+ // ASSERT_OK(Put(1, Key(i), "val"));
2167
+ ASSERT_OK(db_->Put(WriteOptions(), new_cfh, Key(i), "val"));
2168
+ }
2169
+ ASSERT_OK(
2170
+ db_->CompactRange(CompactRangeOptions(), new_cfh, nullptr, nullptr));
2171
+ // This CF can use the last leve.
2172
+ std::string property;
2173
+ EXPECT_TRUE(db_->GetProperty(
2174
+ new_cfh, "rocksdb.num-files-at-level" + std::to_string(6),
2175
+ &property));
2176
+ ASSERT_EQ(1, atoi(property.c_str()));
2177
+
2178
+ ASSERT_OK(db_->DropColumnFamily(new_cfh));
2179
+ ASSERT_OK(db_->DestroyColumnFamilyHandle(new_cfh));
2180
+ }
2181
+ }
2149
2182
  }
2150
2183
 
2151
2184
  TEST_F(DBTestUniversalCompaction2, PeriodicCompactionDefault) {
@@ -2400,7 +2400,6 @@ class DataVisibilityTest : public DBBasicTestWithTimestampBase {
2400
2400
  }
2401
2401
  }
2402
2402
  };
2403
- constexpr int DataVisibilityTest::kTestDataSize;
2404
2403
 
2405
2404
  // Application specifies timestamp but not snapshot.
2406
2405
  // reader writer
@@ -129,6 +129,7 @@ void EventHelpers::LogAndNotifyTableFileCreationFinished(
129
129
  << "user_defined_timestamps_persisted"
130
130
  << table_properties.user_defined_timestamps_persisted
131
131
  << "key_largest_seqno" << table_properties.key_largest_seqno
132
+ << "key_smallest_seqno" << table_properties.key_smallest_seqno
132
133
  << "merge_operator" << table_properties.merge_operator_name
133
134
  << "prefix_extractor_name"
134
135
  << table_properties.prefix_extractor_name << "property_collectors"
@@ -88,11 +88,12 @@ Status GetFileChecksumsFromCurrentManifest(FileSystem* fs,
88
88
 
89
89
  // Read all records from the manifest file...
90
90
  uint64_t manifest_file_size = std::numeric_limits<uint64_t>::max();
91
- FileChecksumRetriever retriever(read_options, manifest_file_size,
92
- *checksum_list);
91
+ FileChecksumRetriever retriever(read_options, manifest_file_size);
93
92
  retriever.Iterate(reader, &s);
94
-
95
- return retriever.status();
93
+ if (!retriever.status().ok()) {
94
+ return retriever.status();
95
+ }
96
+ return retriever.FetchFileChecksumList(*checksum_list);
96
97
  }
97
98
 
98
99
  Status UpdateManifestForFilesState(
@@ -2567,7 +2567,14 @@ TEST_F(ExternalSSTFileBasicTest, IngestWithTemperature) {
2567
2567
  options.default_write_temperature = Temperature::kHot;
2568
2568
  SstFileWriter sst_file_writer(EnvOptions(), options);
2569
2569
  options.level0_file_num_compaction_trigger = 2;
2570
- options.allow_ingest_behind = (mode == "ingest_behind");
2570
+ bool cf_option = Random::GetTLSInstance()->OneIn(2);
2571
+ SCOPED_TRACE(std::string("Use ") + (cf_option ? "CF" : "DB") +
2572
+ " option for ingest behind");
2573
+ if (cf_option) {
2574
+ options.cf_allow_ingest_behind = (mode == "ingest_behind");
2575
+ } else {
2576
+ options.allow_ingest_behind = (mode == "ingest_behind");
2577
+ }
2571
2578
  Reopen(options);
2572
2579
  Defer destroyer([&]() { Destroy(options); });
2573
2580