@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
@@ -75,29 +75,29 @@ const char* GetFlushReasonString (FlushReason flush_reason) {
75
75
  return "Manual Flush";
76
76
  case FlushReason::kErrorRecovery:
77
77
  return "Error Recovery";
78
+ case FlushReason::kWalFull:
79
+ return "WAL Full";
78
80
  default:
79
81
  return "Invalid";
80
82
  }
81
83
  }
82
84
 
83
- FlushJob::FlushJob(const std::string& dbname, ColumnFamilyData* cfd,
84
- const ImmutableDBOptions& db_options,
85
- const MutableCFOptions& mutable_cf_options,
86
- uint64_t max_memtable_id, const FileOptions& file_options,
87
- VersionSet* versions, InstrumentedMutex* db_mutex,
88
- std::atomic<bool>* shutting_down,
89
- std::vector<SequenceNumber> existing_snapshots,
90
- SequenceNumber earliest_write_conflict_snapshot,
91
- SnapshotChecker* snapshot_checker, JobContext* job_context,
92
- LogBuffer* log_buffer, FSDirectory* db_directory,
93
- FSDirectory* output_file_directory,
94
- CompressionType output_compression, Statistics* stats,
95
- EventLogger* event_logger, bool measure_io_stats,
96
- const bool sync_output_directory, const bool write_manifest,
97
- Env::Priority thread_pri,
98
- const std::shared_ptr<IOTracer>& io_tracer,
99
- const std::string& db_id, const std::string& db_session_id,
100
- std::string full_history_ts_low)
85
+ FlushJob::FlushJob(
86
+ const std::string& dbname, ColumnFamilyData* cfd,
87
+ const ImmutableDBOptions& db_options,
88
+ const MutableCFOptions& mutable_cf_options, uint64_t max_memtable_id,
89
+ const FileOptions& file_options, VersionSet* versions,
90
+ InstrumentedMutex* db_mutex, std::atomic<bool>* shutting_down,
91
+ std::vector<SequenceNumber> existing_snapshots,
92
+ SequenceNumber earliest_write_conflict_snapshot,
93
+ SnapshotChecker* snapshot_checker, JobContext* job_context,
94
+ LogBuffer* log_buffer, FSDirectory* db_directory,
95
+ FSDirectory* output_file_directory, CompressionType output_compression,
96
+ Statistics* stats, EventLogger* event_logger, bool measure_io_stats,
97
+ const bool sync_output_directory, const bool write_manifest,
98
+ Env::Priority thread_pri, const std::shared_ptr<IOTracer>& io_tracer,
99
+ const std::string& db_id, const std::string& db_session_id,
100
+ std::string full_history_ts_low, BlobFileCompletionCallback* blob_callback)
101
101
  : dbname_(dbname),
102
102
  db_id_(db_id),
103
103
  db_session_id_(db_session_id),
@@ -127,14 +127,15 @@ FlushJob::FlushJob(const std::string& dbname, ColumnFamilyData* cfd,
127
127
  pick_memtable_called(false),
128
128
  thread_pri_(thread_pri),
129
129
  io_tracer_(io_tracer),
130
- full_history_ts_low_(std::move(full_history_ts_low)) {
130
+ clock_(db_options_.clock),
131
+ full_history_ts_low_(std::move(full_history_ts_low)),
132
+ blob_callback_(blob_callback) {
131
133
  // Update the thread status to indicate flush.
132
134
  ReportStartedFlush();
133
135
  TEST_SYNC_POINT("FlushJob::FlushJob()");
134
136
  }
135
137
 
136
138
  FlushJob::~FlushJob() {
137
- io_status_.PermitUncheckedError();
138
139
  ThreadStatusUtil::ResetThreadStatus();
139
140
  }
140
141
 
@@ -164,13 +165,24 @@ void FlushJob::RecordFlushIOStats() {
164
165
  ThreadStatus::FLUSH_BYTES_WRITTEN, IOSTATS(bytes_written));
165
166
  IOSTATS_RESET(bytes_written);
166
167
  }
167
-
168
168
  void FlushJob::PickMemTable() {
169
169
  db_mutex_->AssertHeld();
170
170
  assert(!pick_memtable_called);
171
171
  pick_memtable_called = true;
172
+
173
+ // Maximum "NextLogNumber" of the memtables to flush.
174
+ // When mempurge feature is turned off, this variable is useless
175
+ // because the memtables are implicitly sorted by increasing order of creation
176
+ // time. Therefore mems_->back()->GetNextLogNumber() is already equal to
177
+ // max_next_log_number. However when Mempurge is on, the memtables are no
178
+ // longer sorted by increasing order of creation time. Therefore this variable
179
+ // becomes necessary because mems_->back()->GetNextLogNumber() is no longer
180
+ // necessarily equal to max_next_log_number.
181
+ uint64_t max_next_log_number = 0;
182
+
172
183
  // Save the contents of the earliest memtable as a new Table
173
- cfd_->imm()->PickMemtablesToFlush(max_memtable_id_, &mems_);
184
+ cfd_->imm()->PickMemtablesToFlush(max_memtable_id_, &mems_,
185
+ &max_next_log_number);
174
186
  if (mems_.empty()) {
175
187
  return;
176
188
  }
@@ -185,7 +197,7 @@ void FlushJob::PickMemTable() {
185
197
  edit_->SetPrevLogNumber(0);
186
198
  // SetLogNumber(log_num) indicates logs with number smaller than log_num
187
199
  // will no longer be picked up for recovery.
188
- edit_->SetLogNumber(mems_.back()->GetNextLogNumber());
200
+ edit_->SetLogNumber(max_next_log_number);
189
201
  edit_->SetColumnFamily(cfd_->GetID());
190
202
 
191
203
  // path 0 for level 0 file.
@@ -195,8 +207,8 @@ void FlushJob::PickMemTable() {
195
207
  base_->Ref(); // it is likely that we do not need this reference
196
208
  }
197
209
 
198
- Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
199
- FileMetaData* file_meta) {
210
+ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker, FileMetaData* file_meta,
211
+ bool* switched_to_mempurge) {
200
212
  TEST_SYNC_POINT("FlushJob::Start");
201
213
  db_mutex_->AssertHeld();
202
214
  assert(pick_memtable_called);
@@ -226,9 +238,43 @@ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
226
238
  prev_cpu_write_nanos = IOSTATS(cpu_write_nanos);
227
239
  prev_cpu_read_nanos = IOSTATS(cpu_read_nanos);
228
240
  }
229
-
230
- // This will release and re-acquire the mutex.
231
- Status s = WriteLevel0Table();
241
+ Status mempurge_s = Status::NotFound("No MemPurge.");
242
+ if ((db_options_.experimental_mempurge_threshold > 0.0) &&
243
+ (cfd_->GetFlushReason() == FlushReason::kWriteBufferFull) &&
244
+ (!mems_.empty()) && MemPurgeDecider()) {
245
+ mempurge_s = MemPurge();
246
+ if (!mempurge_s.ok()) {
247
+ // Mempurge is typically aborted when the output
248
+ // bytes cannot be contained onto a single output memtable.
249
+ if (mempurge_s.IsAborted()) {
250
+ ROCKS_LOG_INFO(db_options_.info_log, "Mempurge process aborted: %s\n",
251
+ mempurge_s.ToString().c_str());
252
+ } else {
253
+ // However the mempurge process can also fail for
254
+ // other reasons (eg: new_mem->Add() fails).
255
+ ROCKS_LOG_WARN(db_options_.info_log, "Mempurge process failed: %s\n",
256
+ mempurge_s.ToString().c_str());
257
+ }
258
+ } else {
259
+ if (switched_to_mempurge) {
260
+ *switched_to_mempurge = true;
261
+ } else {
262
+ // The mempurge process was successful, but no switch_to_mempurge
263
+ // pointer provided so no way to propagate the state of flush job.
264
+ ROCKS_LOG_WARN(db_options_.info_log,
265
+ "Mempurge process succeeded"
266
+ "but no 'switched_to_mempurge' ptr provided.\n");
267
+ }
268
+ }
269
+ }
270
+ Status s;
271
+ if (mempurge_s.ok()) {
272
+ base_->Unref();
273
+ s = Status::OK();
274
+ } else {
275
+ // This will release and re-acquire the mutex.
276
+ s = WriteLevel0Table();
277
+ }
232
278
 
233
279
  if (s.ok() && cfd_->IsDropped()) {
234
280
  s = Status::ColumnFamilyDropped("Column family dropped during compaction");
@@ -243,14 +289,13 @@ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
243
289
  } else if (write_manifest_) {
244
290
  TEST_SYNC_POINT("FlushJob::InstallResults");
245
291
  // Replace immutable memtable with the generated Table
246
- IOStatus tmp_io_s;
247
292
  s = cfd_->imm()->TryInstallMemtableFlushResults(
248
293
  cfd_, mutable_cf_options_, mems_, prep_tracker, versions_, db_mutex_,
249
294
  meta_.fd.GetNumber(), &job_context_->memtables_to_free, db_directory_,
250
- log_buffer_, &committed_flush_jobs_info_, &tmp_io_s);
251
- if (!tmp_io_s.ok()) {
252
- io_status_ = tmp_io_s;
253
- }
295
+ log_buffer_, &committed_flush_jobs_info_,
296
+ !(mempurge_s.ok()) /* write_edit : true if no mempurge happened (or if aborted),
297
+ but 'false' if mempurge successful: no new min log number
298
+ or new level 0 file path to write to manifest. */);
254
299
  }
255
300
 
256
301
  if (s.ok() && file_meta != nullptr) {
@@ -274,8 +319,11 @@ Status FlushJob::Run(LogsWithPrepTracker* prep_tracker,
274
319
 
275
320
  const auto& blob_files = vstorage->GetBlobFiles();
276
321
  if (!blob_files.empty()) {
277
- stream << "blob_file_head" << blob_files.begin()->first;
278
- stream << "blob_file_tail" << blob_files.rbegin()->first;
322
+ assert(blob_files.front());
323
+ stream << "blob_file_head" << blob_files.front()->GetBlobFileNumber();
324
+
325
+ assert(blob_files.back());
326
+ stream << "blob_file_tail" << blob_files.back()->GetBlobFileNumber();
279
327
  }
280
328
 
281
329
  stream << "immutable_memtables" << cfd_->imm()->NumNotFlushed();
@@ -305,12 +353,456 @@ void FlushJob::Cancel() {
305
353
  base_->Unref();
306
354
  }
307
355
 
356
+ Status FlushJob::MemPurge() {
357
+ Status s;
358
+ db_mutex_->AssertHeld();
359
+ db_mutex_->Unlock();
360
+ assert(!mems_.empty());
361
+
362
+ // Measure purging time.
363
+ const uint64_t start_micros = clock_->NowMicros();
364
+ const uint64_t start_cpu_micros = clock_->CPUMicros();
365
+
366
+ MemTable* new_mem = nullptr;
367
+ // For performance/log investigation purposes:
368
+ // look at how much useful payload we harvest in the new_mem.
369
+ // This value is then printed to the DB log.
370
+ double new_mem_capacity = 0.0;
371
+
372
+ // Create two iterators, one for the memtable data (contains
373
+ // info from puts + deletes), and one for the memtable
374
+ // Range Tombstones (from DeleteRanges).
375
+ ReadOptions ro;
376
+ ro.total_order_seek = true;
377
+ Arena arena;
378
+ std::vector<InternalIterator*> memtables;
379
+ std::vector<std::unique_ptr<FragmentedRangeTombstoneIterator>>
380
+ range_del_iters;
381
+ for (MemTable* m : mems_) {
382
+ memtables.push_back(m->NewIterator(ro, &arena));
383
+ auto* range_del_iter = m->NewRangeTombstoneIterator(ro, kMaxSequenceNumber);
384
+ if (range_del_iter != nullptr) {
385
+ range_del_iters.emplace_back(range_del_iter);
386
+ }
387
+ }
388
+
389
+ assert(!memtables.empty());
390
+ SequenceNumber first_seqno = kMaxSequenceNumber;
391
+ SequenceNumber earliest_seqno = kMaxSequenceNumber;
392
+ // Pick first and earliest seqno as min of all first_seqno
393
+ // and earliest_seqno of the mempurged memtables.
394
+ for (const auto& mem : mems_) {
395
+ first_seqno = mem->GetFirstSequenceNumber() < first_seqno
396
+ ? mem->GetFirstSequenceNumber()
397
+ : first_seqno;
398
+ earliest_seqno = mem->GetEarliestSequenceNumber() < earliest_seqno
399
+ ? mem->GetEarliestSequenceNumber()
400
+ : earliest_seqno;
401
+ }
402
+
403
+ ScopedArenaIterator iter(
404
+ NewMergingIterator(&(cfd_->internal_comparator()), memtables.data(),
405
+ static_cast<int>(memtables.size()), &arena));
406
+
407
+ auto* ioptions = cfd_->ioptions();
408
+
409
+ // Place iterator at the First (meaning most recent) key node.
410
+ iter->SeekToFirst();
411
+
412
+ std::unique_ptr<CompactionRangeDelAggregator> range_del_agg(
413
+ new CompactionRangeDelAggregator(&(cfd_->internal_comparator()),
414
+ existing_snapshots_));
415
+ for (auto& rd_iter : range_del_iters) {
416
+ range_del_agg->AddTombstones(std::move(rd_iter));
417
+ }
418
+
419
+ // If there is valid data in the memtable,
420
+ // or at least range tombstones, copy over the info
421
+ // to the new memtable.
422
+ if (iter->Valid() || !range_del_agg->IsEmpty()) {
423
+ // MaxSize is the size of a memtable.
424
+ size_t maxSize = mutable_cf_options_.write_buffer_size;
425
+ std::unique_ptr<CompactionFilter> compaction_filter;
426
+ if (ioptions->compaction_filter_factory != nullptr &&
427
+ ioptions->compaction_filter_factory->ShouldFilterTableFileCreation(
428
+ TableFileCreationReason::kFlush)) {
429
+ CompactionFilter::Context ctx;
430
+ ctx.is_full_compaction = false;
431
+ ctx.is_manual_compaction = false;
432
+ ctx.column_family_id = cfd_->GetID();
433
+ ctx.reason = TableFileCreationReason::kFlush;
434
+ compaction_filter =
435
+ ioptions->compaction_filter_factory->CreateCompactionFilter(ctx);
436
+ if (compaction_filter != nullptr &&
437
+ !compaction_filter->IgnoreSnapshots()) {
438
+ s = Status::NotSupported(
439
+ "CompactionFilter::IgnoreSnapshots() = false is not supported "
440
+ "anymore.");
441
+ return s;
442
+ }
443
+ }
444
+
445
+ new_mem = new MemTable((cfd_->internal_comparator()), *(cfd_->ioptions()),
446
+ mutable_cf_options_, cfd_->write_buffer_mgr(),
447
+ earliest_seqno, cfd_->GetID());
448
+ assert(new_mem != nullptr);
449
+
450
+ Env* env = db_options_.env;
451
+ assert(env);
452
+ MergeHelper merge(
453
+ env, (cfd_->internal_comparator()).user_comparator(),
454
+ (ioptions->merge_operator).get(), compaction_filter.get(),
455
+ ioptions->logger, true /* internal key corruption is not ok */,
456
+ existing_snapshots_.empty() ? 0 : existing_snapshots_.back(),
457
+ snapshot_checker_);
458
+ assert(job_context_);
459
+ SequenceNumber job_snapshot_seq = job_context_->GetJobSnapshotSequence();
460
+ CompactionIterator c_iter(
461
+ iter.get(), (cfd_->internal_comparator()).user_comparator(), &merge,
462
+ kMaxSequenceNumber, &existing_snapshots_,
463
+ earliest_write_conflict_snapshot_, job_snapshot_seq, snapshot_checker_,
464
+ env, ShouldReportDetailedTime(env, ioptions->stats),
465
+ true /* internal key corruption is not ok */, range_del_agg.get(),
466
+ nullptr, ioptions->allow_data_in_errors,
467
+ /*compaction=*/nullptr, compaction_filter.get(),
468
+ /*shutting_down=*/nullptr,
469
+ /*manual_compaction_paused=*/nullptr,
470
+ /*manual_compaction_canceled=*/nullptr, ioptions->info_log,
471
+ &(cfd_->GetFullHistoryTsLow()));
472
+
473
+ // Set earliest sequence number in the new memtable
474
+ // to be equal to the earliest sequence number of the
475
+ // memtable being flushed (See later if there is a need
476
+ // to update this number!).
477
+ new_mem->SetEarliestSequenceNumber(earliest_seqno);
478
+ // Likewise for first seq number.
479
+ new_mem->SetFirstSequenceNumber(first_seqno);
480
+ SequenceNumber new_first_seqno = kMaxSequenceNumber;
481
+
482
+ c_iter.SeekToFirst();
483
+
484
+ // Key transfer
485
+ for (; c_iter.Valid(); c_iter.Next()) {
486
+ const ParsedInternalKey ikey = c_iter.ikey();
487
+ const Slice value = c_iter.value();
488
+ new_first_seqno =
489
+ ikey.sequence < new_first_seqno ? ikey.sequence : new_first_seqno;
490
+
491
+ // Should we update "OldestKeyTime" ???? -> timestamp appear
492
+ // to still be an "experimental" feature.
493
+ s = new_mem->Add(
494
+ ikey.sequence, ikey.type, ikey.user_key, value,
495
+ nullptr, // KV protection info set as nullptr since it
496
+ // should only be useful for the first add to
497
+ // the original memtable.
498
+ false, // : allow concurrent_memtable_writes_
499
+ // Not seen as necessary for now.
500
+ nullptr, // get_post_process_info(m) must be nullptr
501
+ // when concurrent_memtable_writes is switched off.
502
+ nullptr); // hint, only used when concurrent_memtable_writes_
503
+ // is switched on.
504
+ if (!s.ok()) {
505
+ break;
506
+ }
507
+
508
+ // If new_mem has size greater than maxSize,
509
+ // then rollback to regular flush operation,
510
+ // and destroy new_mem.
511
+ if (new_mem->ApproximateMemoryUsage() > maxSize) {
512
+ s = Status::Aborted("Mempurge filled more than one memtable.");
513
+ new_mem_capacity = 1.0;
514
+ break;
515
+ }
516
+ }
517
+
518
+ // Check status and propagate
519
+ // potential error status from c_iter
520
+ if (!s.ok()) {
521
+ c_iter.status().PermitUncheckedError();
522
+ } else if (!c_iter.status().ok()) {
523
+ s = c_iter.status();
524
+ }
525
+
526
+ // Range tombstone transfer.
527
+ if (s.ok()) {
528
+ auto range_del_it = range_del_agg->NewIterator();
529
+ for (range_del_it->SeekToFirst(); range_del_it->Valid();
530
+ range_del_it->Next()) {
531
+ auto tombstone = range_del_it->Tombstone();
532
+ new_first_seqno =
533
+ tombstone.seq_ < new_first_seqno ? tombstone.seq_ : new_first_seqno;
534
+ s = new_mem->Add(
535
+ tombstone.seq_, // Sequence number
536
+ kTypeRangeDeletion, // KV type
537
+ tombstone.start_key_, // Key is start key.
538
+ tombstone.end_key_, // Value is end key.
539
+ nullptr, // KV protection info set as nullptr since it
540
+ // should only be useful for the first add to
541
+ // the original memtable.
542
+ false, // : allow concurrent_memtable_writes_
543
+ // Not seen as necessary for now.
544
+ nullptr, // get_post_process_info(m) must be nullptr
545
+ // when concurrent_memtable_writes is switched off.
546
+ nullptr); // hint, only used when concurrent_memtable_writes_
547
+ // is switched on.
548
+
549
+ if (!s.ok()) {
550
+ break;
551
+ }
552
+
553
+ // If new_mem has size greater than maxSize,
554
+ // then rollback to regular flush operation,
555
+ // and destroy new_mem.
556
+ if (new_mem->ApproximateMemoryUsage() > maxSize) {
557
+ s = Status::Aborted(Slice("Mempurge filled more than one memtable."));
558
+ new_mem_capacity = 1.0;
559
+ break;
560
+ }
561
+ }
562
+ }
563
+
564
+ // If everything happened smoothly and new_mem contains valid data,
565
+ // decide if it is flushed to storage or kept in the imm()
566
+ // memtable list (memory).
567
+ if (s.ok() && (new_first_seqno != kMaxSequenceNumber)) {
568
+ // Rectify the first sequence number, which (unlike the earliest seq
569
+ // number) needs to be present in the new memtable.
570
+ new_mem->SetFirstSequenceNumber(new_first_seqno);
571
+
572
+ // The new_mem is added to the list of immutable memtables
573
+ // only if it filled at less than 100% capacity and isn't flagged
574
+ // as in need of being flushed.
575
+ if (new_mem->ApproximateMemoryUsage() < maxSize &&
576
+ !(new_mem->ShouldFlushNow())) {
577
+ db_mutex_->Lock();
578
+ uint64_t new_mem_id = mems_[0]->GetID();
579
+
580
+ new_mem->SetID(new_mem_id);
581
+ new_mem->SetNextLogNumber(mems_[0]->GetNextLogNumber());
582
+
583
+ // This addition will not trigger another flush, because
584
+ // we do not call SchedulePendingFlush().
585
+ cfd_->imm()->Add(new_mem, &job_context_->memtables_to_free);
586
+ new_mem->Ref();
587
+ #ifndef ROCKSDB_LITE
588
+ // Piggyback FlushJobInfo on the first flushed memtable.
589
+ db_mutex_->AssertHeld();
590
+ meta_.fd.file_size = 0;
591
+ mems_[0]->SetFlushJobInfo(GetFlushJobInfo());
592
+ #endif // !ROCKSDB_LITE
593
+ db_mutex_->Unlock();
594
+ } else {
595
+ s = Status::Aborted(Slice("Mempurge filled more than one memtable."));
596
+ new_mem_capacity = 1.0;
597
+ if (new_mem) {
598
+ job_context_->memtables_to_free.push_back(new_mem);
599
+ }
600
+ }
601
+ } else {
602
+ // In this case, the newly allocated new_mem is empty.
603
+ assert(new_mem != nullptr);
604
+ job_context_->memtables_to_free.push_back(new_mem);
605
+ }
606
+ }
607
+
608
+ // Reacquire the mutex for WriteLevel0 function.
609
+ db_mutex_->Lock();
610
+
611
+ // If mempurge successful, don't write input tables to level0,
612
+ // but write any full output table to level0.
613
+ if (s.ok()) {
614
+ TEST_SYNC_POINT("DBImpl::FlushJob:MemPurgeSuccessful");
615
+ } else {
616
+ TEST_SYNC_POINT("DBImpl::FlushJob:MemPurgeUnsuccessful");
617
+ }
618
+ const uint64_t micros = clock_->NowMicros() - start_micros;
619
+ const uint64_t cpu_micros = clock_->CPUMicros() - start_cpu_micros;
620
+ ROCKS_LOG_INFO(db_options_.info_log,
621
+ "[%s] [JOB %d] Mempurge lasted %" PRIu64
622
+ " microseconds, and %" PRIu64
623
+ " cpu "
624
+ "microseconds. Status is %s ok. Perc capacity: %f\n",
625
+ cfd_->GetName().c_str(), job_context_->job_id, micros,
626
+ cpu_micros, s.ok() ? "" : "not", new_mem_capacity);
627
+
628
+ return s;
629
+ }
630
+
631
+ bool FlushJob::MemPurgeDecider() {
632
+ double threshold = db_options_.experimental_mempurge_threshold;
633
+ // Never trigger mempurge if threshold is not a strictly positive value.
634
+ if (!(threshold > 0.0)) {
635
+ return false;
636
+ }
637
+ if (threshold > (1.0 * mems_.size())) {
638
+ return true;
639
+ }
640
+ // Payload and useful_payload (in bytes).
641
+ // The useful payload ratio of a given MemTable
642
+ // is estimated to be useful_payload/payload.
643
+ uint64_t payload = 0, useful_payload = 0, entry_size = 0;
644
+
645
+ // Local variables used repetitively inside the for-loop
646
+ // when iterating over the sampled entries.
647
+ Slice key_slice, value_slice;
648
+ ParsedInternalKey res;
649
+ SnapshotImpl min_snapshot;
650
+ std::string vget;
651
+ Status mget_s, parse_s;
652
+ MergeContext merge_context;
653
+ SequenceNumber max_covering_tombstone_seq = 0, sqno = 0,
654
+ min_seqno_snapshot = 0;
655
+ bool get_res, can_be_useful_payload, not_in_next_mems;
656
+
657
+ // If estimated_useful_payload is > threshold,
658
+ // then flush to storage, else MemPurge.
659
+ double estimated_useful_payload = 0.0;
660
+ // Cochran formula for determining sample size.
661
+ // 95% confidence interval, 7% precision.
662
+ // n0 = (1.96*1.96)*0.25/(0.07*0.07) = 196.0
663
+ double n0 = 196.0;
664
+ ReadOptions ro;
665
+ ro.total_order_seek = true;
666
+
667
+ // Iterate over each memtable of the set.
668
+ for (auto mem_iter = std::begin(mems_); mem_iter != std::end(mems_);
669
+ mem_iter++) {
670
+ MemTable* mt = *mem_iter;
671
+
672
+ // Else sample from the table.
673
+ uint64_t nentries = mt->num_entries();
674
+ // Corrected Cochran formula for small populations
675
+ // (converges to n0 for large populations).
676
+ uint64_t target_sample_size =
677
+ static_cast<uint64_t>(ceil(n0 / (1.0 + (n0 / nentries))));
678
+ std::unordered_set<const char*> sentries = {};
679
+ // Populate sample entries set.
680
+ mt->UniqueRandomSample(target_sample_size, &sentries);
681
+
682
+ // Estimate the garbage ratio by comparing if
683
+ // each sample corresponds to a valid entry.
684
+ for (const char* ss : sentries) {
685
+ key_slice = GetLengthPrefixedSlice(ss);
686
+ parse_s = ParseInternalKey(key_slice, &res, true /*log_err_key*/);
687
+ if (!parse_s.ok()) {
688
+ ROCKS_LOG_WARN(db_options_.info_log,
689
+ "Memtable Decider: ParseInternalKey did not parse "
690
+ "key_slice %s successfully.",
691
+ key_slice.data());
692
+ }
693
+
694
+ // Size of the entry is "key size (+ value size if KV entry)"
695
+ entry_size = key_slice.size();
696
+ if (res.type == kTypeValue) {
697
+ value_slice =
698
+ GetLengthPrefixedSlice(key_slice.data() + key_slice.size());
699
+ entry_size += value_slice.size();
700
+ }
701
+
702
+ // Count entry bytes as payload.
703
+ payload += entry_size;
704
+
705
+ LookupKey lkey(res.user_key, kMaxSequenceNumber);
706
+
707
+ // Paranoia: zero out these values just in case.
708
+ max_covering_tombstone_seq = 0;
709
+ sqno = 0;
710
+
711
+ // Pick the oldest existing snapshot that is more recent
712
+ // than the sequence number of the sampled entry.
713
+ min_seqno_snapshot = kMaxSequenceNumber;
714
+ for (SequenceNumber seq_num : existing_snapshots_) {
715
+ if (seq_num > res.sequence && seq_num < min_seqno_snapshot) {
716
+ min_seqno_snapshot = seq_num;
717
+ }
718
+ }
719
+ min_snapshot.number_ = min_seqno_snapshot;
720
+ ro.snapshot =
721
+ min_seqno_snapshot < kMaxSequenceNumber ? &min_snapshot : nullptr;
722
+
723
+ // Estimate if the sample entry is valid or not.
724
+ get_res = mt->Get(lkey, &vget, nullptr, &mget_s, &merge_context,
725
+ &max_covering_tombstone_seq, &sqno, ro);
726
+ if (!get_res) {
727
+ ROCKS_LOG_WARN(
728
+ db_options_.info_log,
729
+ "Memtable Get returned false when Get(sampled entry). "
730
+ "Yet each sample entry should exist somewhere in the memtable, "
731
+ "unrelated to whether it has been deleted or not.");
732
+ }
733
+
734
+ // TODO(bjlemaire): evaluate typeMerge.
735
+ // This is where the sampled entry is estimated to be
736
+ // garbage or not. Note that this is a garbage *estimation*
737
+ // because we do not include certain items such as
738
+ // CompactionFitlers triggered at flush, or if the same delete
739
+ // has been inserted twice or more in the memtable.
740
+
741
+ // Evaluate if the entry can be useful payload
742
+ // Situation #1: entry is a KV entry, was found in the memtable mt
743
+ // and the sequence numbers match.
744
+ can_be_useful_payload = (res.type == kTypeValue) && get_res &&
745
+ mget_s.ok() && (sqno == res.sequence);
746
+
747
+ // Situation #2: entry is a delete entry, was found in the memtable mt
748
+ // (because gres==true) and no valid KV entry is found.
749
+ // (note: duplicate delete entries are also taken into
750
+ // account here, because the sequence number 'sqno'
751
+ // in memtable->Get(&sqno) operation is set to be equal
752
+ // to the most recent delete entry as well).
753
+ can_be_useful_payload |=
754
+ ((res.type == kTypeDeletion) || (res.type == kTypeSingleDeletion)) &&
755
+ mget_s.IsNotFound() && get_res && (sqno == res.sequence);
756
+
757
+ // If there is a chance that the entry is useful payload
758
+ // Verify that the entry does not appear in the following memtables
759
+ // (memtables with greater memtable ID/larger sequence numbers).
760
+ if (can_be_useful_payload) {
761
+ not_in_next_mems = true;
762
+ for (auto next_mem_iter = mem_iter + 1;
763
+ next_mem_iter != std::end(mems_); next_mem_iter++) {
764
+ if ((*next_mem_iter)
765
+ ->Get(lkey, &vget, nullptr, &mget_s, &merge_context,
766
+ &max_covering_tombstone_seq, &sqno, ro)) {
767
+ not_in_next_mems = false;
768
+ break;
769
+ }
770
+ }
771
+ if (not_in_next_mems) {
772
+ useful_payload += entry_size;
773
+ }
774
+ }
775
+ }
776
+ if (payload > 0) {
777
+ // We use the estimated useful payload ratio to
778
+ // evaluate how many of the memtable bytes are useful bytes.
779
+ estimated_useful_payload +=
780
+ (mt->ApproximateMemoryUsage()) * (useful_payload * 1.0 / payload);
781
+
782
+ ROCKS_LOG_INFO(
783
+ db_options_.info_log,
784
+ "Mempurge sampling - found garbage ratio from sampling: %f.\n",
785
+ (payload - useful_payload) * 1.0 / payload);
786
+ } else {
787
+ ROCKS_LOG_WARN(db_options_.info_log,
788
+ "Mempurge sampling: null payload measured, and collected "
789
+ "sample size is %zu\n.",
790
+ sentries.size());
791
+ }
792
+ }
793
+ // We convert the total number of useful payload bytes
794
+ // into the proportion of memtable necessary to store all these bytes.
795
+ // We compare this proportion with the threshold value.
796
+ return ((estimated_useful_payload / mutable_cf_options_.write_buffer_size) <
797
+ threshold);
798
+ }
799
+
308
800
  Status FlushJob::WriteLevel0Table() {
309
801
  AutoThreadOperationStageUpdater stage_updater(
310
802
  ThreadStatus::STAGE_FLUSH_WRITE_L0);
311
803
  db_mutex_->AssertHeld();
312
- const uint64_t start_micros = db_options_.env->NowMicros();
313
- const uint64_t start_cpu_micros = db_options_.env->NowCPUNanos() / 1000;
804
+ const uint64_t start_micros = clock_->NowMicros();
805
+ const uint64_t start_cpu_micros = clock_->CPUMicros();
314
806
  Status s;
315
807
 
316
808
  std::vector<BlobFileAddition> blob_file_additions;
@@ -333,6 +825,13 @@ Status FlushJob::WriteLevel0Table() {
333
825
  uint64_t total_num_entries = 0, total_num_deletes = 0;
334
826
  uint64_t total_data_size = 0;
335
827
  size_t total_memory_usage = 0;
828
+ // Used for testing:
829
+ uint64_t mems_size = mems_.size();
830
+ (void)mems_size; // avoids unused variable error when
831
+ // TEST_SYNC_POINT_CALLBACK not used.
832
+ TEST_SYNC_POINT_CALLBACK("FlushJob::WriteLevel0Table:num_memtables",
833
+ &mems_size);
834
+ assert(job_context_);
336
835
  for (MemTable* m : mems_) {
337
836
  ROCKS_LOG_INFO(
338
837
  db_options_.info_log,
@@ -361,7 +860,7 @@ Status FlushJob::WriteLevel0Table() {
361
860
 
362
861
  {
363
862
  ScopedArenaIterator iter(
364
- NewMergingIterator(&cfd_->internal_comparator(), &memtables[0],
863
+ NewMergingIterator(&cfd_->internal_comparator(), memtables.data(),
365
864
  static_cast<int>(memtables.size()), &arena));
366
865
  ROCKS_LOG_INFO(db_options_.info_log,
367
866
  "[%s] [JOB %d] Level-0 flush table #%" PRIu64 ": started",
@@ -371,7 +870,7 @@ Status FlushJob::WriteLevel0Table() {
371
870
  TEST_SYNC_POINT_CALLBACK("FlushJob::WriteLevel0Table:output_compression",
372
871
  &output_compression_);
373
872
  int64_t _current_time = 0;
374
- auto status = db_options_.env->GetCurrentTime(&_current_time);
873
+ auto status = clock_->GetCurrentTime(&_current_time);
375
874
  // Safe to proceed even if GetCurrentTime fails. So, log and proceed.
376
875
  if (!status.ok()) {
377
876
  ROCKS_LOG_WARN(
@@ -401,25 +900,53 @@ Status FlushJob::WriteLevel0Table() {
401
900
  ? current_time
402
901
  : meta_.oldest_ancester_time;
403
902
 
903
+ uint64_t num_input_entries = 0;
904
+ uint64_t memtable_payload_bytes = 0;
905
+ uint64_t memtable_garbage_bytes = 0;
404
906
  IOStatus io_s;
405
907
  const std::string* const full_history_ts_low =
406
908
  (full_history_ts_low_.empty()) ? nullptr : &full_history_ts_low_;
909
+ TableBuilderOptions tboptions(
910
+ *cfd_->ioptions(), mutable_cf_options_, cfd_->internal_comparator(),
911
+ cfd_->int_tbl_prop_collector_factories(), output_compression_,
912
+ mutable_cf_options_.compression_opts, cfd_->GetID(), cfd_->GetName(),
913
+ 0 /* level */, false /* is_bottommost */,
914
+ TableFileCreationReason::kFlush, creation_time, oldest_key_time,
915
+ current_time, db_id_, db_session_id_, 0 /* target_file_size */,
916
+ meta_.fd.GetNumber());
917
+ const SequenceNumber job_snapshot_seq =
918
+ job_context_->GetJobSnapshotSequence();
407
919
  s = BuildTable(
408
- dbname_, versions_, db_options_, *cfd_->ioptions(),
409
- mutable_cf_options_, file_options_, cfd_->table_cache(), iter.get(),
410
- std::move(range_del_iters), &meta_, &blob_file_additions,
411
- cfd_->internal_comparator(), cfd_->int_tbl_prop_collector_factories(),
412
- cfd_->GetID(), cfd_->GetName(), existing_snapshots_,
413
- earliest_write_conflict_snapshot_, snapshot_checker_,
414
- output_compression_, mutable_cf_options_.sample_for_compression,
415
- mutable_cf_options_.compression_opts,
416
- mutable_cf_options_.paranoid_file_checks, cfd_->internal_stats(),
417
- TableFileCreationReason::kFlush, &io_s, io_tracer_, event_logger_,
418
- job_context_->job_id, Env::IO_HIGH, &table_properties_, 0 /* level */,
419
- creation_time, oldest_key_time, write_hint, current_time, db_id_,
420
- db_session_id_, full_history_ts_low);
421
- if (!io_s.ok()) {
422
- io_status_ = io_s;
920
+ dbname_, versions_, db_options_, tboptions, file_options_,
921
+ cfd_->table_cache(), iter.get(), std::move(range_del_iters), &meta_,
922
+ &blob_file_additions, existing_snapshots_,
923
+ earliest_write_conflict_snapshot_, job_snapshot_seq,
924
+ snapshot_checker_, mutable_cf_options_.paranoid_file_checks,
925
+ cfd_->internal_stats(), &io_s, io_tracer_,
926
+ BlobFileCreationReason::kFlush, event_logger_, job_context_->job_id,
927
+ Env::IO_HIGH, &table_properties_, write_hint, full_history_ts_low,
928
+ blob_callback_, &num_input_entries, &memtable_payload_bytes,
929
+ &memtable_garbage_bytes);
930
+ // TODO: Cleanup io_status in BuildTable and table builders
931
+ assert(!s.ok() || io_s.ok());
932
+ io_s.PermitUncheckedError();
933
+ if (num_input_entries != total_num_entries && s.ok()) {
934
+ std::string msg = "Expected " + ToString(total_num_entries) +
935
+ " entries in memtables, but read " +
936
+ ToString(num_input_entries);
937
+ ROCKS_LOG_WARN(db_options_.info_log, "[%s] [JOB %d] Level-0 flush %s",
938
+ cfd_->GetName().c_str(), job_context_->job_id,
939
+ msg.c_str());
940
+ if (db_options_.flush_verify_memtable_count) {
941
+ s = Status::Corruption(msg);
942
+ }
943
+ }
944
+ if (tboptions.reason == TableFileCreationReason::kFlush) {
945
+ TEST_SYNC_POINT("DBImpl::FlushJob:Flush");
946
+ RecordTick(stats_, MEMTABLE_PAYLOAD_BYTES_AT_FLUSH,
947
+ memtable_payload_bytes);
948
+ RecordTick(stats_, MEMTABLE_GARBAGE_BYTES_AT_FLUSH,
949
+ memtable_garbage_bytes);
423
950
  }
424
951
  LogFlush(db_options_.info_log);
425
952
  }
@@ -433,7 +960,9 @@ Status FlushJob::WriteLevel0Table() {
433
960
  meta_.marked_for_compaction ? " (needs compaction)" : "");
434
961
 
435
962
  if (s.ok() && output_file_directory_ != nullptr && sync_output_directory_) {
436
- s = output_file_directory_->Fsync(IOOptions(), nullptr);
963
+ s = output_file_directory_->FsyncWithDirOptions(
964
+ IOOptions(), nullptr,
965
+ DirFsyncOptions(DirFsyncOptions::FsyncReason::kNewFileSynced));
437
966
  }
438
967
  TEST_SYNC_POINT_CALLBACK("FlushJob::WriteLevel0Table", &mems_);
439
968
  db_mutex_->Lock();
@@ -445,6 +974,7 @@ Status FlushJob::WriteLevel0Table() {
445
974
  const bool has_output = meta_.fd.GetFileSize() > 0;
446
975
 
447
976
  if (s.ok() && has_output) {
977
+ TEST_SYNC_POINT("DBImpl::FlushJob:SSTFileCreated");
448
978
  // if we have more than 1 background thread, then we cannot
449
979
  // insert files directly into higher levels because some other
450
980
  // threads could be concurrently producing compacted files for
@@ -453,9 +983,11 @@ Status FlushJob::WriteLevel0Table() {
453
983
  edit_->AddFile(0 /* level */, meta_.fd.GetNumber(), meta_.fd.GetPathId(),
454
984
  meta_.fd.GetFileSize(), meta_.smallest, meta_.largest,
455
985
  meta_.fd.smallest_seqno, meta_.fd.largest_seqno,
456
- meta_.marked_for_compaction, meta_.oldest_blob_file_number,
457
- meta_.oldest_ancester_time, meta_.file_creation_time,
458
- meta_.file_checksum, meta_.file_checksum_func_name);
986
+ meta_.marked_for_compaction, meta_.temperature,
987
+ meta_.oldest_blob_file_number, meta_.oldest_ancester_time,
988
+ meta_.file_creation_time, meta_.file_checksum,
989
+ meta_.file_checksum_func_name, meta_.min_timestamp,
990
+ meta_.max_timestamp);
459
991
 
460
992
  edit_->SetBlobFileAdditions(std::move(blob_file_additions));
461
993
  }
@@ -466,8 +998,16 @@ Status FlushJob::WriteLevel0Table() {
466
998
 
467
999
  // Note that here we treat flush as level 0 compaction in internal stats
468
1000
  InternalStats::CompactionStats stats(CompactionReason::kFlush, 1);
469
- stats.micros = db_options_.env->NowMicros() - start_micros;
470
- stats.cpu_micros = db_options_.env->NowCPUNanos() / 1000 - start_cpu_micros;
1001
+ const uint64_t micros = clock_->NowMicros() - start_micros;
1002
+ const uint64_t cpu_micros = clock_->CPUMicros() - start_cpu_micros;
1003
+ stats.micros = micros;
1004
+ stats.cpu_micros = cpu_micros;
1005
+
1006
+ ROCKS_LOG_INFO(db_options_.info_log,
1007
+ "[%s] [JOB %d] Flush lasted %" PRIu64
1008
+ " microseconds, and %" PRIu64 " cpu microseconds.\n",
1009
+ cfd_->GetName().c_str(), job_context_->job_id, micros,
1010
+ cpu_micros);
471
1011
 
472
1012
  if (has_output) {
473
1013
  stats.bytes_written = meta_.fd.GetFileSize();
@@ -476,16 +1016,18 @@ Status FlushJob::WriteLevel0Table() {
476
1016
 
477
1017
  const auto& blobs = edit_->GetBlobFileAdditions();
478
1018
  for (const auto& blob : blobs) {
479
- stats.bytes_written += blob.GetTotalBlobBytes();
1019
+ stats.bytes_written_blob += blob.GetTotalBlobBytes();
480
1020
  }
481
1021
 
482
- stats.num_output_files += static_cast<int>(blobs.size());
1022
+ stats.num_output_files_blob = static_cast<int>(blobs.size());
483
1023
 
484
1024
  RecordTimeToHistogram(stats_, FLUSH_TIME, stats.micros);
485
1025
  cfd_->internal_stats()->AddCompactionStats(0 /* level */, thread_pri_, stats);
486
- cfd_->internal_stats()->AddCFStats(InternalStats::BYTES_FLUSHED,
487
- stats.bytes_written);
1026
+ cfd_->internal_stats()->AddCFStats(
1027
+ InternalStats::BYTES_FLUSHED,
1028
+ stats.bytes_written + stats.bytes_written_blob);
488
1029
  RecordFlushIOStats();
1030
+
489
1031
  return s;
490
1032
  }
491
1033
 
@@ -507,8 +1049,21 @@ std::unique_ptr<FlushJobInfo> FlushJob::GetFlushJobInfo() const {
507
1049
  info->largest_seqno = meta_.fd.largest_seqno;
508
1050
  info->table_properties = table_properties_;
509
1051
  info->flush_reason = cfd_->GetFlushReason();
1052
+ info->blob_compression_type = mutable_cf_options_.blob_compression_type;
1053
+
1054
+ // Update BlobFilesInfo.
1055
+ for (const auto& blob_file : edit_->GetBlobFileAdditions()) {
1056
+ BlobFileAdditionInfo blob_file_addition_info(
1057
+ BlobFileName(cfd_->ioptions()->cf_paths.front().path,
1058
+ blob_file.GetBlobFileNumber()) /*blob_file_path*/,
1059
+ blob_file.GetBlobFileNumber(), blob_file.GetTotalBlobCount(),
1060
+ blob_file.GetTotalBlobBytes());
1061
+ info->blob_file_addition_infos.emplace_back(
1062
+ std::move(blob_file_addition_info));
1063
+ }
510
1064
  return info;
511
1065
  }
1066
+
512
1067
  #endif // !ROCKSDB_LITE
513
1068
 
514
1069
  } // namespace ROCKSDB_NAMESPACE