@nxtedition/rocksdb 5.2.21 → 5.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (923) hide show
  1. package/binding.cc +510 -967
  2. package/binding.gyp +78 -72
  3. package/chained-batch.js +1 -2
  4. package/deps/rocksdb/build_version.cc +70 -4
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  6. package/deps/rocksdb/rocksdb/Makefile +459 -469
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  37. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  38. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  39. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  40. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  41. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  42. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  43. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  57. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  61. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  64. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  67. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  68. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  69. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  70. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  71. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  72. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  73. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  74. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  75. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  76. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  77. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  78. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  79. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  80. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  81. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  82. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  83. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  103. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  104. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  105. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  106. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  107. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  108. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  110. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  111. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  112. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  113. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  114. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  115. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  116. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  117. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  118. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  119. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  120. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  121. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  122. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  133. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  134. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  135. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  136. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  137. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  138. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  139. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  140. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  141. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  142. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  143. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  144. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  145. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  146. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  147. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  149. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  150. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  151. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  152. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  153. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  154. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  155. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  156. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  157. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  158. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  159. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  160. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  161. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  162. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  163. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  164. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  165. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  166. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  167. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  168. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  169. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  170. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  171. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  172. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  173. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  174. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  175. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  176. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  177. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  178. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  179. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  180. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  181. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  182. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  183. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  184. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  185. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  186. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  187. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  188. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  189. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  190. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  191. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  192. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  193. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  194. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  195. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  196. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  197. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  198. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  199. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  200. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  201. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  202. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  203. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  204. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  205. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  206. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  207. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  208. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  209. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  210. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  211. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  212. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  213. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  214. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  215. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  216. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  217. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  218. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  219. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  220. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  221. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  222. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  224. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  225. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  226. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  227. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  228. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  229. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  230. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  231. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  232. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  233. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  234. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  235. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  236. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  237. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  238. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  239. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  240. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  241. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  242. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  243. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  244. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  245. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  246. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  247. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  248. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  249. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  250. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  251. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  252. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  253. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  254. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  255. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  256. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  257. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  258. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  260. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  261. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  262. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  263. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  264. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  284. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  290. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  291. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  292. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  293. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  294. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  295. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  296. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  297. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  298. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  299. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  300. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  301. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  302. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  303. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  304. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  305. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  306. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  307. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  308. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  309. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  310. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  311. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  312. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  313. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  314. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  315. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  316. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  317. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  318. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  319. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  320. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  321. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  322. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  323. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  324. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  325. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  326. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  327. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  328. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  329. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  330. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  331. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  332. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  333. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  334. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  335. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  336. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  337. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  338. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  339. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  340. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  341. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  342. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  343. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  344. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  345. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  346. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  347. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  349. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  350. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  351. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  353. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  354. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  356. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  358. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  359. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  360. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  362. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  363. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  364. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  365. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  367. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  368. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  369. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  370. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  371. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  372. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  373. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  374. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  375. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  376. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  377. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  378. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  381. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  382. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  383. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  385. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  386. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  388. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  390. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  391. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  392. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  393. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  396. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  397. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  417. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  418. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  419. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  420. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  422. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  423. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  425. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  426. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  427. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  428. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  429. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  430. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  431. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  432. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  433. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  434. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  435. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  436. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  437. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  438. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  439. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  440. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  441. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  442. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  443. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  444. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  445. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  446. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  447. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  448. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  449. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  450. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  451. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  452. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  453. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  454. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  455. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  456. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  457. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  458. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  459. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  460. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  461. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  462. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  463. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  464. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  465. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  466. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  467. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  468. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  469. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  470. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  471. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  472. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  473. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  474. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  475. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  476. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  477. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  478. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  479. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  480. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  481. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  482. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  483. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  484. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  485. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  486. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  487. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  488. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  489. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  490. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  491. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  492. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  493. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  494. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  495. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  496. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  497. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  498. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  499. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  500. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  501. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  502. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  503. package/deps/rocksdb/rocksdb/python.mk +9 -0
  504. package/deps/rocksdb/rocksdb/src.mk +82 -34
  505. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  506. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  507. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  508. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  514. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  515. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  516. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  517. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  518. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  519. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  520. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  521. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  522. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  523. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  524. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  525. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  526. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  527. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  529. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  530. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  531. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  532. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  534. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  535. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  536. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  537. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  538. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  539. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  540. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  541. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  542. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  543. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  544. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  547. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  548. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  549. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  550. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  551. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  552. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  553. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  554. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  555. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  556. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  557. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  558. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  559. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  560. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  561. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  562. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  563. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  564. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  565. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  566. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  567. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  568. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  569. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  570. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  571. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  572. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  573. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  574. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  575. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  576. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  577. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  578. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  579. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  580. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  581. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  582. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  586. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  587. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  588. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  589. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  590. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  591. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  592. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  593. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  594. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  595. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  596. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  597. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  598. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  599. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  600. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  601. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  602. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  603. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  604. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  605. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  606. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  607. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  608. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  609. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  610. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  611. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  612. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  613. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  614. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  615. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  616. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  617. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  618. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  619. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  620. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  621. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  622. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  623. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  624. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  625. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  626. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  627. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  628. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  629. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  630. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  631. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  632. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  633. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  634. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  635. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  636. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  637. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  638. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  639. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  640. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  641. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  642. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  643. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  644. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  645. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  646. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  647. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  648. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  649. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  650. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  651. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  652. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  653. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  654. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  655. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  656. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  657. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  658. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  659. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  660. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  661. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  662. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  663. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  664. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  665. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  666. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  667. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  668. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  669. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  670. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  671. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  672. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  673. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  674. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  675. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  676. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  677. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  678. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  679. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  680. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  681. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  682. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  683. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  684. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  685. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  686. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  687. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  688. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  689. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  690. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  691. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  692. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  693. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  694. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  695. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  696. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  697. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  698. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  699. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  700. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  701. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  702. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  703. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  704. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  705. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  706. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  707. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  708. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  709. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  710. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  711. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  712. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  713. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  714. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  715. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  716. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  717. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  718. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  719. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  720. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  721. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  722. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  723. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  724. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  725. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  726. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  727. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  728. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  729. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  730. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  731. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  732. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  733. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  734. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  741. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  742. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  743. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  744. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  745. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  746. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  747. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  748. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  749. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  750. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  751. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  752. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  753. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  754. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  755. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  756. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  757. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  758. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  759. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  760. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  761. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  762. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  763. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  764. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  765. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  766. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  767. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  768. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  769. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  770. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  771. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  772. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  773. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  774. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  775. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  776. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  777. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  778. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  779. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  780. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  786. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  787. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  788. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  789. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  790. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  791. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  792. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  793. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  794. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  795. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  796. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  797. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  798. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  799. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  802. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  803. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  804. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  805. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  806. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  807. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  808. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  809. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  810. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  811. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  812. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  813. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  814. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  815. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  816. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  817. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  818. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  821. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  822. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  823. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  824. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  825. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  826. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  827. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  828. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  829. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  830. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  831. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  832. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  833. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  834. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  835. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  836. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  837. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  838. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  839. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  840. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  841. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  842. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  843. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  844. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  845. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  846. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  847. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  848. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  849. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  850. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  851. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  852. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  853. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  854. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  855. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  856. package/deps/rocksdb/rocksdb.gyp +425 -446
  857. package/index.js +5 -87
  858. package/package-lock.json +23687 -0
  859. package/package.json +8 -9
  860. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  861. package/prebuilds/darwin-x64/node.napi.node +0 -0
  862. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  863. package/deps/rocksdb/rocksdb/README.md +0 -32
  864. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  865. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  866. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  867. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  868. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  869. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  870. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  871. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  872. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  873. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  874. package/deps/rocksdb/rocksdb/port/README +0 -10
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  905. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  906. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  907. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  908. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  909. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  910. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  911. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  912. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  913. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  914. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  915. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  916. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  917. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  918. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  919. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  920. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  921. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  922. package/deps/snappy/snappy-1.1.7/README.md +0 -149
  923. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -8,12 +8,13 @@
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
10
  #include "db/db_test_util.h"
11
- #include "env/composite_env_wrapper.h"
12
11
  #include "options/options_helper.h"
13
12
  #include "port/port.h"
14
13
  #include "port/stack_trace.h"
14
+ #include "rocksdb/file_system.h"
15
15
  #include "test_util/sync_point.h"
16
16
  #include "utilities/fault_injection_env.h"
17
+ #include "utilities/fault_injection_fs.h"
17
18
 
18
19
  namespace ROCKSDB_NAMESPACE {
19
20
  class DBWALTestBase : public DBTestBase {
@@ -23,13 +24,37 @@ class DBWALTestBase : public DBTestBase {
23
24
 
24
25
  #if defined(ROCKSDB_PLATFORM_POSIX)
25
26
  public:
27
+ #if defined(ROCKSDB_FALLOCATE_PRESENT)
28
+ bool IsFallocateSupported() {
29
+ // Test fallocate support of running file system.
30
+ // Skip this test if fallocate is not supported.
31
+ std::string fname_test_fallocate = dbname_ + "/preallocate_testfile";
32
+ int fd = -1;
33
+ do {
34
+ fd = open(fname_test_fallocate.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644);
35
+ } while (fd < 0 && errno == EINTR);
36
+ assert(fd > 0);
37
+ int alloc_status = fallocate(fd, 0, 0, 1);
38
+ int err_number = errno;
39
+ close(fd);
40
+ assert(env_->DeleteFile(fname_test_fallocate) == Status::OK());
41
+ if (err_number == ENOSYS || err_number == EOPNOTSUPP) {
42
+ fprintf(stderr, "Skipped preallocated space check: %s\n",
43
+ errnoStr(err_number).c_str());
44
+ return false;
45
+ }
46
+ assert(alloc_status == 0);
47
+ return true;
48
+ }
49
+ #endif // ROCKSDB_FALLOCATE_PRESENT
50
+
26
51
  uint64_t GetAllocatedFileSize(std::string file_name) {
27
52
  struct stat sbuf;
28
53
  int err = stat(file_name.c_str(), &sbuf);
29
54
  assert(err == 0);
30
55
  return sbuf.st_blocks * 512;
31
56
  }
32
- #endif
57
+ #endif // ROCKSDB_PLATFORM_POSIX
33
58
  };
34
59
 
35
60
  class DBWALTest : public DBWALTestBase {
@@ -94,7 +119,7 @@ class EnrichedSpecialEnv : public SpecialEnv {
94
119
  class DBWALTestWithEnrichedEnv : public DBTestBase {
95
120
  public:
96
121
  DBWALTestWithEnrichedEnv()
97
- : DBTestBase("/db_wal_test", /*env_do_fsync=*/true) {
122
+ : DBTestBase("db_wal_test", /*env_do_fsync=*/true) {
98
123
  enriched_env_ = new EnrichedSpecialEnv(env_->target());
99
124
  auto options = CurrentOptions();
100
125
  options.env = enriched_env_;
@@ -262,7 +287,6 @@ TEST_F(DBWALTest, Recover) {
262
287
 
263
288
  ReopenWithColumnFamilies({"default", "pikachu"}, CurrentOptions());
264
289
  ASSERT_EQ("v1", Get(1, "foo"));
265
-
266
290
  ASSERT_EQ("v1", Get(1, "foo"));
267
291
  ASSERT_EQ("v5", Get(1, "baz"));
268
292
  ASSERT_OK(Put(1, "bar", "v2"));
@@ -357,7 +381,7 @@ TEST_F(DBWALTest, RecoverWithBlob) {
357
381
 
358
382
  // There should be no files just yet since we haven't flushed.
359
383
  {
360
- VersionSet* const versions = dbfull()->TEST_GetVersionSet();
384
+ VersionSet* const versions = dbfull()->GetVersionSet();
361
385
  ASSERT_NE(versions, nullptr);
362
386
 
363
387
  ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
@@ -387,7 +411,7 @@ TEST_F(DBWALTest, RecoverWithBlob) {
387
411
  ASSERT_EQ(Get("key1"), short_value);
388
412
  ASSERT_EQ(Get("key2"), long_value);
389
413
 
390
- VersionSet* const versions = dbfull()->TEST_GetVersionSet();
414
+ VersionSet* const versions = dbfull()->GetVersionSet();
391
415
  ASSERT_NE(versions, nullptr);
392
416
 
393
417
  ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
@@ -408,7 +432,7 @@ TEST_F(DBWALTest, RecoverWithBlob) {
408
432
  const auto& blob_files = storage_info->GetBlobFiles();
409
433
  ASSERT_EQ(blob_files.size(), 1);
410
434
 
411
- const auto& blob_file = blob_files.begin()->second;
435
+ const auto& blob_file = blob_files.front();
412
436
  ASSERT_NE(blob_file, nullptr);
413
437
 
414
438
  ASSERT_EQ(table_file->smallest.user_key(), "key1");
@@ -424,28 +448,174 @@ TEST_F(DBWALTest, RecoverWithBlob) {
424
448
  const InternalStats* const internal_stats = cfd->internal_stats();
425
449
  ASSERT_NE(internal_stats, nullptr);
426
450
 
427
- const uint64_t expected_bytes =
428
- table_file->fd.GetFileSize() + blob_file->GetTotalBlobBytes();
429
-
430
451
  const auto& compaction_stats = internal_stats->TEST_GetCompactionStats();
431
452
  ASSERT_FALSE(compaction_stats.empty());
432
- ASSERT_EQ(compaction_stats[0].bytes_written, expected_bytes);
433
- ASSERT_EQ(compaction_stats[0].num_output_files, 2);
453
+ ASSERT_EQ(compaction_stats[0].bytes_written, table_file->fd.GetFileSize());
454
+ ASSERT_EQ(compaction_stats[0].bytes_written_blob,
455
+ blob_file->GetTotalBlobBytes());
456
+ ASSERT_EQ(compaction_stats[0].num_output_files, 1);
457
+ ASSERT_EQ(compaction_stats[0].num_output_files_blob, 1);
434
458
 
435
459
  const uint64_t* const cf_stats_value = internal_stats->TEST_GetCFStatsValue();
436
- ASSERT_EQ(cf_stats_value[InternalStats::BYTES_FLUSHED], expected_bytes);
460
+ ASSERT_EQ(cf_stats_value[InternalStats::BYTES_FLUSHED],
461
+ compaction_stats[0].bytes_written +
462
+ compaction_stats[0].bytes_written_blob);
437
463
  #endif // ROCKSDB_LITE
438
464
  }
439
465
 
466
+ TEST_F(DBWALTest, RecoverWithBlobMultiSST) {
467
+ // Write several large (4 KB) values without flushing. Note that blob files
468
+ // are not actually enabled at this point.
469
+ std::string large_value(1 << 12, 'a');
470
+
471
+ constexpr int num_keys = 64;
472
+
473
+ for (int i = 0; i < num_keys; ++i) {
474
+ ASSERT_OK(Put(Key(i), large_value));
475
+ }
476
+
477
+ // There should be no files just yet since we haven't flushed.
478
+ {
479
+ VersionSet* const versions = dbfull()->GetVersionSet();
480
+ ASSERT_NE(versions, nullptr);
481
+
482
+ ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
483
+ ASSERT_NE(cfd, nullptr);
484
+
485
+ Version* const current = cfd->current();
486
+ ASSERT_NE(current, nullptr);
487
+
488
+ const VersionStorageInfo* const storage_info = current->storage_info();
489
+ ASSERT_NE(storage_info, nullptr);
490
+
491
+ ASSERT_EQ(storage_info->num_non_empty_levels(), 0);
492
+ ASSERT_TRUE(storage_info->GetBlobFiles().empty());
493
+ }
494
+
495
+ // Reopen the database with blob files enabled and write buffer size set to a
496
+ // smaller value. Multiple table files+blob files should be written and added
497
+ // to the Version during recovery.
498
+ Options options;
499
+ options.write_buffer_size = 1 << 16; // 64 KB
500
+ options.enable_blob_files = true;
501
+ options.avoid_flush_during_recovery = false;
502
+ options.disable_auto_compactions = true;
503
+ options.env = env_;
504
+
505
+ Reopen(options);
506
+
507
+ for (int i = 0; i < num_keys; ++i) {
508
+ ASSERT_EQ(Get(Key(i)), large_value);
509
+ }
510
+
511
+ VersionSet* const versions = dbfull()->GetVersionSet();
512
+ ASSERT_NE(versions, nullptr);
513
+
514
+ ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
515
+ ASSERT_NE(cfd, nullptr);
516
+
517
+ Version* const current = cfd->current();
518
+ ASSERT_NE(current, nullptr);
519
+
520
+ const VersionStorageInfo* const storage_info = current->storage_info();
521
+ ASSERT_NE(storage_info, nullptr);
522
+
523
+ const auto& l0_files = storage_info->LevelFiles(0);
524
+ ASSERT_GT(l0_files.size(), 1);
525
+
526
+ const auto& blob_files = storage_info->GetBlobFiles();
527
+ ASSERT_GT(blob_files.size(), 1);
528
+
529
+ ASSERT_EQ(l0_files.size(), blob_files.size());
530
+ }
531
+
532
+ TEST_F(DBWALTest, WALWithChecksumHandoff) {
533
+ #ifndef ROCKSDB_ASSERT_STATUS_CHECKED
534
+ if (mem_env_ || encrypted_env_) {
535
+ ROCKSDB_GTEST_SKIP("Test requires non-mem or non-encrypted environment");
536
+ return;
537
+ }
538
+ std::shared_ptr<FaultInjectionTestFS> fault_fs(
539
+ new FaultInjectionTestFS(FileSystem::Default()));
540
+ std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
541
+ do {
542
+ Options options = CurrentOptions();
543
+
544
+ options.checksum_handoff_file_types.Add(FileType::kWalFile);
545
+ options.env = fault_fs_env.get();
546
+ fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
547
+
548
+ CreateAndReopenWithCF({"pikachu"}, options);
549
+ WriteOptions writeOpt = WriteOptions();
550
+ writeOpt.disableWAL = true;
551
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "foo", "v1"));
552
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "bar", "v1"));
553
+
554
+ ReopenWithColumnFamilies({"default", "pikachu"}, options);
555
+ ASSERT_EQ("v1", Get(1, "foo"));
556
+ ASSERT_EQ("v1", Get(1, "bar"));
557
+
558
+ writeOpt.disableWAL = false;
559
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "bar", "v2"));
560
+ writeOpt.disableWAL = true;
561
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "foo", "v2"));
562
+
563
+ ReopenWithColumnFamilies({"default", "pikachu"}, options);
564
+ // Both value's should be present.
565
+ ASSERT_EQ("v2", Get(1, "bar"));
566
+ ASSERT_EQ("v2", Get(1, "foo"));
567
+
568
+ writeOpt.disableWAL = true;
569
+ // This put, data is persisted by Flush
570
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "bar", "v3"));
571
+ ReopenWithColumnFamilies({"default", "pikachu"}, options);
572
+ writeOpt.disableWAL = false;
573
+ // Data is persisted in the WAL
574
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "zoo", "v3"));
575
+ // The hash does not match, write fails
576
+ fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash);
577
+ writeOpt.disableWAL = false;
578
+ ASSERT_NOK(dbfull()->Put(writeOpt, handles_[1], "foo", "v3"));
579
+
580
+ ReopenWithColumnFamilies({"default", "pikachu"}, options);
581
+ // Due to the write failure, Get should not find
582
+ ASSERT_NE("v3", Get(1, "foo"));
583
+ ASSERT_EQ("v3", Get(1, "zoo"));
584
+ ASSERT_EQ("v3", Get(1, "bar"));
585
+
586
+ fault_fs->SetChecksumHandoffFuncType(ChecksumType::kCRC32c);
587
+ // Each write will be similated as corrupted.
588
+ fault_fs->IngestDataCorruptionBeforeWrite();
589
+ writeOpt.disableWAL = true;
590
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "bar", "v4"));
591
+ writeOpt.disableWAL = false;
592
+ ASSERT_NOK(dbfull()->Put(writeOpt, handles_[1], "foo", "v4"));
593
+ ReopenWithColumnFamilies({"default", "pikachu"}, options);
594
+ ASSERT_NE("v4", Get(1, "foo"));
595
+ ASSERT_NE("v4", Get(1, "bar"));
596
+ fault_fs->NoDataCorruptionBeforeWrite();
597
+
598
+ fault_fs->SetChecksumHandoffFuncType(ChecksumType::kNoChecksum);
599
+ // The file system does not provide checksum method and verification.
600
+ writeOpt.disableWAL = true;
601
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "bar", "v5"));
602
+ writeOpt.disableWAL = false;
603
+ ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "foo", "v5"));
604
+ ReopenWithColumnFamilies({"default", "pikachu"}, options);
605
+ ASSERT_EQ("v5", Get(1, "foo"));
606
+ ASSERT_EQ("v5", Get(1, "bar"));
607
+
608
+ Destroy(options);
609
+ } while (ChangeWalOptions());
610
+ #endif // ROCKSDB_ASSERT_STATUS_CHECKED
611
+ }
612
+
440
613
  class DBRecoveryTestBlobError
441
614
  : public DBWALTest,
442
615
  public testing::WithParamInterface<std::string> {
443
616
  public:
444
- DBRecoveryTestBlobError()
445
- : fault_injection_env_(env_), sync_point_(GetParam()) {}
446
- ~DBRecoveryTestBlobError() { Close(); }
617
+ DBRecoveryTestBlobError() : sync_point_(GetParam()) {}
447
618
 
448
- FaultInjectionTestEnv fault_injection_env_;
449
619
  std::string sync_point_;
450
620
  };
451
621
 
@@ -460,21 +630,19 @@ TEST_P(DBRecoveryTestBlobError, RecoverWithBlobError) {
460
630
 
461
631
  // Reopen with blob files enabled but make blob file writing fail during
462
632
  // recovery.
463
- SyncPoint::GetInstance()->SetCallBack(sync_point_, [this](void* /* arg */) {
464
- fault_injection_env_.SetFilesystemActive(false,
465
- Status::IOError(sync_point_));
633
+ SyncPoint::GetInstance()->SetCallBack(sync_point_, [this](void* arg) {
634
+ Status* const s = static_cast<Status*>(arg);
635
+ assert(s);
636
+
637
+ (*s) = Status::IOError(sync_point_);
466
638
  });
467
- SyncPoint::GetInstance()->SetCallBack(
468
- "BuildTable:BeforeDeleteFile", [this](void* /* arg */) {
469
- fault_injection_env_.SetFilesystemActive(true);
470
- });
471
639
  SyncPoint::GetInstance()->EnableProcessing();
472
640
 
473
641
  Options options;
474
642
  options.enable_blob_files = true;
475
643
  options.avoid_flush_during_recovery = false;
476
644
  options.disable_auto_compactions = true;
477
- options.env = &fault_injection_env_;
645
+ options.env = env_;
478
646
 
479
647
  ASSERT_NOK(TryReopen(options));
480
648
 
@@ -1086,33 +1254,37 @@ class RecoveryTestHelper {
1086
1254
  *count = 0;
1087
1255
 
1088
1256
  std::shared_ptr<Cache> table_cache = NewLRUCache(50, 0);
1089
- EnvOptions env_options;
1257
+ FileOptions file_options;
1090
1258
  WriteBufferManager write_buffer_manager(db_options.db_write_buffer_size);
1091
1259
 
1092
1260
  std::unique_ptr<VersionSet> versions;
1093
1261
  std::unique_ptr<WalManager> wal_manager;
1094
1262
  WriteController write_controller;
1095
1263
 
1096
- versions.reset(new VersionSet(
1097
- test->dbname_, &db_options, env_options, table_cache.get(),
1098
- &write_buffer_manager, &write_controller,
1099
- /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr));
1264
+ versions.reset(new VersionSet(test->dbname_, &db_options, file_options,
1265
+ table_cache.get(), &write_buffer_manager,
1266
+ &write_controller,
1267
+ /*block_cache_tracer=*/nullptr,
1268
+ /*io_tracer=*/nullptr, /*db_session_id*/ ""));
1100
1269
 
1101
1270
  wal_manager.reset(
1102
- new WalManager(db_options, env_options, /*io_tracer=*/nullptr));
1271
+ new WalManager(db_options, file_options, /*io_tracer=*/nullptr));
1103
1272
 
1104
1273
  std::unique_ptr<log::Writer> current_log_writer;
1105
1274
 
1106
1275
  for (size_t j = kWALFileOffset; j < wal_count + kWALFileOffset; j++) {
1107
1276
  uint64_t current_log_number = j;
1108
1277
  std::string fname = LogFileName(test->dbname_, current_log_number);
1109
- std::unique_ptr<WritableFile> file;
1110
- ASSERT_OK(db_options.env->NewWritableFile(fname, &file, env_options));
1111
- std::unique_ptr<WritableFileWriter> file_writer(new WritableFileWriter(
1112
- NewLegacyWritableFileWrapper(std::move(file)), fname, env_options));
1113
- current_log_writer.reset(
1278
+ std::unique_ptr<WritableFileWriter> file_writer;
1279
+ ASSERT_OK(WritableFileWriter::Create(db_options.env->GetFileSystem(),
1280
+ fname, file_options, &file_writer,
1281
+ nullptr));
1282
+ log::Writer* log_writer =
1114
1283
  new log::Writer(std::move(file_writer), current_log_number,
1115
- db_options.recycle_log_file_num > 0));
1284
+ db_options.recycle_log_file_num > 0, false,
1285
+ db_options.wal_compression);
1286
+ ASSERT_OK(log_writer->AddCompressionTypeRecord());
1287
+ current_log_writer.reset(log_writer);
1116
1288
 
1117
1289
  WriteBatch batch;
1118
1290
  for (int i = 0; i < kKeysPerWALFile; i++) {
@@ -1181,9 +1353,9 @@ class RecoveryTestHelper {
1181
1353
  }
1182
1354
  };
1183
1355
 
1184
- class DBWALTestWithParams
1185
- : public DBWALTestBase,
1186
- public ::testing::WithParamInterface<std::tuple<bool, int, int>> {
1356
+ class DBWALTestWithParams : public DBWALTestBase,
1357
+ public ::testing::WithParamInterface<
1358
+ std::tuple<bool, int, int, CompressionType>> {
1187
1359
  public:
1188
1360
  DBWALTestWithParams() : DBWALTestBase("/db_wal_test_with_params") {}
1189
1361
  };
@@ -1194,12 +1366,14 @@ INSTANTIATE_TEST_CASE_P(
1194
1366
  ::testing::Range(RecoveryTestHelper::kWALFileOffset,
1195
1367
  RecoveryTestHelper::kWALFileOffset +
1196
1368
  RecoveryTestHelper::kWALFilesCount,
1197
- 1)));
1369
+ 1),
1370
+ ::testing::Values(CompressionType::kNoCompression,
1371
+ CompressionType::kZSTD)));
1198
1372
 
1199
1373
  class DBWALTestWithParamsVaryingRecoveryMode
1200
1374
  : public DBWALTestBase,
1201
1375
  public ::testing::WithParamInterface<
1202
- std::tuple<bool, int, int, WALRecoveryMode>> {
1376
+ std::tuple<bool, int, int, WALRecoveryMode, CompressionType>> {
1203
1377
  public:
1204
1378
  DBWALTestWithParamsVaryingRecoveryMode()
1205
1379
  : DBWALTestBase("/db_wal_test_with_params_mode") {}
@@ -1216,7 +1390,9 @@ INSTANTIATE_TEST_CASE_P(
1216
1390
  ::testing::Values(WALRecoveryMode::kTolerateCorruptedTailRecords,
1217
1391
  WALRecoveryMode::kAbsoluteConsistency,
1218
1392
  WALRecoveryMode::kPointInTimeRecovery,
1219
- WALRecoveryMode::kSkipAnyCorruptedRecords)));
1393
+ WALRecoveryMode::kSkipAnyCorruptedRecords),
1394
+ ::testing::Values(CompressionType::kNoCompression,
1395
+ CompressionType::kZSTD)));
1220
1396
 
1221
1397
  // Test scope:
1222
1398
  // - We expect to open the data store when there is incomplete trailing writes
@@ -1262,6 +1438,9 @@ TEST_P(DBWALTestWithParams, kAbsoluteConsistency) {
1262
1438
  // Corruption offset position
1263
1439
  int corrupt_offset = std::get<1>(GetParam());
1264
1440
  int wal_file_id = std::get<2>(GetParam()); // WAL file
1441
+ // WAL compression type
1442
+ CompressionType compression_type = std::get<3>(GetParam());
1443
+ options.wal_compression = compression_type;
1265
1444
 
1266
1445
  if (trunc && corrupt_offset == 0) {
1267
1446
  return;
@@ -1311,6 +1490,93 @@ TEST_F(DBWALTest, kPointInTimeRecoveryCFConsistency) {
1311
1490
  ASSERT_NOK(TryReopenWithColumnFamilies({"default", "one", "two"}, options));
1312
1491
  }
1313
1492
 
1493
+ TEST_F(DBWALTest, RaceInstallFlushResultsWithWalObsoletion) {
1494
+ Options options = CurrentOptions();
1495
+ options.env = env_;
1496
+ options.track_and_verify_wals_in_manifest = true;
1497
+ // The following make sure there are two bg flush threads.
1498
+ options.max_background_jobs = 8;
1499
+
1500
+ const std::string cf1_name("cf1");
1501
+ CreateAndReopenWithCF({cf1_name}, options);
1502
+ assert(handles_.size() == 2);
1503
+
1504
+ {
1505
+ dbfull()->TEST_LockMutex();
1506
+ ASSERT_LE(2, dbfull()->GetBGJobLimits().max_flushes);
1507
+ dbfull()->TEST_UnlockMutex();
1508
+ }
1509
+
1510
+ ASSERT_OK(dbfull()->PauseBackgroundWork());
1511
+
1512
+ ASSERT_OK(db_->Put(WriteOptions(), handles_[1], "foo", "value"));
1513
+ ASSERT_OK(db_->Put(WriteOptions(), "foo", "value"));
1514
+
1515
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(false, true, handles_[1]));
1516
+
1517
+ ASSERT_OK(db_->Put(WriteOptions(), "foo", "value"));
1518
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(false, true, handles_[0]));
1519
+
1520
+ bool called = false;
1521
+ SyncPoint::GetInstance()->DisableProcessing();
1522
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1523
+ // This callback will be called when the first bg flush thread reaches the
1524
+ // point before entering the MANIFEST write queue after flushing the SST
1525
+ // file.
1526
+ // The purpose of the sync points here is to ensure both bg flush threads
1527
+ // finish computing `min_wal_number_to_keep` before any of them updates the
1528
+ // `log_number` for the column family that's being flushed.
1529
+ SyncPoint::GetInstance()->SetCallBack(
1530
+ "MemTableList::TryInstallMemtableFlushResults:AfterComputeMinWalToKeep",
1531
+ [&](void* /*arg*/) {
1532
+ dbfull()->mutex()->AssertHeld();
1533
+ if (!called) {
1534
+ // We are the first bg flush thread in the MANIFEST write queue.
1535
+ // We set up the dependency between sync points for two threads that
1536
+ // will be executing the same code.
1537
+ // For the interleaving of events, see
1538
+ // https://github.com/facebook/rocksdb/pull/9715.
1539
+ // bg flush thread1 will release the db mutex while in the MANIFEST
1540
+ // write queue. In the meantime, bg flush thread2 locks db mutex and
1541
+ // computes the min_wal_number_to_keep (before thread1 writes to
1542
+ // MANIFEST thus before cf1->log_number is updated). Bg thread2 joins
1543
+ // the MANIFEST write queue afterwards and bg flush thread1 proceeds
1544
+ // with writing to MANIFEST.
1545
+ called = true;
1546
+ SyncPoint::GetInstance()->LoadDependency({
1547
+ {"VersionSet::LogAndApply:WriteManifestStart",
1548
+ "DBWALTest::RaceInstallFlushResultsWithWalObsoletion:BgFlush2"},
1549
+ {"DBWALTest::RaceInstallFlushResultsWithWalObsoletion:BgFlush2",
1550
+ "VersionSet::LogAndApply:WriteManifest"},
1551
+ });
1552
+ } else {
1553
+ // The other bg flush thread has already been in the MANIFEST write
1554
+ // queue, and we are after.
1555
+ TEST_SYNC_POINT(
1556
+ "DBWALTest::RaceInstallFlushResultsWithWalObsoletion:BgFlush2");
1557
+ }
1558
+ });
1559
+ SyncPoint::GetInstance()->EnableProcessing();
1560
+
1561
+ ASSERT_OK(dbfull()->ContinueBackgroundWork());
1562
+
1563
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[0]));
1564
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable(handles_[1]));
1565
+
1566
+ ASSERT_TRUE(called);
1567
+
1568
+ Close();
1569
+
1570
+ SyncPoint::GetInstance()->DisableProcessing();
1571
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1572
+
1573
+ DB* db1 = nullptr;
1574
+ Status s = DB::OpenForReadOnly(options, dbname_, &db1);
1575
+ ASSERT_OK(s);
1576
+ assert(db1);
1577
+ delete db1;
1578
+ }
1579
+
1314
1580
  // Test scope:
1315
1581
  // - We expect to open data store under all circumstances
1316
1582
  // - We expect only data upto the point where the first error was encountered
@@ -1322,9 +1588,12 @@ TEST_P(DBWALTestWithParams, kPointInTimeRecovery) {
1322
1588
  // Corruption offset position
1323
1589
  int corrupt_offset = std::get<1>(GetParam());
1324
1590
  int wal_file_id = std::get<2>(GetParam()); // WAL file
1591
+ // WAL compression type
1592
+ CompressionType compression_type = std::get<3>(GetParam());
1325
1593
 
1326
1594
  // Fill data for testing
1327
1595
  Options options = CurrentOptions();
1596
+ options.wal_compression = compression_type;
1328
1597
  const size_t row_count = RecoveryTestHelper::FillData(this, &options);
1329
1598
 
1330
1599
  // Corrupt the wal
@@ -1373,9 +1642,12 @@ TEST_P(DBWALTestWithParams, kSkipAnyCorruptedRecords) {
1373
1642
  // Corruption offset position
1374
1643
  int corrupt_offset = std::get<1>(GetParam());
1375
1644
  int wal_file_id = std::get<2>(GetParam()); // WAL file
1645
+ // WAL compression type
1646
+ CompressionType compression_type = std::get<3>(GetParam());
1376
1647
 
1377
1648
  // Fill data for testing
1378
1649
  Options options = CurrentOptions();
1650
+ options.wal_compression = compression_type;
1379
1651
  const size_t row_count = RecoveryTestHelper::FillData(this, &options);
1380
1652
 
1381
1653
  // Corrupt the WAL
@@ -1599,8 +1871,11 @@ TEST_P(DBWALTestWithParamsVaryingRecoveryMode,
1599
1871
  int corrupt_offset = std::get<1>(GetParam());
1600
1872
  int wal_file_id = std::get<2>(GetParam()); // WAL file
1601
1873
  WALRecoveryMode recovery_mode = std::get<3>(GetParam());
1874
+ // WAL compression type
1875
+ CompressionType compression_type = std::get<4>(GetParam());
1602
1876
 
1603
1877
  options.wal_recovery_mode = recovery_mode;
1878
+ options.wal_compression = compression_type;
1604
1879
  // Create corrupted WAL
1605
1880
  RecoveryTestHelper::FillData(this, &options);
1606
1881
  RecoveryTestHelper::CorruptWAL(this, options, corrupt_offset * .3,
@@ -1632,19 +1907,8 @@ TEST_P(DBWALTestWithParamsVaryingRecoveryMode,
1632
1907
  // avoid_flush_during_recovery=true.
1633
1908
  // Flush should trigger if max_total_wal_size is reached.
1634
1909
  TEST_F(DBWALTest, RestoreTotalLogSizeAfterRecoverWithoutFlush) {
1635
- class TestFlushListener : public EventListener {
1636
- public:
1637
- std::atomic<int> count{0};
1638
-
1639
- TestFlushListener() = default;
1640
-
1641
- void OnFlushBegin(DB* /*db*/, const FlushJobInfo& flush_job_info) override {
1642
- count++;
1643
- ASSERT_EQ(FlushReason::kWriteBufferManager, flush_job_info.flush_reason);
1644
- }
1645
- };
1646
- std::shared_ptr<TestFlushListener> test_listener =
1647
- std::make_shared<TestFlushListener>();
1910
+ auto test_listener = std::make_shared<FlushCounterListener>();
1911
+ test_listener->expected_flush_reason = FlushReason::kWalFull;
1648
1912
 
1649
1913
  constexpr size_t kKB = 1024;
1650
1914
  constexpr size_t kMB = 1024 * 1024;
@@ -1704,23 +1968,9 @@ TEST_F(DBWALTest, TruncateLastLogAfterRecoverWithoutFlush) {
1704
1968
  ROCKSDB_GTEST_SKIP("Test requires non-mem environment");
1705
1969
  return;
1706
1970
  }
1707
- // Test fallocate support of running file system.
1708
- // Skip this test if fallocate is not supported.
1709
- std::string fname_test_fallocate = dbname_ + "/preallocate_testfile";
1710
- int fd = -1;
1711
- do {
1712
- fd = open(fname_test_fallocate.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644);
1713
- } while (fd < 0 && errno == EINTR);
1714
- ASSERT_GT(fd, 0);
1715
- int alloc_status = fallocate(fd, 0, 0, 1);
1716
- int err_number = errno;
1717
- close(fd);
1718
- ASSERT_OK(options.env->DeleteFile(fname_test_fallocate));
1719
- if (err_number == ENOSYS || err_number == EOPNOTSUPP) {
1720
- fprintf(stderr, "Skipped preallocated space check: %s\n", strerror(err_number));
1971
+ if (!IsFallocateSupported()) {
1721
1972
  return;
1722
1973
  }
1723
- ASSERT_EQ(0, alloc_status);
1724
1974
 
1725
1975
  DestroyAndReopen(options);
1726
1976
  size_t preallocated_size =
@@ -1743,6 +1993,175 @@ TEST_F(DBWALTest, TruncateLastLogAfterRecoverWithoutFlush) {
1743
1993
  ASSERT_LT(GetAllocatedFileSize(dbname_ + file_before->PathName()),
1744
1994
  preallocated_size);
1745
1995
  }
1996
+ // Tests that we will truncate the preallocated space of the last log from
1997
+ // previous.
1998
+ TEST_F(DBWALTest, TruncateLastLogAfterRecoverWithFlush) {
1999
+ constexpr size_t kKB = 1024;
2000
+ Options options = CurrentOptions();
2001
+ options.env = env_;
2002
+ options.avoid_flush_during_recovery = false;
2003
+ options.avoid_flush_during_shutdown = true;
2004
+ if (mem_env_) {
2005
+ ROCKSDB_GTEST_SKIP("Test requires non-mem environment");
2006
+ return;
2007
+ }
2008
+ if (!IsFallocateSupported()) {
2009
+ return;
2010
+ }
2011
+
2012
+ DestroyAndReopen(options);
2013
+ size_t preallocated_size =
2014
+ dbfull()->TEST_GetWalPreallocateBlockSize(options.write_buffer_size);
2015
+ ASSERT_OK(Put("foo", "v1"));
2016
+ VectorLogPtr log_files_before;
2017
+ ASSERT_OK(dbfull()->GetSortedWalFiles(log_files_before));
2018
+ ASSERT_EQ(1, log_files_before.size());
2019
+ auto& file_before = log_files_before[0];
2020
+ ASSERT_LT(file_before->SizeFileBytes(), 1 * kKB);
2021
+ ASSERT_GE(GetAllocatedFileSize(dbname_ + file_before->PathName()),
2022
+ preallocated_size);
2023
+ // The log file has preallocated space.
2024
+ Close();
2025
+
2026
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
2027
+ {{"DBImpl::PurgeObsoleteFiles:Begin",
2028
+ "DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterRecover"},
2029
+ {"DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterTruncate",
2030
+ "DBImpl::DeleteObsoleteFileImpl::BeforeDeletion"}});
2031
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
2032
+ port::Thread reopen_thread([&]() { Reopen(options); });
2033
+
2034
+ TEST_SYNC_POINT(
2035
+ "DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterRecover");
2036
+ // After the flush during Open, the log file should get deleted. However,
2037
+ // if the process is in a crash loop, the log file may not get
2038
+ // deleted and thte preallocated space will keep accumulating. So we need
2039
+ // to ensure it gets trtuncated.
2040
+ EXPECT_LT(GetAllocatedFileSize(dbname_ + file_before->PathName()),
2041
+ preallocated_size);
2042
+ TEST_SYNC_POINT(
2043
+ "DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterTruncate");
2044
+ reopen_thread.join();
2045
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
2046
+ }
2047
+
2048
+ TEST_F(DBWALTest, TruncateLastLogAfterRecoverWALEmpty) {
2049
+ Options options = CurrentOptions();
2050
+ options.env = env_;
2051
+ options.avoid_flush_during_recovery = false;
2052
+ if (mem_env_ || encrypted_env_) {
2053
+ ROCKSDB_GTEST_SKIP("Test requires non-mem/non-encrypted environment");
2054
+ return;
2055
+ }
2056
+ if (!IsFallocateSupported()) {
2057
+ return;
2058
+ }
2059
+
2060
+ DestroyAndReopen(options);
2061
+ size_t preallocated_size =
2062
+ dbfull()->TEST_GetWalPreallocateBlockSize(options.write_buffer_size);
2063
+ Close();
2064
+ std::vector<std::string> filenames;
2065
+ std::string last_log;
2066
+ uint64_t last_log_num = 0;
2067
+ ASSERT_OK(env_->GetChildren(dbname_, &filenames));
2068
+ for (auto fname : filenames) {
2069
+ uint64_t number;
2070
+ FileType type;
2071
+ if (ParseFileName(fname, &number, &type, nullptr)) {
2072
+ if (type == kWalFile && number > last_log_num) {
2073
+ last_log = fname;
2074
+ }
2075
+ }
2076
+ }
2077
+ ASSERT_NE(last_log, "");
2078
+ last_log = dbname_ + '/' + last_log;
2079
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
2080
+ {{"DBImpl::PurgeObsoleteFiles:Begin",
2081
+ "DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterRecover"},
2082
+ {"DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterTruncate",
2083
+ "DBImpl::DeleteObsoleteFileImpl::BeforeDeletion"}});
2084
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
2085
+ "PosixWritableFile::Close",
2086
+ [](void* arg) { *(reinterpret_cast<size_t*>(arg)) = 0; });
2087
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
2088
+ // Preallocate space for the empty log file. This could happen if WAL data
2089
+ // was buffered in memory and the process crashed.
2090
+ std::unique_ptr<WritableFile> log_file;
2091
+ ASSERT_OK(env_->ReopenWritableFile(last_log, &log_file, EnvOptions()));
2092
+ log_file->SetPreallocationBlockSize(preallocated_size);
2093
+ log_file->PrepareWrite(0, 4096);
2094
+ log_file.reset();
2095
+
2096
+ ASSERT_GE(GetAllocatedFileSize(last_log), preallocated_size);
2097
+
2098
+ port::Thread reopen_thread([&]() { Reopen(options); });
2099
+
2100
+ TEST_SYNC_POINT(
2101
+ "DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterRecover");
2102
+ // The preallocated space should be truncated.
2103
+ EXPECT_LT(GetAllocatedFileSize(last_log), preallocated_size);
2104
+ TEST_SYNC_POINT(
2105
+ "DBWALTest::TruncateLastLogAfterRecoverWithFlush:AfterTruncate");
2106
+ reopen_thread.join();
2107
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
2108
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
2109
+ }
2110
+
2111
+ TEST_F(DBWALTest, ReadOnlyRecoveryNoTruncate) {
2112
+ constexpr size_t kKB = 1024;
2113
+ Options options = CurrentOptions();
2114
+ options.env = env_;
2115
+ options.avoid_flush_during_recovery = true;
2116
+ if (mem_env_) {
2117
+ ROCKSDB_GTEST_SKIP("Test requires non-mem environment");
2118
+ return;
2119
+ }
2120
+ if (!IsFallocateSupported()) {
2121
+ return;
2122
+ }
2123
+
2124
+ // create DB and close with file truncate disabled
2125
+ std::atomic_bool enable_truncate{false};
2126
+
2127
+ SyncPoint::GetInstance()->SetCallBack(
2128
+ "PosixWritableFile::Close", [&](void* arg) {
2129
+ if (!enable_truncate) {
2130
+ *(reinterpret_cast<size_t*>(arg)) = 0;
2131
+ }
2132
+ });
2133
+ SyncPoint::GetInstance()->EnableProcessing();
2134
+
2135
+ DestroyAndReopen(options);
2136
+ size_t preallocated_size =
2137
+ dbfull()->TEST_GetWalPreallocateBlockSize(options.write_buffer_size);
2138
+ ASSERT_OK(Put("foo", "v1"));
2139
+ VectorLogPtr log_files_before;
2140
+ ASSERT_OK(dbfull()->GetSortedWalFiles(log_files_before));
2141
+ ASSERT_EQ(1, log_files_before.size());
2142
+ auto& file_before = log_files_before[0];
2143
+ ASSERT_LT(file_before->SizeFileBytes(), 1 * kKB);
2144
+ // The log file has preallocated space.
2145
+ auto db_size = GetAllocatedFileSize(dbname_ + file_before->PathName());
2146
+ ASSERT_GE(db_size, preallocated_size);
2147
+ Close();
2148
+
2149
+ // enable truncate and open DB as readonly, the file should not be truncated
2150
+ // and DB size is not changed.
2151
+ enable_truncate = true;
2152
+ ASSERT_OK(ReadOnlyReopen(options));
2153
+ VectorLogPtr log_files_after;
2154
+ ASSERT_OK(dbfull()->GetSortedWalFiles(log_files_after));
2155
+ ASSERT_EQ(1, log_files_after.size());
2156
+ ASSERT_LT(log_files_after[0]->SizeFileBytes(), 1 * kKB);
2157
+ ASSERT_EQ(log_files_after[0]->PathName(), file_before->PathName());
2158
+ // The preallocated space should NOT be truncated.
2159
+ // the DB size is almost the same.
2160
+ ASSERT_NEAR(GetAllocatedFileSize(dbname_ + file_before->PathName()), db_size,
2161
+ db_size / 100);
2162
+ SyncPoint::GetInstance()->DisableProcessing();
2163
+ SyncPoint::GetInstance()->ClearAllCallBacks();
2164
+ }
1746
2165
  #endif // ROCKSDB_FALLOCATE_PRESENT
1747
2166
  #endif // ROCKSDB_PLATFORM_POSIX
1748
2167