@nxtedition/rocksdb 5.2.21 → 5.2.28

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 (923) hide show
  1. package/binding.cc +510 -967
  2. package/binding.gyp +78 -72
  3. package/chained-batch.js +1 -2
  4. package/deps/rocksdb/build_version.cc +70 -4
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  6. package/deps/rocksdb/rocksdb/Makefile +459 -469
  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/cmake/modules/CxxFlags.cmake +7 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  37. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  38. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  39. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  40. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  41. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  42. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  43. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  57. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  61. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  64. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  67. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  68. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  69. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  70. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  71. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  72. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  73. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  74. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  75. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  76. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  77. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  78. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  79. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  80. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  81. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  82. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  83. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  103. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  104. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  105. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  106. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  107. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  108. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  110. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  111. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  112. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  113. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  114. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  115. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  116. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  117. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  118. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  119. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  120. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  121. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  122. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  133. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  134. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  135. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  136. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  137. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  138. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  139. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  140. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  141. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  142. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  143. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  144. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  145. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  146. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  147. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  149. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  150. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  151. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  152. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  153. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  154. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  155. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  156. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  157. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  158. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  159. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  160. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  161. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  162. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  163. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  164. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  165. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  166. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  167. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  168. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  169. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  170. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  171. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  172. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  173. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  174. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  175. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  176. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  177. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  178. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  179. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  180. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  181. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  182. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  183. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  184. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  185. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  186. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  187. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  188. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  189. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  190. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  191. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  192. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  193. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  194. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  195. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  196. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  197. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  198. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  199. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  200. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  201. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  202. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  203. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  204. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  205. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  206. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  207. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  208. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  209. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  210. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  211. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  212. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  213. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  214. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  215. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  216. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  217. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  218. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  219. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  220. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  221. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  222. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  224. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  225. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  226. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  227. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  228. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  229. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  230. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  231. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  232. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  233. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  234. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  235. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  236. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  237. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  238. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  239. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  240. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  241. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  242. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  243. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  244. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  245. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  246. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  247. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  248. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  249. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  250. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  251. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  252. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  253. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  254. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  255. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  256. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  257. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  258. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  260. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  261. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  262. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  263. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  264. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  284. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  290. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  291. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  292. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  293. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  294. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  295. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  296. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  297. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  298. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  299. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  300. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  301. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  302. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  303. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  304. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  305. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  306. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  307. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  308. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  309. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  310. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  311. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  312. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  313. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  314. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  315. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  316. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  317. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  318. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  319. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  320. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  321. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  322. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  323. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  324. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  325. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  326. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  327. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  328. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  329. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  330. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  331. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  332. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  333. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  334. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  335. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  336. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  337. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  338. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  339. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  340. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  341. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  342. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  343. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  344. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  345. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  346. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  347. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  349. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  350. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  351. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  353. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  354. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  356. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  358. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  359. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  360. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  362. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  363. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  364. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  365. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  367. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  368. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  369. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  370. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  371. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  372. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  373. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  374. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  375. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  376. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  377. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  378. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  381. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  382. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  383. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  385. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  386. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  388. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  390. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  391. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  392. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  393. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  396. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  397. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  417. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  418. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  419. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  420. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  422. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  423. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  425. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  426. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  427. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  428. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  429. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  430. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  431. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  432. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  433. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  434. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  435. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  436. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  437. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  438. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  439. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  440. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  441. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  442. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  443. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  444. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  445. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  446. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  447. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  448. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  449. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  450. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  451. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  452. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  453. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  454. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  455. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  456. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  457. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  458. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  459. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  460. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  461. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  462. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  463. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  464. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  465. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  466. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  467. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  468. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  469. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  470. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  471. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  472. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  473. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  474. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  475. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  476. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  477. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  478. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  479. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  480. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  481. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  482. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  483. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  484. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  485. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  486. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  487. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  488. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  489. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  490. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  491. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  492. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  493. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  494. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  495. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  496. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  497. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  498. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  499. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  500. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  501. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  502. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  503. package/deps/rocksdb/rocksdb/python.mk +9 -0
  504. package/deps/rocksdb/rocksdb/src.mk +82 -34
  505. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  506. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  507. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  508. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  514. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  515. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  516. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  517. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  518. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  519. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  520. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  521. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  522. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  523. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  524. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  525. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  526. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  527. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  529. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  530. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  531. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  532. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  534. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  535. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  536. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  537. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  538. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  539. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  540. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  541. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  542. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  543. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  544. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  547. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  548. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  549. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  550. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  551. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  552. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  553. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  554. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  555. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  556. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  557. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  558. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  559. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  560. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  561. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  562. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  563. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  564. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  565. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  566. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  567. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  568. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  569. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  570. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  571. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  572. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  573. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  574. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  575. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  576. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  577. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  578. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  579. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  580. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  581. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  582. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  586. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  587. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  588. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  589. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  590. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  591. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  592. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  593. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  594. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  595. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  596. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  597. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  598. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  599. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  600. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  601. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  602. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  603. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  604. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  605. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  606. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  607. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  608. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  609. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  610. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  611. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  612. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  613. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  614. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  615. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  616. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  617. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  618. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  619. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  620. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  621. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  622. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  623. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  624. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  625. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  626. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  627. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  628. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  629. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  630. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  631. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  632. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  633. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  634. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  635. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  636. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  637. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  638. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  639. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  640. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  641. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  642. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  643. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  644. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  645. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  646. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  647. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  648. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  649. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  650. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  651. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  652. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  653. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  654. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  655. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  656. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  657. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  658. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  659. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  660. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  661. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  662. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  663. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  664. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  665. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  666. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  667. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  668. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  669. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  670. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  671. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  672. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  673. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  674. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  675. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  676. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  677. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  678. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  679. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  680. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  681. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  682. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  683. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  684. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  685. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  686. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  687. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  688. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  689. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  690. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  691. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  692. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  693. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  694. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  695. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  696. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  697. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  698. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  699. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  700. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  701. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  702. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  703. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  704. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  705. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  706. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  707. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  708. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  709. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  710. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  711. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  712. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  713. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  714. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  715. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  716. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  717. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  718. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  719. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  720. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  721. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  722. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  723. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  724. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  725. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  726. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  727. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  728. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  729. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  730. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  731. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  732. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  733. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  734. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  741. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  742. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  743. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  744. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  745. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  746. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  747. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  748. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  749. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  750. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  751. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  752. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  753. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  754. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  755. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  756. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  757. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  758. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  759. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  760. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  761. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  762. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  763. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  764. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  765. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  766. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  767. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  768. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  769. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  770. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  771. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  772. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  773. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  774. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  775. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  776. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  777. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  778. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  779. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  780. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  786. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  787. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  788. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  789. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  790. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  791. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  792. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  793. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  794. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  795. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  796. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  797. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  798. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  799. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  802. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  803. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  804. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  805. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  806. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  807. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  808. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  809. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  810. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  811. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  812. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  813. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  814. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  815. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  816. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  817. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  818. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  821. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  822. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  823. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  824. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  825. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  826. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  827. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  828. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  829. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  830. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  831. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  832. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  833. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  834. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  835. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  836. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  837. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  838. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  839. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  840. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  841. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  842. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  843. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  844. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  845. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  846. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  847. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  848. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  849. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  850. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  851. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  852. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  853. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  854. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  855. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  856. package/deps/rocksdb/rocksdb.gyp +425 -446
  857. package/index.js +5 -87
  858. package/package-lock.json +23687 -0
  859. package/package.json +8 -9
  860. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  861. package/prebuilds/darwin-x64/node.napi.node +0 -0
  862. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  863. package/deps/rocksdb/rocksdb/README.md +0 -32
  864. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  865. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  866. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  867. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  868. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  869. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  870. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  871. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  872. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  873. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  874. package/deps/rocksdb/rocksdb/port/README +0 -10
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  905. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  906. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  907. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  908. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  909. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  910. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  911. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  912. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  913. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  914. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  915. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  916. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  917. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  918. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  919. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  920. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  921. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  922. package/deps/snappy/snappy-1.1.7/README.md +0 -149
  923. 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(