@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
@@ -8,78 +8,67 @@
8
8
  #include <iterator>
9
9
  #include <limits>
10
10
 
11
+ #include "db/blob/blob_fetcher.h"
11
12
  #include "db/blob/blob_file_builder.h"
12
13
  #include "db/blob/blob_index.h"
14
+ #include "db/blob/prefetch_buffer_collection.h"
13
15
  #include "db/snapshot_checker.h"
16
+ #include "logging/logging.h"
14
17
  #include "port/likely.h"
15
18
  #include "rocksdb/listener.h"
16
19
  #include "table/internal_iterator.h"
17
20
  #include "test_util/sync_point.h"
18
21
 
19
- #define DEFINITELY_IN_SNAPSHOT(seq, snapshot) \
20
- ((seq) <= (snapshot) && \
21
- (snapshot_checker_ == nullptr || \
22
- LIKELY(snapshot_checker_->CheckInSnapshot((seq), (snapshot)) == \
23
- SnapshotCheckerResult::kInSnapshot)))
24
-
25
- #define DEFINITELY_NOT_IN_SNAPSHOT(seq, snapshot) \
26
- ((seq) > (snapshot) || \
27
- (snapshot_checker_ != nullptr && \
28
- UNLIKELY(snapshot_checker_->CheckInSnapshot((seq), (snapshot)) == \
29
- SnapshotCheckerResult::kNotInSnapshot)))
30
-
31
- #define IN_EARLIEST_SNAPSHOT(seq) \
32
- ((seq) <= earliest_snapshot_ && \
33
- (snapshot_checker_ == nullptr || LIKELY(IsInEarliestSnapshot(seq))))
34
-
35
22
  namespace ROCKSDB_NAMESPACE {
36
-
37
23
  CompactionIterator::CompactionIterator(
38
24
  InternalIterator* input, const Comparator* cmp, MergeHelper* merge_helper,
39
25
  SequenceNumber last_sequence, std::vector<SequenceNumber>* snapshots,
40
26
  SequenceNumber earliest_write_conflict_snapshot,
41
- const SnapshotChecker* snapshot_checker, Env* env,
42
- bool report_detailed_time, bool expect_valid_internal_key,
27
+ SequenceNumber job_snapshot, const SnapshotChecker* snapshot_checker,
28
+ Env* env, bool report_detailed_time, bool expect_valid_internal_key,
43
29
  CompactionRangeDelAggregator* range_del_agg,
44
30
  BlobFileBuilder* blob_file_builder, bool allow_data_in_errors,
45
31
  const Compaction* compaction, const CompactionFilter* compaction_filter,
46
32
  const std::atomic<bool>* shutting_down,
47
- const SequenceNumber preserve_deletes_seqnum,
48
33
  const std::atomic<int>* manual_compaction_paused,
34
+ const std::atomic<bool>* manual_compaction_canceled,
49
35
  const std::shared_ptr<Logger> info_log,
50
36
  const std::string* full_history_ts_low)
51
37
  : CompactionIterator(
52
38
  input, cmp, merge_helper, last_sequence, snapshots,
53
- earliest_write_conflict_snapshot, snapshot_checker, env,
39
+ earliest_write_conflict_snapshot, job_snapshot, snapshot_checker, env,
54
40
  report_detailed_time, expect_valid_internal_key, range_del_agg,
55
41
  blob_file_builder, allow_data_in_errors,
56
42
  std::unique_ptr<CompactionProxy>(
57
43
  compaction ? new RealCompaction(compaction) : nullptr),
58
- compaction_filter, shutting_down, preserve_deletes_seqnum,
59
- manual_compaction_paused, info_log, full_history_ts_low) {}
44
+ compaction_filter, shutting_down, manual_compaction_paused,
45
+ manual_compaction_canceled, info_log, full_history_ts_low) {}
60
46
 
61
47
  CompactionIterator::CompactionIterator(
62
48
  InternalIterator* input, const Comparator* cmp, MergeHelper* merge_helper,
63
49
  SequenceNumber /*last_sequence*/, std::vector<SequenceNumber>* snapshots,
64
50
  SequenceNumber earliest_write_conflict_snapshot,
65
- const SnapshotChecker* snapshot_checker, Env* env,
66
- bool report_detailed_time, bool expect_valid_internal_key,
51
+ SequenceNumber job_snapshot, const SnapshotChecker* snapshot_checker,
52
+ Env* env, bool report_detailed_time, bool expect_valid_internal_key,
67
53
  CompactionRangeDelAggregator* range_del_agg,
68
54
  BlobFileBuilder* blob_file_builder, bool allow_data_in_errors,
69
55
  std::unique_ptr<CompactionProxy> compaction,
70
56
  const CompactionFilter* compaction_filter,
71
57
  const std::atomic<bool>* shutting_down,
72
- const SequenceNumber preserve_deletes_seqnum,
73
58
  const std::atomic<int>* manual_compaction_paused,
59
+ const std::atomic<bool>* manual_compaction_canceled,
74
60
  const std::shared_ptr<Logger> info_log,
75
61
  const std::string* full_history_ts_low)
76
- : input_(input),
62
+ : input_(input, cmp,
63
+ !compaction || compaction->DoesInputReferenceBlobFiles()),
77
64
  cmp_(cmp),
78
65
  merge_helper_(merge_helper),
79
66
  snapshots_(snapshots),
80
67
  earliest_write_conflict_snapshot_(earliest_write_conflict_snapshot),
68
+ job_snapshot_(job_snapshot),
81
69
  snapshot_checker_(snapshot_checker),
82
70
  env_(env),
71
+ clock_(env_->GetSystemClock().get()),
83
72
  report_detailed_time_(report_detailed_time),
84
73
  expect_valid_internal_key_(expect_valid_internal_key),
85
74
  range_del_agg_(range_del_agg),
@@ -88,7 +77,7 @@ CompactionIterator::CompactionIterator(
88
77
  compaction_filter_(compaction_filter),
89
78
  shutting_down_(shutting_down),
90
79
  manual_compaction_paused_(manual_compaction_paused),
91
- preserve_deletes_seqnum_(preserve_deletes_seqnum),
80
+ manual_compaction_canceled_(manual_compaction_canceled),
92
81
  info_log_(info_log),
93
82
  allow_data_in_errors_(allow_data_in_errors),
94
83
  timestamp_size_(cmp_ ? cmp_->timestamp_size() : 0),
@@ -98,9 +87,12 @@ CompactionIterator::CompactionIterator(
98
87
  merge_out_iter_(merge_helper_),
99
88
  blob_garbage_collection_cutoff_file_number_(
100
89
  ComputeBlobGarbageCollectionCutoffFileNumber(compaction_.get())),
90
+ blob_fetcher_(CreateBlobFetcherIfNeeded(compaction_.get())),
91
+ prefetch_buffers_(
92
+ CreatePrefetchBufferCollectionIfNeeded(compaction_.get())),
101
93
  current_key_committed_(false),
102
- cmp_with_history_ts_low_(0) {
103
- assert(compaction_filter_ == nullptr || compaction_ != nullptr);
94
+ cmp_with_history_ts_low_(0),
95
+ level_(compaction_ == nullptr ? 0 : compaction_->level()) {
104
96
  assert(snapshots_ != nullptr);
105
97
  bottommost_level_ = compaction_ == nullptr
106
98
  ? false
@@ -129,13 +121,13 @@ CompactionIterator::CompactionIterator(
129
121
  assert(timestamp_size_ == 0 || !full_history_ts_low_ ||
130
122
  timestamp_size_ == full_history_ts_low_->size());
131
123
  #endif
132
- input_->SetPinnedItersMgr(&pinned_iters_mgr_);
124
+ input_.SetPinnedItersMgr(&pinned_iters_mgr_);
133
125
  TEST_SYNC_POINT_CALLBACK("CompactionIterator:AfterInit", compaction_.get());
134
126
  }
135
127
 
136
128
  CompactionIterator::~CompactionIterator() {
137
- // input_ Iteartor lifetime is longer than pinned_iters_mgr_ lifetime
138
- input_->SetPinnedItersMgr(nullptr);
129
+ // input_ Iterator lifetime is longer than pinned_iters_mgr_ lifetime
130
+ input_.SetPinnedItersMgr(nullptr);
139
131
  }
140
132
 
141
133
  void CompactionIterator::ResetRecordCounts() {
@@ -188,7 +180,7 @@ void CompactionIterator::Next() {
188
180
  // Only advance the input iterator if there is no merge output and the
189
181
  // iterator is not already at the next record.
190
182
  if (!at_next_) {
191
- input_->Next();
183
+ AdvanceInputIter();
192
184
  }
193
185
  NextFromInput();
194
186
  }
@@ -203,82 +195,169 @@ void CompactionIterator::Next() {
203
195
 
204
196
  bool CompactionIterator::InvokeFilterIfNeeded(bool* need_skip,
205
197
  Slice* skip_until) {
206
- if (compaction_filter_ != nullptr &&
207
- (ikey_.type == kTypeValue || ikey_.type == kTypeBlobIndex)) {
208
- // If the user has specified a compaction filter and the sequence
209
- // number is greater than any external snapshot, then invoke the
210
- // filter. If the return value of the compaction filter is true,
211
- // replace the entry with a deletion marker.
212
- CompactionFilter::Decision filter;
213
- compaction_filter_value_.clear();
214
- compaction_filter_skip_until_.Clear();
215
- CompactionFilter::ValueType value_type =
216
- ikey_.type == kTypeValue ? CompactionFilter::ValueType::kValue
217
- : CompactionFilter::ValueType::kBlobIndex;
218
- // Hack: pass internal key to BlobIndexCompactionFilter since it needs
219
- // to get sequence number.
220
- Slice& filter_key = ikey_.type == kTypeValue ? ikey_.user_key : key_;
221
- {
222
- StopWatchNano timer(env_, report_detailed_time_);
198
+ if (!compaction_filter_ ||
199
+ (ikey_.type != kTypeValue && ikey_.type != kTypeBlobIndex)) {
200
+ return true;
201
+ }
202
+ bool error = false;
203
+ // If the user has specified a compaction filter and the sequence
204
+ // number is greater than any external snapshot, then invoke the
205
+ // filter. If the return value of the compaction filter is true,
206
+ // replace the entry with a deletion marker.
207
+ CompactionFilter::Decision filter = CompactionFilter::Decision::kUndetermined;
208
+ compaction_filter_value_.clear();
209
+ compaction_filter_skip_until_.Clear();
210
+ CompactionFilter::ValueType value_type =
211
+ ikey_.type == kTypeValue ? CompactionFilter::ValueType::kValue
212
+ : CompactionFilter::ValueType::kBlobIndex;
213
+ // Hack: pass internal key to BlobIndexCompactionFilter since it needs
214
+ // to get sequence number.
215
+ assert(compaction_filter_);
216
+ Slice& filter_key =
217
+ (ikey_.type == kTypeValue ||
218
+ !compaction_filter_->IsStackedBlobDbInternalCompactionFilter())
219
+ ? ikey_.user_key
220
+ : key_;
221
+ {
222
+ StopWatchNano timer(clock_, report_detailed_time_);
223
+ if (kTypeBlobIndex == ikey_.type) {
224
+ blob_value_.Reset();
225
+ filter = compaction_filter_->FilterBlobByKey(
226
+ level_, filter_key, &compaction_filter_value_,
227
+ compaction_filter_skip_until_.rep());
228
+ if (CompactionFilter::Decision::kUndetermined == filter &&
229
+ !compaction_filter_->IsStackedBlobDbInternalCompactionFilter()) {
230
+ if (compaction_ == nullptr) {
231
+ status_ =
232
+ Status::Corruption("Unexpected blob index outside of compaction");
233
+ valid_ = false;
234
+ return false;
235
+ }
236
+
237
+ TEST_SYNC_POINT_CALLBACK(
238
+ "CompactionIterator::InvokeFilterIfNeeded::TamperWithBlobIndex",
239
+ &value_);
240
+
241
+ // For integrated BlobDB impl, CompactionIterator reads blob value.
242
+ // For Stacked BlobDB impl, the corresponding CompactionFilter's
243
+ // FilterV2 method should read the blob value.
244
+ BlobIndex blob_index;
245
+ Status s = blob_index.DecodeFrom(value_);
246
+ if (!s.ok()) {
247
+ status_ = s;
248
+ valid_ = false;
249
+ return false;
250
+ }
251
+
252
+ FilePrefetchBuffer* prefetch_buffer =
253
+ prefetch_buffers_ ? prefetch_buffers_->GetOrCreatePrefetchBuffer(
254
+ blob_index.file_number())
255
+ : nullptr;
256
+
257
+ uint64_t bytes_read = 0;
258
+
259
+ assert(blob_fetcher_);
260
+
261
+ s = blob_fetcher_->FetchBlob(ikey_.user_key, blob_index,
262
+ prefetch_buffer, &blob_value_,
263
+ &bytes_read);
264
+ if (!s.ok()) {
265
+ status_ = s;
266
+ valid_ = false;
267
+ return false;
268
+ }
269
+
270
+ ++iter_stats_.num_blobs_read;
271
+ iter_stats_.total_blob_bytes_read += bytes_read;
272
+
273
+ value_type = CompactionFilter::ValueType::kValue;
274
+ }
275
+ }
276
+ if (CompactionFilter::Decision::kUndetermined == filter) {
223
277
  filter = compaction_filter_->FilterV2(
224
- compaction_->level(), filter_key, value_type, value_,
225
- &compaction_filter_value_, compaction_filter_skip_until_.rep());
226
- iter_stats_.total_filter_time +=
227
- env_ != nullptr && report_detailed_time_ ? timer.ElapsedNanos() : 0;
278
+ level_, filter_key, value_type,
279
+ blob_value_.empty() ? value_ : blob_value_, &compaction_filter_value_,
280
+ compaction_filter_skip_until_.rep());
228
281
  }
282
+ iter_stats_.total_filter_time +=
283
+ env_ != nullptr && report_detailed_time_ ? timer.ElapsedNanos() : 0;
284
+ }
229
285
 
230
- if (filter == CompactionFilter::Decision::kRemoveAndSkipUntil &&
231
- cmp_->Compare(*compaction_filter_skip_until_.rep(), ikey_.user_key) <=
232
- 0) {
233
- // Can't skip to a key smaller than the current one.
234
- // Keep the key as per FilterV2 documentation.
235
- filter = CompactionFilter::Decision::kKeep;
236
- }
286
+ if (CompactionFilter::Decision::kUndetermined == filter) {
287
+ // Should not reach here, since FilterV2 should never return kUndetermined.
288
+ status_ =
289
+ Status::NotSupported("FilterV2() should never return kUndetermined");
290
+ valid_ = false;
291
+ return false;
292
+ }
237
293
 
238
- if (filter == CompactionFilter::Decision::kRemove) {
239
- // convert the current key to a delete; key_ is pointing into
240
- // current_key_ at this point, so updating current_key_ updates key()
241
- ikey_.type = kTypeDeletion;
242
- current_key_.UpdateInternalKey(ikey_.sequence, kTypeDeletion);
243
- // no value associated with delete
244
- value_.clear();
245
- iter_stats_.num_record_drop_user++;
246
- } else if (filter == CompactionFilter::Decision::kChangeValue) {
247
- if (ikey_.type == kTypeBlobIndex) {
248
- // value transfer from blob file to inlined data
249
- ikey_.type = kTypeValue;
250
- current_key_.UpdateInternalKey(ikey_.sequence, ikey_.type);
251
- }
252
- value_ = compaction_filter_value_;
253
- } else if (filter == CompactionFilter::Decision::kRemoveAndSkipUntil) {
254
- *need_skip = true;
255
- compaction_filter_skip_until_.ConvertFromUserKey(kMaxSequenceNumber,
256
- kValueTypeForSeek);
257
- *skip_until = compaction_filter_skip_until_.Encode();
258
- } else if (filter == CompactionFilter::Decision::kChangeBlobIndex) {
259
- if (ikey_.type == kTypeValue) {
260
- // value transfer from inlined data to blob file
261
- ikey_.type = kTypeBlobIndex;
262
- current_key_.UpdateInternalKey(ikey_.sequence, ikey_.type);
263
- }
264
- value_ = compaction_filter_value_;
265
- } else if (filter == CompactionFilter::Decision::kIOError) {
266
- status_ =
267
- Status::IOError("Failed to access blob during compaction filter");
294
+ if (filter == CompactionFilter::Decision::kRemoveAndSkipUntil &&
295
+ cmp_->Compare(*compaction_filter_skip_until_.rep(), ikey_.user_key) <=
296
+ 0) {
297
+ // Can't skip to a key smaller than the current one.
298
+ // Keep the key as per FilterV2 documentation.
299
+ filter = CompactionFilter::Decision::kKeep;
300
+ }
301
+
302
+ if (filter == CompactionFilter::Decision::kRemove) {
303
+ // convert the current key to a delete; key_ is pointing into
304
+ // current_key_ at this point, so updating current_key_ updates key()
305
+ ikey_.type = kTypeDeletion;
306
+ current_key_.UpdateInternalKey(ikey_.sequence, kTypeDeletion);
307
+ // no value associated with delete
308
+ value_.clear();
309
+ iter_stats_.num_record_drop_user++;
310
+ } else if (filter == CompactionFilter::Decision::kChangeValue) {
311
+ if (ikey_.type == kTypeBlobIndex) {
312
+ // value transfer from blob file to inlined data
313
+ ikey_.type = kTypeValue;
314
+ current_key_.UpdateInternalKey(ikey_.sequence, ikey_.type);
315
+ }
316
+ value_ = compaction_filter_value_;
317
+ } else if (filter == CompactionFilter::Decision::kRemoveAndSkipUntil) {
318
+ *need_skip = true;
319
+ compaction_filter_skip_until_.ConvertFromUserKey(kMaxSequenceNumber,
320
+ kValueTypeForSeek);
321
+ *skip_until = compaction_filter_skip_until_.Encode();
322
+ } else if (filter == CompactionFilter::Decision::kChangeBlobIndex) {
323
+ // Only the StackableDB-based BlobDB impl's compaction filter should return
324
+ // kChangeBlobIndex. Decision about rewriting blob and changing blob index
325
+ // in the integrated BlobDB impl is made in subsequent call to
326
+ // PrepareOutput() and its callees.
327
+ if (!compaction_filter_->IsStackedBlobDbInternalCompactionFilter()) {
328
+ status_ = Status::NotSupported(
329
+ "Only stacked BlobDB's internal compaction filter can return "
330
+ "kChangeBlobIndex.");
331
+ valid_ = false;
332
+ return false;
333
+ }
334
+ if (ikey_.type == kTypeValue) {
335
+ // value transfer from inlined data to blob file
336
+ ikey_.type = kTypeBlobIndex;
337
+ current_key_.UpdateInternalKey(ikey_.sequence, ikey_.type);
338
+ }
339
+ value_ = compaction_filter_value_;
340
+ } else if (filter == CompactionFilter::Decision::kIOError) {
341
+ if (!compaction_filter_->IsStackedBlobDbInternalCompactionFilter()) {
342
+ status_ = Status::NotSupported(
343
+ "CompactionFilter for integrated BlobDB should not return kIOError");
344
+ valid_ = false;
268
345
  return false;
269
346
  }
347
+ status_ = Status::IOError("Failed to access blob during compaction filter");
348
+ error = true;
270
349
  }
271
- return true;
350
+ return !error;
272
351
  }
273
352
 
274
353
  void CompactionIterator::NextFromInput() {
275
354
  at_next_ = false;
276
355
  valid_ = false;
277
356
 
278
- while (!valid_ && input_->Valid() && !IsPausingManualCompaction() &&
357
+ while (!valid_ && input_.Valid() && !IsPausingManualCompaction() &&
279
358
  !IsShuttingDown()) {
280
- key_ = input_->key();
281
- value_ = input_->value();
359
+ key_ = input_.key();
360
+ value_ = input_.value();
282
361
  iter_stats_.num_input_records++;
283
362
 
284
363
  Status pik_status = ParseInternalKey(key_, &ikey_, allow_data_in_errors_);
@@ -315,13 +394,11 @@ void CompactionIterator::NextFromInput() {
315
394
  // merge_helper_->compaction_filter_skip_until_.
316
395
  Slice skip_until;
317
396
 
318
- int cmp_user_key_without_ts = 0;
397
+ bool user_key_equal_without_ts = false;
319
398
  int cmp_ts = 0;
320
399
  if (has_current_user_key_) {
321
- cmp_user_key_without_ts =
322
- timestamp_size_
323
- ? cmp_->CompareWithoutTimestamp(ikey_.user_key, current_user_key_)
324
- : cmp_->Compare(ikey_.user_key, current_user_key_);
400
+ user_key_equal_without_ts =
401
+ cmp_->EqualWithoutTimestamp(ikey_.user_key, current_user_key_);
325
402
  // if timestamp_size_ > 0, then curr_ts_ has been initialized by a
326
403
  // previous key.
327
404
  cmp_ts = timestamp_size_ ? cmp_->CompareTimestamp(
@@ -334,11 +411,17 @@ void CompactionIterator::NextFromInput() {
334
411
  // Check whether the user key changed. After this if statement current_key_
335
412
  // is a copy of the current input key (maybe converted to a delete by the
336
413
  // compaction filter). ikey_.user_key is pointing to the copy.
337
- if (!has_current_user_key_ || cmp_user_key_without_ts != 0 || cmp_ts != 0) {
414
+ if (!has_current_user_key_ || !user_key_equal_without_ts || cmp_ts != 0) {
338
415
  // First occurrence of this user key
339
416
  // Copy key for output
340
417
  key_ = current_key_.SetInternalKey(key_, &ikey_);
341
418
 
419
+ int prev_cmp_with_ts_low =
420
+ !full_history_ts_low_ ? 0
421
+ : curr_ts_.empty()
422
+ ? 0
423
+ : cmp_->CompareTimestamp(curr_ts_, *full_history_ts_low_);
424
+
342
425
  // If timestamp_size_ > 0, then copy from ikey_ to curr_ts_ for the use
343
426
  // in next iteration to compare with the timestamp of next key.
344
427
  UpdateTimestampAndCompareWithFullHistoryLow();
@@ -348,14 +431,16 @@ void CompactionIterator::NextFromInput() {
348
431
  // (2) timestamp is disabled, OR
349
432
  // (3) all history will be preserved, OR
350
433
  // (4) user key (excluding timestamp) is different from previous key, OR
351
- // (5) timestamp is NO older than *full_history_ts_low_
434
+ // (5) timestamp is NO older than *full_history_ts_low_, OR
435
+ // (6) timestamp is the largest one older than full_history_ts_low_,
352
436
  // then current_user_key_ must be treated as a different user key.
353
437
  // This means, if a user key (excluding ts) is the same as the previous
354
438
  // user key, and its ts is older than *full_history_ts_low_, then we
355
439
  // consider this key for GC, e.g. it may be dropped if certain conditions
356
440
  // match.
357
441
  if (!has_current_user_key_ || !timestamp_size_ || !full_history_ts_low_ ||
358
- 0 != cmp_user_key_without_ts || cmp_with_history_ts_low_ >= 0) {
442
+ !user_key_equal_without_ts || cmp_with_history_ts_low_ >= 0 ||
443
+ prev_cmp_with_ts_low >= 0) {
359
444
  // Initialize for future comparison for rule (A) and etc.
360
445
  current_user_key_sequence_ = kMaxSequenceNumber;
361
446
  current_user_key_snapshot_ = 0;
@@ -365,6 +450,8 @@ void CompactionIterator::NextFromInput() {
365
450
 
366
451
  has_outputted_key_ = false;
367
452
 
453
+ last_key_seq_zeroed_ = false;
454
+
368
455
  current_key_committed_ = KeyCommitted(ikey_.sequence);
369
456
 
370
457
  // Apply the compaction filter to the first committed version of the user
@@ -422,20 +509,25 @@ void CompactionIterator::NextFromInput() {
422
509
  // In the previous iteration we encountered a single delete that we could
423
510
  // not compact out. We will keep this Put, but can drop it's data.
424
511
  // (See Optimization 3, below.)
425
- assert(ikey_.type == kTypeValue);
426
- if (ikey_.type != kTypeValue) {
512
+ assert(ikey_.type == kTypeValue || ikey_.type == kTypeBlobIndex);
513
+ if (ikey_.type != kTypeValue && ikey_.type != kTypeBlobIndex) {
427
514
  ROCKS_LOG_FATAL(info_log_,
428
515
  "Unexpected key type %d for compaction output",
429
516
  ikey_.type);
430
517
  }
431
- assert(current_user_key_snapshot_ == last_snapshot);
432
- if (current_user_key_snapshot_ != last_snapshot) {
518
+ assert(current_user_key_snapshot_ >= last_snapshot);
519
+ if (current_user_key_snapshot_ < last_snapshot) {
433
520
  ROCKS_LOG_FATAL(info_log_,
434
521
  "current_user_key_snapshot_ (%" PRIu64
435
- ") != last_snapshot (%" PRIu64 ")",
522
+ ") < last_snapshot (%" PRIu64 ")",
436
523
  current_user_key_snapshot_, last_snapshot);
437
524
  }
438
525
 
526
+ if (ikey_.type == kTypeBlobIndex) {
527
+ ikey_.type = kTypeValue;
528
+ current_key_.UpdateInternalKey(ikey_.sequence, ikey_.type);
529
+ }
530
+
439
531
  value_.clear();
440
532
  valid_ = true;
441
533
  clear_and_output_next_key_ = false;
@@ -447,6 +539,25 @@ void CompactionIterator::NextFromInput() {
447
539
  // 2) We've already returned a record in this snapshot -OR-
448
540
  // there are no earlier earliest_write_conflict_snapshot.
449
541
  //
542
+ // A note about 2) above:
543
+ // we try to determine whether there is any earlier write conflict
544
+ // checking snapshot by calling DefinitelyInSnapshot() with seq and
545
+ // earliest_write_conflict_snapshot as arguments. For write-prepared
546
+ // and write-unprepared transactions, if earliest_write_conflict_snapshot
547
+ // is evicted from WritePreparedTxnDB::commit_cache, then
548
+ // DefinitelyInSnapshot(seq, earliest_write_conflict_snapshot) returns
549
+ // false, even if the seq is actually visible within
550
+ // earliest_write_conflict_snapshot. Consequently, CompactionIterator
551
+ // may try to zero out its sequence number, thus hitting assertion error
552
+ // in debug mode or cause incorrect DBIter return result.
553
+ // We observe that earliest_write_conflict_snapshot >= earliest_snapshot,
554
+ // and the seq zeroing logic depends on
555
+ // DefinitelyInSnapshot(seq, earliest_snapshot). Therefore, if we cannot
556
+ // determine whether seq is **definitely** in
557
+ // earliest_write_conflict_snapshot, then we can additionally check if
558
+ // seq is definitely in earliest_snapshot. If the latter holds, then the
559
+ // former holds too.
560
+ //
450
561
  // Rule 1 is needed for SingleDelete correctness. Rule 2 is needed to
451
562
  // allow Transactions to do write-conflict checking (if we compacted away
452
563
  // all keys, then we wouldn't know that a write happened in this
@@ -471,35 +582,78 @@ void CompactionIterator::NextFromInput() {
471
582
  // we can choose how to handle such a combinations of operations. We will
472
583
  // try to compact out as much as we can in these cases.
473
584
  // We will report counts on these anomalous cases.
585
+ //
586
+ // Note: If timestamp is enabled, then record will be eligible for
587
+ // deletion, only if, along with above conditions (Rule 1 and Rule 2)
588
+ // full_history_ts_low_ is specified and timestamp for that key is less
589
+ // than *full_history_ts_low_. If it's not eligible for deletion, then we
590
+ // will output the SingleDelete. For Optimization 3 also, if
591
+ // full_history_ts_low_ is specified and timestamp for the key is less
592
+ // than *full_history_ts_low_ then only optimization will be applied.
474
593
 
475
594
  // The easiest way to process a SingleDelete during iteration is to peek
476
595
  // ahead at the next key.
596
+ const bool is_timestamp_eligible_for_gc =
597
+ (timestamp_size_ == 0 ||
598
+ (full_history_ts_low_ && cmp_with_history_ts_low_ < 0));
599
+
477
600
  ParsedInternalKey next_ikey;
478
- input_->Next();
601
+ AdvanceInputIter();
479
602
 
480
603
  // Check whether the next key exists, is not corrupt, and is the same key
481
604
  // as the single delete.
482
- if (input_->Valid() &&
483
- ParseInternalKey(input_->key(), &next_ikey, allow_data_in_errors_)
605
+ if (input_.Valid() &&
606
+ ParseInternalKey(input_.key(), &next_ikey, allow_data_in_errors_)
484
607
  .ok() &&
485
- cmp_->Equal(ikey_.user_key, next_ikey.user_key)) {
486
- // Check whether the next key belongs to the same snapshot as the
487
- // SingleDelete.
488
- if (prev_snapshot == 0 ||
489
- DEFINITELY_NOT_IN_SNAPSHOT(next_ikey.sequence, prev_snapshot)) {
490
- if (next_ikey.type == kTypeSingleDeletion) {
491
- // We encountered two SingleDeletes in a row. This could be due to
492
- // unexpected user input.
493
- // Skip the first SingleDelete and let the next iteration decide how
494
- // to handle the second SingleDelete
608
+ cmp_->EqualWithoutTimestamp(ikey_.user_key, next_ikey.user_key)) {
609
+ #ifndef NDEBUG
610
+ const Compaction* c =
611
+ compaction_ ? compaction_->real_compaction() : nullptr;
612
+ #endif
613
+ TEST_SYNC_POINT_CALLBACK(
614
+ "CompactionIterator::NextFromInput:SingleDelete:1",
615
+ const_cast<Compaction*>(c));
616
+ if (last_key_seq_zeroed_) {
617
+ ++iter_stats_.num_record_drop_hidden;
618
+ ++iter_stats_.num_record_drop_obsolete;
619
+ assert(bottommost_level_);
620
+ AdvanceInputIter();
621
+ } else if (prev_snapshot == 0 ||
622
+ DefinitelyNotInSnapshot(next_ikey.sequence, prev_snapshot)) {
623
+ // Check whether the next key belongs to the same snapshot as the
624
+ // SingleDelete.
625
+
626
+ TEST_SYNC_POINT_CALLBACK(
627
+ "CompactionIterator::NextFromInput:SingleDelete:2", nullptr);
628
+ if (next_ikey.type == kTypeSingleDeletion ||
629
+ next_ikey.type == kTypeDeletion) {
630
+ // We encountered two SingleDeletes for same key in a row. This
631
+ // could be due to unexpected user input. If write-(un)prepared
632
+ // transaction is used, this could also be due to releasing an old
633
+ // snapshot between a Put and its matching SingleDelete.
634
+ // Furthermore, if write-(un)prepared transaction is rolled back
635
+ // after prepare, we will write a Delete to cancel a prior Put. If
636
+ // old snapshot is released between a later Put and its matching
637
+ // SingleDelete, we will end up with a Delete followed by
638
+ // SingleDelete.
639
+ // Skip the first SingleDelete and let the next iteration decide
640
+ // how to handle the second SingleDelete or Delete.
495
641
 
496
642
  // First SingleDelete has been skipped since we already called
497
- // input_->Next().
643
+ // input_.Next().
498
644
  ++iter_stats_.num_record_drop_obsolete;
499
645
  ++iter_stats_.num_single_del_mismatch;
646
+ } else if (!is_timestamp_eligible_for_gc) {
647
+ // We cannot drop the SingleDelete as timestamp is enabled, and
648
+ // timestamp of this key is greater than or equal to
649
+ // *full_history_ts_low_. We will output the SingleDelete.
650
+ valid_ = true;
500
651
  } else if (has_outputted_key_ ||
501
- DEFINITELY_IN_SNAPSHOT(
502
- ikey_.sequence, earliest_write_conflict_snapshot_)) {
652
+ DefinitelyInSnapshot(ikey_.sequence,
653
+ earliest_write_conflict_snapshot_) ||
654
+ (earliest_snapshot_ < earliest_write_conflict_snapshot_ &&
655
+ DefinitelyInSnapshot(ikey_.sequence,
656
+ earliest_snapshot_))) {
503
657
  // Found a matching value, we can drop the single delete and the
504
658
  // value. It is safe to drop both records since we've already
505
659
  // outputted a key in this snapshot, or there is no earlier
@@ -516,9 +670,9 @@ void CompactionIterator::NextFromInput() {
516
670
 
517
671
  ++iter_stats_.num_record_drop_hidden;
518
672
  ++iter_stats_.num_record_drop_obsolete;
519
- // Already called input_->Next() once. Call it a second time to
673
+ // Already called input_.Next() once. Call it a second time to
520
674
  // skip past the second key.
521
- input_->Next();
675
+ AdvanceInputIter();
522
676
  } else {
523
677
  // Found a matching value, but we cannot drop both keys since
524
678
  // there is an earlier snapshot and we need to leave behind a record
@@ -532,11 +686,17 @@ void CompactionIterator::NextFromInput() {
532
686
  // Set up the Put to be outputted in the next iteration.
533
687
  // (Optimization 3).
534
688
  clear_and_output_next_key_ = true;
689
+ TEST_SYNC_POINT_CALLBACK(
690
+ "CompactionIterator::NextFromInput:KeepSDForWW",
691
+ /*arg=*/nullptr);
535
692
  }
536
693
  } else {
537
694
  // We hit the next snapshot without hitting a put, so the iterator
538
695
  // returns the single delete.
539
696
  valid_ = true;
697
+ TEST_SYNC_POINT_CALLBACK(
698
+ "CompactionIterator::NextFromInput:SingleDelete:3",
699
+ const_cast<Compaction*>(c));
540
700
  }
541
701
  } else {
542
702
  // We are at the end of the input, could not parse the next key, or hit
@@ -547,9 +707,11 @@ void CompactionIterator::NextFromInput() {
547
707
  // iteration. If the next key is corrupt, we return before the
548
708
  // comparison, so the value of has_current_user_key does not matter.
549
709
  has_current_user_key_ = false;
550
- if (compaction_ != nullptr && IN_EARLIEST_SNAPSHOT(ikey_.sequence) &&
710
+ if (compaction_ != nullptr &&
711
+ DefinitelyInSnapshot(ikey_.sequence, earliest_snapshot_) &&
551
712
  compaction_->KeyNotExistsBeyondOutputLevel(ikey_.user_key,
552
- &level_ptrs_)) {
713
+ &level_ptrs_) &&
714
+ is_timestamp_eligible_for_gc) {
553
715
  // Key doesn't exist outside of this range.
554
716
  // Can compact out this SingleDelete.
555
717
  ++iter_stats_.num_record_drop_obsolete;
@@ -557,6 +719,11 @@ void CompactionIterator::NextFromInput() {
557
719
  if (!bottommost_level_) {
558
720
  ++iter_stats_.num_optimized_del_drop_obsolete;
559
721
  }
722
+ } else if (last_key_seq_zeroed_) {
723
+ // Skip.
724
+ ++iter_stats_.num_record_drop_hidden;
725
+ ++iter_stats_.num_record_drop_obsolete;
726
+ assert(bottommost_level_);
560
727
  } else {
561
728
  // Output SingleDelete
562
729
  valid_ = true;
@@ -586,13 +753,12 @@ void CompactionIterator::NextFromInput() {
586
753
  }
587
754
 
588
755
  ++iter_stats_.num_record_drop_hidden; // rule (A)
589
- input_->Next();
756
+ AdvanceInputIter();
590
757
  } else if (compaction_ != nullptr &&
591
758
  (ikey_.type == kTypeDeletion ||
592
759
  (ikey_.type == kTypeDeletionWithTimestamp &&
593
760
  cmp_with_history_ts_low_ < 0)) &&
594
- IN_EARLIEST_SNAPSHOT(ikey_.sequence) &&
595
- ikeyNotNeededForIncrementalSnapshot() &&
761
+ DefinitelyInSnapshot(ikey_.sequence, earliest_snapshot_) &&
596
762
  compaction_->KeyNotExistsBeyondOutputLevel(ikey_.user_key,
597
763
  &level_ptrs_)) {
598
764
  // TODO(noetzli): This is the only place where we use compaction_
@@ -622,18 +788,25 @@ void CompactionIterator::NextFromInput() {
622
788
  if (!bottommost_level_) {
623
789
  ++iter_stats_.num_optimized_del_drop_obsolete;
624
790
  }
625
- input_->Next();
791
+ AdvanceInputIter();
626
792
  } else if ((ikey_.type == kTypeDeletion ||
627
793
  (ikey_.type == kTypeDeletionWithTimestamp &&
628
794
  cmp_with_history_ts_low_ < 0)) &&
629
- bottommost_level_ && ikeyNotNeededForIncrementalSnapshot()) {
795
+ bottommost_level_) {
630
796
  // Handle the case where we have a delete key at the bottom most level
631
797
  // We can skip outputting the key iff there are no subsequent puts for this
632
798
  // key
633
799
  assert(!compaction_ || compaction_->KeyNotExistsBeyondOutputLevel(
634
800
  ikey_.user_key, &level_ptrs_));
635
801
  ParsedInternalKey next_ikey;
636
- input_->Next();
802
+ AdvanceInputIter();
803
+ #ifndef NDEBUG
804
+ const Compaction* c =
805
+ compaction_ ? compaction_->real_compaction() : nullptr;
806
+ #endif
807
+ TEST_SYNC_POINT_CALLBACK(
808
+ "CompactionIterator::NextFromInput:BottommostDelete:1",
809
+ const_cast<Compaction*>(c));
637
810
  // Skip over all versions of this key that happen to occur in the same
638
811
  // snapshot range as the delete.
639
812
  //
@@ -641,22 +814,20 @@ void CompactionIterator::NextFromInput() {
641
814
  // considered to have a different user key unless the timestamp is older
642
815
  // than *full_history_ts_low_.
643
816
  while (!IsPausingManualCompaction() && !IsShuttingDown() &&
644
- input_->Valid() &&
645
- (ParseInternalKey(input_->key(), &next_ikey, allow_data_in_errors_)
817
+ input_.Valid() &&
818
+ (ParseInternalKey(input_.key(), &next_ikey, allow_data_in_errors_)
646
819
  .ok()) &&
647
- 0 == cmp_->CompareWithoutTimestamp(ikey_.user_key,
648
- next_ikey.user_key) &&
820
+ cmp_->EqualWithoutTimestamp(ikey_.user_key, next_ikey.user_key) &&
649
821
  (prev_snapshot == 0 ||
650
- DEFINITELY_NOT_IN_SNAPSHOT(next_ikey.sequence, prev_snapshot))) {
651
- input_->Next();
822
+ DefinitelyNotInSnapshot(next_ikey.sequence, prev_snapshot))) {
823
+ AdvanceInputIter();
652
824
  }
653
825
  // If you find you still need to output a row with this key, we need to output the
654
826
  // delete too
655
- if (input_->Valid() &&
656
- (ParseInternalKey(input_->key(), &next_ikey, allow_data_in_errors_)
827
+ if (input_.Valid() &&
828
+ (ParseInternalKey(input_.key(), &next_ikey, allow_data_in_errors_)
657
829
  .ok()) &&
658
- 0 == cmp_->CompareWithoutTimestamp(ikey_.user_key,
659
- next_ikey.user_key)) {
830
+ cmp_->EqualWithoutTimestamp(ikey_.user_key, next_ikey.user_key)) {
660
831
  valid_ = true;
661
832
  at_next_ = true;
662
833
  }
@@ -668,13 +839,15 @@ void CompactionIterator::NextFromInput() {
668
839
  }
669
840
 
670
841
  pinned_iters_mgr_.StartPinning();
842
+
671
843
  // We know the merge type entry is not hidden, otherwise we would
672
844
  // have hit (A)
673
845
  // We encapsulate the merge related state machine in a different
674
846
  // object to minimize change to the existing flow.
675
- Status s =
676
- merge_helper_->MergeUntil(input_, range_del_agg_, prev_snapshot,
677
- bottommost_level_, allow_data_in_errors_);
847
+ Status s = merge_helper_->MergeUntil(
848
+ &input_, range_del_agg_, prev_snapshot, bottommost_level_,
849
+ allow_data_in_errors_, blob_fetcher_.get(), prefetch_buffers_.get(),
850
+ &iter_stats_);
678
851
  merge_out_iter_.SeekToFirst();
679
852
 
680
853
  if (!s.ok() && !s.IsMergeInProgress()) {
@@ -717,14 +890,14 @@ void CompactionIterator::NextFromInput() {
717
890
  if (should_delete) {
718
891
  ++iter_stats_.num_record_drop_hidden;
719
892
  ++iter_stats_.num_record_drop_range_del;
720
- input_->Next();
893
+ AdvanceInputIter();
721
894
  } else {
722
895
  valid_ = true;
723
896
  }
724
897
  }
725
898
 
726
899
  if (need_skip) {
727
- input_->Seek(skip_until);
900
+ SkipUntil(skip_until);
728
901
  }
729
902
  }
730
903
 
@@ -781,6 +954,10 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
781
954
 
782
955
  // GC for integrated BlobDB
783
956
  if (compaction_->enable_blob_garbage_collection()) {
957
+ TEST_SYNC_POINT_CALLBACK(
958
+ "CompactionIterator::GarbageCollectBlobIfNeeded::TamperWithBlobIndex",
959
+ &value_);
960
+
784
961
  BlobIndex blob_index;
785
962
 
786
963
  {
@@ -794,24 +971,23 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
794
971
  }
795
972
  }
796
973
 
797
- if (blob_index.IsInlined() || blob_index.HasTTL()) {
798
- status_ = Status::Corruption("Unexpected TTL/inlined blob index");
799
- valid_ = false;
800
-
801
- return;
802
- }
803
-
804
974
  if (blob_index.file_number() >=
805
975
  blob_garbage_collection_cutoff_file_number_) {
806
976
  return;
807
977
  }
808
978
 
809
- const Version* const version = compaction_->input_version();
810
- assert(version);
979
+ FilePrefetchBuffer* prefetch_buffer =
980
+ prefetch_buffers_ ? prefetch_buffers_->GetOrCreatePrefetchBuffer(
981
+ blob_index.file_number())
982
+ : nullptr;
983
+
984
+ uint64_t bytes_read = 0;
811
985
 
812
986
  {
813
- const Status s =
814
- version->GetBlob(ReadOptions(), user_key(), blob_index, &blob_value_);
987
+ assert(blob_fetcher_);
988
+
989
+ const Status s = blob_fetcher_->FetchBlob(
990
+ user_key(), blob_index, prefetch_buffer, &blob_value_, &bytes_read);
815
991
 
816
992
  if (!s.ok()) {
817
993
  status_ = s;
@@ -821,6 +997,12 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
821
997
  }
822
998
  }
823
999
 
1000
+ ++iter_stats_.num_blobs_read;
1001
+ iter_stats_.total_blob_bytes_read += bytes_read;
1002
+
1003
+ ++iter_stats_.num_blobs_relocated;
1004
+ iter_stats_.total_blob_bytes_relocated += blob_index.size();
1005
+
824
1006
  value_ = blob_value_;
825
1007
 
826
1008
  if (ExtractLargeValueIfNeededImpl()) {
@@ -834,7 +1016,8 @@ void CompactionIterator::GarbageCollectBlobIfNeeded() {
834
1016
  }
835
1017
 
836
1018
  // GC for stacked BlobDB
837
- if (compaction_filter_) {
1019
+ if (compaction_filter_ &&
1020
+ compaction_filter_->IsStackedBlobDbInternalCompactionFilter()) {
838
1021
  const auto blob_decision = compaction_filter_->PrepareBlobOutput(
839
1022
  user_key(), value_, &compaction_filter_value_);
840
1023
 
@@ -881,16 +1064,23 @@ void CompactionIterator::PrepareOutput() {
881
1064
  // Can we do the same for levels above bottom level as long as
882
1065
  // KeyNotExistsBeyondOutputLevel() return true?
883
1066
  if (valid_ && compaction_ != nullptr &&
884
- !compaction_->allow_ingest_behind() &&
885
- ikeyNotNeededForIncrementalSnapshot() && bottommost_level_ &&
886
- IN_EARLIEST_SNAPSHOT(ikey_.sequence) && ikey_.type != kTypeMerge) {
887
- assert(ikey_.type != kTypeDeletion && ikey_.type != kTypeSingleDeletion);
888
- if (ikey_.type == kTypeDeletion || ikey_.type == kTypeSingleDeletion) {
1067
+ !compaction_->allow_ingest_behind() && bottommost_level_ &&
1068
+ DefinitelyInSnapshot(ikey_.sequence, earliest_snapshot_) &&
1069
+ ikey_.type != kTypeMerge && current_key_committed_) {
1070
+ assert(ikey_.type != kTypeDeletion);
1071
+ assert(ikey_.type != kTypeSingleDeletion ||
1072
+ (timestamp_size_ || full_history_ts_low_));
1073
+ if (ikey_.type == kTypeDeletion ||
1074
+ (ikey_.type == kTypeSingleDeletion &&
1075
+ (!timestamp_size_ || !full_history_ts_low_))) {
889
1076
  ROCKS_LOG_FATAL(info_log_,
890
1077
  "Unexpected key type %d for seq-zero optimization",
891
1078
  ikey_.type);
892
1079
  }
893
1080
  ikey_.sequence = 0;
1081
+ last_key_seq_zeroed_ = true;
1082
+ TEST_SYNC_POINT_CALLBACK("CompactionIterator::PrepareOutput:ZeroingSeq",
1083
+ &ikey_);
894
1084
  if (!timestamp_size_) {
895
1085
  current_key_.UpdateInternalKey(0, ikey_.type);
896
1086
  } else if (full_history_ts_low_ && cmp_with_history_ts_low_ < 0) {
@@ -952,48 +1142,6 @@ inline SequenceNumber CompactionIterator::findEarliestVisibleSnapshot(
952
1142
  return kMaxSequenceNumber;
953
1143
  }
954
1144
 
955
- // used in 2 places - prevents deletion markers to be dropped if they may be
956
- // needed and disables seqnum zero-out in PrepareOutput for recent keys.
957
- inline bool CompactionIterator::ikeyNotNeededForIncrementalSnapshot() {
958
- return (!compaction_->preserve_deletes()) ||
959
- (ikey_.sequence < preserve_deletes_seqnum_);
960
- }
961
-
962
- bool CompactionIterator::IsInEarliestSnapshot(SequenceNumber sequence) {
963
- assert(snapshot_checker_ != nullptr);
964
- bool pre_condition = (earliest_snapshot_ == kMaxSequenceNumber ||
965
- (earliest_snapshot_iter_ != snapshots_->end() &&
966
- *earliest_snapshot_iter_ == earliest_snapshot_));
967
- assert(pre_condition);
968
- if (!pre_condition) {
969
- ROCKS_LOG_FATAL(info_log_,
970
- "Pre-Condition is not hold in IsInEarliestSnapshot");
971
- }
972
- auto in_snapshot =
973
- snapshot_checker_->CheckInSnapshot(sequence, earliest_snapshot_);
974
- while (UNLIKELY(in_snapshot == SnapshotCheckerResult::kSnapshotReleased)) {
975
- // Avoid the the current earliest_snapshot_ being return as
976
- // earliest visible snapshot for the next value. So if a value's sequence
977
- // is zero-ed out by PrepareOutput(), the next value will be compact out.
978
- released_snapshots_.insert(earliest_snapshot_);
979
- earliest_snapshot_iter_++;
980
-
981
- if (earliest_snapshot_iter_ == snapshots_->end()) {
982
- earliest_snapshot_ = kMaxSequenceNumber;
983
- } else {
984
- earliest_snapshot_ = *earliest_snapshot_iter_;
985
- }
986
- in_snapshot =
987
- snapshot_checker_->CheckInSnapshot(sequence, earliest_snapshot_);
988
- }
989
- assert(in_snapshot != SnapshotCheckerResult::kSnapshotReleased);
990
- if (in_snapshot == SnapshotCheckerResult::kSnapshotReleased) {
991
- ROCKS_LOG_FATAL(info_log_,
992
- "Unexpected released snapshot in IsInEarliestSnapshot");
993
- }
994
- return in_snapshot == SnapshotCheckerResult::kInSnapshot;
995
- }
996
-
997
1145
  uint64_t CompactionIterator::ComputeBlobGarbageCollectionCutoffFileNumber(
998
1146
  const CompactionProxy* compaction) {
999
1147
  if (!compaction) {
@@ -1004,7 +1152,7 @@ uint64_t CompactionIterator::ComputeBlobGarbageCollectionCutoffFileNumber(
1004
1152
  return 0;
1005
1153
  }
1006
1154
 
1007
- Version* const version = compaction->input_version();
1155
+ const Version* const version = compaction->input_version();
1008
1156
  assert(version);
1009
1157
 
1010
1158
  const VersionStorageInfo* const storage_info = version->storage_info();
@@ -1012,12 +1160,55 @@ uint64_t CompactionIterator::ComputeBlobGarbageCollectionCutoffFileNumber(
1012
1160
 
1013
1161
  const auto& blob_files = storage_info->GetBlobFiles();
1014
1162
 
1015
- auto it = blob_files.begin();
1016
- std::advance(
1017
- it, compaction->blob_garbage_collection_age_cutoff() * blob_files.size());
1163
+ const size_t cutoff_index = static_cast<size_t>(
1164
+ compaction->blob_garbage_collection_age_cutoff() * blob_files.size());
1165
+
1166
+ if (cutoff_index >= blob_files.size()) {
1167
+ return std::numeric_limits<uint64_t>::max();
1168
+ }
1169
+
1170
+ const auto& meta = blob_files[cutoff_index];
1171
+ assert(meta);
1172
+
1173
+ return meta->GetBlobFileNumber();
1174
+ }
1175
+
1176
+ std::unique_ptr<BlobFetcher> CompactionIterator::CreateBlobFetcherIfNeeded(
1177
+ const CompactionProxy* compaction) {
1178
+ if (!compaction) {
1179
+ return nullptr;
1180
+ }
1181
+
1182
+ const Version* const version = compaction->input_version();
1183
+ if (!version) {
1184
+ return nullptr;
1185
+ }
1186
+
1187
+ return std::unique_ptr<BlobFetcher>(new BlobFetcher(version, ReadOptions()));
1188
+ }
1189
+
1190
+ std::unique_ptr<PrefetchBufferCollection>
1191
+ CompactionIterator::CreatePrefetchBufferCollectionIfNeeded(
1192
+ const CompactionProxy* compaction) {
1193
+ if (!compaction) {
1194
+ return nullptr;
1195
+ }
1196
+
1197
+ if (!compaction->input_version()) {
1198
+ return nullptr;
1199
+ }
1200
+
1201
+ if (compaction->allow_mmap_reads()) {
1202
+ return nullptr;
1203
+ }
1204
+
1205
+ const uint64_t readahead_size = compaction->blob_compaction_readahead_size();
1206
+ if (!readahead_size) {
1207
+ return nullptr;
1208
+ }
1018
1209
 
1019
- return it != blob_files.end() ? it->first
1020
- : std::numeric_limits<uint64_t>::max();
1210
+ return std::unique_ptr<PrefetchBufferCollection>(
1211
+ new PrefetchBufferCollection(readahead_size));
1021
1212
  }
1022
1213
 
1023
1214
  } // namespace ROCKSDB_NAMESPACE