@nxtedition/rocksdb 5.2.21 → 5.2.26

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