@nxtedition/rocksdb 6.0.0 → 6.0.3

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 (488) hide show
  1. package/BUILDING.md +18 -0
  2. package/binding.cc +16 -17
  3. package/binding.gyp +2 -2
  4. package/deps/rocksdb/build_version.cc +4 -10
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +26 -3
  6. package/deps/rocksdb/rocksdb/Makefile +73 -91
  7. package/deps/rocksdb/rocksdb/TARGETS +27 -2
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  10. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  13. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  14. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  15. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  16. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  17. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  18. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  19. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  20. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  21. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  22. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  23. package/deps/rocksdb/rocksdb/common.mk +30 -0
  24. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  25. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  26. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  27. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  28. package/deps/rocksdb/rocksdb/db/builder.cc +22 -7
  29. package/deps/rocksdb/rocksdb/db/c.cc +71 -0
  30. package/deps/rocksdb/rocksdb/db/c_test.c +28 -2
  31. package/deps/rocksdb/rocksdb/db/column_family.cc +12 -5
  32. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  33. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +54 -16
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +14 -2
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +85 -18
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +23 -22
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +151 -32
  47. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  48. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  49. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  50. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  51. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +404 -32
  52. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  53. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  54. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  55. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  56. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  57. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +11 -20
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +15 -1
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +12 -9
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +42 -10
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +14 -4
  68. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  69. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  70. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  71. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  72. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  73. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  74. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  75. package/deps/rocksdb/rocksdb/db/db_options_test.cc +28 -12
  76. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  77. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  78. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
  79. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +11 -6
  80. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  81. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_test.cc +60 -42
  83. package/deps/rocksdb/rocksdb/db/db_test2.cc +244 -111
  84. package/deps/rocksdb/rocksdb/db/db_test_util.cc +101 -19
  85. package/deps/rocksdb/rocksdb/db/db_test_util.h +52 -2
  86. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  87. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  88. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +5 -175
  89. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  90. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  91. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  92. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  93. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  94. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  95. package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
  96. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +91 -12
  97. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +16 -2
  98. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
  99. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  100. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  101. package/deps/rocksdb/rocksdb/db/flush_job.cc +28 -15
  102. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  103. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  104. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  105. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +14 -1
  106. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  107. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  108. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  109. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  110. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  111. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  112. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  113. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  114. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  115. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  116. package/deps/rocksdb/rocksdb/db/repair.cc +13 -2
  117. package/deps/rocksdb/rocksdb/db/repair_test.cc +37 -15
  118. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  119. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
  120. package/deps/rocksdb/rocksdb/db/table_cache.cc +20 -130
  121. package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
  122. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
  123. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  124. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +133 -133
  125. package/deps/rocksdb/rocksdb/db/version_edit.cc +22 -2
  126. package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
  127. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
  128. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -214
  129. package/deps/rocksdb/rocksdb/db/version_set.h +14 -3
  130. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
  131. package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
  132. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  133. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  134. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  135. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  136. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  137. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -6
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +44 -6
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +374 -275
  147. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  148. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  149. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  150. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  151. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  152. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  153. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  154. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  155. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  156. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  157. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  158. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  159. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  160. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  161. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  162. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
  163. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +44 -22
  164. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  165. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
  166. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  167. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  168. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +60 -40
  169. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -0
  170. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +49 -1
  172. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  173. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  174. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  176. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  177. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  178. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  180. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -3
  182. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
  184. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  185. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  186. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  188. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  189. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  190. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  191. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +378 -103
  192. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  194. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  195. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  196. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  197. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  198. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  199. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  200. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  201. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  202. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  203. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  204. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  205. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  206. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +7 -8
  207. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  208. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  209. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  210. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  211. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  212. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  213. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  214. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  215. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  216. package/deps/rocksdb/rocksdb/options/cf_options.cc +47 -38
  217. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  218. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  219. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  220. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  221. package/deps/rocksdb/rocksdb/options/db_options.cc +46 -17
  222. package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
  223. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  224. package/deps/rocksdb/rocksdb/options/options_helper.cc +86 -39
  225. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  226. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +12 -7
  227. package/deps/rocksdb/rocksdb/options/options_test.cc +222 -68
  228. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  229. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  230. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  231. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  232. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  233. package/deps/rocksdb/rocksdb/src.mk +6 -1
  234. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  235. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  236. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  237. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  238. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +23 -8
  239. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  240. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +81 -7
  241. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
  242. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +94 -726
  243. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
  244. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
  245. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -73
  247. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -5
  248. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  249. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +2 -11
  250. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
  251. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
  252. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  253. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
  254. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
  255. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  256. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  257. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -2
  258. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  259. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
  260. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  261. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +8 -4
  262. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  263. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
  264. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +65 -7
  265. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
  266. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  267. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  268. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  269. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  270. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  271. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  272. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
  273. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  274. package/deps/rocksdb/rocksdb/table/multiget_context.h +60 -13
  275. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  276. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  277. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  278. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
  279. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
  280. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  281. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  282. package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
  283. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  284. package/deps/rocksdb/rocksdb/table/unique_id.cc +84 -25
  285. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +37 -4
  286. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -1
  287. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  288. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  289. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  290. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  291. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  292. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +277 -105
  293. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  294. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  295. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  296. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  297. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  298. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  299. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +26 -4
  300. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  301. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  302. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
  303. package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
  304. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  305. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  306. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  307. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  308. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  309. package/deps/rocksdb/rocksdb/util/compression.h +56 -7
  310. package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
  311. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  312. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  313. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  314. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  315. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  316. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  317. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  318. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  319. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  320. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
  321. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  322. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  323. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  324. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  325. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  326. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  327. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  328. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  329. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  331. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  332. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  333. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  334. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  335. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  336. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  337. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  338. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  339. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  340. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  341. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  342. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  343. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  344. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  345. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  346. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  347. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  351. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  352. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  353. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  356. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  357. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  358. package/deps/rocksdb/rocksdb.gyp +47 -37
  359. package/package-lock.json +23687 -0
  360. package/package.json +2 -30
  361. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  362. package/prebuilds/darwin-x64/node.napi.node +0 -0
  363. package/prebuilds/linux-x64/node.napi.node +0 -0
  364. package/deps/liburing/liburing/README +0 -46
  365. package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
  366. package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
  367. package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
  368. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
  369. package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
  370. package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
  371. package/deps/liburing/liburing/test/Makefile +0 -312
  372. package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
  373. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
  374. package/deps/liburing/liburing/test/accept-link.c +0 -251
  375. package/deps/liburing/liburing/test/accept-reuse.c +0 -164
  376. package/deps/liburing/liburing/test/accept-test.c +0 -79
  377. package/deps/liburing/liburing/test/accept.c +0 -476
  378. package/deps/liburing/liburing/test/across-fork.c +0 -283
  379. package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
  380. package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
  381. package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
  382. package/deps/liburing/liburing/test/close-opath.c +0 -122
  383. package/deps/liburing/liburing/test/config +0 -10
  384. package/deps/liburing/liburing/test/connect.c +0 -398
  385. package/deps/liburing/liburing/test/cq-full.c +0 -96
  386. package/deps/liburing/liburing/test/cq-overflow.c +0 -294
  387. package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
  388. package/deps/liburing/liburing/test/cq-ready.c +0 -94
  389. package/deps/liburing/liburing/test/cq-size.c +0 -58
  390. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
  391. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
  392. package/deps/liburing/liburing/test/defer.c +0 -307
  393. package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
  394. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
  395. package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
  396. package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
  397. package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
  398. package/deps/liburing/liburing/test/eventfd.c +0 -112
  399. package/deps/liburing/liburing/test/fadvise.c +0 -202
  400. package/deps/liburing/liburing/test/fallocate.c +0 -249
  401. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
  402. package/deps/liburing/liburing/test/file-register.c +0 -843
  403. package/deps/liburing/liburing/test/file-update.c +0 -173
  404. package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
  405. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
  406. package/deps/liburing/liburing/test/fixed-link.c +0 -90
  407. package/deps/liburing/liburing/test/fsync.c +0 -224
  408. package/deps/liburing/liburing/test/hardlink.c +0 -136
  409. package/deps/liburing/liburing/test/helpers.c +0 -135
  410. package/deps/liburing/liburing/test/helpers.h +0 -67
  411. package/deps/liburing/liburing/test/io-cancel.c +0 -537
  412. package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
  413. package/deps/liburing/liburing/test/io_uring_register.c +0 -664
  414. package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
  415. package/deps/liburing/liburing/test/iopoll.c +0 -366
  416. package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
  417. package/deps/liburing/liburing/test/lfs-openat.c +0 -273
  418. package/deps/liburing/liburing/test/link-timeout.c +0 -1107
  419. package/deps/liburing/liburing/test/link.c +0 -496
  420. package/deps/liburing/liburing/test/link_drain.c +0 -229
  421. package/deps/liburing/liburing/test/madvise.c +0 -195
  422. package/deps/liburing/liburing/test/mkdir.c +0 -108
  423. package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
  424. package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
  425. package/deps/liburing/liburing/test/nop.c +0 -115
  426. package/deps/liburing/liburing/test/open-close.c +0 -146
  427. package/deps/liburing/liburing/test/openat2.c +0 -240
  428. package/deps/liburing/liburing/test/personality.c +0 -204
  429. package/deps/liburing/liburing/test/pipe-eof.c +0 -81
  430. package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
  431. package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
  432. package/deps/liburing/liburing/test/poll-cancel.c +0 -135
  433. package/deps/liburing/liburing/test/poll-link.c +0 -227
  434. package/deps/liburing/liburing/test/poll-many.c +0 -208
  435. package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
  436. package/deps/liburing/liburing/test/poll-ring.c +0 -48
  437. package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
  438. package/deps/liburing/liburing/test/poll.c +0 -109
  439. package/deps/liburing/liburing/test/probe.c +0 -137
  440. package/deps/liburing/liburing/test/read-write.c +0 -876
  441. package/deps/liburing/liburing/test/register-restrictions.c +0 -633
  442. package/deps/liburing/liburing/test/rename.c +0 -134
  443. package/deps/liburing/liburing/test/ring-leak.c +0 -173
  444. package/deps/liburing/liburing/test/ring-leak2.c +0 -249
  445. package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
  446. package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
  447. package/deps/liburing/liburing/test/runtests.sh +0 -170
  448. package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
  449. package/deps/liburing/liburing/test/self.c +0 -91
  450. package/deps/liburing/liburing/test/send_recv.c +0 -291
  451. package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
  452. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
  453. package/deps/liburing/liburing/test/shared-wq.c +0 -84
  454. package/deps/liburing/liburing/test/short-read.c +0 -75
  455. package/deps/liburing/liburing/test/shutdown.c +0 -163
  456. package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
  457. package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
  458. package/deps/liburing/liburing/test/socket-rw.c +0 -147
  459. package/deps/liburing/liburing/test/splice.c +0 -511
  460. package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
  461. package/deps/liburing/liburing/test/sq-full.c +0 -45
  462. package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
  463. package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
  464. package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
  465. package/deps/liburing/liburing/test/sq-space_left.c +0 -159
  466. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
  467. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
  468. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
  469. package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
  470. package/deps/liburing/liburing/test/statx.c +0 -172
  471. package/deps/liburing/liburing/test/stdout.c +0 -232
  472. package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
  473. package/deps/liburing/liburing/test/submit-reuse.c +0 -239
  474. package/deps/liburing/liburing/test/symlink.c +0 -116
  475. package/deps/liburing/liburing/test/teardowns.c +0 -58
  476. package/deps/liburing/liburing/test/thread-exit.c +0 -131
  477. package/deps/liburing/liburing/test/timeout-new.c +0 -246
  478. package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
  479. package/deps/liburing/liburing/test/timeout.c +0 -1354
  480. package/deps/liburing/liburing/test/unlink.c +0 -111
  481. package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
  482. package/deps/rocksdb/rocksdb/README.md +0 -32
  483. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  484. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  485. package/deps/rocksdb/rocksdb/port/README +0 -10
  486. package/deps/rocksdb/rocksdb/python.mk +0 -9
  487. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  488. package/prebuilds/linux-arm64/node.napi.node +0 -0
@@ -454,7 +454,7 @@ TEST_F(DBTestCompactionFilter, CompactionFilterDeletesAll) {
454
454
  // put some data
455
455
  for (int table = 0; table < 4; ++table) {
456
456
  for (int i = 0; i < 10 + table; ++i) {
457
- ASSERT_OK(Put(ToString(table * 100 + i), "val"));
457
+ ASSERT_OK(Put(std::to_string(table * 100 + i), "val"));
458
458
  }
459
459
  ASSERT_OK(Flush());
460
460
  }
@@ -755,7 +755,7 @@ TEST_F(DBTestCompactionFilter, CompactionFilterContextCfId) {
755
755
  #ifndef ROCKSDB_LITE
756
756
  // Compaction filters aplies to all records, regardless snapshots.
757
757
  TEST_F(DBTestCompactionFilter, CompactionFilterIgnoreSnapshot) {
758
- std::string five = ToString(5);
758
+ std::string five = std::to_string(5);
759
759
  Options options = CurrentOptions();
760
760
  options.compaction_filter_factory = std::make_shared<DeleteISFilterFactory>();
761
761
  options.disable_auto_compactions = true;
@@ -766,7 +766,7 @@ TEST_F(DBTestCompactionFilter, CompactionFilterIgnoreSnapshot) {
766
766
  const Snapshot* snapshot = nullptr;
767
767
  for (int table = 0; table < 4; ++table) {
768
768
  for (int i = 0; i < 10; ++i) {
769
- ASSERT_OK(Put(ToString(table * 100 + i), "val"));
769
+ ASSERT_OK(Put(std::to_string(table * 100 + i), "val"));
770
770
  }
771
771
  ASSERT_OK(Flush());
772
772
 
@@ -968,6 +968,71 @@ TEST_F(DBTestCompactionFilter, IgnoreSnapshotsFalseRecovery) {
968
968
  ASSERT_TRUE(TryReopen(options).IsNotSupported());
969
969
  }
970
970
 
971
+ TEST_F(DBTestCompactionFilter, DropKeyWithSingleDelete) {
972
+ Options options = GetDefaultOptions();
973
+ options.create_if_missing = true;
974
+
975
+ Reopen(options);
976
+
977
+ ASSERT_OK(Put("a", "v0"));
978
+ ASSERT_OK(Put("b", "v0"));
979
+ const Snapshot* snapshot = db_->GetSnapshot();
980
+
981
+ ASSERT_OK(SingleDelete("b"));
982
+ ASSERT_OK(Flush());
983
+
984
+ {
985
+ CompactRangeOptions cro;
986
+ cro.change_level = true;
987
+ cro.target_level = options.num_levels - 1;
988
+ ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
989
+ }
990
+
991
+ db_->ReleaseSnapshot(snapshot);
992
+ Close();
993
+
994
+ class DeleteFilterV2 : public CompactionFilter {
995
+ public:
996
+ Decision FilterV2(int /*level*/, const Slice& key, ValueType /*value_type*/,
997
+ const Slice& /*existing_value*/,
998
+ std::string* /*new_value*/,
999
+ std::string* /*skip_until*/) const override {
1000
+ if (key.starts_with("b")) {
1001
+ return Decision::kPurge;
1002
+ }
1003
+ return Decision::kRemove;
1004
+ }
1005
+
1006
+ const char* Name() const override { return "DeleteFilterV2"; }
1007
+ } delete_filter_v2;
1008
+
1009
+ options.compaction_filter = &delete_filter_v2;
1010
+ options.level0_file_num_compaction_trigger = 2;
1011
+ Reopen(options);
1012
+
1013
+ ASSERT_OK(Put("b", "v1"));
1014
+ ASSERT_OK(Put("x", "v1"));
1015
+ ASSERT_OK(Flush());
1016
+
1017
+ ASSERT_OK(Put("r", "v1"));
1018
+ ASSERT_OK(Put("z", "v1"));
1019
+ ASSERT_OK(Flush());
1020
+
1021
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
1022
+
1023
+ Close();
1024
+
1025
+ options.compaction_filter = nullptr;
1026
+ Reopen(options);
1027
+ ASSERT_OK(SingleDelete("b"));
1028
+ ASSERT_OK(Flush());
1029
+ {
1030
+ CompactRangeOptions cro;
1031
+ cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
1032
+ ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
1033
+ }
1034
+ }
1035
+
971
1036
  } // namespace ROCKSDB_NAMESPACE
972
1037
 
973
1038
  int main(int argc, char** argv) {
@@ -2409,6 +2409,30 @@ TEST_P(DBCompactionTestWithParam, LevelCompactionCFPathUse) {
2409
2409
 
2410
2410
  check_getvalues();
2411
2411
 
2412
+ { // Also verify GetLiveFilesStorageInfo with db_paths / cf_paths
2413
+ std::vector<LiveFileStorageInfo> new_infos;
2414
+ LiveFilesStorageInfoOptions lfsio;
2415
+ lfsio.wal_size_for_flush = UINT64_MAX; // no flush
2416
+ ASSERT_OK(db_->GetLiveFilesStorageInfo(lfsio, &new_infos));
2417
+ std::unordered_map<std::string, int> live_sst_by_dir;
2418
+ for (auto& info : new_infos) {
2419
+ if (info.file_type == kTableFile) {
2420
+ live_sst_by_dir[info.directory]++;
2421
+ // Verify file on disk (no directory confusion)
2422
+ uint64_t size;
2423
+ ASSERT_OK(env_->GetFileSize(
2424
+ info.directory + "/" + info.relative_filename, &size));
2425
+ ASSERT_EQ(info.size, size);
2426
+ }
2427
+ }
2428
+ ASSERT_EQ(3U * 3U, live_sst_by_dir.size());
2429
+ for (auto& paths : {options.db_paths, cf_opt1.cf_paths, cf_opt2.cf_paths}) {
2430
+ ASSERT_EQ(1, live_sst_by_dir[paths[0].path]);
2431
+ ASSERT_EQ(4, live_sst_by_dir[paths[1].path]);
2432
+ ASSERT_EQ(2, live_sst_by_dir[paths[2].path]);
2433
+ }
2434
+ }
2435
+
2412
2436
  ReopenWithColumnFamilies({"default", "one", "two"}, option_vector);
2413
2437
 
2414
2438
  check_getvalues();
@@ -2793,7 +2817,7 @@ TEST_P(DBCompactionTestWithParam, DISABLED_CompactFilesOnLevelCompaction) {
2793
2817
 
2794
2818
  Random rnd(301);
2795
2819
  for (int key = 64 * kEntriesPerBuffer; key >= 0; --key) {
2796
- ASSERT_OK(Put(1, ToString(key), rnd.RandomString(kTestValueSize)));
2820
+ ASSERT_OK(Put(1, std::to_string(key), rnd.RandomString(kTestValueSize)));
2797
2821
  }
2798
2822
  ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[1]));
2799
2823
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
@@ -2825,7 +2849,7 @@ TEST_P(DBCompactionTestWithParam, DISABLED_CompactFilesOnLevelCompaction) {
2825
2849
 
2826
2850
  // make sure all key-values are still there.
2827
2851
  for (int key = 64 * kEntriesPerBuffer; key >= 0; --key) {
2828
- ASSERT_NE(Get(1, ToString(key)), "NOT_FOUND");
2852
+ ASSERT_NE(Get(1, std::to_string(key)), "NOT_FOUND");
2829
2853
  }
2830
2854
  }
2831
2855
 
@@ -4380,7 +4404,8 @@ TEST_F(DBCompactionTest, LevelPeriodicCompactionWithCompactionFilters) {
4380
4404
  for (CompactionFilterType comp_filter_type :
4381
4405
  {kUseCompactionFilter, kUseCompactionFilterFactory}) {
4382
4406
  // Assert that periodic compactions are not enabled.
4383
- ASSERT_EQ(port::kMaxUint64 - 1, options.periodic_compaction_seconds);
4407
+ ASSERT_EQ(std::numeric_limits<uint64_t>::max() - 1,
4408
+ options.periodic_compaction_seconds);
4384
4409
 
4385
4410
  if (comp_filter_type == kUseCompactionFilter) {
4386
4411
  options.compaction_filter = &test_compaction_filter;
@@ -4643,9 +4668,9 @@ TEST_F(DBCompactionTest, CompactRangeSkipFlushAfterDelay) {
4643
4668
  });
4644
4669
 
4645
4670
  TEST_SYNC_POINT("DBCompactionTest::CompactRangeSkipFlushAfterDelay:PreFlush");
4646
- ASSERT_OK(Put(ToString(0), rnd.RandomString(1024)));
4671
+ ASSERT_OK(Put(std::to_string(0), rnd.RandomString(1024)));
4647
4672
  ASSERT_OK(dbfull()->Flush(flush_opts));
4648
- ASSERT_OK(Put(ToString(0), rnd.RandomString(1024)));
4673
+ ASSERT_OK(Put(std::to_string(0), rnd.RandomString(1024)));
4649
4674
  TEST_SYNC_POINT("DBCompactionTest::CompactRangeSkipFlushAfterDelay:PostFlush");
4650
4675
  manual_compaction_thread.join();
4651
4676
 
@@ -4654,7 +4679,7 @@ TEST_F(DBCompactionTest, CompactRangeSkipFlushAfterDelay) {
4654
4679
  std::string num_keys_in_memtable;
4655
4680
  ASSERT_TRUE(db_->GetProperty(DB::Properties::kNumEntriesActiveMemTable,
4656
4681
  &num_keys_in_memtable));
4657
- ASSERT_EQ(ToString(1), num_keys_in_memtable);
4682
+ ASSERT_EQ(std::to_string(1), num_keys_in_memtable);
4658
4683
 
4659
4684
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
4660
4685
  }
@@ -4803,7 +4828,7 @@ TEST_F(DBCompactionTest, SubcompactionEvent) {
4803
4828
  for (int i = 0; i < 4; i++) {
4804
4829
  for (int j = 0; j < 10; j++) {
4805
4830
  int key_id = i * 10 + j;
4806
- ASSERT_OK(Put(Key(key_id), "value" + ToString(key_id)));
4831
+ ASSERT_OK(Put(Key(key_id), "value" + std::to_string(key_id)));
4807
4832
  }
4808
4833
  ASSERT_OK(Flush());
4809
4834
  }
@@ -4813,7 +4838,7 @@ TEST_F(DBCompactionTest, SubcompactionEvent) {
4813
4838
  for (int i = 0; i < 2; i++) {
4814
4839
  for (int j = 0; j < 10; j++) {
4815
4840
  int key_id = i * 20 + j * 2;
4816
- ASSERT_OK(Put(Key(key_id), "value" + ToString(key_id)));
4841
+ ASSERT_OK(Put(Key(key_id), "value" + std::to_string(key_id)));
4817
4842
  }
4818
4843
  ASSERT_OK(Flush());
4819
4844
  }
@@ -5805,7 +5830,7 @@ TEST_P(DBCompactionTestWithBottommostParam, SequenceKeysManualCompaction) {
5805
5830
  }
5806
5831
  ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
5807
5832
 
5808
- ASSERT_EQ(ToString(kSstNum), FilesPerLevel(0));
5833
+ ASSERT_EQ(std::to_string(kSstNum), FilesPerLevel(0));
5809
5834
 
5810
5835
  auto cro = CompactRangeOptions();
5811
5836
  cro.bottommost_level_compaction = bottommost_level_compaction_;
@@ -5818,7 +5843,7 @@ TEST_P(DBCompactionTestWithBottommostParam, SequenceKeysManualCompaction) {
5818
5843
  ASSERT_EQ("0,1", FilesPerLevel(0));
5819
5844
  } else {
5820
5845
  // Just trivial move from level 0 -> 1
5821
- ASSERT_EQ("0," + ToString(kSstNum), FilesPerLevel(0));
5846
+ ASSERT_EQ("0," + std::to_string(kSstNum), FilesPerLevel(0));
5822
5847
  }
5823
5848
  }
5824
5849
 
@@ -7149,7 +7174,7 @@ TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFull) {
7149
7174
  ASSERT_OK(Put(Key(2), "value2"));
7150
7175
  ASSERT_OK(Flush());
7151
7176
  }
7152
- ASSERT_EQ(ToString(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
7177
+ ASSERT_EQ(std::to_string(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
7153
7178
 
7154
7179
  db_->DisableManualCompaction();
7155
7180
 
@@ -7206,7 +7231,7 @@ TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFullDBClose) {
7206
7231
  ASSERT_OK(Put(Key(2), "value2"));
7207
7232
  ASSERT_OK(Flush());
7208
7233
  }
7209
- ASSERT_EQ(ToString(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
7234
+ ASSERT_EQ(std::to_string(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
7210
7235
 
7211
7236
  db_->DisableManualCompaction();
7212
7237
 
@@ -7266,7 +7291,7 @@ TEST_F(DBCompactionTest, DBCloseWithManualCompaction) {
7266
7291
  ASSERT_OK(Put(Key(2), "value2"));
7267
7292
  ASSERT_OK(Flush());
7268
7293
  }
7269
- ASSERT_EQ(ToString(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
7294
+ ASSERT_EQ(std::to_string(kNumL0Files + (kNumL0Files / 2)), FilesPerLevel(0));
7270
7295
 
7271
7296
  // Close DB with manual compaction and auto triggered compaction in the queue.
7272
7297
  auto s = db_->Close();
@@ -177,7 +177,7 @@ Status DBImpl::GetLiveFilesStorageInfo(
177
177
  VectorLogPtr live_wal_files;
178
178
  bool flush_memtable = true;
179
179
  if (!immutable_db_options_.allow_2pc) {
180
- if (opts.wal_size_for_flush == port::kMaxUint64) {
180
+ if (opts.wal_size_for_flush == std::numeric_limits<uint64_t>::max()) {
181
181
  flush_memtable = false;
182
182
  } else if (opts.wal_size_for_flush > 0) {
183
183
  // If the outstanding log files are small, we skip the flush.
@@ -2356,7 +2356,7 @@ TEST_P(DBAtomicFlushTest, PrecomputeMinLogNumberToKeepNon2PC) {
2356
2356
  ASSERT_OK(Flush(cf_ids));
2357
2357
  uint64_t log_num_after_flush = dbfull()->TEST_GetCurrentLogNumber();
2358
2358
 
2359
- uint64_t min_log_number_to_keep = port::kMaxUint64;
2359
+ uint64_t min_log_number_to_keep = std::numeric_limits<uint64_t>::max();
2360
2360
  autovector<ColumnFamilyData*> flushed_cfds;
2361
2361
  autovector<autovector<VersionEdit*>> flush_edits;
2362
2362
  for (size_t i = 0; i != num_cfs; ++i) {
@@ -567,7 +567,7 @@ Status DBImpl::CloseHelper() {
567
567
  // flushing by first checking if there is a need for
568
568
  // flushing (but need to implement something
569
569
  // else than imm()->IsFlushPending() because the output
570
- // memtables added to imm() dont trigger flushes).
570
+ // memtables added to imm() don't trigger flushes).
571
571
  if (immutable_db_options_.experimental_mempurge_threshold > 0.0) {
572
572
  Status flush_ret;
573
573
  mutex_.Unlock();
@@ -849,7 +849,8 @@ void DBImpl::PersistStats() {
849
849
  if (stats_slice_.find(stat.first) != stats_slice_.end()) {
850
850
  uint64_t delta = stat.second - stats_slice_[stat.first];
851
851
  s = batch.Put(persist_stats_cf_handle_,
852
- Slice(key, std::min(100, length)), ToString(delta));
852
+ Slice(key, std::min(100, length)),
853
+ std::to_string(delta));
853
854
  }
854
855
  }
855
856
  }
@@ -1722,17 +1723,6 @@ Status DBImpl::Get(const ReadOptions& read_options,
1722
1723
  return s;
1723
1724
  }
1724
1725
 
1725
- namespace {
1726
- class GetWithTimestampReadCallback : public ReadCallback {
1727
- public:
1728
- explicit GetWithTimestampReadCallback(SequenceNumber seq)
1729
- : ReadCallback(seq) {}
1730
- bool IsVisibleFullCheck(SequenceNumber seq) override {
1731
- return seq <= max_visible_seq_;
1732
- }
1733
- };
1734
- } // namespace
1735
-
1736
1726
  Status DBImpl::GetImpl(const ReadOptions& read_options, const Slice& key,
1737
1727
  GetImplOptions& get_impl_options) {
1738
1728
  assert(get_impl_options.value != nullptr ||
@@ -2589,7 +2579,8 @@ Status DBImpl::MultiGetImpl(
2589
2579
  ? MultiGetContext::MAX_BATCH_SIZE
2590
2580
  : keys_left;
2591
2581
  MultiGetContext ctx(sorted_keys, start_key + num_keys - keys_left,
2592
- batch_size, snapshot, read_options);
2582
+ batch_size, snapshot, read_options, GetFileSystem(),
2583
+ stats_);
2593
2584
  MultiGetRange range = ctx.GetMultiGetRange();
2594
2585
  range.AddValueSize(curr_value_size);
2595
2586
  bool lookup_current = false;
@@ -3355,7 +3346,7 @@ bool DBImpl::GetProperty(ColumnFamilyHandle* column_family,
3355
3346
  bool ret_value =
3356
3347
  GetIntPropertyInternal(cfd, *property_info, false, &int_value);
3357
3348
  if (ret_value) {
3358
- *value = ToString(int_value);
3349
+ *value = std::to_string(int_value);
3359
3350
  }
3360
3351
  return ret_value;
3361
3352
  } else if (property_info->handle_string) {
@@ -3990,8 +3981,8 @@ Status DBImpl::CheckConsistency() {
3990
3981
  } else if (fsize != md.size) {
3991
3982
  corruption_messages += "Sst file size mismatch: " + file_path +
3992
3983
  ". Size recorded in manifest " +
3993
- ToString(md.size) + ", actual size " +
3994
- ToString(fsize) + "\n";
3984
+ std::to_string(md.size) + ", actual size " +
3985
+ std::to_string(fsize) + "\n";
3995
3986
  }
3996
3987
  }
3997
3988
  }
@@ -5123,8 +5114,8 @@ Status DBImpl::VerifyChecksumInternal(const ReadOptions& read_options,
5123
5114
  fmeta->file_checksum_func_name, fname,
5124
5115
  read_options);
5125
5116
  } else {
5126
- s = ROCKSDB_NAMESPACE::VerifySstFileChecksum(opts, file_options_,
5127
- read_options, fname);
5117
+ s = ROCKSDB_NAMESPACE::VerifySstFileChecksum(
5118
+ opts, file_options_, read_options, fname, fd.largest_seqno);
5128
5119
  }
5129
5120
  RecordTick(stats_, VERIFY_CHECKSUM_READ_BYTES,
5130
5121
  IOSTATS(bytes_read) - prev_bytes_read);
@@ -5338,7 +5329,7 @@ Status DBImpl::ReserveFileNumbersBeforeIngestion(
5338
5329
 
5339
5330
  Status DBImpl::GetCreationTimeOfOldestFile(uint64_t* creation_time) {
5340
5331
  if (mutable_db_options_.max_open_files == -1) {
5341
- uint64_t oldest_time = port::kMaxUint64;
5332
+ uint64_t oldest_time = std::numeric_limits<uint64_t>::max();
5342
5333
  for (auto cfd : *versions_->GetColumnFamilySet()) {
5343
5334
  if (!cfd->IsDropped()) {
5344
5335
  uint64_t ctime;
@@ -1974,6 +1974,11 @@ class DBImpl : public DB {
1974
1974
  IOStatus CreateWAL(uint64_t log_file_num, uint64_t recycle_log_number,
1975
1975
  size_t preallocate_block_size, log::Writer** new_log);
1976
1976
 
1977
+ // Verify SST file unique id between Manifest and table properties to make
1978
+ // sure they're the same. Currently only used during DB open when
1979
+ // `verify_sst_unique_id_in_manifest = true`.
1980
+ Status VerifySstUniqueIdInManifest();
1981
+
1977
1982
  // Validate self-consistency of DB options
1978
1983
  static Status ValidateOptions(const DBOptions& db_options);
1979
1984
  // Validate self-consistency of DB options and its consistency with cf options
@@ -2299,7 +2304,7 @@ class DBImpl : public DB {
2299
2304
 
2300
2305
  static const int KEEP_LOG_FILE_NUM = 1000;
2301
2306
  // MSVC version 1800 still does not have constexpr for ::max()
2302
- static const uint64_t kNoTimeOut = port::kMaxUint64;
2307
+ static const uint64_t kNoTimeOut = std::numeric_limits<uint64_t>::max();
2303
2308
 
2304
2309
  std::string db_absolute_path_;
2305
2310
 
@@ -2395,6 +2400,15 @@ class DBImpl : public DB {
2395
2400
  std::unique_ptr<StallInterface> wbm_stall_;
2396
2401
  };
2397
2402
 
2403
+ class GetWithTimestampReadCallback : public ReadCallback {
2404
+ public:
2405
+ explicit GetWithTimestampReadCallback(SequenceNumber seq)
2406
+ : ReadCallback(seq) {}
2407
+ bool IsVisibleFullCheck(SequenceNumber seq) override {
2408
+ return seq <= max_visible_seq_;
2409
+ }
2410
+ };
2411
+
2398
2412
  extern Options SanitizeOptions(const std::string& db, const Options& src,
2399
2413
  bool read_only = false);
2400
2414
 
@@ -188,7 +188,7 @@ Status DBImpl::FlushMemTableToOutputFile(
188
188
  // a memtable without knowing such snapshot(s).
189
189
  uint64_t max_memtable_id = needs_to_sync_closed_wals
190
190
  ? cfd->imm()->GetLatestMemTableID()
191
- : port::kMaxUint64;
191
+ : std::numeric_limits<uint64_t>::max();
192
192
 
193
193
  // If needs_to_sync_closed_wals is false, then the flush job will pick ALL
194
194
  // existing memtables of the column family when PickMemTable() is called
@@ -1041,7 +1041,8 @@ Status DBImpl::CompactRangeInternal(const CompactRangeOptions& options,
1041
1041
  }
1042
1042
  s = RunManualCompaction(cfd, ColumnFamilyData::kCompactAllLevels,
1043
1043
  final_output_level, options, begin, end, exclusive,
1044
- false, port::kMaxUint64, trim_ts);
1044
+ false, std::numeric_limits<uint64_t>::max(),
1045
+ trim_ts);
1045
1046
  } else {
1046
1047
  int first_overlapped_level = kInvalidLevel;
1047
1048
  int max_overlapped_level = kInvalidLevel;
@@ -1078,7 +1079,7 @@ Status DBImpl::CompactRangeInternal(const CompactRangeOptions& options,
1078
1079
  if (s.ok() && first_overlapped_level != kInvalidLevel) {
1079
1080
  // max_file_num_to_ignore can be used to filter out newly created SST
1080
1081
  // files, useful for bottom level compaction in a manual compaction
1081
- uint64_t max_file_num_to_ignore = port::kMaxUint64;
1082
+ uint64_t max_file_num_to_ignore = std::numeric_limits<uint64_t>::max();
1082
1083
  uint64_t next_file_number = versions_->current_next_file_number();
1083
1084
  final_output_level = max_overlapped_level;
1084
1085
  int output_level;
@@ -1650,7 +1651,8 @@ Status DBImpl::ReFitLevel(ColumnFamilyData* cfd, int level, int target_level) {
1650
1651
  f->smallest, f->largest, f->fd.smallest_seqno, f->fd.largest_seqno,
1651
1652
  f->marked_for_compaction, f->temperature, f->oldest_blob_file_number,
1652
1653
  f->oldest_ancester_time, f->file_creation_time, f->file_checksum,
1653
- f->file_checksum_func_name, f->min_timestamp, f->max_timestamp);
1654
+ f->file_checksum_func_name, f->min_timestamp, f->max_timestamp,
1655
+ f->unique_id);
1654
1656
  }
1655
1657
  ROCKS_LOG_DEBUG(immutable_db_options_.info_log,
1656
1658
  "[%s] Apply version edit:\n%s", cfd->GetName().c_str(),
@@ -1855,11 +1857,12 @@ Status DBImpl::RunManualCompaction(
1855
1857
  }
1856
1858
  }
1857
1859
 
1858
- ROCKS_LOG_INFO(immutable_db_options_.info_log,
1859
- "[%s] Manual compaction starting", cfd->GetName().c_str());
1860
-
1861
1860
  LogBuffer log_buffer(InfoLogLevel::INFO_LEVEL,
1862
1861
  immutable_db_options_.info_log.get());
1862
+
1863
+ ROCKS_LOG_BUFFER(&log_buffer, "[%s] Manual compaction starting",
1864
+ cfd->GetName().c_str());
1865
+
1863
1866
  // We don't check bg_error_ here, because if we get the error in compaction,
1864
1867
  // the compaction will set manual.status to bg_error_ and set manual.done to
1865
1868
  // true.
@@ -2013,7 +2016,7 @@ Status DBImpl::FlushMemTable(ColumnFamilyData* cfd,
2013
2016
  // be created and scheduled, status::OK() will be returned.
2014
2017
  s = SwitchMemtable(cfd, &context);
2015
2018
  }
2016
- const uint64_t flush_memtable_id = port::kMaxUint64;
2019
+ const uint64_t flush_memtable_id = std::numeric_limits<uint64_t>::max();
2017
2020
  if (s.ok()) {
2018
2021
  if (cfd->imm()->NumNotFlushed() != 0 || !cfd->mem()->IsEmpty() ||
2019
2022
  !cached_recoverable_state_empty_.load()) {
@@ -3275,7 +3278,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3275
3278
  f->fd.largest_seqno, f->marked_for_compaction, f->temperature,
3276
3279
  f->oldest_blob_file_number, f->oldest_ancester_time,
3277
3280
  f->file_creation_time, f->file_checksum, f->file_checksum_func_name,
3278
- f->min_timestamp, f->max_timestamp);
3281
+ f->min_timestamp, f->max_timestamp, f->unique_id);
3279
3282
 
3280
3283
  ROCKS_LOG_BUFFER(
3281
3284
  log_buffer,
@@ -118,10 +118,11 @@ Status DBImpl::TEST_CompactRange(int level, const Slice* begin,
118
118
  cfd->ioptions()->compaction_style == kCompactionStyleFIFO)
119
119
  ? level
120
120
  : level + 1;
121
- return RunManualCompaction(cfd, level, output_level, CompactRangeOptions(),
122
- begin, end, true, disallow_trivial_move,
123
- port::kMaxUint64 /*max_file_num_to_ignore*/,
124
- "" /*trim_ts*/);
121
+ return RunManualCompaction(
122
+ cfd, level, output_level, CompactRangeOptions(), begin, end, true,
123
+ disallow_trivial_move,
124
+ std::numeric_limits<uint64_t>::max() /*max_file_num_to_ignore*/,
125
+ "" /*trim_ts*/);
125
126
  }
126
127
 
127
128
  Status DBImpl::TEST_SwitchMemtable(ColumnFamilyData* cfd) {
@@ -137,7 +137,7 @@ Status DBImpl::PromoteL0(ColumnFamilyHandle* column_family, int target_level) {
137
137
  f->fd.largest_seqno, f->marked_for_compaction, f->temperature,
138
138
  f->oldest_blob_file_number, f->oldest_ancester_time,
139
139
  f->file_creation_time, f->file_checksum, f->file_checksum_func_name,
140
- f->min_timestamp, f->max_timestamp);
140
+ f->min_timestamp, f->max_timestamp, f->unique_id);
141
141
  }
142
142
 
143
143
  status = versions_->LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(),
@@ -761,7 +761,7 @@ uint64_t PrecomputeMinLogNumberToKeepNon2PC(
761
761
  assert(!cfds_to_flush.empty());
762
762
  assert(cfds_to_flush.size() == edit_lists.size());
763
763
 
764
- uint64_t min_log_number_to_keep = port::kMaxUint64;
764
+ uint64_t min_log_number_to_keep = std::numeric_limits<uint64_t>::max();
765
765
  for (const auto& edit_list : edit_lists) {
766
766
  uint64_t log = 0;
767
767
  for (const auto& e : edit_list) {
@@ -773,7 +773,7 @@ uint64_t PrecomputeMinLogNumberToKeepNon2PC(
773
773
  min_log_number_to_keep = std::min(min_log_number_to_keep, log);
774
774
  }
775
775
  }
776
- if (min_log_number_to_keep == port::kMaxUint64) {
776
+ if (min_log_number_to_keep == std::numeric_limits<uint64_t>::max()) {
777
777
  min_log_number_to_keep = cfds_to_flush[0]->GetLogNumber();
778
778
  for (size_t i = 1; i < cfds_to_flush.size(); i++) {
779
779
  min_log_number_to_keep =
@@ -518,6 +518,12 @@ Status DBImpl::Recover(
518
518
  if (!s.ok()) {
519
519
  return s;
520
520
  }
521
+ if (immutable_db_options_.verify_sst_unique_id_in_manifest) {
522
+ s = VerifySstUniqueIdInManifest();
523
+ if (!s.ok()) {
524
+ return s;
525
+ }
526
+ }
521
527
  s = SetDBId(read_only);
522
528
  if (s.ok() && !read_only) {
523
529
  s = DeleteUnreferencedSstFiles();
@@ -698,6 +704,25 @@ Status DBImpl::Recover(
698
704
  return s;
699
705
  }
700
706
 
707
+ Status DBImpl::VerifySstUniqueIdInManifest() {
708
+ mutex_.AssertHeld();
709
+ ROCKS_LOG_INFO(
710
+ immutable_db_options_.info_log,
711
+ "Verifying SST unique id between MANIFEST and SST file table properties");
712
+ Status status;
713
+ for (auto cfd : *versions_->GetColumnFamilySet()) {
714
+ if (!cfd->IsDropped()) {
715
+ auto version = cfd->current();
716
+ version->Ref();
717
+ mutex_.Unlock();
718
+ status = version->VerifySstUniqueIds();
719
+ mutex_.Lock();
720
+ version->Unref();
721
+ }
722
+ }
723
+ return status;
724
+ }
725
+
701
726
  Status DBImpl::PersistentStatsProcessFormatVersion() {
702
727
  mutex_.AssertHeld();
703
728
  Status s;
@@ -760,11 +785,11 @@ Status DBImpl::PersistentStatsProcessFormatVersion() {
760
785
  WriteBatch batch;
761
786
  if (s.ok()) {
762
787
  s = batch.Put(persist_stats_cf_handle_, kFormatVersionKeyString,
763
- ToString(kStatsCFCurrentFormatVersion));
788
+ std::to_string(kStatsCFCurrentFormatVersion));
764
789
  }
765
790
  if (s.ok()) {
766
791
  s = batch.Put(persist_stats_cf_handle_, kCompatibleVersionKeyString,
767
- ToString(kStatsCFCompatibleFormatVersion));
792
+ std::to_string(kStatsCFCompatibleFormatVersion));
768
793
  }
769
794
  if (s.ok()) {
770
795
  WriteOptions wo;
@@ -947,7 +972,6 @@ Status DBImpl::RecoverLogFiles(const std::vector<uint64_t>& wal_numbers,
947
972
  // Read all the records and add to a memtable
948
973
  std::string scratch;
949
974
  Slice record;
950
- WriteBatch batch;
951
975
 
952
976
  TEST_SYNC_POINT_CALLBACK("DBImpl::RecoverLogFiles:BeforeReadWal",
953
977
  /*arg=*/nullptr);
@@ -961,10 +985,15 @@ Status DBImpl::RecoverLogFiles(const std::vector<uint64_t>& wal_numbers,
961
985
  continue;
962
986
  }
963
987
 
988
+ // We create a new batch and initialize with a valid prot_info_ to store
989
+ // the data checksums
990
+ WriteBatch batch(0, 0, 8, 0);
991
+
964
992
  status = WriteBatchInternal::SetContents(&batch, record);
965
993
  if (!status.ok()) {
966
994
  return status;
967
995
  }
996
+
968
997
  SequenceNumber sequence = WriteBatchInternal::Sequence(&batch);
969
998
 
970
999
  if (immutable_db_options_.wal_recovery_mode ==
@@ -1322,6 +1351,7 @@ Status DBImpl::GetLogSizeAndMaybeTruncate(uint64_t wal_number, bool truncate,
1322
1351
  Status s;
1323
1352
  // This gets the appear size of the wals, not including preallocated space.
1324
1353
  s = env_->GetFileSize(fname, &log.size);
1354
+ TEST_SYNC_POINT_CALLBACK("DBImpl::GetLogSizeAndMaybeTruncate:0", /*arg=*/&s);
1325
1355
  if (s.ok() && truncate) {
1326
1356
  std::unique_ptr<FSWritableFile> last_log;
1327
1357
  Status truncate_status = fs_->ReopenWritableFile(
@@ -1493,13 +1523,14 @@ Status DBImpl::WriteLevel0TableForRecovery(int job_id, ColumnFamilyData* cfd,
1493
1523
  constexpr int level = 0;
1494
1524
 
1495
1525
  if (s.ok() && has_output) {
1496
- edit->AddFile(
1497
- level, meta.fd.GetNumber(), meta.fd.GetPathId(), meta.fd.GetFileSize(),
1498
- meta.smallest, meta.largest, meta.fd.smallest_seqno,
1499
- meta.fd.largest_seqno, meta.marked_for_compaction, meta.temperature,
1500
- meta.oldest_blob_file_number, meta.oldest_ancester_time,
1501
- meta.file_creation_time, meta.file_checksum,
1502
- meta.file_checksum_func_name, meta.min_timestamp, meta.max_timestamp);
1526
+ edit->AddFile(level, meta.fd.GetNumber(), meta.fd.GetPathId(),
1527
+ meta.fd.GetFileSize(), meta.smallest, meta.largest,
1528
+ meta.fd.smallest_seqno, meta.fd.largest_seqno,
1529
+ meta.marked_for_compaction, meta.temperature,
1530
+ meta.oldest_blob_file_number, meta.oldest_ancester_time,
1531
+ meta.file_creation_time, meta.file_checksum,
1532
+ meta.file_checksum_func_name, meta.min_timestamp,
1533
+ meta.max_timestamp, meta.unique_id);
1503
1534
 
1504
1535
  for (const auto& blob : blob_file_additions) {
1505
1536
  edit->AddBlobFile(blob);
@@ -1821,6 +1852,7 @@ Status DBImpl::Open(const DBOptions& db_options, const std::string& dbname,
1821
1852
  if (s.ok()) {
1822
1853
  // Need to fsync, otherwise it might get lost after a power reset.
1823
1854
  s = impl->FlushWAL(false);
1855
+ TEST_SYNC_POINT_CALLBACK("DBImpl::Open::BeforeSyncWAL", /*arg=*/&s);
1824
1856
  if (s.ok()) {
1825
1857
  s = log_writer->file()->Sync(impl->immutable_db_options_.use_fsync);
1826
1858
  }