@nxtedition/rocksdb 8.2.8 → 9.0.1

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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -29,79 +29,132 @@ namespace ROCKSDB_NAMESPACE {
29
29
  Status ImportColumnFamilyJob::Prepare(uint64_t next_file_number,
30
30
  SuperVersion* sv) {
31
31
  Status status;
32
+ std::vector<ColumnFamilyIngestFileInfo> cf_ingest_infos;
33
+ for (const auto& metadata_per_cf : metadatas_) {
34
+ // Read the information of files we are importing
35
+ ColumnFamilyIngestFileInfo cf_file_info;
36
+ InternalKey smallest, largest;
37
+ int num_files = 0;
38
+ std::vector<IngestedFileInfo> files_to_import_per_cf;
39
+ for (size_t i = 0; i < metadata_per_cf.size(); i++) {
40
+ auto file_metadata = *metadata_per_cf[i];
41
+ const auto file_path = file_metadata.db_path + "/" + file_metadata.name;
42
+ IngestedFileInfo file_to_import;
43
+ status = GetIngestedFileInfo(file_path, next_file_number++, sv,
44
+ file_metadata, &file_to_import);
45
+ if (!status.ok()) {
46
+ return status;
47
+ }
32
48
 
33
- // Read the information of files we are importing
34
- for (const auto& file_metadata : metadata_) {
35
- const auto file_path = file_metadata.db_path + "/" + file_metadata.name;
36
- IngestedFileInfo file_to_import;
37
- status = GetIngestedFileInfo(file_path, next_file_number++, sv,
38
- file_metadata, &file_to_import);
39
- if (!status.ok()) {
40
- return status;
41
- }
42
- files_to_import_.push_back(file_to_import);
43
- }
49
+ if (file_to_import.num_entries == 0) {
50
+ status = Status::InvalidArgument("File contain no entries");
51
+ return status;
52
+ }
44
53
 
45
- auto num_files = files_to_import_.size();
46
- if (num_files == 0) {
47
- status = Status::InvalidArgument("The list of files is empty");
48
- return status;
49
- }
54
+ if (!file_to_import.smallest_internal_key.Valid() ||
55
+ !file_to_import.largest_internal_key.Valid()) {
56
+ status = Status::Corruption("File has corrupted keys");
57
+ return status;
58
+ }
59
+
60
+ files_to_import_per_cf.push_back(file_to_import);
61
+ num_files++;
62
+
63
+ // Calculate the smallest and largest keys of all files in this CF
64
+ if (i == 0) {
65
+ smallest = file_to_import.smallest_internal_key;
66
+ largest = file_to_import.largest_internal_key;
67
+ } else {
68
+ if (cfd_->internal_comparator().Compare(
69
+ smallest, file_to_import.smallest_internal_key) < 0) {
70
+ smallest = file_to_import.smallest_internal_key;
71
+ }
72
+ if (cfd_->internal_comparator().Compare(
73
+ largest, file_to_import.largest_internal_key) > 0) {
74
+ largest = file_to_import.largest_internal_key;
75
+ }
76
+ }
77
+ }
50
78
 
51
- for (const auto& f : files_to_import_) {
52
- if (f.num_entries == 0) {
53
- status = Status::InvalidArgument("File contain no entries");
79
+ if (num_files == 0) {
80
+ status = Status::InvalidArgument("The list of files is empty");
54
81
  return status;
55
82
  }
83
+ files_to_import_.push_back(files_to_import_per_cf);
84
+ cf_file_info.smallest_internal_key = smallest;
85
+ cf_file_info.largest_internal_key = largest;
86
+ cf_ingest_infos.push_back(cf_file_info);
87
+ }
56
88
 
57
- if (!f.smallest_internal_key.Valid() || !f.largest_internal_key.Valid()) {
58
- status = Status::Corruption("File has corrupted keys");
89
+ std::sort(cf_ingest_infos.begin(), cf_ingest_infos.end(),
90
+ [this](const ColumnFamilyIngestFileInfo& info1,
91
+ const ColumnFamilyIngestFileInfo& info2) {
92
+ return cfd_->user_comparator()->Compare(
93
+ info1.smallest_internal_key.user_key(),
94
+ info2.smallest_internal_key.user_key()) < 0;
95
+ });
96
+
97
+ for (size_t i = 0; i + 1 < cf_ingest_infos.size(); i++) {
98
+ if (cfd_->user_comparator()->Compare(
99
+ cf_ingest_infos[i].largest_internal_key.user_key(),
100
+ cf_ingest_infos[i + 1].smallest_internal_key.user_key()) >= 0) {
101
+ status = Status::InvalidArgument("CFs have overlapping ranges");
59
102
  return status;
60
103
  }
61
104
  }
62
105
 
63
106
  // Copy/Move external files into DB
64
107
  auto hardlink_files = import_options_.move_files;
65
- for (auto& f : files_to_import_) {
66
- const auto path_outside_db = f.external_file_path;
67
- const auto path_inside_db = TableFileName(
68
- cfd_->ioptions()->cf_paths, f.fd.GetNumber(), f.fd.GetPathId());
69
-
70
- if (hardlink_files) {
71
- status =
72
- fs_->LinkFile(path_outside_db, path_inside_db, IOOptions(), nullptr);
73
- if (status.IsNotSupported()) {
74
- // Original file is on a different FS, use copy instead of hard linking
75
- hardlink_files = false;
76
- ROCKS_LOG_INFO(db_options_.info_log,
77
- "Try to link file %s but it's not supported : %s",
78
- f.internal_file_path.c_str(), status.ToString().c_str());
108
+
109
+ for (auto& files_to_import_per_cf : files_to_import_) {
110
+ for (auto& f : files_to_import_per_cf) {
111
+ const auto path_outside_db = f.external_file_path;
112
+ const auto path_inside_db = TableFileName(
113
+ cfd_->ioptions()->cf_paths, f.fd.GetNumber(), f.fd.GetPathId());
114
+
115
+ if (hardlink_files) {
116
+ status = fs_->LinkFile(path_outside_db, path_inside_db, IOOptions(),
117
+ nullptr);
118
+ if (status.IsNotSupported()) {
119
+ // Original file is on a different FS, use copy instead of hard
120
+ // linking
121
+ hardlink_files = false;
122
+ ROCKS_LOG_INFO(db_options_.info_log,
123
+ "Try to link file %s but it's not supported : %s",
124
+ f.internal_file_path.c_str(),
125
+ status.ToString().c_str());
126
+ }
79
127
  }
80
- }
81
- if (!hardlink_files) {
82
- status =
83
- CopyFile(fs_.get(), path_outside_db, path_inside_db, 0,
84
- db_options_.use_fsync, io_tracer_, Temperature::kUnknown);
128
+ if (!hardlink_files) {
129
+ status =
130
+ CopyFile(fs_.get(), path_outside_db, path_inside_db, 0,
131
+ db_options_.use_fsync, io_tracer_, Temperature::kUnknown);
132
+ }
133
+ if (!status.ok()) {
134
+ break;
135
+ }
136
+ f.copy_file = !hardlink_files;
137
+ f.internal_file_path = path_inside_db;
85
138
  }
86
139
  if (!status.ok()) {
87
140
  break;
88
141
  }
89
- f.copy_file = !hardlink_files;
90
- f.internal_file_path = path_inside_db;
91
142
  }
92
143
 
93
144
  if (!status.ok()) {
94
145
  // We failed, remove all files that we copied into the db
95
- for (const auto& f : files_to_import_) {
96
- if (f.internal_file_path.empty()) {
97
- break;
98
- }
99
- const auto s =
100
- fs_->DeleteFile(f.internal_file_path, IOOptions(), nullptr);
101
- if (!s.ok()) {
102
- ROCKS_LOG_WARN(db_options_.info_log,
103
- "AddFile() clean up for file %s failed : %s",
104
- f.internal_file_path.c_str(), s.ToString().c_str());
146
+ for (auto& files_to_import_per_cf : files_to_import_) {
147
+ for (auto& f : files_to_import_per_cf) {
148
+ if (f.internal_file_path.empty()) {
149
+ break;
150
+ }
151
+ const auto s =
152
+ fs_->DeleteFile(f.internal_file_path, IOOptions(), nullptr);
153
+ if (!s.ok()) {
154
+ ROCKS_LOG_WARN(db_options_.info_log,
155
+ "AddFile() clean up for file %s failed : %s",
156
+ f.internal_file_path.c_str(), s.ToString().c_str());
157
+ }
105
158
  }
106
159
  }
107
160
  }
@@ -132,32 +185,40 @@ Status ImportColumnFamilyJob::Run() {
132
185
  &cfd_->internal_comparator(), cfd_->user_comparator(),
133
186
  cfd_->NumberLevels(), cfd_->ioptions()->compaction_style,
134
187
  nullptr /* src_vstorage */, cfd_->ioptions()->force_consistency_checks,
135
- EpochNumberRequirement::kMightMissing);
188
+ EpochNumberRequirement::kMightMissing, cfd_->ioptions()->clock,
189
+ cfd_->GetLatestMutableCFOptions()->bottommost_file_compaction_delay);
136
190
  Status s;
191
+
137
192
  for (size_t i = 0; s.ok() && i < files_to_import_.size(); ++i) {
138
- const auto& f = files_to_import_[i];
139
- const auto& file_metadata = metadata_[i];
140
-
141
- uint64_t tail_size = 0;
142
- bool contain_no_data_blocks = f.table_properties.num_entries > 0 &&
143
- (f.table_properties.num_entries ==
144
- f.table_properties.num_range_deletions);
145
- if (f.table_properties.tail_start_offset > 0 || contain_no_data_blocks) {
146
- uint64_t file_size = f.fd.GetFileSize();
147
- assert(f.table_properties.tail_start_offset <= file_size);
148
- tail_size = file_size - f.table_properties.tail_start_offset;
149
- }
193
+ for (size_t j = 0; s.ok() && j < files_to_import_[i].size(); ++j) {
194
+ const auto& f = files_to_import_[i][j];
195
+ const auto& file_metadata = *metadatas_[i][j];
196
+
197
+ uint64_t tail_size = 0;
198
+ bool contain_no_data_blocks = f.table_properties.num_entries > 0 &&
199
+ (f.table_properties.num_entries ==
200
+ f.table_properties.num_range_deletions);
201
+ if (f.table_properties.tail_start_offset > 0 || contain_no_data_blocks) {
202
+ uint64_t file_size = f.fd.GetFileSize();
203
+ assert(f.table_properties.tail_start_offset <= file_size);
204
+ tail_size = file_size - f.table_properties.tail_start_offset;
205
+ }
150
206
 
151
- VersionEdit dummy_version_edit;
152
- dummy_version_edit.AddFile(
153
- file_metadata.level, f.fd.GetNumber(), f.fd.GetPathId(),
154
- f.fd.GetFileSize(), f.smallest_internal_key, f.largest_internal_key,
155
- file_metadata.smallest_seqno, file_metadata.largest_seqno, false,
156
- file_metadata.temperature, kInvalidBlobFileNumber, oldest_ancester_time,
157
- current_time, file_metadata.epoch_number, kUnknownFileChecksum,
158
- kUnknownFileChecksumFuncName, f.unique_id, 0, tail_size);
159
- s = dummy_version_builder.Apply(&dummy_version_edit);
207
+ VersionEdit dummy_version_edit;
208
+ dummy_version_edit.AddFile(
209
+ file_metadata.level, f.fd.GetNumber(), f.fd.GetPathId(),
210
+ f.fd.GetFileSize(), f.smallest_internal_key, f.largest_internal_key,
211
+ file_metadata.smallest_seqno, file_metadata.largest_seqno, false,
212
+ file_metadata.temperature, kInvalidBlobFileNumber,
213
+ oldest_ancester_time, current_time, file_metadata.epoch_number,
214
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, f.unique_id, 0,
215
+ tail_size,
216
+ static_cast<bool>(
217
+ f.table_properties.user_defined_timestamps_persisted));
218
+ s = dummy_version_builder.Apply(&dummy_version_edit);
219
+ }
160
220
  }
221
+
161
222
  if (s.ok()) {
162
223
  s = dummy_version_builder.SaveTo(&dummy_vstorage);
163
224
  }
@@ -198,26 +259,30 @@ Status ImportColumnFamilyJob::Run() {
198
259
  void ImportColumnFamilyJob::Cleanup(const Status& status) {
199
260
  if (!status.ok()) {
200
261
  // We failed to add files to the database remove all the files we copied.
201
- for (const auto& f : files_to_import_) {
202
- const auto s =
203
- fs_->DeleteFile(f.internal_file_path, IOOptions(), nullptr);
204
- if (!s.ok()) {
205
- ROCKS_LOG_WARN(db_options_.info_log,
206
- "AddFile() clean up for file %s failed : %s",
207
- f.internal_file_path.c_str(), s.ToString().c_str());
262
+ for (auto& files_to_import_per_cf : files_to_import_) {
263
+ for (auto& f : files_to_import_per_cf) {
264
+ const auto s =
265
+ fs_->DeleteFile(f.internal_file_path, IOOptions(), nullptr);
266
+ if (!s.ok()) {
267
+ ROCKS_LOG_WARN(db_options_.info_log,
268
+ "AddFile() clean up for file %s failed : %s",
269
+ f.internal_file_path.c_str(), s.ToString().c_str());
270
+ }
208
271
  }
209
272
  }
210
273
  } else if (status.ok() && import_options_.move_files) {
211
274
  // The files were moved and added successfully, remove original file links
212
- for (IngestedFileInfo& f : files_to_import_) {
213
- const auto s =
214
- fs_->DeleteFile(f.external_file_path, IOOptions(), nullptr);
215
- if (!s.ok()) {
216
- ROCKS_LOG_WARN(
217
- db_options_.info_log,
218
- "%s was added to DB successfully but failed to remove original "
219
- "file link : %s",
220
- f.external_file_path.c_str(), s.ToString().c_str());
275
+ for (auto& files_to_import_per_cf : files_to_import_) {
276
+ for (auto& f : files_to_import_per_cf) {
277
+ const auto s =
278
+ fs_->DeleteFile(f.external_file_path, IOOptions(), nullptr);
279
+ if (!s.ok()) {
280
+ ROCKS_LOG_WARN(
281
+ db_options_.info_log,
282
+ "%s was added to DB successfully but failed to remove original "
283
+ "file link : %s",
284
+ f.external_file_path.c_str(), s.ToString().c_str());
285
+ }
221
286
  }
222
287
  }
223
288
  }
@@ -256,6 +321,9 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
256
321
  sst_file_reader.reset(new RandomAccessFileReader(
257
322
  std::move(sst_file), external_file, nullptr /*Env*/, io_tracer_));
258
323
 
324
+ // TODO(yuzhangyu): User-defined timestamps doesn't support importing column
325
+ // family. Pass in the correct `user_defined_timestamps_persisted` flag for
326
+ // creating `TableReaderOptions` when the support is there.
259
327
  status = cfd_->ioptions()->table_factory->NewTableReader(
260
328
  TableReaderOptions(
261
329
  *cfd_->ioptions(), sv->mutable_cf_options.prefix_extractor,
@@ -361,4 +429,4 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
361
429
 
362
430
  return status;
363
431
  }
364
- } // namespace ROCKSDB_NAMESPACE
432
+ } // namespace ROCKSDB_NAMESPACE
@@ -25,13 +25,22 @@ class SystemClock;
25
25
  // Imports a set of sst files as is into a new column family. Logic is similar
26
26
  // to ExternalSstFileIngestionJob.
27
27
  class ImportColumnFamilyJob {
28
+ // All file information of an imported CF, mainly used to
29
+ // calculate whether there is overlap between CFs
30
+ struct ColumnFamilyIngestFileInfo {
31
+ // Smallest internal key in cf
32
+ InternalKey smallest_internal_key;
33
+ // Largest internal key in cf
34
+ InternalKey largest_internal_key;
35
+ };
36
+
28
37
  public:
29
- ImportColumnFamilyJob(VersionSet* versions, ColumnFamilyData* cfd,
30
- const ImmutableDBOptions& db_options,
31
- const EnvOptions& env_options,
32
- const ImportColumnFamilyOptions& import_options,
33
- const std::vector<LiveFileMetaData>& metadata,
34
- const std::shared_ptr<IOTracer>& io_tracer)
38
+ ImportColumnFamilyJob(
39
+ VersionSet* versions, ColumnFamilyData* cfd,
40
+ const ImmutableDBOptions& db_options, const EnvOptions& env_options,
41
+ const ImportColumnFamilyOptions& import_options,
42
+ const std::vector<std::vector<LiveFileMetaData*>>& metadatas,
43
+ const std::shared_ptr<IOTracer>& io_tracer)
35
44
  : clock_(db_options.clock),
36
45
  versions_(versions),
37
46
  cfd_(cfd),
@@ -39,7 +48,7 @@ class ImportColumnFamilyJob {
39
48
  fs_(db_options_.fs, io_tracer),
40
49
  env_options_(env_options),
41
50
  import_options_(import_options),
42
- metadata_(metadata),
51
+ metadatas_(metadatas),
43
52
  io_tracer_(io_tracer) {}
44
53
 
45
54
  // Prepare the job by copying external files into the DB.
@@ -54,7 +63,7 @@ class ImportColumnFamilyJob {
54
63
 
55
64
  VersionEdit* edit() { return &edit_; }
56
65
 
57
- const autovector<IngestedFileInfo>& files_to_import() const {
66
+ const std::vector<std::vector<IngestedFileInfo>>& files_to_import() const {
58
67
  return files_to_import_;
59
68
  }
60
69
 
@@ -72,10 +81,10 @@ class ImportColumnFamilyJob {
72
81
  const ImmutableDBOptions& db_options_;
73
82
  const FileSystemPtr fs_;
74
83
  const EnvOptions& env_options_;
75
- autovector<IngestedFileInfo> files_to_import_;
84
+ std::vector<std::vector<IngestedFileInfo>> files_to_import_;
76
85
  VersionEdit edit_;
77
86
  const ImportColumnFamilyOptions& import_options_;
78
- std::vector<LiveFileMetaData> metadata_;
87
+ const std::vector<std::vector<LiveFileMetaData*>> metadatas_;
79
88
  const std::shared_ptr<IOTracer> io_tracer_;
80
89
  };
81
90
 
@@ -22,10 +22,13 @@ class ImportColumnFamilyTest : public DBTestBase {
22
22
  : DBTestBase("import_column_family_test", /*env_do_fsync=*/true) {
23
23
  sst_files_dir_ = dbname_ + "/sst_files/";
24
24
  export_files_dir_ = test::PerThreadDBPath(env_, "export");
25
+ export_files_dir2_ = test::PerThreadDBPath(env_, "export2");
26
+
25
27
  DestroyAndRecreateExternalSSTFilesDir();
26
28
  import_cfh_ = nullptr;
27
29
  import_cfh2_ = nullptr;
28
30
  metadata_ptr_ = nullptr;
31
+ metadata_ptr2_ = nullptr;
29
32
  }
30
33
 
31
34
  ~ImportColumnFamilyTest() {
@@ -43,14 +46,21 @@ class ImportColumnFamilyTest : public DBTestBase {
43
46
  delete metadata_ptr_;
44
47
  metadata_ptr_ = nullptr;
45
48
  }
49
+
50
+ if (metadata_ptr2_) {
51
+ delete metadata_ptr2_;
52
+ metadata_ptr2_ = nullptr;
53
+ }
46
54
  EXPECT_OK(DestroyDir(env_, sst_files_dir_));
47
55
  EXPECT_OK(DestroyDir(env_, export_files_dir_));
56
+ EXPECT_OK(DestroyDir(env_, export_files_dir2_));
48
57
  }
49
58
 
50
59
  void DestroyAndRecreateExternalSSTFilesDir() {
51
60
  EXPECT_OK(DestroyDir(env_, sst_files_dir_));
52
61
  EXPECT_OK(env_->CreateDir(sst_files_dir_));
53
62
  EXPECT_OK(DestroyDir(env_, export_files_dir_));
63
+ EXPECT_OK(DestroyDir(env_, export_files_dir2_));
54
64
  }
55
65
 
56
66
  LiveFileMetaData LiveFileMetaDataInit(std::string name, std::string path,
@@ -69,9 +79,11 @@ class ImportColumnFamilyTest : public DBTestBase {
69
79
  protected:
70
80
  std::string sst_files_dir_;
71
81
  std::string export_files_dir_;
82
+ std::string export_files_dir2_;
72
83
  ColumnFamilyHandle* import_cfh_;
73
84
  ColumnFamilyHandle* import_cfh2_;
74
85
  ExportImportFilesMetaData* metadata_ptr_;
86
+ ExportImportFilesMetaData* metadata_ptr2_;
75
87
  };
76
88
 
77
89
  TEST_F(ImportColumnFamilyTest, ImportSSTFileWriterFiles) {
@@ -738,6 +750,137 @@ TEST_F(ImportColumnFamilyTest, ImportColumnFamilyNegativeTest) {
738
750
  }
739
751
  }
740
752
 
753
+ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyTest) {
754
+ Options options = CurrentOptions();
755
+ CreateAndReopenWithCF({"koko"}, options);
756
+
757
+ for (int i = 0; i < 100; ++i) {
758
+ ASSERT_OK(Put(1, Key(i), Key(i) + "_val"));
759
+ }
760
+ ASSERT_OK(Flush(1));
761
+
762
+ ASSERT_OK(
763
+ db_->CompactRange(CompactRangeOptions(), handles_[1], nullptr, nullptr));
764
+
765
+ // Overwrite the value in the same set of keys.
766
+ for (int i = 0; i < 100; ++i) {
767
+ ASSERT_OK(Put(1, Key(i), Key(i) + "_overwrite"));
768
+ }
769
+
770
+ // Flush again to create another L0 file. It should have higher sequencer.
771
+ ASSERT_OK(Flush(1));
772
+
773
+ Checkpoint* checkpoint1;
774
+ Checkpoint* checkpoint2;
775
+ ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
776
+ ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
777
+ &metadata_ptr_));
778
+
779
+ // Create a new db and import the files.
780
+ DB* db_copy;
781
+ ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
782
+ ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
783
+ ColumnFamilyHandle* copy_cfh = nullptr;
784
+ ASSERT_OK(db_copy->CreateColumnFamily(options, "koko", &copy_cfh));
785
+ WriteOptions wo;
786
+ for (int i = 100; i < 200; ++i) {
787
+ ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_val"));
788
+ }
789
+ ASSERT_OK(db_copy->Flush(FlushOptions()));
790
+ for (int i = 100; i < 200; ++i) {
791
+ ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_overwrite"));
792
+ }
793
+ ASSERT_OK(db_copy->Flush(FlushOptions()));
794
+ for (int i = 100; i < 200; ++i) {
795
+ ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_overwrite2"));
796
+ }
797
+ ASSERT_OK(db_copy->Flush(FlushOptions()));
798
+
799
+ // Flush again to create another L0 file. It should have higher sequencer.
800
+ ASSERT_OK(Checkpoint::Create(db_copy, &checkpoint2));
801
+ ASSERT_OK(checkpoint2->ExportColumnFamily(copy_cfh, export_files_dir2_,
802
+ &metadata_ptr2_));
803
+
804
+ ASSERT_NE(metadata_ptr_, nullptr);
805
+ ASSERT_NE(metadata_ptr2_, nullptr);
806
+ delete checkpoint1;
807
+ delete checkpoint2;
808
+ ImportColumnFamilyOptions import_options;
809
+ import_options.move_files = false;
810
+
811
+ std::vector<const ExportImportFilesMetaData*> metadatas = {metadata_ptr_,
812
+ metadata_ptr2_};
813
+ ASSERT_OK(db_->CreateColumnFamilyWithImport(options, "toto", import_options,
814
+ metadatas, &import_cfh_));
815
+
816
+ std::string value1, value2;
817
+ for (int i = 0; i < 100; ++i) {
818
+ ASSERT_OK(db_->Get(ReadOptions(), import_cfh_, Key(i), &value1));
819
+ ASSERT_EQ(Get(1, Key(i)), value1);
820
+ }
821
+
822
+ for (int i = 100; i < 200; ++i) {
823
+ ASSERT_OK(db_->Get(ReadOptions(), import_cfh_, Key(i), &value1));
824
+ ASSERT_OK(db_copy->Get(ReadOptions(), copy_cfh, Key(i), &value2));
825
+ ASSERT_EQ(value1, value2);
826
+ }
827
+
828
+ ASSERT_OK(db_copy->DropColumnFamily(copy_cfh));
829
+ ASSERT_OK(db_copy->DestroyColumnFamilyHandle(copy_cfh));
830
+ delete db_copy;
831
+ ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
832
+ }
833
+
834
+ TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyWithOverlap) {
835
+ Options options = CurrentOptions();
836
+ CreateAndReopenWithCF({"koko"}, options);
837
+
838
+ for (int i = 0; i < 100; ++i) {
839
+ ASSERT_OK(Put(1, Key(i), Key(i) + "_val"));
840
+ }
841
+
842
+ Checkpoint* checkpoint1;
843
+ Checkpoint* checkpoint2;
844
+ ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
845
+ ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
846
+ &metadata_ptr_));
847
+
848
+ // Create a new db and import the files.
849
+ DB* db_copy;
850
+ ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
851
+ ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
852
+ ColumnFamilyHandle* copy_cfh = nullptr;
853
+ ASSERT_OK(db_copy->CreateColumnFamily(options, "koko", &copy_cfh));
854
+ WriteOptions wo;
855
+ for (int i = 50; i < 150; ++i) {
856
+ ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_val"));
857
+ }
858
+ ASSERT_OK(db_copy->Flush(FlushOptions()));
859
+
860
+ // Flush again to create another L0 file. It should have higher sequencer.
861
+ ASSERT_OK(Checkpoint::Create(db_copy, &checkpoint2));
862
+ ASSERT_OK(checkpoint2->ExportColumnFamily(copy_cfh, export_files_dir2_,
863
+ &metadata_ptr2_));
864
+
865
+ ASSERT_NE(metadata_ptr_, nullptr);
866
+ ASSERT_NE(metadata_ptr2_, nullptr);
867
+ delete checkpoint1;
868
+ delete checkpoint2;
869
+ ImportColumnFamilyOptions import_options;
870
+ import_options.move_files = false;
871
+
872
+ std::vector<const ExportImportFilesMetaData*> metadatas = {metadata_ptr_,
873
+ metadata_ptr2_};
874
+
875
+ ASSERT_EQ(db_->CreateColumnFamilyWithImport(options, "toto", import_options,
876
+ metadatas, &import_cfh_),
877
+ Status::InvalidArgument("CFs have overlapping ranges"));
878
+
879
+ ASSERT_OK(db_copy->DropColumnFamily(copy_cfh));
880
+ ASSERT_OK(db_copy->DestroyColumnFamilyHandle(copy_cfh));
881
+ delete db_copy;
882
+ ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
883
+ }
741
884
  } // namespace ROCKSDB_NAMESPACE
742
885
 
743
886
  int main(int argc, char** argv) {
@@ -291,6 +291,7 @@ static const std::string min_obsolete_sst_number_to_keep_str =
291
291
  static const std::string base_level_str = "base-level";
292
292
  static const std::string total_sst_files_size = "total-sst-files-size";
293
293
  static const std::string live_sst_files_size = "live-sst-files-size";
294
+ static const std::string obsolete_sst_files_size = "obsolete-sst-files-size";
294
295
  static const std::string live_sst_files_size_at_temperature =
295
296
  "live-sst-files-size-at-temperature";
296
297
  static const std::string estimate_pending_comp_bytes =
@@ -394,6 +395,8 @@ const std::string DB::Properties::kTotalSstFilesSize =
394
395
  rocksdb_prefix + total_sst_files_size;
395
396
  const std::string DB::Properties::kLiveSstFilesSize =
396
397
  rocksdb_prefix + live_sst_files_size;
398
+ const std::string DB::Properties::kObsoleteSstFilesSize =
399
+ rocksdb_prefix + obsolete_sst_files_size;
397
400
  const std::string DB::Properties::kBaseLevel = rocksdb_prefix + base_level_str;
398
401
  const std::string DB::Properties::kEstimatePendingCompactionBytes =
399
402
  rocksdb_prefix + estimate_pending_comp_bytes;
@@ -565,6 +568,9 @@ const UnorderedMap<std::string, DBPropertyInfo>
565
568
  {DB::Properties::kLiveSstFilesSizeAtTemperature,
566
569
  {false, &InternalStats::HandleLiveSstFilesSizeAtTemperature, nullptr,
567
570
  nullptr, nullptr}},
571
+ {DB::Properties::kObsoleteSstFilesSize,
572
+ {false, nullptr, &InternalStats::HandleObsoleteSstFilesSize, nullptr,
573
+ nullptr}},
568
574
  {DB::Properties::kEstimatePendingCompactionBytes,
569
575
  {false, nullptr, &InternalStats::HandleEstimatePendingCompactionBytes,
570
576
  nullptr, nullptr}},
@@ -1395,6 +1401,12 @@ bool InternalStats::HandleLiveSstFilesSize(uint64_t* value, DBImpl* /*db*/,
1395
1401
  return true;
1396
1402
  }
1397
1403
 
1404
+ bool InternalStats::HandleObsoleteSstFilesSize(uint64_t* value, DBImpl* db,
1405
+ Version* /*version*/) {
1406
+ *value = db->GetObsoleteSstFilesSize();
1407
+ return true;
1408
+ }
1409
+
1398
1410
  bool InternalStats::HandleEstimatePendingCompactionBytes(uint64_t* value,
1399
1411
  DBImpl* /*db*/,
1400
1412
  Version* /*version*/) {
@@ -1738,7 +1750,7 @@ void InternalStats::DumpCFMapStats(
1738
1750
  assert(vstorage);
1739
1751
 
1740
1752
  int num_levels_to_check =
1741
- (cfd_->ioptions()->compaction_style != kCompactionStyleFIFO)
1753
+ (cfd_->ioptions()->compaction_style == kCompactionStyleLevel)
1742
1754
  ? vstorage->num_levels() - 1
1743
1755
  : 1;
1744
1756
 
@@ -819,6 +819,8 @@ class InternalStats {
819
819
  bool HandleBaseLevel(uint64_t* value, DBImpl* db, Version* version);
820
820
  bool HandleTotalSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
821
821
  bool HandleLiveSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
822
+ bool HandleObsoleteSstFilesSize(uint64_t* value, DBImpl* db,
823
+ Version* version);
822
824
  bool HandleEstimatePendingCompactionBytes(uint64_t* value, DBImpl* db,
823
825
  Version* version);
824
826
  bool HandleEstimateTableReadersMem(uint64_t* value, DBImpl* db,
@@ -551,6 +551,7 @@ class TestCompactionReasonListener : public EventListener {
551
551
 
552
552
  TEST_F(EventListenerTest, CompactionReasonLevel) {
553
553
  Options options;
554
+ options.level_compaction_dynamic_level_bytes = false;
554
555
  options.env = CurrentOptions().env;
555
556
  options.create_if_missing = true;
556
557
  options.memtable_factory.reset(test::NewSpecialSkipListFactory(
@@ -581,7 +582,7 @@ TEST_F(EventListenerTest, CompactionReasonLevel) {
581
582
  for (int k = 1; k <= 30; k++) {
582
583
  ASSERT_OK(Put(Key(k), Key(k)));
583
584
  if (k % 10 == 0) {
584
- Flush();
585
+ ASSERT_OK(Flush());
585
586
  }
586
587
  }
587
588
 
@@ -20,6 +20,7 @@
20
20
  #include "rocksdb/slice.h"
21
21
  #include "rocksdb/status.h"
22
22
  #include "util/compression.h"
23
+ #include "util/hash_containers.h"
23
24
  #include "util/udt_util.h"
24
25
  #include "util/xxhash.h"
25
26
 
@@ -79,7 +80,7 @@ class Reader {
79
80
 
80
81
  // Return the recorded user-defined timestamp size that have been read so
81
82
  // far. This only applies to WAL logs.
82
- const std::unordered_map<uint32_t, size_t>& GetRecordedTimestampSize() const {
83
+ const UnorderedMap<uint32_t, size_t>& GetRecordedTimestampSize() const {
83
84
  return recorded_cf_to_ts_sz_;
84
85
  }
85
86
 
@@ -165,7 +166,7 @@ class Reader {
165
166
 
166
167
  // The recorded user-defined timestamp sizes that have been read so far. This
167
168
  // is only for WAL logs.
168
- std::unordered_map<uint32_t, size_t> recorded_cf_to_ts_sz_;
169
+ UnorderedMap<uint32_t, size_t> recorded_cf_to_ts_sz_;
169
170
 
170
171
  // Extend record types with the following special values
171
172
  enum {