@nxtedition/rocksdb 10.0.13 → 10.0.15

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 (700) hide show
  1. package/.tap/coverage/213879bb-47ae-470e-bb54-f4157d9f60e2.json +162898 -0
  2. package/.tap/processinfo/{4c642b53-6895-4ef0-9391-7c6b8d484262.json → 213879bb-47ae-470e-bb54-f4157d9f60e2.json} +117 -121
  3. package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
  4. package/.tap/test-results/test/abstract-level-test.js.tap +1705 -0
  5. package/.tap/test-results/test/batch-test.js.tap +12 -0
  6. package/.tap/test-results/test/chained-batch-gc-test.js.tap +11 -0
  7. package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +58 -0
  8. package/.tap/test-results/test/clear-gc-test.js.tap +13 -0
  9. package/.tap/test-results/test/column-test.js.tap +55 -0
  10. package/.tap/test-results/test/common.js.tap +0 -0
  11. package/.tap/test-results/test/compression-test.js.tap +30 -0
  12. package/.tap/test-results/test/db-identity.js.tap +12 -0
  13. package/.tap/test-results/test/electron.js.tap +0 -0
  14. package/.tap/test-results/test/env-cleanup-hook-test.js.tap +2 -0
  15. package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
  16. package/.tap/test-results/test/gc.js.tap +0 -0
  17. package/.tap/test-results/test/getproperty-test.js.tap +29 -0
  18. package/.tap/test-results/test/iterator-gc-test.js.tap +4 -0
  19. package/.tap/test-results/test/iterator-hwm-test.js.tap +24 -0
  20. package/.tap/test-results/test/iterator-recursion-test.js.tap +12 -0
  21. package/.tap/test-results/test/iterator-starvation-test.js.tap +2 -0
  22. package/.tap/test-results/test/iterator-test.js.tap +0 -0
  23. package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
  24. package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
  25. package/.tap/test-results/test/leak-tester.js.tap +0 -0
  26. package/.tap/test-results/test/lock-test.js.tap +0 -0
  27. package/.tap/test-results/test/lock.js.tap +0 -0
  28. package/.tap/test-results/test/make.js.tap +0 -0
  29. package/.tap/test-results/test/max-rev-merge.js.tap +0 -12
  30. package/.tap/test-results/test/merge-operator-test.js.tap +0 -0
  31. package/.tap/test-results/test/mkdir-test.js.tap +0 -0
  32. package/.tap/test-results/test/segfault-test.js.tap +0 -0
  33. package/.tap/test-results/test/stack-blower.js.tap +0 -0
  34. package/binding.cc +42 -34
  35. package/deps/rocksdb/rocksdb/CMakeLists.txt +44 -14
  36. package/deps/rocksdb/rocksdb/Makefile +34 -17
  37. package/deps/rocksdb/rocksdb/TARGETS +27 -0
  38. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +95 -42
  39. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +0 -1
  40. package/deps/rocksdb/rocksdb/cache/cache_test.cc +5 -3
  41. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +381 -393
  42. package/deps/rocksdb/rocksdb/cache/clock_cache.h +88 -51
  43. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +14 -7
  44. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +1 -1
  45. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +21 -19
  46. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +8 -7
  47. package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -1
  48. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +89 -13
  49. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +16 -8
  50. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +6 -6
  51. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +15 -9
  52. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +16 -13
  53. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +306 -23
  54. package/deps/rocksdb/rocksdb/cache/typed_cache.h +3 -4
  55. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +30 -27
  56. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +8 -10
  57. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.cc +20 -0
  58. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +83 -0
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +19 -16
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -5
  61. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +18 -21
  62. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +5 -4
  63. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +7 -6
  64. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +56 -27
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +11 -7
  66. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +20 -19
  67. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +106 -31
  68. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +5 -8
  69. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +4 -2
  70. package/deps/rocksdb/rocksdb/db/builder.cc +89 -44
  71. package/deps/rocksdb/rocksdb/db/builder.h +4 -6
  72. package/deps/rocksdb/rocksdb/db/c.cc +205 -57
  73. package/deps/rocksdb/rocksdb/db/c_test.c +141 -20
  74. package/deps/rocksdb/rocksdb/db/coalescing_iterator.cc +47 -0
  75. package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +79 -0
  76. package/deps/rocksdb/rocksdb/db/column_family.cc +100 -36
  77. package/deps/rocksdb/rocksdb/db/column_family.h +46 -28
  78. package/deps/rocksdb/rocksdb/db/column_family_test.cc +168 -46
  79. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +51 -6
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +72 -24
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -14
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +7 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +87 -8
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +310 -70
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +78 -62
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +0 -1
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +33 -96
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +18 -10
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -8
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +42 -22
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +20 -16
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +18 -17
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +95 -10
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +213 -34
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -8
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +16 -16
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +75 -142
  103. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +577 -34
  104. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +4 -4
  105. package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
  106. package/deps/rocksdb/rocksdb/db/corruption_test.cc +7 -38
  107. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +5 -5
  108. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +366 -136
  109. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +9 -10
  110. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +282 -6
  111. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +6 -6
  112. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +551 -150
  113. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +1 -1
  114. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +41 -13
  115. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +54 -17
  116. package/deps/rocksdb/rocksdb/db/db_follower_test.cc +527 -0
  117. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -58
  118. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +34 -45
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +699 -580
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +308 -230
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +180 -107
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -2
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +10 -6
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +36 -61
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +347 -0
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.h +54 -0
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +206 -155
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +5 -8
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +41 -39
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +26 -22
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +14 -9
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +126 -46
  133. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +21 -9
  134. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +294 -0
  135. package/deps/rocksdb/rocksdb/db/db_iter.cc +116 -78
  136. package/deps/rocksdb/rocksdb/db/db_iter.h +31 -7
  137. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +34 -14
  138. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +69 -8
  139. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +153 -18
  140. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +9 -11
  141. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +9 -1
  142. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +6 -2
  143. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +105 -0
  144. package/deps/rocksdb/rocksdb/db/db_options_test.cc +97 -111
  145. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -3
  146. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +82 -30
  147. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -7
  148. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -22
  149. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +74 -0
  150. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +175 -47
  151. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +4 -3
  152. package/deps/rocksdb/rocksdb/db/db_test.cc +133 -109
  153. package/deps/rocksdb/rocksdb/db/db_test2.cc +227 -139
  154. package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -19
  155. package/deps/rocksdb/rocksdb/db/db_test_util.h +67 -24
  156. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +140 -2
  157. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -19
  158. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +332 -87
  159. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +4 -4
  160. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +4 -4
  161. package/deps/rocksdb/rocksdb/db/db_write_test.cc +250 -30
  162. package/deps/rocksdb/rocksdb/db/dbformat.cc +41 -8
  163. package/deps/rocksdb/rocksdb/db/dbformat.h +100 -17
  164. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +48 -8
  165. package/deps/rocksdb/rocksdb/db/error_handler.cc +102 -116
  166. package/deps/rocksdb/rocksdb/db/error_handler.h +28 -6
  167. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +263 -99
  168. package/deps/rocksdb/rocksdb/db/event_helpers.cc +3 -1
  169. package/deps/rocksdb/rocksdb/db/experimental.cc +1073 -7
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +261 -111
  171. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +263 -183
  172. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +31 -12
  173. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +698 -7
  174. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +5 -3
  175. package/deps/rocksdb/rocksdb/db/flush_job.cc +41 -41
  176. package/deps/rocksdb/rocksdb/db/flush_job.h +11 -8
  177. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -13
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +19 -6
  179. package/deps/rocksdb/rocksdb/db/forward_iterator.h +12 -12
  180. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +83 -52
  181. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +169 -2
  182. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -6
  183. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
  184. package/deps/rocksdb/rocksdb/db/job_context.h +17 -0
  185. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -4
  186. package/deps/rocksdb/rocksdb/db/log_reader.cc +44 -20
  187. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -0
  188. package/deps/rocksdb/rocksdb/db/log_test.cc +81 -17
  189. package/deps/rocksdb/rocksdb/db/log_writer.cc +135 -92
  190. package/deps/rocksdb/rocksdb/db/log_writer.h +11 -10
  191. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -3
  192. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -1
  193. package/deps/rocksdb/rocksdb/db/memtable.cc +82 -62
  194. package/deps/rocksdb/rocksdb/db/memtable.h +17 -9
  195. package/deps/rocksdb/rocksdb/db/memtable_list.cc +19 -13
  196. package/deps/rocksdb/rocksdb/db/memtable_list.h +3 -1
  197. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +38 -5
  198. package/deps/rocksdb/rocksdb/db/merge_context.h +3 -0
  199. package/deps/rocksdb/rocksdb/db/merge_helper.cc +34 -156
  200. package/deps/rocksdb/rocksdb/db/merge_helper.h +52 -46
  201. package/deps/rocksdb/rocksdb/db/merge_test.cc +16 -11
  202. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +289 -0
  203. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +918 -0
  204. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -6
  205. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  206. package/deps/rocksdb/rocksdb/db/output_validator.cc +8 -12
  207. package/deps/rocksdb/rocksdb/db/output_validator.h +1 -4
  208. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +23 -4
  209. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +2 -3
  210. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -1
  211. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +2 -2
  212. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -6
  213. package/deps/rocksdb/rocksdb/db/prefix_test.cc +21 -8
  214. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +0 -2
  215. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +0 -1
  216. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +17 -4
  217. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +6 -3
  218. package/deps/rocksdb/rocksdb/db/repair.cc +35 -29
  219. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -2
  220. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +428 -156
  221. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +393 -227
  222. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +154 -82
  223. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +2 -2
  224. package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
  225. package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
  226. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +8 -3
  227. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +27 -26
  228. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +23 -23
  229. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +5 -5
  230. package/deps/rocksdb/rocksdb/db/version_builder.cc +6 -0
  231. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +62 -29
  232. package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -2
  233. package/deps/rocksdb/rocksdb/db/version_edit.h +30 -11
  234. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +291 -116
  235. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -11
  236. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +3 -1
  237. package/deps/rocksdb/rocksdb/db/version_set.cc +301 -141
  238. package/deps/rocksdb/rocksdb/db/version_set.h +90 -33
  239. package/deps/rocksdb/rocksdb/db/version_set_test.cc +817 -193
  240. package/deps/rocksdb/rocksdb/db/version_util.h +10 -5
  241. package/deps/rocksdb/rocksdb/db/wal_manager.cc +15 -11
  242. package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -1
  243. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +10 -9
  244. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +403 -28
  245. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +2 -2
  246. package/deps/rocksdb/rocksdb/db/write_batch.cc +204 -18
  247. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -0
  248. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +149 -5
  249. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +7 -7
  250. package/deps/rocksdb/rocksdb/db/write_stall_stats.h +7 -7
  251. package/deps/rocksdb/rocksdb/db/write_thread.cc +86 -47
  252. package/deps/rocksdb/rocksdb/db/write_thread.h +2 -0
  253. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +176 -68
  254. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +337 -125
  255. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +38 -9
  256. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +126 -34
  257. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +1 -1
  258. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -2
  259. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +161 -1
  260. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +267 -9
  261. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +13 -7
  262. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +9 -9
  263. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +535 -86
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +27 -5
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +8 -15
  266. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +46 -21
  267. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +74 -4
  268. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +28 -11
  269. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +426 -151
  270. package/deps/rocksdb/rocksdb/env/composite_env.cc +1 -1
  271. package/deps/rocksdb/rocksdb/env/emulated_clock.h +6 -6
  272. package/deps/rocksdb/rocksdb/env/env.cc +21 -11
  273. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +9 -9
  274. package/deps/rocksdb/rocksdb/env/env_chroot.cc +3 -2
  275. package/deps/rocksdb/rocksdb/env/env_encryption.cc +3 -3
  276. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -2
  277. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -10
  278. package/deps/rocksdb/rocksdb/env/env_test.cc +24 -18
  279. package/deps/rocksdb/rocksdb/env/file_system.cc +7 -6
  280. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +3 -3
  281. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +3 -3
  282. package/deps/rocksdb/rocksdb/env/fs_on_demand.cc +331 -0
  283. package/deps/rocksdb/rocksdb/env/fs_on_demand.h +139 -0
  284. package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -15
  285. package/deps/rocksdb/rocksdb/env/io_posix.cc +15 -10
  286. package/deps/rocksdb/rocksdb/env/io_posix.h +86 -92
  287. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  288. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +6 -6
  289. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +8 -6
  290. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -1
  291. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +599 -592
  292. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +312 -200
  293. package/deps/rocksdb/rocksdb/file/file_util.cc +19 -14
  294. package/deps/rocksdb/rocksdb/file/file_util.h +34 -24
  295. package/deps/rocksdb/rocksdb/file/filename.cc +32 -17
  296. package/deps/rocksdb/rocksdb/file/filename.h +51 -53
  297. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +82 -441
  298. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +7 -6
  299. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -5
  300. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +9 -3
  301. package/deps/rocksdb/rocksdb/file/read_write_util.h +3 -3
  302. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +6 -2
  303. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +9 -4
  304. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +8 -4
  305. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -89
  306. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +34 -17
  307. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +16 -0
  308. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +39 -189
  309. package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +114 -0
  310. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +91 -6
  311. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +52 -7
  312. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -1
  313. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +27 -0
  314. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +146 -0
  315. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +2 -2
  316. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +254 -151
  317. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +39 -36
  318. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -1
  319. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +431 -0
  320. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +1 -1
  321. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +57 -23
  322. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +27 -57
  323. package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +74 -0
  324. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +2 -1
  325. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  326. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +11 -11
  327. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -1
  328. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +146 -71
  329. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +6 -1
  330. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +7 -4
  331. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +17 -13
  332. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -19
  333. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +5 -5
  334. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +10 -8
  335. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +18 -2
  336. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +12 -2
  337. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +3 -3
  338. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +118 -116
  339. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +4 -4
  340. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +26 -21
  341. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +18 -6
  342. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +1 -1
  343. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +5 -5
  344. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +8 -8
  345. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +4 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +3 -3
  348. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +8 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +1 -1
  350. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -4
  351. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +3 -3
  352. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +5 -6
  353. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +159 -167
  354. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +1 -2
  355. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +52 -17
  356. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +3 -4
  357. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/types_util.h +36 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +118 -20
  359. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  360. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +1 -1
  361. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +87 -45
  362. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +26 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +22 -1
  364. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +7 -9
  365. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +5 -6
  366. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +2 -2
  367. package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
  368. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -1
  369. package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -3
  370. package/deps/rocksdb/rocksdb/memory/arena.h +11 -0
  371. package/deps/rocksdb/rocksdb/memory/arena_test.cc +17 -2
  372. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +1 -1
  373. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +1 -0
  374. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  375. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -1
  376. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +11 -10
  377. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +8 -7
  378. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +2 -2
  379. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +2 -2
  380. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  381. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +3 -3
  382. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +2 -2
  383. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +3 -1
  384. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +2 -2
  385. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +20 -10
  386. package/deps/rocksdb/rocksdb/monitoring/histogram.h +15 -15
  387. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +7 -3
  388. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +14 -14
  389. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -1
  390. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +4 -0
  391. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +8 -1
  392. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -1
  393. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +5 -2
  394. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +64 -58
  395. package/deps/rocksdb/rocksdb/monitoring/statistics_impl.h +11 -12
  396. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  397. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +1 -1
  398. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +7 -1
  399. package/deps/rocksdb/rocksdb/options/cf_options.cc +20 -28
  400. package/deps/rocksdb/rocksdb/options/cf_options.h +7 -14
  401. package/deps/rocksdb/rocksdb/options/configurable.cc +20 -12
  402. package/deps/rocksdb/rocksdb/options/configurable_test.cc +4 -6
  403. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -2
  404. package/deps/rocksdb/rocksdb/options/customizable.cc +1 -1
  405. package/deps/rocksdb/rocksdb/options/customizable_test.cc +3 -2
  406. package/deps/rocksdb/rocksdb/options/db_options.cc +22 -48
  407. package/deps/rocksdb/rocksdb/options/db_options.h +3 -3
  408. package/deps/rocksdb/rocksdb/options/offpeak_time_info.cc +59 -0
  409. package/deps/rocksdb/rocksdb/options/offpeak_time_info.h +37 -0
  410. package/deps/rocksdb/rocksdb/options/options.cc +14 -6
  411. package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -13
  412. package/deps/rocksdb/rocksdb/options/options_helper.h +2 -3
  413. package/deps/rocksdb/rocksdb/options/options_parser.cc +35 -26
  414. package/deps/rocksdb/rocksdb/options/options_parser.h +4 -2
  415. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -3
  416. package/deps/rocksdb/rocksdb/options/options_test.cc +30 -23
  417. package/deps/rocksdb/rocksdb/port/lang.h +1 -1
  418. package/deps/rocksdb/rocksdb/port/port_example.h +7 -7
  419. package/deps/rocksdb/rocksdb/port/port_posix.cc +7 -7
  420. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -7
  421. package/deps/rocksdb/rocksdb/port/stack_trace.cc +85 -24
  422. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -2
  423. package/deps/rocksdb/rocksdb/port/win/io_win.cc +4 -4
  424. package/deps/rocksdb/rocksdb/port/win/io_win.h +13 -17
  425. package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
  426. package/deps/rocksdb/rocksdb/port/win/port_win.h +4 -4
  427. package/deps/rocksdb/rocksdb/src.mk +16 -1
  428. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -7
  429. package/deps/rocksdb/rocksdb/table/block_based/block.cc +39 -15
  430. package/deps/rocksdb/rocksdb/table/block_based/block.h +7 -7
  431. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +80 -40
  432. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -3
  433. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +20 -5
  434. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +228 -122
  435. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +50 -9
  436. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +82 -25
  437. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +17 -20
  438. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +47 -13
  439. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +163 -50
  440. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +1 -2
  441. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +23 -23
  442. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -12
  443. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -2
  444. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +6 -4
  445. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +32 -27
  446. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -1
  447. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +7 -10
  448. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +2 -2
  449. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  450. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +25 -7
  451. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -5
  452. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +4 -6
  453. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +6 -6
  454. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -1
  455. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -5
  456. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +2 -2
  457. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -5
  458. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +138 -86
  459. package/deps/rocksdb/rocksdb/table/block_fetcher.h +22 -0
  460. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +26 -13
  461. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +11 -11
  462. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +11 -11
  463. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +10 -5
  464. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +6 -7
  465. package/deps/rocksdb/rocksdb/table/format.cc +15 -21
  466. package/deps/rocksdb/rocksdb/table/format.h +8 -0
  467. package/deps/rocksdb/rocksdb/table/get_context.cc +121 -78
  468. package/deps/rocksdb/rocksdb/table/get_context.h +11 -6
  469. package/deps/rocksdb/rocksdb/table/internal_iterator.h +12 -5
  470. package/deps/rocksdb/rocksdb/table/iterator.cc +4 -0
  471. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -1
  472. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -1
  473. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +5 -0
  474. package/deps/rocksdb/rocksdb/table/merging_iterator.h +4 -3
  475. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +15 -11
  476. package/deps/rocksdb/rocksdb/table/meta_blocks.h +8 -4
  477. package/deps/rocksdb/rocksdb/table/mock_table.cc +12 -8
  478. package/deps/rocksdb/rocksdb/table/mock_table.h +1 -3
  479. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +0 -1
  480. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -21
  481. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +4 -14
  482. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +7 -8
  483. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +7 -5
  484. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +15 -8
  485. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +1 -1
  486. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +75 -30
  487. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +7 -2
  488. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +76 -11
  489. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +358 -2
  490. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +93 -16
  491. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +12 -12
  492. package/deps/rocksdb/rocksdb/table/table_builder.h +12 -6
  493. package/deps/rocksdb/rocksdb/table/table_iterator.h +69 -0
  494. package/deps/rocksdb/rocksdb/table/table_properties.cc +1 -1
  495. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +8 -6
  496. package/deps/rocksdb/rocksdb/table/table_test.cc +732 -121
  497. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +3 -1
  498. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/unique_id.cc +2 -2
  500. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +2 -2
  501. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +5 -5
  502. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -6
  503. package/deps/rocksdb/rocksdb/test_util/testharness.cc +2 -4
  504. package/deps/rocksdb/rocksdb/test_util/testutil.cc +56 -32
  505. package/deps/rocksdb/rocksdb/test_util/testutil.h +57 -34
  506. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +18 -1
  507. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  508. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  509. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +210 -112
  510. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +3 -3
  511. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +1 -1
  512. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +22 -27
  513. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +10 -4
  514. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +328 -59
  515. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +34 -2
  516. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +64 -17
  517. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +8 -1
  518. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +3 -2
  519. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +136 -10
  520. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -2
  521. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +50 -8
  522. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +51 -45
  523. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +1 -1
  524. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +10 -10
  525. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +14 -4
  526. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +2 -1
  527. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +2 -2
  528. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -4
  529. package/deps/rocksdb/rocksdb/util/atomic.h +111 -0
  530. package/deps/rocksdb/rocksdb/util/autovector.h +5 -1
  531. package/deps/rocksdb/rocksdb/util/bloom_test.cc +12 -2
  532. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  533. package/deps/rocksdb/rocksdb/util/coding.h +34 -38
  534. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -1
  535. package/deps/rocksdb/rocksdb/util/comparator.cc +18 -5
  536. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -1
  537. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +4 -4
  538. package/deps/rocksdb/rocksdb/util/crc32c.cc +3 -6
  539. package/deps/rocksdb/rocksdb/util/crc32c.h +3 -3
  540. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +3 -4
  541. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -2
  542. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +2 -4
  543. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -4
  544. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -2
  545. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +3 -3
  546. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +83 -59
  547. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -3
  548. package/deps/rocksdb/rocksdb/util/hash.h +4 -4
  549. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +3 -3
  550. package/deps/rocksdb/rocksdb/util/murmurhash.cc +1 -1
  551. package/deps/rocksdb/rocksdb/util/random.cc +3 -4
  552. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +23 -43
  553. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +21 -16
  554. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +44 -24
  555. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +2 -3
  556. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +2 -10
  557. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +2 -2
  558. package/deps/rocksdb/rocksdb/util/slice.cc +4 -5
  559. package/deps/rocksdb/rocksdb/util/slice_test.cc +70 -4
  560. package/deps/rocksdb/rocksdb/util/status.cc +1 -1
  561. package/deps/rocksdb/rocksdb/util/stderr_logger.cc +39 -7
  562. package/deps/rocksdb/rocksdb/util/stderr_logger.h +12 -2
  563. package/deps/rocksdb/rocksdb/util/string_util.cc +31 -18
  564. package/deps/rocksdb/rocksdb/util/string_util.h +9 -9
  565. package/deps/rocksdb/rocksdb/util/string_util_test.cc +36 -0
  566. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +5 -5
  567. package/deps/rocksdb/rocksdb/util/thread_local.cc +1 -1
  568. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +3 -4
  569. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +1 -1
  570. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +4 -4
  571. package/deps/rocksdb/rocksdb/util/vector_iterator.h +12 -16
  572. package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
  573. package/deps/rocksdb/rocksdb/util/xxhash.h +116 -116
  574. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +4 -5
  575. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_impl.h +2 -2
  576. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -2
  577. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -31
  578. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -22
  579. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +9 -7
  580. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +3 -6
  581. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +22 -55
  582. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +113 -74
  583. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +36 -24
  584. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +27 -11
  585. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -3
  586. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +68 -54
  587. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -6
  588. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +16 -16
  589. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +3 -2
  590. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +29 -9
  591. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +27 -14
  592. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +2 -4
  593. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +3 -3
  594. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +2 -4
  595. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -4
  596. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +2 -4
  597. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +2 -4
  598. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +2 -4
  599. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +8 -8
  600. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -7
  601. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -8
  602. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +2 -4
  603. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +9 -7
  604. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +7 -10
  605. package/deps/rocksdb/rocksdb/utilities/debug.cc +6 -2
  606. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +18 -11
  607. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +2 -2
  608. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +18 -25
  609. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +32 -23
  610. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +51 -48
  611. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +5 -3
  612. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -2
  613. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  614. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +2 -3
  615. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +3 -1
  616. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +7 -7
  617. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +10 -10
  618. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +5 -6
  619. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +5 -6
  620. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +1 -1
  621. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -8
  622. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +29 -21
  623. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +14 -15
  624. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -2
  625. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -1
  626. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +3 -3
  627. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -5
  628. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  629. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +2 -2
  630. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +8 -8
  631. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +4 -4
  632. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
  633. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +6 -9
  634. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +2 -2
  635. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +1 -1
  636. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +6 -6
  637. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +1 -2
  638. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +2 -3
  639. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  640. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +1 -1
  641. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  642. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +5 -0
  643. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +1 -1
  644. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +3 -3
  645. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +1 -1
  646. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +4 -0
  647. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +4 -0
  648. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  649. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +4 -0
  650. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +12 -3
  651. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +17 -3
  652. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +3 -3
  653. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +1 -1
  654. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +3 -3
  655. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +4 -2
  656. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +1 -1
  657. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +1 -2
  658. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -3
  659. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +3 -4
  660. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +442 -10
  661. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +27 -9
  662. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +28 -7
  663. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +70 -12
  664. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +50 -22
  665. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -1
  666. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -1
  667. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +64 -3
  668. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +76 -17
  669. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +6 -6
  670. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +573 -77
  671. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -2
  672. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +65 -3
  673. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +13 -11
  674. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +1 -0
  675. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +14 -16
  676. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +37 -24
  677. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +23 -29
  678. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +4 -2
  679. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +31 -40
  680. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +8 -6
  681. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +3 -4
  682. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +34 -18
  683. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +21 -25
  684. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +26 -5
  685. package/deps/rocksdb/rocksdb/utilities/types_util.cc +88 -0
  686. package/deps/rocksdb/rocksdb/utilities/types_util_test.cc +98 -0
  687. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -1
  688. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +463 -90
  689. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +259 -76
  690. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +70 -14
  691. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +609 -10
  692. package/deps/rocksdb/rocksdb.gyp +8 -4
  693. package/index.js +18 -4
  694. package/max_rev_operator.h +2 -0
  695. package/package.json +2 -2
  696. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  697. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  698. package/util.h +29 -5
  699. package/.tap/coverage/4c642b53-6895-4ef0-9391-7c6b8d484262.json +0 -14334
  700. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +0 -57
@@ -7,12 +7,15 @@
7
7
  // Use of this source code is governed by a BSD-style license that can be
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
+ #include <memory>
11
+
10
12
  #include "db/db_test_util.h"
11
13
  #include "file/sst_file_manager_impl.h"
12
14
  #include "port/stack_trace.h"
13
15
  #include "rocksdb/io_status.h"
14
16
  #include "rocksdb/sst_file_manager.h"
15
17
  #include "test_util/sync_point.h"
18
+ #include "test_util/testharness.h"
16
19
  #include "util/random.h"
17
20
  #include "utilities/fault_injection_env.h"
18
21
  #include "utilities/fault_injection_fs.h"
@@ -27,6 +30,14 @@ class DBErrorHandlingFSTest : public DBTestBase {
27
30
  fault_env_.reset(new CompositeEnvWrapper(env_, fault_fs_));
28
31
  }
29
32
 
33
+ ~DBErrorHandlingFSTest() {
34
+ // Before destroying fault_env_
35
+ SyncPoint::GetInstance()->DisableProcessing();
36
+ SyncPoint::GetInstance()->LoadDependency({});
37
+ SyncPoint::GetInstance()->ClearAllCallBacks();
38
+ Close();
39
+ }
40
+
30
41
  std::string GetManifestNameFromLiveFiles() {
31
42
  std::vector<std::string> live_files;
32
43
  uint64_t manifest_size;
@@ -152,9 +163,9 @@ class ErrorHandlerFSListener : public EventListener {
152
163
  FaultInjectionTestFS* fault_fs_;
153
164
  };
154
165
 
155
- TEST_F(DBErrorHandlingFSTest, FLushWriteError) {
156
- std::shared_ptr<ErrorHandlerFSListener> listener(
157
- new ErrorHandlerFSListener());
166
+ TEST_F(DBErrorHandlingFSTest, FlushWriteError) {
167
+ std::shared_ptr<ErrorHandlerFSListener> listener =
168
+ std::make_shared<ErrorHandlerFSListener>();
158
169
  Options options = GetDefaultOptions();
159
170
  options.env = fault_env_.get();
160
171
  options.create_if_missing = true;
@@ -197,9 +208,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWriteError) {
197
208
  // All the NoSpace IOError will be handled as the regular BG Error no matter the
198
209
  // retryable flag is set of not. So the auto resume for retryable IO Error will
199
210
  // not be triggered. Also, it is mapped as hard error.
200
- TEST_F(DBErrorHandlingFSTest, FLushWriteNoSpaceError) {
201
- std::shared_ptr<ErrorHandlerFSListener> listener(
202
- new ErrorHandlerFSListener());
211
+ TEST_F(DBErrorHandlingFSTest, FlushWriteNoSpaceError) {
212
+ std::shared_ptr<ErrorHandlerFSListener> listener =
213
+ std::make_shared<ErrorHandlerFSListener>();
203
214
  Options options = GetDefaultOptions();
204
215
  options.env = fault_env_.get();
205
216
  options.create_if_missing = true;
@@ -241,9 +252,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWriteNoSpaceError) {
241
252
  Destroy(options);
242
253
  }
243
254
 
244
- TEST_F(DBErrorHandlingFSTest, FLushWriteRetryableError) {
245
- std::shared_ptr<ErrorHandlerFSListener> listener(
246
- new ErrorHandlerFSListener());
255
+ TEST_F(DBErrorHandlingFSTest, FlushWriteRetryableError) {
256
+ std::shared_ptr<ErrorHandlerFSListener> listener =
257
+ std::make_shared<ErrorHandlerFSListener>();
247
258
  Options options = GetDefaultOptions();
248
259
  options.env = fault_env_.get();
249
260
  options.create_if_missing = true;
@@ -315,9 +326,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWriteRetryableError) {
315
326
  Destroy(options);
316
327
  }
317
328
 
318
- TEST_F(DBErrorHandlingFSTest, FLushWriteFileScopeError) {
319
- std::shared_ptr<ErrorHandlerFSListener> listener(
320
- new ErrorHandlerFSListener());
329
+ TEST_F(DBErrorHandlingFSTest, FlushWriteFileScopeError) {
330
+ std::shared_ptr<ErrorHandlerFSListener> listener =
331
+ std::make_shared<ErrorHandlerFSListener>();
321
332
  Options options = GetDefaultOptions();
322
333
  options.env = fault_env_.get();
323
334
  options.create_if_missing = true;
@@ -399,9 +410,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWriteFileScopeError) {
399
410
  Destroy(options);
400
411
  }
401
412
 
402
- TEST_F(DBErrorHandlingFSTest, FLushWALWriteRetryableError) {
403
- std::shared_ptr<ErrorHandlerFSListener> listener(
404
- new ErrorHandlerFSListener());
413
+ TEST_F(DBErrorHandlingFSTest, FlushWALWriteRetryableError) {
414
+ std::shared_ptr<ErrorHandlerFSListener> listener =
415
+ std::make_shared<ErrorHandlerFSListener>();
405
416
  Options options = GetDefaultOptions();
406
417
  options.env = fault_env_.get();
407
418
  options.create_if_missing = true;
@@ -443,9 +454,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWALWriteRetryableError) {
443
454
  Destroy(options);
444
455
  }
445
456
 
446
- TEST_F(DBErrorHandlingFSTest, FLushWALAtomicWriteRetryableError) {
447
- std::shared_ptr<ErrorHandlerFSListener> listener(
448
- new ErrorHandlerFSListener());
457
+ TEST_F(DBErrorHandlingFSTest, FlushWALAtomicWriteRetryableError) {
458
+ std::shared_ptr<ErrorHandlerFSListener> listener =
459
+ std::make_shared<ErrorHandlerFSListener>();
449
460
  Options options = GetDefaultOptions();
450
461
  options.env = fault_env_.get();
451
462
  options.create_if_missing = true;
@@ -489,9 +500,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWALAtomicWriteRetryableError) {
489
500
  }
490
501
 
491
502
  // The flush error is injected before we finish the table build
492
- TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableError1) {
493
- std::shared_ptr<ErrorHandlerFSListener> listener(
494
- new ErrorHandlerFSListener());
503
+ TEST_F(DBErrorHandlingFSTest, FlushWritNoWALRetryableError1) {
504
+ std::shared_ptr<ErrorHandlerFSListener> listener =
505
+ std::make_shared<ErrorHandlerFSListener>();
495
506
  Options options = GetDefaultOptions();
496
507
  options.env = fault_env_.get();
497
508
  options.create_if_missing = true;
@@ -545,9 +556,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableError1) {
545
556
  }
546
557
 
547
558
  // The retryable IO error is injected before we sync table
548
- TEST_F(DBErrorHandlingFSTest, FLushWriteNoWALRetryableError2) {
549
- std::shared_ptr<ErrorHandlerFSListener> listener(
550
- new ErrorHandlerFSListener());
559
+ TEST_F(DBErrorHandlingFSTest, FlushWriteNoWALRetryableError2) {
560
+ std::shared_ptr<ErrorHandlerFSListener> listener =
561
+ std::make_shared<ErrorHandlerFSListener>();
551
562
  Options options = GetDefaultOptions();
552
563
  options.env = fault_env_.get();
553
564
  options.create_if_missing = true;
@@ -589,9 +600,9 @@ TEST_F(DBErrorHandlingFSTest, FLushWriteNoWALRetryableError2) {
589
600
  }
590
601
 
591
602
  // The retryable IO error is injected before we close the table file
592
- TEST_F(DBErrorHandlingFSTest, FLushWriteNoWALRetryableError3) {
593
- std::shared_ptr<ErrorHandlerFSListener> listener(
594
- new ErrorHandlerFSListener());
603
+ TEST_F(DBErrorHandlingFSTest, FlushWriteNoWALRetryableError3) {
604
+ std::shared_ptr<ErrorHandlerFSListener> listener =
605
+ std::make_shared<ErrorHandlerFSListener>();
595
606
  Options options = GetDefaultOptions();
596
607
  options.env = fault_env_.get();
597
608
  options.create_if_missing = true;
@@ -633,8 +644,8 @@ TEST_F(DBErrorHandlingFSTest, FLushWriteNoWALRetryableError3) {
633
644
  }
634
645
 
635
646
  TEST_F(DBErrorHandlingFSTest, ManifestWriteError) {
636
- std::shared_ptr<ErrorHandlerFSListener> listener(
637
- new ErrorHandlerFSListener());
647
+ std::shared_ptr<ErrorHandlerFSListener> listener =
648
+ std::make_shared<ErrorHandlerFSListener>();
638
649
  Options options = GetDefaultOptions();
639
650
  options.env = fault_env_.get();
640
651
  options.create_if_missing = true;
@@ -658,6 +669,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteError) {
658
669
  SyncPoint::GetInstance()->EnableProcessing();
659
670
  s = Flush();
660
671
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kHardError);
672
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
661
673
  SyncPoint::GetInstance()->ClearAllCallBacks();
662
674
  SyncPoint::GetInstance()->DisableProcessing();
663
675
  fault_fs_->SetFilesystemActive(true);
@@ -666,6 +678,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteError) {
666
678
 
667
679
  new_manifest = GetManifestNameFromLiveFiles();
668
680
  ASSERT_NE(new_manifest, old_manifest);
681
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
669
682
 
670
683
  Reopen(options);
671
684
  ASSERT_EQ("val", Get(Key(0)));
@@ -674,8 +687,8 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteError) {
674
687
  }
675
688
 
676
689
  TEST_F(DBErrorHandlingFSTest, ManifestWriteRetryableError) {
677
- std::shared_ptr<ErrorHandlerFSListener> listener(
678
- new ErrorHandlerFSListener());
690
+ std::shared_ptr<ErrorHandlerFSListener> listener =
691
+ std::make_shared<ErrorHandlerFSListener>();
679
692
  Options options = GetDefaultOptions();
680
693
  options.env = fault_env_.get();
681
694
  options.create_if_missing = true;
@@ -701,6 +714,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteRetryableError) {
701
714
  SyncPoint::GetInstance()->EnableProcessing();
702
715
  s = Flush();
703
716
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kSoftError);
717
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
704
718
  SyncPoint::GetInstance()->ClearAllCallBacks();
705
719
  SyncPoint::GetInstance()->DisableProcessing();
706
720
  fault_fs_->SetFilesystemActive(true);
@@ -709,6 +723,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteRetryableError) {
709
723
 
710
724
  new_manifest = GetManifestNameFromLiveFiles();
711
725
  ASSERT_NE(new_manifest, old_manifest);
726
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
712
727
 
713
728
  Reopen(options);
714
729
  ASSERT_EQ("val", Get(Key(0)));
@@ -717,8 +732,8 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteRetryableError) {
717
732
  }
718
733
 
719
734
  TEST_F(DBErrorHandlingFSTest, ManifestWriteFileScopeError) {
720
- std::shared_ptr<ErrorHandlerFSListener> listener(
721
- new ErrorHandlerFSListener());
735
+ std::shared_ptr<ErrorHandlerFSListener> listener =
736
+ std::make_shared<ErrorHandlerFSListener>();
722
737
  Options options = GetDefaultOptions();
723
738
  options.env = fault_env_.get();
724
739
  options.create_if_missing = true;
@@ -746,6 +761,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteFileScopeError) {
746
761
  [&](void*) { fault_fs_->SetFilesystemActive(false, error_msg); });
747
762
  SyncPoint::GetInstance()->EnableProcessing();
748
763
  s = Flush();
764
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
749
765
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kSoftError);
750
766
  SyncPoint::GetInstance()->ClearAllCallBacks();
751
767
  SyncPoint::GetInstance()->DisableProcessing();
@@ -755,6 +771,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteFileScopeError) {
755
771
 
756
772
  new_manifest = GetManifestNameFromLiveFiles();
757
773
  ASSERT_NE(new_manifest, old_manifest);
774
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
758
775
 
759
776
  Reopen(options);
760
777
  ASSERT_EQ("val", Get(Key(0)));
@@ -763,8 +780,8 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteFileScopeError) {
763
780
  }
764
781
 
765
782
  TEST_F(DBErrorHandlingFSTest, ManifestWriteNoWALRetryableError) {
766
- std::shared_ptr<ErrorHandlerFSListener> listener(
767
- new ErrorHandlerFSListener());
783
+ std::shared_ptr<ErrorHandlerFSListener> listener =
784
+ std::make_shared<ErrorHandlerFSListener>();
768
785
  Options options = GetDefaultOptions();
769
786
  options.env = fault_env_.get();
770
787
  options.create_if_missing = true;
@@ -792,6 +809,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteNoWALRetryableError) {
792
809
  SyncPoint::GetInstance()->EnableProcessing();
793
810
  s = Flush();
794
811
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kSoftError);
812
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
795
813
  SyncPoint::GetInstance()->ClearAllCallBacks();
796
814
  SyncPoint::GetInstance()->DisableProcessing();
797
815
  fault_fs_->SetFilesystemActive(true);
@@ -800,6 +818,7 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteNoWALRetryableError) {
800
818
 
801
819
  new_manifest = GetManifestNameFromLiveFiles();
802
820
  ASSERT_NE(new_manifest, old_manifest);
821
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
803
822
 
804
823
  Reopen(options);
805
824
  ASSERT_EQ("val", Get(Key(0)));
@@ -808,8 +827,8 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteNoWALRetryableError) {
808
827
  }
809
828
 
810
829
  TEST_F(DBErrorHandlingFSTest, DoubleManifestWriteError) {
811
- std::shared_ptr<ErrorHandlerFSListener> listener(
812
- new ErrorHandlerFSListener());
830
+ std::shared_ptr<ErrorHandlerFSListener> listener =
831
+ std::make_shared<ErrorHandlerFSListener>();
813
832
  Options options = GetDefaultOptions();
814
833
  options.env = fault_env_.get();
815
834
  options.create_if_missing = true;
@@ -833,11 +852,13 @@ TEST_F(DBErrorHandlingFSTest, DoubleManifestWriteError) {
833
852
  SyncPoint::GetInstance()->EnableProcessing();
834
853
  s = Flush();
835
854
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kHardError);
855
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
836
856
  fault_fs_->SetFilesystemActive(true);
837
857
 
838
858
  // This Resume() will attempt to create a new manifest file and fail again
839
859
  s = dbfull()->Resume();
840
860
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kHardError);
861
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
841
862
  fault_fs_->SetFilesystemActive(true);
842
863
  SyncPoint::GetInstance()->ClearAllCallBacks();
843
864
  SyncPoint::GetInstance()->DisableProcessing();
@@ -848,6 +869,7 @@ TEST_F(DBErrorHandlingFSTest, DoubleManifestWriteError) {
848
869
 
849
870
  new_manifest = GetManifestNameFromLiveFiles();
850
871
  ASSERT_NE(new_manifest, old_manifest);
872
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
851
873
 
852
874
  Reopen(options);
853
875
  ASSERT_EQ("val", Get(Key(0)));
@@ -860,8 +882,8 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteError) {
860
882
  ROCKSDB_GTEST_SKIP("Test requires non-mock environment");
861
883
  return;
862
884
  }
863
- std::shared_ptr<ErrorHandlerFSListener> listener(
864
- new ErrorHandlerFSListener());
885
+ std::shared_ptr<ErrorHandlerFSListener> listener =
886
+ std::make_shared<ErrorHandlerFSListener>();
865
887
  Options options = GetDefaultOptions();
866
888
  options.env = fault_env_.get();
867
889
  options.create_if_missing = true;
@@ -914,6 +936,7 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteError) {
914
936
  fault_fs_->SetFilesystemActive(true);
915
937
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
916
938
  TEST_SYNC_POINT("CompactionManifestWriteError:1");
939
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
917
940
  TEST_SYNC_POINT("CompactionManifestWriteError:2");
918
941
 
919
942
  s = dbfull()->TEST_WaitForCompact();
@@ -922,6 +945,7 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteError) {
922
945
 
923
946
  new_manifest = GetManifestNameFromLiveFiles();
924
947
  ASSERT_NE(new_manifest, old_manifest);
948
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
925
949
  Reopen(options);
926
950
  ASSERT_EQ("val", Get(Key(0)));
927
951
  ASSERT_EQ("val", Get(Key(1)));
@@ -930,8 +954,8 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteError) {
930
954
  }
931
955
 
932
956
  TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteRetryableError) {
933
- std::shared_ptr<ErrorHandlerFSListener> listener(
934
- new ErrorHandlerFSListener());
957
+ std::shared_ptr<ErrorHandlerFSListener> listener =
958
+ std::make_shared<ErrorHandlerFSListener>();
935
959
  Options options = GetDefaultOptions();
936
960
  options.env = fault_env_.get();
937
961
  options.create_if_missing = true;
@@ -980,6 +1004,7 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteRetryableError) {
980
1004
  ASSERT_OK(s);
981
1005
 
982
1006
  TEST_SYNC_POINT("CompactionManifestWriteError:0");
1007
+ ASSERT_FALSE(dbfull()->TEST_GetFilesToQuarantine().empty());
983
1008
  TEST_SYNC_POINT("CompactionManifestWriteError:1");
984
1009
 
985
1010
  s = dbfull()->TEST_WaitForCompact();
@@ -993,6 +1018,7 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteRetryableError) {
993
1018
 
994
1019
  new_manifest = GetManifestNameFromLiveFiles();
995
1020
  ASSERT_NE(new_manifest, old_manifest);
1021
+ ASSERT_TRUE(dbfull()->TEST_GetFilesToQuarantine().empty());
996
1022
 
997
1023
  Reopen(options);
998
1024
  ASSERT_EQ("val", Get(Key(0)));
@@ -1002,8 +1028,8 @@ TEST_F(DBErrorHandlingFSTest, CompactionManifestWriteRetryableError) {
1002
1028
  }
1003
1029
 
1004
1030
  TEST_F(DBErrorHandlingFSTest, CompactionWriteError) {
1005
- std::shared_ptr<ErrorHandlerFSListener> listener(
1006
- new ErrorHandlerFSListener());
1031
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1032
+ std::make_shared<ErrorHandlerFSListener>();
1007
1033
  Options options = GetDefaultOptions();
1008
1034
  options.env = fault_env_.get();
1009
1035
  options.create_if_missing = true;
@@ -1044,8 +1070,8 @@ TEST_F(DBErrorHandlingFSTest, CompactionWriteError) {
1044
1070
  }
1045
1071
 
1046
1072
  TEST_F(DBErrorHandlingFSTest, DISABLED_CompactionWriteRetryableError) {
1047
- std::shared_ptr<ErrorHandlerFSListener> listener(
1048
- new ErrorHandlerFSListener());
1073
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1074
+ std::make_shared<ErrorHandlerFSListener>();
1049
1075
  Options options = GetDefaultOptions();
1050
1076
  options.env = fault_env_.get();
1051
1077
  options.create_if_missing = true;
@@ -1091,8 +1117,8 @@ TEST_F(DBErrorHandlingFSTest, DISABLED_CompactionWriteRetryableError) {
1091
1117
  }
1092
1118
 
1093
1119
  TEST_F(DBErrorHandlingFSTest, DISABLED_CompactionWriteFileScopeError) {
1094
- std::shared_ptr<ErrorHandlerFSListener> listener(
1095
- new ErrorHandlerFSListener());
1120
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1121
+ std::make_shared<ErrorHandlerFSListener>();
1096
1122
  Options options = GetDefaultOptions();
1097
1123
  options.env = fault_env_.get();
1098
1124
  options.create_if_missing = true;
@@ -1183,8 +1209,8 @@ TEST_F(DBErrorHandlingFSTest, AutoRecoverFlushError) {
1183
1209
  ROCKSDB_GTEST_SKIP("Test requires non-mock environment");
1184
1210
  return;
1185
1211
  }
1186
- std::shared_ptr<ErrorHandlerFSListener> listener(
1187
- new ErrorHandlerFSListener());
1212
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1213
+ std::make_shared<ErrorHandlerFSListener>();
1188
1214
  Options options = GetDefaultOptions();
1189
1215
  options.env = fault_env_.get();
1190
1216
  options.create_if_missing = true;
@@ -1220,6 +1246,7 @@ TEST_F(DBErrorHandlingFSTest, AutoRecoverFlushError) {
1220
1246
  ERROR_HANDLER_AUTORESUME_RETRY_TOTAL_COUNT));
1221
1247
  ASSERT_EQ(0, options.statistics->getAndResetTickerCount(
1222
1248
  ERROR_HANDLER_AUTORESUME_SUCCESS_COUNT));
1249
+ ASSERT_OK(dbfull()->SyncWAL());
1223
1250
 
1224
1251
  Reopen(options);
1225
1252
  ASSERT_EQ("val", Get(Key(0)));
@@ -1228,8 +1255,8 @@ TEST_F(DBErrorHandlingFSTest, AutoRecoverFlushError) {
1228
1255
  }
1229
1256
 
1230
1257
  TEST_F(DBErrorHandlingFSTest, FailRecoverFlushError) {
1231
- std::shared_ptr<ErrorHandlerFSListener> listener(
1232
- new ErrorHandlerFSListener());
1258
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1259
+ std::make_shared<ErrorHandlerFSListener>();
1233
1260
  Options options = GetDefaultOptions();
1234
1261
  options.env = fault_env_.get();
1235
1262
  options.create_if_missing = true;
@@ -1257,8 +1284,8 @@ TEST_F(DBErrorHandlingFSTest, WALWriteError) {
1257
1284
  ROCKSDB_GTEST_SKIP("Test requires non-mock environment");
1258
1285
  return;
1259
1286
  }
1260
- std::shared_ptr<ErrorHandlerFSListener> listener(
1261
- new ErrorHandlerFSListener());
1287
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1288
+ std::make_shared<ErrorHandlerFSListener>();
1262
1289
  Options options = GetDefaultOptions();
1263
1290
  options.env = fault_env_.get();
1264
1291
  options.create_if_missing = true;
@@ -1330,8 +1357,8 @@ TEST_F(DBErrorHandlingFSTest, WALWriteError) {
1330
1357
  }
1331
1358
 
1332
1359
  TEST_F(DBErrorHandlingFSTest, WALWriteRetryableError) {
1333
- std::shared_ptr<ErrorHandlerFSListener> listener(
1334
- new ErrorHandlerFSListener());
1360
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1361
+ std::make_shared<ErrorHandlerFSListener>();
1335
1362
  Options options = GetDefaultOptions();
1336
1363
  options.env = fault_env_.get();
1337
1364
  options.create_if_missing = true;
@@ -1425,8 +1452,8 @@ TEST_F(DBErrorHandlingFSTest, MultiCFWALWriteError) {
1425
1452
  ROCKSDB_GTEST_SKIP("Test requires non-mock environment");
1426
1453
  return;
1427
1454
  }
1428
- std::shared_ptr<ErrorHandlerFSListener> listener(
1429
- new ErrorHandlerFSListener());
1455
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1456
+ std::make_shared<ErrorHandlerFSListener>();
1430
1457
  Options options = GetDefaultOptions();
1431
1458
  options.env = fault_env_.get();
1432
1459
  options.create_if_missing = true;
@@ -1757,10 +1784,10 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) {
1757
1784
  // to soft error and trigger auto resume. During auto resume, SwitchMemtable
1758
1785
  // is disabled to avoid small SST tables. Write can still be applied before
1759
1786
  // the bg error is cleaned unless the memtable is full.
1760
- TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableErrorAutoRecover1) {
1787
+ TEST_F(DBErrorHandlingFSTest, FlushWritNoWALRetryableErrorAutoRecover1) {
1761
1788
  // Activate the FS before the first resume
1762
- std::shared_ptr<ErrorHandlerFSListener> listener(
1763
- new ErrorHandlerFSListener());
1789
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1790
+ std::make_shared<ErrorHandlerFSListener>();
1764
1791
  Options options = GetDefaultOptions();
1765
1792
  options.env = fault_env_.get();
1766
1793
  options.create_if_missing = true;
@@ -1781,7 +1808,7 @@ TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableErrorAutoRecover1) {
1781
1808
  ASSERT_OK(Put(Key(1), "val1", wo));
1782
1809
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
1783
1810
  {{"RecoverFromRetryableBGIOError:LoopOut",
1784
- "FLushWritNoWALRetryableeErrorAutoRecover1:1"}});
1811
+ "FlushWritNoWALRetryableeErrorAutoRecover1:1"}});
1785
1812
  SyncPoint::GetInstance()->SetCallBack(
1786
1813
  "BuildTable:BeforeFinishBuildTable",
1787
1814
  [&](void*) { fault_fs_->SetFilesystemActive(false, error_msg); });
@@ -1790,7 +1817,7 @@ TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableErrorAutoRecover1) {
1790
1817
  s = Flush();
1791
1818
  ASSERT_EQ("val1", Get(Key(1)));
1792
1819
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kSoftError);
1793
- TEST_SYNC_POINT("FLushWritNoWALRetryableeErrorAutoRecover1:1");
1820
+ TEST_SYNC_POINT("FlushWritNoWALRetryableeErrorAutoRecover1:1");
1794
1821
  ASSERT_EQ("val1", Get(Key(1)));
1795
1822
  ASSERT_EQ("val1", Get(Key(1)));
1796
1823
  SyncPoint::GetInstance()->DisableProcessing();
@@ -1827,10 +1854,94 @@ TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableErrorAutoRecover1) {
1827
1854
  Destroy(options);
1828
1855
  }
1829
1856
 
1830
- TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableErrorAutoRecover2) {
1857
+ TEST_F(DBErrorHandlingFSTest, MultipleRecoveryThreads) {
1858
+ // This test creates a scenario where second write's recovery can get started
1859
+ // while mutex is released for a short period during
1860
+ // NotifyOnErrorRecoveryEnd() from the first write's recovery. This is to make
1861
+ // sure RecoverFromRetryableBGIOError() from the second write's recovery
1862
+ // thread does not start with recovery_in_prog_ = false;
1863
+
1864
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1865
+ std::make_shared<ErrorHandlerFSListener>();
1866
+ Options options = GetDefaultOptions();
1867
+ options.env = fault_env_.get();
1868
+ options.create_if_missing = true;
1869
+ options.listeners.emplace_back(listener);
1870
+ options.max_bgerror_resume_count = 100;
1871
+ options.bgerror_resume_retry_interval = 1000000; // 1 second
1872
+ options.statistics = CreateDBStatistics();
1873
+
1874
+ listener->EnableAutoRecovery(false);
1875
+ DestroyAndReopen(options);
1876
+
1877
+ IOStatus error_msg = IOStatus::IOError("Retryable IO Error");
1878
+ error_msg.SetRetryable(true);
1879
+
1880
+ WriteOptions wo = WriteOptions();
1881
+ wo.disableWAL = true;
1882
+ fault_fs_->SetFilesystemActive(false, error_msg);
1883
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
1884
+ {{"NotifyOnErrorRecoveryEnd:MutexUnlocked:1",
1885
+ "MultipleRecoveryThreads:1"},
1886
+ {"MultipleRecoveryThreads:2",
1887
+ "NotifyOnErrorRecoveryEnd:MutexUnlocked:2"},
1888
+ {"StartRecoverFromRetryableBGIOError:BeforeWaitingForOtherThread",
1889
+ "MultipleRecoveryThreads:3"},
1890
+ {"RecoverFromRetryableBGIOError:RecoverSuccess",
1891
+ "MultipleRecoveryThreads:4"},
1892
+ {"MultipleRecoveryThreads:4",
1893
+ "StartRecoverFromRetryableBGIOError:AfterWaitingForOtherThread"}});
1894
+ SyncPoint::GetInstance()->EnableProcessing();
1895
+
1896
+ // First write with read fault injected and recovery will start
1897
+ {
1898
+ ASSERT_OK(Put(Key(1), "val1", wo));
1899
+ Status s = Flush();
1900
+ ASSERT_NOK(s);
1901
+ }
1902
+ // Remove read fault injection so that first recovery can go through
1903
+ fault_fs_->SetFilesystemActive(true);
1904
+
1905
+ // At this point, first recovery is now at NotifyOnErrorRecoveryEnd. Mutex is
1906
+ // released.
1907
+ TEST_SYNC_POINT("MultipleRecoveryThreads:1");
1908
+
1909
+ ROCKSDB_NAMESPACE::port::Thread second_write([&] {
1910
+ // Second write with read fault injected
1911
+ fault_fs_->SetFilesystemActive(false, error_msg);
1912
+ ASSERT_OK(Put(Key(2), "val2", wo));
1913
+ Status s = Flush();
1914
+ ASSERT_NOK(s);
1915
+ });
1916
+ // Second bg thread before waiting for the first thread's recovery thread
1917
+ TEST_SYNC_POINT("MultipleRecoveryThreads:3");
1918
+ // First thread's recovery thread continues
1919
+ TEST_SYNC_POINT("MultipleRecoveryThreads:2");
1920
+ // Wait for the first thread's recovery to finish
1921
+ // (this sets recovery_in_prog_ = false)
1922
+ // And second thread continues and starts recovery thread
1923
+ TEST_SYNC_POINT("MultipleRecoveryThreads:4");
1924
+ second_write.join();
1925
+ // Remove error injection so that second thread recovery can go through
1926
+ fault_fs_->SetFilesystemActive(true);
1927
+
1928
+ // Set up sync point so that we can wait for the recovery thread to finish
1929
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
1930
+ {{"RecoverFromRetryableBGIOError:RecoverSuccess",
1931
+ "MultipleRecoveryThreads:6"}});
1932
+
1933
+ // Wait for the second thread's recovery to be done
1934
+ TEST_SYNC_POINT("MultipleRecoveryThreads:6");
1935
+
1936
+ SyncPoint::GetInstance()->DisableProcessing();
1937
+ SyncPoint::GetInstance()->ClearAllCallBacks();
1938
+ Destroy(options);
1939
+ }
1940
+
1941
+ TEST_F(DBErrorHandlingFSTest, FlushWritNoWALRetryableErrorAutoRecover2) {
1831
1942
  // Activate the FS before the first resume
1832
- std::shared_ptr<ErrorHandlerFSListener> listener(
1833
- new ErrorHandlerFSListener());
1943
+ std::shared_ptr<ErrorHandlerFSListener> listener =
1944
+ std::make_shared<ErrorHandlerFSListener>();
1834
1945
  Options options = GetDefaultOptions();
1835
1946
  options.env = fault_env_.get();
1836
1947
  options.create_if_missing = true;
@@ -1888,10 +1999,10 @@ TEST_F(DBErrorHandlingFSTest, FLushWritNoWALRetryableErrorAutoRecover2) {
1888
1999
 
1889
2000
  // Auto resume fromt the flush retryable IO error. Activate the FS before the
1890
2001
  // first resume. Resume is successful
1891
- TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAutoRecover1) {
2002
+ TEST_F(DBErrorHandlingFSTest, FlushWritRetryableErrorAutoRecover1) {
1892
2003
  // Activate the FS before the first resume
1893
- std::shared_ptr<ErrorHandlerFSListener> listener(
1894
- new ErrorHandlerFSListener());
2004
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2005
+ std::make_shared<ErrorHandlerFSListener>();
1895
2006
  Options options = GetDefaultOptions();
1896
2007
  options.env = fault_env_.get();
1897
2008
  options.create_if_missing = true;
@@ -1930,10 +2041,10 @@ TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAutoRecover1) {
1930
2041
 
1931
2042
  // Auto resume fromt the flush retryable IO error and set the retry limit count.
1932
2043
  // Never activate the FS and auto resume should fail at the end
1933
- TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAutoRecover2) {
2044
+ TEST_F(DBErrorHandlingFSTest, FlushWritRetryableErrorAutoRecover2) {
1934
2045
  // Fail all the resume and let user to resume
1935
- std::shared_ptr<ErrorHandlerFSListener> listener(
1936
- new ErrorHandlerFSListener());
2046
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2047
+ std::make_shared<ErrorHandlerFSListener>();
1937
2048
  Options options = GetDefaultOptions();
1938
2049
  options.env = fault_env_.get();
1939
2050
  options.create_if_missing = true;
@@ -1950,18 +2061,18 @@ TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAutoRecover2) {
1950
2061
 
1951
2062
  ASSERT_OK(Put(Key(1), "val1"));
1952
2063
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
1953
- {{"FLushWritRetryableeErrorAutoRecover2:0",
2064
+ {{"FlushWritRetryableeErrorAutoRecover2:0",
1954
2065
  "RecoverFromRetryableBGIOError:BeforeStart"},
1955
2066
  {"RecoverFromRetryableBGIOError:LoopOut",
1956
- "FLushWritRetryableeErrorAutoRecover2:1"}});
2067
+ "FlushWritRetryableeErrorAutoRecover2:1"}});
1957
2068
  SyncPoint::GetInstance()->SetCallBack(
1958
2069
  "BuildTable:BeforeFinishBuildTable",
1959
2070
  [&](void*) { fault_fs_->SetFilesystemActive(false, error_msg); });
1960
2071
  SyncPoint::GetInstance()->EnableProcessing();
1961
2072
  s = Flush();
1962
2073
  ASSERT_EQ(s.severity(), ROCKSDB_NAMESPACE::Status::Severity::kSoftError);
1963
- TEST_SYNC_POINT("FLushWritRetryableeErrorAutoRecover2:0");
1964
- TEST_SYNC_POINT("FLushWritRetryableeErrorAutoRecover2:1");
2074
+ TEST_SYNC_POINT("FlushWritRetryableeErrorAutoRecover2:0");
2075
+ TEST_SYNC_POINT("FlushWritRetryableeErrorAutoRecover2:1");
1965
2076
  fault_fs_->SetFilesystemActive(true);
1966
2077
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
1967
2078
  SyncPoint::GetInstance()->DisableProcessing();
@@ -1983,8 +2094,8 @@ TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAutoRecover2) {
1983
2094
  // Fail the first resume and let the second resume be successful.
1984
2095
  TEST_F(DBErrorHandlingFSTest, ManifestWriteRetryableErrorAutoRecover) {
1985
2096
  // Fail the first resume and let the second resume be successful
1986
- std::shared_ptr<ErrorHandlerFSListener> listener(
1987
- new ErrorHandlerFSListener());
2097
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2098
+ std::make_shared<ErrorHandlerFSListener>();
1988
2099
  Options options = GetDefaultOptions();
1989
2100
  options.env = fault_env_.get();
1990
2101
  options.create_if_missing = true;
@@ -2036,8 +2147,8 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteRetryableErrorAutoRecover) {
2036
2147
 
2037
2148
  TEST_F(DBErrorHandlingFSTest, ManifestWriteNoWALRetryableErrorAutoRecover) {
2038
2149
  // Fail the first resume and let the second resume be successful
2039
- std::shared_ptr<ErrorHandlerFSListener> listener(
2040
- new ErrorHandlerFSListener());
2150
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2151
+ std::make_shared<ErrorHandlerFSListener>();
2041
2152
  Options options = GetDefaultOptions();
2042
2153
  options.env = fault_env_.get();
2043
2154
  options.create_if_missing = true;
@@ -2091,8 +2202,8 @@ TEST_F(DBErrorHandlingFSTest, ManifestWriteNoWALRetryableErrorAutoRecover) {
2091
2202
 
2092
2203
  TEST_F(DBErrorHandlingFSTest,
2093
2204
  CompactionManifestWriteRetryableErrorAutoRecover) {
2094
- std::shared_ptr<ErrorHandlerFSListener> listener(
2095
- new ErrorHandlerFSListener());
2205
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2206
+ std::make_shared<ErrorHandlerFSListener>();
2096
2207
  Options options = GetDefaultOptions();
2097
2208
  options.env = fault_env_.get();
2098
2209
  options.create_if_missing = true;
@@ -2181,8 +2292,8 @@ TEST_F(DBErrorHandlingFSTest, CompactionWriteRetryableErrorAutoRecover) {
2181
2292
  // compaction, the FS is set to active and compaction is successful, so
2182
2293
  // the test will hit the CompactionJob::FinishCompactionOutputFile1 sync
2183
2294
  // point.
2184
- std::shared_ptr<ErrorHandlerFSListener> listener(
2185
- new ErrorHandlerFSListener());
2295
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2296
+ std::make_shared<ErrorHandlerFSListener>();
2186
2297
  Options options = GetDefaultOptions();
2187
2298
  options.env = fault_env_.get();
2188
2299
  options.create_if_missing = true;
@@ -2235,8 +2346,8 @@ TEST_F(DBErrorHandlingFSTest, CompactionWriteRetryableErrorAutoRecover) {
2235
2346
  }
2236
2347
 
2237
2348
  TEST_F(DBErrorHandlingFSTest, WALWriteRetryableErrorAutoRecover1) {
2238
- std::shared_ptr<ErrorHandlerFSListener> listener(
2239
- new ErrorHandlerFSListener());
2349
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2350
+ std::make_shared<ErrorHandlerFSListener>();
2240
2351
  Options options = GetDefaultOptions();
2241
2352
  options.env = fault_env_.get();
2242
2353
  options.create_if_missing = true;
@@ -2338,8 +2449,8 @@ TEST_F(DBErrorHandlingFSTest, WALWriteRetryableErrorAutoRecover1) {
2338
2449
 
2339
2450
  TEST_F(DBErrorHandlingFSTest, WALWriteRetryableErrorAutoRecover2) {
2340
2451
  // Fail the first recover and try second time.
2341
- std::shared_ptr<ErrorHandlerFSListener> listener(
2342
- new ErrorHandlerFSListener());
2452
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2453
+ std::make_shared<ErrorHandlerFSListener>();
2343
2454
  Options options = GetDefaultOptions();
2344
2455
  options.env = fault_env_.get();
2345
2456
  options.create_if_missing = true;
@@ -2439,10 +2550,10 @@ TEST_F(DBErrorHandlingFSTest, WALWriteRetryableErrorAutoRecover2) {
2439
2550
 
2440
2551
  // Fail auto resume from a flush retryable error and verify that
2441
2552
  // OnErrorRecoveryEnd listener callback is called
2442
- TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAbortRecovery) {
2553
+ TEST_F(DBErrorHandlingFSTest, FlushWritRetryableErrorAbortRecovery) {
2443
2554
  // Activate the FS before the first resume
2444
- std::shared_ptr<ErrorHandlerFSListener> listener(
2445
- new ErrorHandlerFSListener());
2555
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2556
+ std::make_shared<ErrorHandlerFSListener>();
2446
2557
  Options options = GetDefaultOptions();
2447
2558
  options.env = fault_env_.get();
2448
2559
  options.create_if_missing = true;
@@ -2473,6 +2584,59 @@ TEST_F(DBErrorHandlingFSTest, FLushWritRetryableErrorAbortRecovery) {
2473
2584
  Destroy(options);
2474
2585
  }
2475
2586
 
2587
+ TEST_F(DBErrorHandlingFSTest, FlushErrorRecoveryRaceWithDBDestruction) {
2588
+ Options options = GetDefaultOptions();
2589
+ options.env = fault_env_.get();
2590
+ options.create_if_missing = true;
2591
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2592
+ std::make_shared<ErrorHandlerFSListener>();
2593
+ options.listeners.emplace_back(listener);
2594
+ DestroyAndReopen(options);
2595
+ ASSERT_OK(Put("k1", "val"));
2596
+
2597
+ // Inject retryable flush error
2598
+ bool error_set = false;
2599
+ SyncPoint::GetInstance()->SetCallBack(
2600
+ "BuildTable:BeforeOutputValidation", [&](void*) {
2601
+ if (error_set) {
2602
+ return;
2603
+ }
2604
+ IOStatus st = IOStatus::IOError("Injected");
2605
+ st.SetRetryable(true);
2606
+ fault_fs_->SetFilesystemActive(false, st);
2607
+ error_set = true;
2608
+ });
2609
+
2610
+ port::Thread db_close_thread;
2611
+ SyncPoint::GetInstance()->SetCallBack(
2612
+ "BuildTable:BeforeDeleteFile", [&](void*) {
2613
+ // Clear retryable flush error injection
2614
+ fault_fs_->SetFilesystemActive(true);
2615
+
2616
+ // Coerce race between ending auto recovery in db destruction and flush
2617
+ // error recovery
2618
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
2619
+ {{"PostEndAutoRecovery", "FlushJob::WriteLevel0Table"}});
2620
+ db_close_thread = port::Thread([&] { Close(); });
2621
+ });
2622
+ SyncPoint::GetInstance()->EnableProcessing();
2623
+
2624
+ Status s = Flush();
2625
+ ASSERT_NOK(s);
2626
+
2627
+ int placeholder = 1;
2628
+ listener->WaitForRecovery(placeholder);
2629
+ ASSERT_TRUE(listener->new_bg_error().IsShutdownInProgress());
2630
+
2631
+ // Prior to the fix, the db close will crash due to the recovery thread for
2632
+ // flush error is not joined by the time of destruction.
2633
+ db_close_thread.join();
2634
+
2635
+ SyncPoint::GetInstance()->DisableProcessing();
2636
+ SyncPoint::GetInstance()->ClearAllCallBacks();
2637
+ Destroy(options);
2638
+ }
2639
+
2476
2640
  TEST_F(DBErrorHandlingFSTest, FlushReadError) {
2477
2641
  std::shared_ptr<ErrorHandlerFSListener> listener =
2478
2642
  std::make_shared<ErrorHandlerFSListener>();
@@ -2680,9 +2844,9 @@ TEST_F(DBErrorHandlingFSTest, CompactionReadRetryableErrorAutoRecover) {
2680
2844
  class DBErrorHandlingFencingTest : public DBErrorHandlingFSTest,
2681
2845
  public testing::WithParamInterface<bool> {};
2682
2846
 
2683
- TEST_P(DBErrorHandlingFencingTest, FLushWriteFenced) {
2684
- std::shared_ptr<ErrorHandlerFSListener> listener(
2685
- new ErrorHandlerFSListener());
2847
+ TEST_P(DBErrorHandlingFencingTest, FlushWriteFenced) {
2848
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2849
+ std::make_shared<ErrorHandlerFSListener>();
2686
2850
  Options options = GetDefaultOptions();
2687
2851
  options.env = fault_env_.get();
2688
2852
  options.create_if_missing = true;
@@ -2709,8 +2873,8 @@ TEST_P(DBErrorHandlingFencingTest, FLushWriteFenced) {
2709
2873
  }
2710
2874
 
2711
2875
  TEST_P(DBErrorHandlingFencingTest, ManifestWriteFenced) {
2712
- std::shared_ptr<ErrorHandlerFSListener> listener(
2713
- new ErrorHandlerFSListener());
2876
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2877
+ std::make_shared<ErrorHandlerFSListener>();
2714
2878
  Options options = GetDefaultOptions();
2715
2879
  options.env = fault_env_.get();
2716
2880
  options.create_if_missing = true;
@@ -2744,8 +2908,8 @@ TEST_P(DBErrorHandlingFencingTest, ManifestWriteFenced) {
2744
2908
  }
2745
2909
 
2746
2910
  TEST_P(DBErrorHandlingFencingTest, CompactionWriteFenced) {
2747
- std::shared_ptr<ErrorHandlerFSListener> listener(
2748
- new ErrorHandlerFSListener());
2911
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2912
+ std::make_shared<ErrorHandlerFSListener>();
2749
2913
  Options options = GetDefaultOptions();
2750
2914
  options.env = fault_env_.get();
2751
2915
  options.create_if_missing = true;
@@ -2785,8 +2949,8 @@ TEST_P(DBErrorHandlingFencingTest, CompactionWriteFenced) {
2785
2949
  }
2786
2950
 
2787
2951
  TEST_P(DBErrorHandlingFencingTest, WALWriteFenced) {
2788
- std::shared_ptr<ErrorHandlerFSListener> listener(
2789
- new ErrorHandlerFSListener());
2952
+ std::shared_ptr<ErrorHandlerFSListener> listener =
2953
+ std::make_shared<ErrorHandlerFSListener>();
2790
2954
  Options options = GetDefaultOptions();
2791
2955
  options.env = fault_env_.get();
2792
2956
  options.create_if_missing = true;