@nxtedition/rocksdb 5.2.21 → 5.2.26

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 (909) hide show
  1. package/binding.cc +216 -252
  2. package/binding.gyp +78 -72
  3. package/deps/rocksdb/build_version.cc +70 -4
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  5. package/deps/rocksdb/rocksdb/Makefile +459 -469
  6. package/deps/rocksdb/rocksdb/README.md +4 -4
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  33. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  51. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  58. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  59. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  60. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  61. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  62. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  63. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  64. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  65. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  66. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  67. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  68. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  69. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  70. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  71. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  72. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  73. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  96. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  97. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  98. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  99. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  100. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  101. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  102. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  103. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  104. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  105. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  106. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  107. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  108. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  110. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  111. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  112. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  116. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  117. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  118. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  124. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  125. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  126. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  127. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  128. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  129. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  130. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  131. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  132. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  133. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  134. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  135. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  136. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  137. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  138. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  139. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  140. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  141. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  142. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  143. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  144. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  145. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  146. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  147. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  148. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  149. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  150. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  151. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  152. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  153. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  154. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  155. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  156. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  157. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  158. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  159. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  160. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  161. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  162. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  163. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  164. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  165. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  166. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  167. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  168. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  169. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  171. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  172. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  173. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  174. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  175. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  176. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  177. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  180. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  181. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  182. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  183. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  184. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  185. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  186. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  187. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  188. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  189. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  190. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  191. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  192. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  193. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  194. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  195. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  196. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  197. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  198. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  199. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  200. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  201. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  202. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  203. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  204. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  205. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  206. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  207. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  208. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  209. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  210. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  211. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  212. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  213. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  214. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  215. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  216. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  217. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  218. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  219. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  220. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  221. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  222. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  223. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  224. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  225. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  226. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  227. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  228. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  229. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  230. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  231. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  233. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  234. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  235. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  236. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  246. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  248. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  249. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  250. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  251. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  252. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  253. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  254. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  255. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  256. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  257. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  258. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  259. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  260. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  261. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  262. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  263. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  266. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  267. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  274. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  280. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  285. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  286. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  287. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  288. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  289. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  290. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  291. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  292. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  293. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  294. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  295. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  296. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  298. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  299. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  300. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  301. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  302. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  303. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  304. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  305. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  306. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  307. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  308. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  309. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  310. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  311. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  312. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  313. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  314. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  315. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  316. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  317. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  318. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  319. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  320. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  321. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  322. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  323. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  324. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  325. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  326. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  327. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  328. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  329. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  330. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  331. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  332. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  333. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  334. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  335. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  336. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  337. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  339. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  340. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  341. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  342. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  343. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  344. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  345. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  346. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  348. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  349. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  350. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  353. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  354. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  357. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  358. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  359. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  360. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  361. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  362. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  364. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  365. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  366. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  367. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  368. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  371. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  378. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  380. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  381. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  383. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  386. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  387. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  407. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  408. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  410. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  412. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  413. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  414. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  415. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  416. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  417. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  418. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  419. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  420. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  421. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  422. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  423. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  424. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  425. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  426. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  427. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  428. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  429. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  430. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  431. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  432. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  433. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  434. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  435. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  436. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  437. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  438. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  439. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  440. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  441. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  442. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  443. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  444. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  445. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  446. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  447. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  448. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  449. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  450. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  451. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  452. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  453. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  454. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  455. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  456. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  457. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  458. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  459. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  460. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  461. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  462. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  463. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  464. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  465. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  466. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  467. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  468. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  469. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  470. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  471. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  472. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  473. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  474. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  475. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  476. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  477. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  478. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  479. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  480. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  481. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  482. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  483. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  484. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  485. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  486. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  487. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  488. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  489. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  490. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  491. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  492. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  493. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  494. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  495. package/deps/rocksdb/rocksdb/python.mk +9 -0
  496. package/deps/rocksdb/rocksdb/src.mk +82 -34
  497. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  498. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  500. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  501. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  502. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  503. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  504. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  505. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  506. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  507. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  508. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  514. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  515. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  516. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  517. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  518. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  519. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  520. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  521. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  522. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  523. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  524. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  525. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  526. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  527. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  529. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  530. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  531. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  532. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  534. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  535. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  536. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  537. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  539. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  540. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  541. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  542. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  543. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  544. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  546. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  547. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  548. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  549. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  550. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  551. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  552. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  553. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  554. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  555. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  556. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  557. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  558. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  559. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  560. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  561. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  562. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  563. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  564. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  565. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  566. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  567. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  568. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  569. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  570. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  571. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  572. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  573. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  574. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  575. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  576. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  577. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  578. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  579. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  580. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  581. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  582. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  586. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  587. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  588. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  589. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  590. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  591. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  592. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  593. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  594. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  595. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  596. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  597. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  598. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  599. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  600. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  601. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  602. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  603. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  604. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  605. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  606. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  607. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  608. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  609. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  610. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  611. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  612. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  613. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  614. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  615. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  616. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  617. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  618. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  619. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  620. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  621. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  622. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  623. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  624. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  625. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  626. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  627. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  628. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  629. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  630. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  631. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  632. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  633. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  634. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  635. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  636. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  637. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  638. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  639. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  640. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  641. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  642. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  643. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  644. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  645. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  646. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  647. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  648. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  649. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  650. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  651. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  652. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  653. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  654. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  655. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  656. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  657. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  658. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  659. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  660. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  661. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  662. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  663. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  664. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  665. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  666. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  667. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  668. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  669. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  670. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  671. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  672. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  673. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  674. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  675. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  676. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  677. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  678. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  679. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  680. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  681. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  682. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  683. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  684. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  685. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  686. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  687. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  688. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  689. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  690. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  691. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  692. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  693. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  694. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  695. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  696. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  697. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  698. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  699. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  700. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  701. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  702. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  703. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  704. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  705. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  706. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  707. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  708. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  709. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  710. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  711. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  712. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  713. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  714. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  715. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  716. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  717. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  718. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  719. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  720. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  721. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  722. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  723. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  724. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  725. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  726. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  727. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  728. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  729. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  730. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  731. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  732. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  733. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  734. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  741. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  742. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  743. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  744. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  745. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  746. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  747. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  748. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  749. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  750. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  751. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  752. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  753. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  754. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  755. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  756. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  757. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  758. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  759. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  760. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  761. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  762. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  763. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  764. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  765. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  766. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  767. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  768. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  769. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  770. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  771. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  772. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  773. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  774. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  775. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  776. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  777. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  778. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  779. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  780. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  786. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  787. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  788. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  789. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  790. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  791. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  792. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  793. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  794. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  795. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  796. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  797. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  798. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  799. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  802. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  803. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  804. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  805. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  806. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  807. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  808. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  809. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  810. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  811. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  812. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  813. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  814. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  815. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  816. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  817. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  818. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  821. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  822. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  823. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  824. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  825. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  826. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  827. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  828. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  829. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  830. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  831. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  832. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  833. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  834. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  835. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  836. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  837. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  838. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  839. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  840. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  841. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  842. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  843. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  844. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  845. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  846. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  847. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  848. package/deps/rocksdb/rocksdb.gyp +425 -446
  849. package/package.json +8 -8
  850. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  851. package/prebuilds/darwin-x86/node.napi.node +0 -0
  852. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  853. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  854. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  855. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  856. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  857. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  858. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  859. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  860. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  861. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  862. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  863. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  864. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  865. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  866. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  867. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  868. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  869. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  870. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  871. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  872. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  873. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  874. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  904. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  905. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  906. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  907. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  908. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  909. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -34,68 +34,62 @@
34
34
 
35
35
  namespace ROCKSDB_NAMESPACE {
36
36
 
37
- bool NewestFirstBySeqNo(FileMetaData* a, FileMetaData* b) {
38
- if (a->fd.largest_seqno != b->fd.largest_seqno) {
39
- return a->fd.largest_seqno > b->fd.largest_seqno;
40
- }
41
- if (a->fd.smallest_seqno != b->fd.smallest_seqno) {
42
- return a->fd.smallest_seqno > b->fd.smallest_seqno;
43
- }
44
- // Break ties by file number
45
- return a->fd.GetNumber() > b->fd.GetNumber();
46
- }
37
+ class VersionBuilder::Rep {
38
+ class NewestFirstBySeqNo {
39
+ public:
40
+ bool operator()(const FileMetaData* lhs, const FileMetaData* rhs) const {
41
+ assert(lhs);
42
+ assert(rhs);
47
43
 
48
- namespace {
49
- bool BySmallestKey(FileMetaData* a, FileMetaData* b,
50
- const InternalKeyComparator* cmp) {
51
- int r = cmp->Compare(a->smallest, b->smallest);
52
- if (r != 0) {
53
- return (r < 0);
54
- }
55
- // Break ties by file number
56
- return (a->fd.GetNumber() < b->fd.GetNumber());
57
- }
58
- } // namespace
44
+ if (lhs->fd.largest_seqno != rhs->fd.largest_seqno) {
45
+ return lhs->fd.largest_seqno > rhs->fd.largest_seqno;
46
+ }
59
47
 
60
- class VersionBuilder::Rep {
61
- private:
62
- // Helper to sort files_ in v
63
- // kLevel0 -- NewestFirstBySeqNo
64
- // kLevelNon0 -- BySmallestKey
65
- struct FileComparator {
66
- enum SortMethod { kLevel0 = 0, kLevelNon0 = 1, } sort_method;
67
- const InternalKeyComparator* internal_comparator;
68
-
69
- FileComparator() : internal_comparator(nullptr) {}
70
-
71
- bool operator()(FileMetaData* f1, FileMetaData* f2) const {
72
- switch (sort_method) {
73
- case kLevel0:
74
- return NewestFirstBySeqNo(f1, f2);
75
- case kLevelNon0:
76
- return BySmallestKey(f1, f2, internal_comparator);
48
+ if (lhs->fd.smallest_seqno != rhs->fd.smallest_seqno) {
49
+ return lhs->fd.smallest_seqno > rhs->fd.smallest_seqno;
77
50
  }
78
- assert(false);
79
- return false;
51
+
52
+ // Break ties by file number
53
+ return lhs->fd.GetNumber() > rhs->fd.GetNumber();
80
54
  }
81
55
  };
82
56
 
57
+ class BySmallestKey {
58
+ public:
59
+ explicit BySmallestKey(const InternalKeyComparator* cmp) : cmp_(cmp) {}
60
+
61
+ bool operator()(const FileMetaData* lhs, const FileMetaData* rhs) const {
62
+ assert(lhs);
63
+ assert(rhs);
64
+ assert(cmp_);
65
+
66
+ const int r = cmp_->Compare(lhs->smallest, rhs->smallest);
67
+ if (r != 0) {
68
+ return (r < 0);
69
+ }
70
+
71
+ // Break ties by file number
72
+ return (lhs->fd.GetNumber() < rhs->fd.GetNumber());
73
+ }
74
+
75
+ private:
76
+ const InternalKeyComparator* cmp_;
77
+ };
78
+
83
79
  struct LevelState {
84
80
  std::unordered_set<uint64_t> deleted_files;
85
81
  // Map from file number to file meta data.
86
82
  std::unordered_map<uint64_t, FileMetaData*> added_files;
87
83
  };
88
84
 
85
+ // A class that represents the accumulated changes (like additional garbage or
86
+ // newly linked/unlinked SST files) for a given blob file after applying a
87
+ // series of VersionEdits.
89
88
  class BlobFileMetaDataDelta {
90
89
  public:
91
90
  bool IsEmpty() const {
92
- return !shared_meta_ && !additional_garbage_count_ &&
93
- !additional_garbage_bytes_ && newly_linked_ssts_.empty() &&
94
- newly_unlinked_ssts_.empty();
95
- }
96
-
97
- std::shared_ptr<SharedBlobFileMetaData> GetSharedMeta() const {
98
- return shared_meta_;
91
+ return !additional_garbage_count_ && !additional_garbage_bytes_ &&
92
+ newly_linked_ssts_.empty() && newly_unlinked_ssts_.empty();
99
93
  }
100
94
 
101
95
  uint64_t GetAdditionalGarbageCount() const {
@@ -114,13 +108,6 @@ class VersionBuilder::Rep {
114
108
  return newly_unlinked_ssts_;
115
109
  }
116
110
 
117
- void SetSharedMeta(std::shared_ptr<SharedBlobFileMetaData> shared_meta) {
118
- assert(!shared_meta_);
119
- assert(shared_meta);
120
-
121
- shared_meta_ = std::move(shared_meta);
122
- }
123
-
124
111
  void AddGarbage(uint64_t count, uint64_t bytes) {
125
112
  additional_garbage_count_ += count;
126
113
  additional_garbage_bytes_ += bytes;
@@ -159,13 +146,91 @@ class VersionBuilder::Rep {
159
146
  }
160
147
 
161
148
  private:
162
- std::shared_ptr<SharedBlobFileMetaData> shared_meta_;
163
149
  uint64_t additional_garbage_count_ = 0;
164
150
  uint64_t additional_garbage_bytes_ = 0;
165
151
  std::unordered_set<uint64_t> newly_linked_ssts_;
166
152
  std::unordered_set<uint64_t> newly_unlinked_ssts_;
167
153
  };
168
154
 
155
+ // A class that represents the state of a blob file after applying a series of
156
+ // VersionEdits. In addition to the resulting state, it also contains the
157
+ // delta (see BlobFileMetaDataDelta above). The resulting state can be used to
158
+ // identify obsolete blob files, while the delta makes it possible to
159
+ // efficiently detect trivial moves.
160
+ class MutableBlobFileMetaData {
161
+ public:
162
+ // To be used for brand new blob files
163
+ explicit MutableBlobFileMetaData(
164
+ std::shared_ptr<SharedBlobFileMetaData>&& shared_meta)
165
+ : shared_meta_(std::move(shared_meta)) {}
166
+
167
+ // To be used for pre-existing blob files
168
+ explicit MutableBlobFileMetaData(
169
+ const std::shared_ptr<BlobFileMetaData>& meta)
170
+ : shared_meta_(meta->GetSharedMeta()),
171
+ linked_ssts_(meta->GetLinkedSsts()),
172
+ garbage_blob_count_(meta->GetGarbageBlobCount()),
173
+ garbage_blob_bytes_(meta->GetGarbageBlobBytes()) {}
174
+
175
+ const std::shared_ptr<SharedBlobFileMetaData>& GetSharedMeta() const {
176
+ return shared_meta_;
177
+ }
178
+
179
+ uint64_t GetBlobFileNumber() const {
180
+ assert(shared_meta_);
181
+ return shared_meta_->GetBlobFileNumber();
182
+ }
183
+
184
+ bool HasDelta() const { return !delta_.IsEmpty(); }
185
+
186
+ const std::unordered_set<uint64_t>& GetLinkedSsts() const {
187
+ return linked_ssts_;
188
+ }
189
+
190
+ uint64_t GetGarbageBlobCount() const { return garbage_blob_count_; }
191
+
192
+ uint64_t GetGarbageBlobBytes() const { return garbage_blob_bytes_; }
193
+
194
+ bool AddGarbage(uint64_t count, uint64_t bytes) {
195
+ assert(shared_meta_);
196
+
197
+ if (garbage_blob_count_ + count > shared_meta_->GetTotalBlobCount() ||
198
+ garbage_blob_bytes_ + bytes > shared_meta_->GetTotalBlobBytes()) {
199
+ return false;
200
+ }
201
+
202
+ delta_.AddGarbage(count, bytes);
203
+
204
+ garbage_blob_count_ += count;
205
+ garbage_blob_bytes_ += bytes;
206
+
207
+ return true;
208
+ }
209
+
210
+ void LinkSst(uint64_t sst_file_number) {
211
+ delta_.LinkSst(sst_file_number);
212
+
213
+ assert(linked_ssts_.find(sst_file_number) == linked_ssts_.end());
214
+ linked_ssts_.emplace(sst_file_number);
215
+ }
216
+
217
+ void UnlinkSst(uint64_t sst_file_number) {
218
+ delta_.UnlinkSst(sst_file_number);
219
+
220
+ assert(linked_ssts_.find(sst_file_number) != linked_ssts_.end());
221
+ linked_ssts_.erase(sst_file_number);
222
+ }
223
+
224
+ private:
225
+ std::shared_ptr<SharedBlobFileMetaData> shared_meta_;
226
+ // Accumulated changes
227
+ BlobFileMetaDataDelta delta_;
228
+ // Resulting state after applying the changes
229
+ BlobFileMetaData::LinkedSsts linked_ssts_;
230
+ uint64_t garbage_blob_count_ = 0;
231
+ uint64_t garbage_blob_bytes_ = 0;
232
+ };
233
+
169
234
  const FileOptions& file_options_;
170
235
  const ImmutableCFOptions* const ioptions_;
171
236
  TableCache* table_cache_;
@@ -183,11 +248,12 @@ class VersionBuilder::Rep {
183
248
  bool has_invalid_levels_;
184
249
  // Current levels of table files affected by additions/deletions.
185
250
  std::unordered_map<uint64_t, int> table_file_levels_;
186
- FileComparator level_zero_cmp_;
187
- FileComparator level_nonzero_cmp_;
251
+ NewestFirstBySeqNo level_zero_cmp_;
252
+ BySmallestKey level_nonzero_cmp_;
188
253
 
189
- // Metadata delta for all blob files affected by the series of version edits.
190
- std::map<uint64_t, BlobFileMetaDataDelta> blob_file_meta_deltas_;
254
+ // Mutable metadata objects for all blob files affected by the series of
255
+ // version edits.
256
+ std::map<uint64_t, MutableBlobFileMetaData> mutable_blob_file_metas_;
191
257
 
192
258
  public:
193
259
  Rep(const FileOptions& file_options, const ImmutableCFOptions* ioptions,
@@ -199,14 +265,11 @@ class VersionBuilder::Rep {
199
265
  base_vstorage_(base_vstorage),
200
266
  version_set_(version_set),
201
267
  num_levels_(base_vstorage->num_levels()),
202
- has_invalid_levels_(false) {
268
+ has_invalid_levels_(false),
269
+ level_nonzero_cmp_(base_vstorage_->InternalComparator()) {
203
270
  assert(ioptions_);
204
271
 
205
272
  levels_ = new LevelState[num_levels_];
206
- level_zero_cmp_.sort_method = FileComparator::kLevel0;
207
- level_nonzero_cmp_.sort_method = FileComparator::kLevelNon0;
208
- level_nonzero_cmp_.internal_comparator =
209
- base_vstorage_->InternalComparator();
210
273
  }
211
274
 
212
275
  ~Rep() {
@@ -232,29 +295,10 @@ class VersionBuilder::Rep {
232
295
  }
233
296
  }
234
297
 
235
- bool IsBlobFileInVersion(uint64_t blob_file_number) const {
236
- auto delta_it = blob_file_meta_deltas_.find(blob_file_number);
237
- if (delta_it != blob_file_meta_deltas_.end()) {
238
- if (delta_it->second.GetSharedMeta()) {
239
- return true;
240
- }
241
- }
242
-
243
- assert(base_vstorage_);
244
-
245
- const auto& base_blob_files = base_vstorage_->GetBlobFiles();
246
-
247
- auto base_it = base_blob_files.find(blob_file_number);
248
- if (base_it != base_blob_files.end()) {
249
- assert(base_it->second);
250
- assert(base_it->second->GetSharedMeta());
251
-
252
- return true;
253
- }
254
-
255
- return false;
256
- }
257
-
298
+ // Mapping used for checking the consistency of links between SST files and
299
+ // blob files. It is built using the forward links (table file -> blob file),
300
+ // and is subsequently compared with the inverse mapping stored in the
301
+ // BlobFileMetaData objects.
258
302
  using ExpectedLinkedSsts =
259
303
  std::unordered_map<uint64_t, BlobFileMetaData::LinkedSsts>;
260
304
 
@@ -270,99 +314,161 @@ class VersionBuilder::Rep {
270
314
  (*expected_linked_ssts)[blob_file_number].emplace(table_file_number);
271
315
  }
272
316
 
273
- Status CheckConsistencyDetails(VersionStorageInfo* vstorage) {
274
- // Make sure the files are sorted correctly and that the links between
275
- // table files and blob files are consistent. The latter is checked using
276
- // the following mapping, which is built using the forward links
277
- // (table file -> blob file), and is subsequently compared with the inverse
278
- // mapping stored in the BlobFileMetaData objects.
279
- ExpectedLinkedSsts expected_linked_ssts;
317
+ template <typename Checker>
318
+ Status CheckConsistencyDetailsForLevel(
319
+ const VersionStorageInfo* vstorage, int level, Checker checker,
320
+ const std::string& sync_point,
321
+ ExpectedLinkedSsts* expected_linked_ssts) const {
322
+ #ifdef NDEBUG
323
+ (void)sync_point;
324
+ #endif
280
325
 
281
- for (int level = 0; level < num_levels_; level++) {
282
- auto& level_files = vstorage->LevelFiles(level);
326
+ assert(vstorage);
327
+ assert(level >= 0 && level < num_levels_);
328
+ assert(expected_linked_ssts);
283
329
 
284
- if (level_files.empty()) {
285
- continue;
286
- }
330
+ const auto& level_files = vstorage->LevelFiles(level);
331
+
332
+ if (level_files.empty()) {
333
+ return Status::OK();
334
+ }
335
+
336
+ assert(level_files[0]);
337
+ UpdateExpectedLinkedSsts(level_files[0]->fd.GetNumber(),
338
+ level_files[0]->oldest_blob_file_number,
339
+ expected_linked_ssts);
340
+
341
+ for (size_t i = 1; i < level_files.size(); ++i) {
342
+ assert(level_files[i]);
343
+ UpdateExpectedLinkedSsts(level_files[i]->fd.GetNumber(),
344
+ level_files[i]->oldest_blob_file_number,
345
+ expected_linked_ssts);
346
+
347
+ auto lhs = level_files[i - 1];
348
+ auto rhs = level_files[i];
287
349
 
288
- assert(level_files[0]);
289
- UpdateExpectedLinkedSsts(level_files[0]->fd.GetNumber(),
290
- level_files[0]->oldest_blob_file_number,
291
- &expected_linked_ssts);
292
- for (size_t i = 1; i < level_files.size(); i++) {
293
- assert(level_files[i]);
294
- UpdateExpectedLinkedSsts(level_files[i]->fd.GetNumber(),
295
- level_files[i]->oldest_blob_file_number,
296
- &expected_linked_ssts);
297
-
298
- auto f1 = level_files[i - 1];
299
- auto f2 = level_files[i];
300
- if (level == 0) {
301
350
  #ifndef NDEBUG
302
- auto pair = std::make_pair(&f1, &f2);
303
- TEST_SYNC_POINT_CALLBACK("VersionBuilder::CheckConsistency0", &pair);
351
+ auto pair = std::make_pair(&lhs, &rhs);
352
+ TEST_SYNC_POINT_CALLBACK(sync_point, &pair);
304
353
  #endif
305
- if (!level_zero_cmp_(f1, f2)) {
306
- return Status::Corruption("L0 files are not sorted properly");
354
+
355
+ const Status s = checker(lhs, rhs);
356
+ if (!s.ok()) {
357
+ return s;
358
+ }
359
+ }
360
+
361
+ return Status::OK();
362
+ }
363
+
364
+ // Make sure table files are sorted correctly and that the links between
365
+ // table files and blob files are consistent.
366
+ Status CheckConsistencyDetails(const VersionStorageInfo* vstorage) const {
367
+ assert(vstorage);
368
+
369
+ ExpectedLinkedSsts expected_linked_ssts;
370
+
371
+ if (num_levels_ > 0) {
372
+ // Check L0
373
+ {
374
+ auto l0_checker = [this](const FileMetaData* lhs,
375
+ const FileMetaData* rhs) {
376
+ assert(lhs);
377
+ assert(rhs);
378
+
379
+ if (!level_zero_cmp_(lhs, rhs)) {
380
+ std::ostringstream oss;
381
+ oss << "L0 files are not sorted properly: files #"
382
+ << lhs->fd.GetNumber() << ", #" << rhs->fd.GetNumber();
383
+
384
+ return Status::Corruption("VersionBuilder", oss.str());
307
385
  }
308
386
 
309
- if (f2->fd.smallest_seqno == f2->fd.largest_seqno) {
387
+ if (rhs->fd.smallest_seqno == rhs->fd.largest_seqno) {
310
388
  // This is an external file that we ingested
311
- SequenceNumber external_file_seqno = f2->fd.smallest_seqno;
312
- if (!(external_file_seqno < f1->fd.largest_seqno ||
389
+ const SequenceNumber external_file_seqno = rhs->fd.smallest_seqno;
390
+
391
+ if (!(external_file_seqno < lhs->fd.largest_seqno ||
313
392
  external_file_seqno == 0)) {
314
- return Status::Corruption(
315
- "L0 file with seqno " +
316
- NumberToString(f1->fd.smallest_seqno) + " " +
317
- NumberToString(f1->fd.largest_seqno) +
318
- " vs. file with global_seqno" +
319
- NumberToString(external_file_seqno) + " with fileNumber " +
320
- NumberToString(f1->fd.GetNumber()));
393
+ std::ostringstream oss;
394
+ oss << "L0 file #" << lhs->fd.GetNumber() << " with seqno "
395
+ << lhs->fd.smallest_seqno << ' ' << lhs->fd.largest_seqno
396
+ << " vs. file #" << rhs->fd.GetNumber()
397
+ << " with global_seqno " << external_file_seqno;
398
+
399
+ return Status::Corruption("VersionBuilder", oss.str());
321
400
  }
322
- } else if (f1->fd.smallest_seqno <= f2->fd.smallest_seqno) {
323
- return Status::Corruption(
324
- "L0 files seqno " + NumberToString(f1->fd.smallest_seqno) +
325
- " " + NumberToString(f1->fd.largest_seqno) + " " +
326
- NumberToString(f1->fd.GetNumber()) + " vs. " +
327
- NumberToString(f2->fd.smallest_seqno) + " " +
328
- NumberToString(f2->fd.largest_seqno) + " " +
329
- NumberToString(f2->fd.GetNumber()));
401
+ } else if (lhs->fd.smallest_seqno <= rhs->fd.smallest_seqno) {
402
+ std::ostringstream oss;
403
+ oss << "L0 file #" << lhs->fd.GetNumber() << " with seqno "
404
+ << lhs->fd.smallest_seqno << ' ' << lhs->fd.largest_seqno
405
+ << " vs. file #" << rhs->fd.GetNumber() << " with seqno "
406
+ << rhs->fd.smallest_seqno << ' ' << rhs->fd.largest_seqno;
407
+
408
+ return Status::Corruption("VersionBuilder", oss.str());
330
409
  }
331
- } else {
332
- #ifndef NDEBUG
333
- auto pair = std::make_pair(&f1, &f2);
334
- TEST_SYNC_POINT_CALLBACK("VersionBuilder::CheckConsistency1", &pair);
335
- #endif
336
- if (!level_nonzero_cmp_(f1, f2)) {
337
- return Status::Corruption(
338
- "L" + NumberToString(level) +
339
- " files are not sorted properly: files #" +
340
- NumberToString(f1->fd.GetNumber()) + ", #" +
341
- NumberToString(f2->fd.GetNumber()));
410
+
411
+ return Status::OK();
412
+ };
413
+
414
+ const Status s = CheckConsistencyDetailsForLevel(
415
+ vstorage, /* level */ 0, l0_checker,
416
+ "VersionBuilder::CheckConsistency0", &expected_linked_ssts);
417
+ if (!s.ok()) {
418
+ return s;
419
+ }
420
+ }
421
+
422
+ // Check L1 and up
423
+ const InternalKeyComparator* const icmp = vstorage->InternalComparator();
424
+ assert(icmp);
425
+
426
+ for (int level = 1; level < num_levels_; ++level) {
427
+ auto checker = [this, level, icmp](const FileMetaData* lhs,
428
+ const FileMetaData* rhs) {
429
+ assert(lhs);
430
+ assert(rhs);
431
+
432
+ if (!level_nonzero_cmp_(lhs, rhs)) {
433
+ std::ostringstream oss;
434
+ oss << 'L' << level << " files are not sorted properly: files #"
435
+ << lhs->fd.GetNumber() << ", #" << rhs->fd.GetNumber();
436
+
437
+ return Status::Corruption("VersionBuilder", oss.str());
342
438
  }
343
439
 
344
- // Make sure there is no overlap in levels > 0
345
- if (vstorage->InternalComparator()->Compare(f1->largest,
346
- f2->smallest) >= 0) {
347
- return Status::Corruption(
348
- "L" + NumberToString(level) +
349
- " have overlapping ranges: file #" +
350
- NumberToString(f1->fd.GetNumber()) +
351
- " largest key: " + (f1->largest).DebugString(true) +
352
- " vs. file #" + NumberToString(f2->fd.GetNumber()) +
353
- " smallest key: " + (f2->smallest).DebugString(true));
440
+ // Make sure there is no overlap in level
441
+ if (icmp->Compare(lhs->largest, rhs->smallest) >= 0) {
442
+ std::ostringstream oss;
443
+ oss << 'L' << level << " has overlapping ranges: file #"
444
+ << lhs->fd.GetNumber()
445
+ << " largest key: " << lhs->largest.DebugString(true)
446
+ << " vs. file #" << rhs->fd.GetNumber()
447
+ << " smallest key: " << rhs->smallest.DebugString(true);
448
+
449
+ return Status::Corruption("VersionBuilder", oss.str());
354
450
  }
451
+
452
+ return Status::OK();
453
+ };
454
+
455
+ const Status s = CheckConsistencyDetailsForLevel(
456
+ vstorage, level, checker, "VersionBuilder::CheckConsistency1",
457
+ &expected_linked_ssts);
458
+ if (!s.ok()) {
459
+ return s;
355
460
  }
356
461
  }
357
462
  }
358
463
 
359
- // Make sure that all blob files in the version have non-garbage data.
464
+ // Make sure that all blob files in the version have non-garbage data and
465
+ // the links between them and the table files are consistent.
360
466
  const auto& blob_files = vstorage->GetBlobFiles();
361
- for (const auto& pair : blob_files) {
362
- const uint64_t blob_file_number = pair.first;
363
- const auto& blob_file_meta = pair.second;
467
+ for (const auto& blob_file_meta : blob_files) {
364
468
  assert(blob_file_meta);
365
469
 
470
+ const uint64_t blob_file_number = blob_file_meta->GetBlobFileNumber();
471
+
366
472
  if (blob_file_meta->GetGarbageBlobCount() >=
367
473
  blob_file_meta->GetTotalBlobCount()) {
368
474
  std::ostringstream oss;
@@ -388,7 +494,9 @@ class VersionBuilder::Rep {
388
494
  return ret_s;
389
495
  }
390
496
 
391
- Status CheckConsistency(VersionStorageInfo* vstorage) {
497
+ Status CheckConsistency(const VersionStorageInfo* vstorage) const {
498
+ assert(vstorage);
499
+
392
500
  // Always run consistency checks in debug build
393
501
  #ifdef NDEBUG
394
502
  if (!vstorage->force_consistency_checks()) {
@@ -428,6 +536,38 @@ class VersionBuilder::Rep {
428
536
  return true;
429
537
  }
430
538
 
539
+ bool IsBlobFileInVersion(uint64_t blob_file_number) const {
540
+ auto mutable_it = mutable_blob_file_metas_.find(blob_file_number);
541
+ if (mutable_it != mutable_blob_file_metas_.end()) {
542
+ return true;
543
+ }
544
+
545
+ assert(base_vstorage_);
546
+ const auto meta = base_vstorage_->GetBlobFileMetaData(blob_file_number);
547
+
548
+ return !!meta;
549
+ }
550
+
551
+ MutableBlobFileMetaData* GetOrCreateMutableBlobFileMetaData(
552
+ uint64_t blob_file_number) {
553
+ auto mutable_it = mutable_blob_file_metas_.find(blob_file_number);
554
+ if (mutable_it != mutable_blob_file_metas_.end()) {
555
+ return &mutable_it->second;
556
+ }
557
+
558
+ assert(base_vstorage_);
559
+ const auto meta = base_vstorage_->GetBlobFileMetaData(blob_file_number);
560
+
561
+ if (meta) {
562
+ mutable_it = mutable_blob_file_metas_
563
+ .emplace(blob_file_number, MutableBlobFileMetaData(meta))
564
+ .first;
565
+ return &mutable_it->second;
566
+ }
567
+
568
+ return nullptr;
569
+ }
570
+
431
571
  Status ApplyBlobFileAddition(const BlobFileAddition& blob_file_addition) {
432
572
  const uint64_t blob_file_number = blob_file_addition.GetBlobFileNumber();
433
573
 
@@ -462,8 +602,8 @@ class VersionBuilder::Rep {
462
602
  blob_file_addition.GetChecksumMethod(),
463
603
  blob_file_addition.GetChecksumValue(), deleter);
464
604
 
465
- blob_file_meta_deltas_[blob_file_number].SetSharedMeta(
466
- std::move(shared_meta));
605
+ mutable_blob_file_metas_.emplace(
606
+ blob_file_number, MutableBlobFileMetaData(std::move(shared_meta)));
467
607
 
468
608
  return Status::OK();
469
609
  }
@@ -471,16 +611,22 @@ class VersionBuilder::Rep {
471
611
  Status ApplyBlobFileGarbage(const BlobFileGarbage& blob_file_garbage) {
472
612
  const uint64_t blob_file_number = blob_file_garbage.GetBlobFileNumber();
473
613
 
474
- if (!IsBlobFileInVersion(blob_file_number)) {
614
+ MutableBlobFileMetaData* const mutable_meta =
615
+ GetOrCreateMutableBlobFileMetaData(blob_file_number);
616
+
617
+ if (!mutable_meta) {
475
618
  std::ostringstream oss;
476
619
  oss << "Blob file #" << blob_file_number << " not found";
477
620
 
478
621
  return Status::Corruption("VersionBuilder", oss.str());
479
622
  }
480
623
 
481
- blob_file_meta_deltas_[blob_file_number].AddGarbage(
482
- blob_file_garbage.GetGarbageBlobCount(),
483
- blob_file_garbage.GetGarbageBlobBytes());
624
+ if (!mutable_meta->AddGarbage(blob_file_garbage.GetGarbageBlobCount(),
625
+ blob_file_garbage.GetGarbageBlobBytes())) {
626
+ std::ostringstream oss;
627
+ oss << "Garbage overflow for blob file #" << blob_file_number;
628
+ return Status::Corruption("VersionBuilder", oss.str());
629
+ }
484
630
 
485
631
  return Status::OK();
486
632
  }
@@ -553,9 +699,12 @@ class VersionBuilder::Rep {
553
699
  const uint64_t blob_file_number =
554
700
  GetOldestBlobFileNumberForTableFile(level, file_number);
555
701
 
556
- if (blob_file_number != kInvalidBlobFileNumber &&
557
- IsBlobFileInVersion(blob_file_number)) {
558
- blob_file_meta_deltas_[blob_file_number].UnlinkSst(file_number);
702
+ if (blob_file_number != kInvalidBlobFileNumber) {
703
+ MutableBlobFileMetaData* const mutable_meta =
704
+ GetOrCreateMutableBlobFileMetaData(blob_file_number);
705
+ if (mutable_meta) {
706
+ mutable_meta->UnlinkSst(file_number);
707
+ }
559
708
  }
560
709
 
561
710
  auto& level_state = levels_[level];
@@ -620,9 +769,12 @@ class VersionBuilder::Rep {
620
769
 
621
770
  const uint64_t blob_file_number = f->oldest_blob_file_number;
622
771
 
623
- if (blob_file_number != kInvalidBlobFileNumber &&
624
- IsBlobFileInVersion(blob_file_number)) {
625
- blob_file_meta_deltas_[blob_file_number].LinkSst(file_number);
772
+ if (blob_file_number != kInvalidBlobFileNumber) {
773
+ MutableBlobFileMetaData* const mutable_meta =
774
+ GetOrCreateMutableBlobFileMetaData(blob_file_number);
775
+ if (mutable_meta) {
776
+ mutable_meta->LinkSst(file_number);
777
+ }
626
778
  }
627
779
 
628
780
  table_file_levels_[file_number] = level;
@@ -631,7 +783,7 @@ class VersionBuilder::Rep {
631
783
  }
632
784
 
633
785
  // Apply all of the edits in *edit to the current state.
634
- Status Apply(VersionEdit* edit) {
786
+ Status Apply(const VersionEdit* edit) {
635
787
  {
636
788
  const Status s = CheckConsistency(base_vstorage_);
637
789
  if (!s.ok()) {
@@ -684,158 +836,287 @@ class VersionBuilder::Rep {
684
836
  return Status::OK();
685
837
  }
686
838
 
687
- static BlobFileMetaData::LinkedSsts ApplyLinkedSstChanges(
688
- const BlobFileMetaData::LinkedSsts& base,
689
- const std::unordered_set<uint64_t>& newly_linked,
690
- const std::unordered_set<uint64_t>& newly_unlinked) {
691
- BlobFileMetaData::LinkedSsts result(base);
839
+ // Helper function template for merging the blob file metadata from the base
840
+ // version with the mutable metadata representing the state after applying the
841
+ // edits. The function objects process_base and process_mutable are
842
+ // respectively called to handle a base version object when there is no
843
+ // matching mutable object, and a mutable object when there is no matching
844
+ // base version object. process_both is called to perform the merge when a
845
+ // given blob file appears both in the base version and the mutable list. The
846
+ // helper stops processing objects if a function object returns false. Blob
847
+ // files with a file number below first_blob_file are not processed.
848
+ template <typename ProcessBase, typename ProcessMutable, typename ProcessBoth>
849
+ void MergeBlobFileMetas(uint64_t first_blob_file, ProcessBase process_base,
850
+ ProcessMutable process_mutable,
851
+ ProcessBoth process_both) const {
852
+ assert(base_vstorage_);
853
+
854
+ auto base_it = base_vstorage_->GetBlobFileMetaDataLB(first_blob_file);
855
+ const auto base_it_end = base_vstorage_->GetBlobFiles().end();
692
856
 
693
- for (uint64_t sst_file_number : newly_unlinked) {
694
- assert(result.find(sst_file_number) != result.end());
857
+ auto mutable_it = mutable_blob_file_metas_.lower_bound(first_blob_file);
858
+ const auto mutable_it_end = mutable_blob_file_metas_.end();
859
+
860
+ while (base_it != base_it_end && mutable_it != mutable_it_end) {
861
+ const auto& base_meta = *base_it;
862
+ assert(base_meta);
863
+
864
+ const uint64_t base_blob_file_number = base_meta->GetBlobFileNumber();
865
+ const uint64_t mutable_blob_file_number = mutable_it->first;
866
+
867
+ if (base_blob_file_number < mutable_blob_file_number) {
868
+ if (!process_base(base_meta)) {
869
+ return;
870
+ }
695
871
 
696
- result.erase(sst_file_number);
872
+ ++base_it;
873
+ } else if (mutable_blob_file_number < base_blob_file_number) {
874
+ const auto& mutable_meta = mutable_it->second;
875
+
876
+ if (!process_mutable(mutable_meta)) {
877
+ return;
878
+ }
879
+
880
+ ++mutable_it;
881
+ } else {
882
+ assert(base_blob_file_number == mutable_blob_file_number);
883
+
884
+ const auto& mutable_meta = mutable_it->second;
885
+
886
+ if (!process_both(base_meta, mutable_meta)) {
887
+ return;
888
+ }
889
+
890
+ ++base_it;
891
+ ++mutable_it;
892
+ }
697
893
  }
698
894
 
699
- for (uint64_t sst_file_number : newly_linked) {
700
- assert(result.find(sst_file_number) == result.end());
895
+ while (base_it != base_it_end) {
896
+ const auto& base_meta = *base_it;
897
+
898
+ if (!process_base(base_meta)) {
899
+ return;
900
+ }
701
901
 
702
- result.emplace(sst_file_number);
902
+ ++base_it;
703
903
  }
704
904
 
705
- return result;
905
+ while (mutable_it != mutable_it_end) {
906
+ const auto& mutable_meta = mutable_it->second;
907
+
908
+ if (!process_mutable(mutable_meta)) {
909
+ return;
910
+ }
911
+
912
+ ++mutable_it;
913
+ }
706
914
  }
707
915
 
708
- static std::shared_ptr<BlobFileMetaData> CreateMetaDataForNewBlobFile(
709
- const BlobFileMetaDataDelta& delta) {
710
- auto shared_meta = delta.GetSharedMeta();
711
- assert(shared_meta);
916
+ // Helper function template for finding the first blob file that has linked
917
+ // SSTs.
918
+ template <typename Meta>
919
+ static bool CheckLinkedSsts(const Meta& meta,
920
+ uint64_t* min_oldest_blob_file_num) {
921
+ assert(min_oldest_blob_file_num);
712
922
 
713
- assert(delta.GetNewlyUnlinkedSsts().empty());
923
+ if (!meta.GetLinkedSsts().empty()) {
924
+ assert(*min_oldest_blob_file_num == kInvalidBlobFileNumber);
714
925
 
715
- auto meta = BlobFileMetaData::Create(
716
- std::move(shared_meta), delta.GetNewlyLinkedSsts(),
717
- delta.GetAdditionalGarbageCount(), delta.GetAdditionalGarbageBytes());
926
+ *min_oldest_blob_file_num = meta.GetBlobFileNumber();
718
927
 
719
- return meta;
928
+ return false;
929
+ }
930
+
931
+ return true;
720
932
  }
721
933
 
722
- static std::shared_ptr<BlobFileMetaData>
723
- GetOrCreateMetaDataForExistingBlobFile(
724
- const std::shared_ptr<BlobFileMetaData>& base_meta,
725
- const BlobFileMetaDataDelta& delta) {
726
- assert(base_meta);
727
- assert(!delta.GetSharedMeta());
934
+ // Find the oldest blob file that has linked SSTs.
935
+ uint64_t GetMinOldestBlobFileNumber() const {
936
+ uint64_t min_oldest_blob_file_num = kInvalidBlobFileNumber;
728
937
 
729
- if (delta.IsEmpty()) {
730
- return base_meta;
731
- }
938
+ auto process_base =
939
+ [&min_oldest_blob_file_num](
940
+ const std::shared_ptr<BlobFileMetaData>& base_meta) {
941
+ assert(base_meta);
732
942
 
733
- auto shared_meta = base_meta->GetSharedMeta();
734
- assert(shared_meta);
943
+ return CheckLinkedSsts(*base_meta, &min_oldest_blob_file_num);
944
+ };
735
945
 
736
- auto linked_ssts = ApplyLinkedSstChanges(base_meta->GetLinkedSsts(),
737
- delta.GetNewlyLinkedSsts(),
738
- delta.GetNewlyUnlinkedSsts());
946
+ auto process_mutable = [&min_oldest_blob_file_num](
947
+ const MutableBlobFileMetaData& mutable_meta) {
948
+ return CheckLinkedSsts(mutable_meta, &min_oldest_blob_file_num);
949
+ };
739
950
 
740
- auto meta = BlobFileMetaData::Create(
741
- std::move(shared_meta), std::move(linked_ssts),
742
- base_meta->GetGarbageBlobCount() + delta.GetAdditionalGarbageCount(),
743
- base_meta->GetGarbageBlobBytes() + delta.GetAdditionalGarbageBytes());
951
+ auto process_both = [&min_oldest_blob_file_num](
952
+ const std::shared_ptr<BlobFileMetaData>& base_meta,
953
+ const MutableBlobFileMetaData& mutable_meta) {
954
+ #ifndef NDEBUG
955
+ assert(base_meta);
956
+ assert(base_meta->GetSharedMeta() == mutable_meta.GetSharedMeta());
957
+ #else
958
+ (void)base_meta;
959
+ #endif
960
+
961
+ // Look at mutable_meta since it supersedes *base_meta
962
+ return CheckLinkedSsts(mutable_meta, &min_oldest_blob_file_num);
963
+ };
964
+
965
+ MergeBlobFileMetas(kInvalidBlobFileNumber, process_base, process_mutable,
966
+ process_both);
967
+
968
+ return min_oldest_blob_file_num;
969
+ }
744
970
 
745
- return meta;
971
+ static std::shared_ptr<BlobFileMetaData> CreateBlobFileMetaData(
972
+ const MutableBlobFileMetaData& mutable_meta) {
973
+ return BlobFileMetaData::Create(
974
+ mutable_meta.GetSharedMeta(), mutable_meta.GetLinkedSsts(),
975
+ mutable_meta.GetGarbageBlobCount(), mutable_meta.GetGarbageBlobBytes());
746
976
  }
747
977
 
748
978
  // Add the blob file specified by meta to *vstorage if it is determined to
749
- // contain valid data (blobs). We make this decision based on the amount
750
- // of garbage in the file, and whether the file or any lower-numbered blob
751
- // files have any linked SSTs. The latter condition is tracked using the
752
- // flag *found_first_non_empty.
753
- void AddBlobFileIfNeeded(VersionStorageInfo* vstorage,
754
- const std::shared_ptr<BlobFileMetaData>& meta,
755
- bool* found_first_non_empty) const {
979
+ // contain valid data (blobs).
980
+ template <typename Meta>
981
+ static void AddBlobFileIfNeeded(VersionStorageInfo* vstorage, Meta&& meta) {
756
982
  assert(vstorage);
757
983
  assert(meta);
758
- assert(found_first_non_empty);
759
984
 
760
- if (!meta->GetLinkedSsts().empty()) {
761
- (*found_first_non_empty) = true;
762
- } else if (!(*found_first_non_empty) ||
763
- meta->GetGarbageBlobCount() >= meta->GetTotalBlobCount()) {
985
+ if (meta->GetLinkedSsts().empty() &&
986
+ meta->GetGarbageBlobCount() >= meta->GetTotalBlobCount()) {
764
987
  return;
765
988
  }
766
989
 
767
- vstorage->AddBlobFile(meta);
990
+ vstorage->AddBlobFile(std::forward<Meta>(meta));
768
991
  }
769
992
 
770
993
  // Merge the blob file metadata from the base version with the changes (edits)
771
994
  // applied, and save the result into *vstorage.
772
995
  void SaveBlobFilesTo(VersionStorageInfo* vstorage) const {
773
- assert(base_vstorage_);
774
996
  assert(vstorage);
775
997
 
776
- bool found_first_non_empty = false;
998
+ assert(base_vstorage_);
999
+ vstorage->ReserveBlob(base_vstorage_->GetBlobFiles().size() +
1000
+ mutable_blob_file_metas_.size());
777
1001
 
778
- const auto& base_blob_files = base_vstorage_->GetBlobFiles();
779
- auto base_it = base_blob_files.begin();
780
- const auto base_it_end = base_blob_files.end();
1002
+ const uint64_t oldest_blob_file_with_linked_ssts =
1003
+ GetMinOldestBlobFileNumber();
781
1004
 
782
- auto delta_it = blob_file_meta_deltas_.begin();
783
- const auto delta_it_end = blob_file_meta_deltas_.end();
1005
+ auto process_base =
1006
+ [vstorage](const std::shared_ptr<BlobFileMetaData>& base_meta) {
1007
+ assert(base_meta);
784
1008
 
785
- while (base_it != base_it_end && delta_it != delta_it_end) {
786
- const uint64_t base_blob_file_number = base_it->first;
787
- const uint64_t delta_blob_file_number = delta_it->first;
1009
+ AddBlobFileIfNeeded(vstorage, base_meta);
788
1010
 
789
- if (base_blob_file_number < delta_blob_file_number) {
790
- const auto& base_meta = base_it->second;
1011
+ return true;
1012
+ };
791
1013
 
792
- AddBlobFileIfNeeded(vstorage, base_meta, &found_first_non_empty);
1014
+ auto process_mutable =
1015
+ [vstorage](const MutableBlobFileMetaData& mutable_meta) {
1016
+ AddBlobFileIfNeeded(vstorage, CreateBlobFileMetaData(mutable_meta));
793
1017
 
794
- ++base_it;
795
- } else if (delta_blob_file_number < base_blob_file_number) {
796
- const auto& delta = delta_it->second;
1018
+ return true;
1019
+ };
797
1020
 
798
- auto meta = CreateMetaDataForNewBlobFile(delta);
1021
+ auto process_both = [vstorage](
1022
+ const std::shared_ptr<BlobFileMetaData>& base_meta,
1023
+ const MutableBlobFileMetaData& mutable_meta) {
1024
+ assert(base_meta);
1025
+ assert(base_meta->GetSharedMeta() == mutable_meta.GetSharedMeta());
799
1026
 
800
- AddBlobFileIfNeeded(vstorage, meta, &found_first_non_empty);
1027
+ if (!mutable_meta.HasDelta()) {
1028
+ assert(base_meta->GetGarbageBlobCount() ==
1029
+ mutable_meta.GetGarbageBlobCount());
1030
+ assert(base_meta->GetGarbageBlobBytes() ==
1031
+ mutable_meta.GetGarbageBlobBytes());
1032
+ assert(base_meta->GetLinkedSsts() == mutable_meta.GetLinkedSsts());
801
1033
 
802
- ++delta_it;
803
- } else {
804
- assert(base_blob_file_number == delta_blob_file_number);
1034
+ AddBlobFileIfNeeded(vstorage, base_meta);
805
1035
 
806
- const auto& base_meta = base_it->second;
807
- const auto& delta = delta_it->second;
1036
+ return true;
1037
+ }
808
1038
 
809
- auto meta = GetOrCreateMetaDataForExistingBlobFile(base_meta, delta);
1039
+ AddBlobFileIfNeeded(vstorage, CreateBlobFileMetaData(mutable_meta));
810
1040
 
811
- AddBlobFileIfNeeded(vstorage, meta, &found_first_non_empty);
1041
+ return true;
1042
+ };
812
1043
 
813
- ++base_it;
814
- ++delta_it;
815
- }
816
- }
1044
+ MergeBlobFileMetas(oldest_blob_file_with_linked_ssts, process_base,
1045
+ process_mutable, process_both);
1046
+ }
817
1047
 
818
- while (base_it != base_it_end) {
819
- const auto& base_meta = base_it->second;
1048
+ void MaybeAddFile(VersionStorageInfo* vstorage, int level,
1049
+ FileMetaData* f) const {
1050
+ const uint64_t file_number = f->fd.GetNumber();
820
1051
 
821
- AddBlobFileIfNeeded(vstorage, base_meta, &found_first_non_empty);
1052
+ const auto& level_state = levels_[level];
822
1053
 
823
- ++base_it;
1054
+ const auto& del_files = level_state.deleted_files;
1055
+ const auto del_it = del_files.find(file_number);
1056
+
1057
+ if (del_it != del_files.end()) {
1058
+ // f is to-be-deleted table file
1059
+ vstorage->RemoveCurrentStats(f);
1060
+ } else {
1061
+ const auto& add_files = level_state.added_files;
1062
+ const auto add_it = add_files.find(file_number);
1063
+
1064
+ // Note: if the file appears both in the base version and in the added
1065
+ // list, the added FileMetaData supersedes the one in the base version.
1066
+ if (add_it != add_files.end() && add_it->second != f) {
1067
+ vstorage->RemoveCurrentStats(f);
1068
+ } else {
1069
+ vstorage->AddFile(level, f);
1070
+ }
824
1071
  }
1072
+ }
1073
+
1074
+ template <typename Cmp>
1075
+ void SaveSSTFilesTo(VersionStorageInfo* vstorage, int level, Cmp cmp) const {
1076
+ // Merge the set of added files with the set of pre-existing files.
1077
+ // Drop any deleted files. Store the result in *vstorage.
1078
+ const auto& base_files = base_vstorage_->LevelFiles(level);
1079
+ const auto& unordered_added_files = levels_[level].added_files;
1080
+ vstorage->Reserve(level, base_files.size() + unordered_added_files.size());
1081
+
1082
+ // Sort added files for the level.
1083
+ std::vector<FileMetaData*> added_files;
1084
+ added_files.reserve(unordered_added_files.size());
1085
+ for (const auto& pair : unordered_added_files) {
1086
+ added_files.push_back(pair.second);
1087
+ }
1088
+ std::sort(added_files.begin(), added_files.end(), cmp);
1089
+
1090
+ auto base_iter = base_files.begin();
1091
+ auto base_end = base_files.end();
1092
+ auto added_iter = added_files.begin();
1093
+ auto added_end = added_files.end();
1094
+ while (added_iter != added_end || base_iter != base_end) {
1095
+ if (base_iter == base_end ||
1096
+ (added_iter != added_end && cmp(*added_iter, *base_iter))) {
1097
+ MaybeAddFile(vstorage, level, *added_iter++);
1098
+ } else {
1099
+ MaybeAddFile(vstorage, level, *base_iter++);
1100
+ }
1101
+ }
1102
+ }
825
1103
 
826
- while (delta_it != delta_it_end) {
827
- const auto& delta = delta_it->second;
1104
+ void SaveSSTFilesTo(VersionStorageInfo* vstorage) const {
1105
+ assert(vstorage);
828
1106
 
829
- auto meta = CreateMetaDataForNewBlobFile(delta);
1107
+ if (!num_levels_) {
1108
+ return;
1109
+ }
830
1110
 
831
- AddBlobFileIfNeeded(vstorage, meta, &found_first_non_empty);
1111
+ SaveSSTFilesTo(vstorage, /* level */ 0, level_zero_cmp_);
832
1112
 
833
- ++delta_it;
1113
+ for (int level = 1; level < num_levels_; ++level) {
1114
+ SaveSSTFilesTo(vstorage, level, level_nonzero_cmp_);
834
1115
  }
835
1116
  }
836
1117
 
837
- // Save the current state in *v.
838
- Status SaveTo(VersionStorageInfo* vstorage) {
1118
+ // Save the current state in *vstorage.
1119
+ Status SaveTo(VersionStorageInfo* vstorage) const {
839
1120
  Status s = CheckConsistency(base_vstorage_);
840
1121
  if (!s.ok()) {
841
1122
  return s;
@@ -846,47 +1127,7 @@ class VersionBuilder::Rep {
846
1127
  return s;
847
1128
  }
848
1129
 
849
- for (int level = 0; level < num_levels_; level++) {
850
- const auto& cmp = (level == 0) ? level_zero_cmp_ : level_nonzero_cmp_;
851
- // Merge the set of added files with the set of pre-existing files.
852
- // Drop any deleted files. Store the result in *v.
853
- const auto& base_files = base_vstorage_->LevelFiles(level);
854
- const auto& unordered_added_files = levels_[level].added_files;
855
- vstorage->Reserve(level,
856
- base_files.size() + unordered_added_files.size());
857
-
858
- // Sort added files for the level.
859
- std::vector<FileMetaData*> added_files;
860
- added_files.reserve(unordered_added_files.size());
861
- for (const auto& pair : unordered_added_files) {
862
- added_files.push_back(pair.second);
863
- }
864
- std::sort(added_files.begin(), added_files.end(), cmp);
865
-
866
- #ifndef NDEBUG
867
- FileMetaData* prev_added_file = nullptr;
868
- for (const auto& added : added_files) {
869
- if (level > 0 && prev_added_file != nullptr) {
870
- assert(base_vstorage_->InternalComparator()->Compare(
871
- prev_added_file->smallest, added->smallest) <= 0);
872
- }
873
- prev_added_file = added;
874
- }
875
- #endif
876
-
877
- auto base_iter = base_files.begin();
878
- auto base_end = base_files.end();
879
- auto added_iter = added_files.begin();
880
- auto added_end = added_files.end();
881
- while (added_iter != added_end || base_iter != base_end) {
882
- if (base_iter == base_end ||
883
- (added_iter != added_end && cmp(*added_iter, *base_iter))) {
884
- MaybeAddFile(vstorage, level, *added_iter++);
885
- } else {
886
- MaybeAddFile(vstorage, level, *base_iter++);
887
- }
888
- }
889
- }
1130
+ SaveSSTFilesTo(vstorage);
890
1131
 
891
1132
  SaveBlobFilesTo(vstorage);
892
1133
 
@@ -894,11 +1135,11 @@ class VersionBuilder::Rep {
894
1135
  return s;
895
1136
  }
896
1137
 
897
- Status LoadTableHandlers(InternalStats* internal_stats, int max_threads,
898
- bool prefetch_index_and_filter_in_cache,
899
- bool is_initial_load,
900
- const SliceTransform* prefix_extractor,
901
- size_t max_file_size_for_l0_meta_pin) {
1138
+ Status LoadTableHandlers(
1139
+ InternalStats* internal_stats, int max_threads,
1140
+ bool prefetch_index_and_filter_in_cache, bool is_initial_load,
1141
+ const std::shared_ptr<const SliceTransform>& prefix_extractor,
1142
+ size_t max_file_size_for_l0_meta_pin) {
902
1143
  assert(table_cache_ != nullptr);
903
1144
 
904
1145
  size_t table_cache_capacity = table_cache_->get_cache()->GetCapacity();
@@ -968,7 +1209,8 @@ class VersionBuilder::Rep {
968
1209
  &file_meta->table_reader_handle, prefix_extractor, false /*no_io */,
969
1210
  true /* record_read_stats */,
970
1211
  internal_stats->GetFileReadHist(level), false, level,
971
- prefetch_index_and_filter_in_cache, max_file_size_for_l0_meta_pin);
1212
+ prefetch_index_and_filter_in_cache, max_file_size_for_l0_meta_pin,
1213
+ file_meta->temperature);
972
1214
  if (file_meta->table_reader_handle != nullptr) {
973
1215
  // Load table_reader
974
1216
  file_meta->fd.table_reader = table_cache_->GetTableReaderFromHandle(
@@ -995,31 +1237,6 @@ class VersionBuilder::Rep {
995
1237
  }
996
1238
  return ret;
997
1239
  }
998
-
999
- void MaybeAddFile(VersionStorageInfo* vstorage, int level, FileMetaData* f) {
1000
- const uint64_t file_number = f->fd.GetNumber();
1001
-
1002
- const auto& level_state = levels_[level];
1003
-
1004
- const auto& del_files = level_state.deleted_files;
1005
- const auto del_it = del_files.find(file_number);
1006
-
1007
- if (del_it != del_files.end()) {
1008
- // f is to-be-deleted table file
1009
- vstorage->RemoveCurrentStats(f);
1010
- } else {
1011
- const auto& add_files = level_state.added_files;
1012
- const auto add_it = add_files.find(file_number);
1013
-
1014
- // Note: if the file appears both in the base version and in the added
1015
- // list, the added FileMetaData supersedes the one in the base version.
1016
- if (add_it != add_files.end() && add_it->second != f) {
1017
- vstorage->RemoveCurrentStats(f);
1018
- } else {
1019
- vstorage->AddFile(level, f);
1020
- }
1021
- }
1022
- }
1023
1240
  };
1024
1241
 
1025
1242
  VersionBuilder::VersionBuilder(const FileOptions& file_options,
@@ -1036,22 +1253,28 @@ bool VersionBuilder::CheckConsistencyForNumLevels() {
1036
1253
  return rep_->CheckConsistencyForNumLevels();
1037
1254
  }
1038
1255
 
1039
- Status VersionBuilder::Apply(VersionEdit* edit) { return rep_->Apply(edit); }
1256
+ Status VersionBuilder::Apply(const VersionEdit* edit) {
1257
+ return rep_->Apply(edit);
1258
+ }
1040
1259
 
1041
- Status VersionBuilder::SaveTo(VersionStorageInfo* vstorage) {
1260
+ Status VersionBuilder::SaveTo(VersionStorageInfo* vstorage) const {
1042
1261
  return rep_->SaveTo(vstorage);
1043
1262
  }
1044
1263
 
1045
1264
  Status VersionBuilder::LoadTableHandlers(
1046
1265
  InternalStats* internal_stats, int max_threads,
1047
1266
  bool prefetch_index_and_filter_in_cache, bool is_initial_load,
1048
- const SliceTransform* prefix_extractor,
1267
+ const std::shared_ptr<const SliceTransform>& prefix_extractor,
1049
1268
  size_t max_file_size_for_l0_meta_pin) {
1050
1269
  return rep_->LoadTableHandlers(
1051
1270
  internal_stats, max_threads, prefetch_index_and_filter_in_cache,
1052
1271
  is_initial_load, prefix_extractor, max_file_size_for_l0_meta_pin);
1053
1272
  }
1054
1273
 
1274
+ uint64_t VersionBuilder::GetMinOldestBlobFileNumber() const {
1275
+ return rep_->GetMinOldestBlobFileNumber();
1276
+ }
1277
+
1055
1278
  BaseReferencedVersionBuilder::BaseReferencedVersionBuilder(
1056
1279
  ColumnFamilyData* cfd)
1057
1280
  : version_builder_(new VersionBuilder(