@nxtedition/rocksdb 8.2.8 → 9.0.0

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 (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -29,35 +29,8 @@
29
29
  namespace ROCKSDB_NAMESPACE {
30
30
 
31
31
  Status DBImpl::FlushForGetLiveFiles() {
32
- mutex_.AssertHeld();
33
-
34
- // flush all dirty data to disk.
35
- Status status;
36
- if (immutable_db_options_.atomic_flush) {
37
- mutex_.Unlock();
38
- status = AtomicFlushMemTables(FlushOptions(), FlushReason::kGetLiveFiles);
39
- if (status.IsColumnFamilyDropped()) {
40
- status = Status::OK();
41
- }
42
- mutex_.Lock();
43
- } else {
44
- for (auto cfd : versions_->GetRefedColumnFamilySet()) {
45
- if (cfd->IsDropped()) {
46
- continue;
47
- }
48
- mutex_.Unlock();
49
- status = FlushMemTable(cfd, FlushOptions(), FlushReason::kGetLiveFiles);
50
- TEST_SYNC_POINT("DBImpl::GetLiveFiles:1");
51
- TEST_SYNC_POINT("DBImpl::GetLiveFiles:2");
52
- mutex_.Lock();
53
- if (!status.ok() && !status.IsColumnFamilyDropped()) {
54
- break;
55
- } else if (status.IsColumnFamilyDropped()) {
56
- status = Status::OK();
57
- }
58
- }
59
- }
60
- return status;
32
+ return DBImpl::FlushAllColumnFamilies(FlushOptions(),
33
+ FlushReason::kGetLiveFiles);
61
34
  }
62
35
 
63
36
  Status DBImpl::GetLiveFiles(std::vector<std::string>& ret,
@@ -222,7 +222,7 @@ TEST_F(DBFlushTest, CloseDBWhenFlushInLowPri) {
222
222
  sleeping_task_low.WaitUntilDone();
223
223
  ASSERT_EQ(0, num_flushes);
224
224
 
225
- TryReopenWithColumnFamilies({"default", "cf1", "cf2"}, options);
225
+ ASSERT_OK(TryReopenWithColumnFamilies({"default", "cf1", "cf2"}, options));
226
226
  ASSERT_OK(Put(0, "key3", DummyString(8192)));
227
227
  ASSERT_OK(Flush(0));
228
228
  ASSERT_EQ(1, num_flushes);
@@ -3193,6 +3193,279 @@ INSTANTIATE_TEST_CASE_P(DBFlushDirectIOTest, DBFlushDirectIOTest,
3193
3193
 
3194
3194
  INSTANTIATE_TEST_CASE_P(DBAtomicFlushTest, DBAtomicFlushTest, testing::Bool());
3195
3195
 
3196
+ TEST_F(DBFlushTest, NonAtomicFlushRollbackPendingFlushes) {
3197
+ // Fix a bug in when atomic_flush=false.
3198
+ // The bug can happen as follows:
3199
+ // Start Flush0 for memtable M0 to SST0
3200
+ // Start Flush1 for memtable M1 to SST1
3201
+ // Flush1 returns OK, but don't install to MANIFEST and let whoever flushes
3202
+ // M0 to take care of it
3203
+ // Flush0 finishes with a retryable IOError
3204
+ // - It rollbacks M0, (incorrectly) not M1
3205
+ // - Deletes SST1 and SST2
3206
+ //
3207
+ // Auto-recovery will start Flush2 for M0, it does not pick up M1 since it
3208
+ // thinks that M1 is flushed
3209
+ // Flush2 writes SST3 and finishes OK, tries to install SST3 and SST2
3210
+ // Error opening SST2 since it's already deleted
3211
+ //
3212
+ // The fix is to let Flush0 also rollback M1.
3213
+ Options opts = CurrentOptions();
3214
+ opts.atomic_flush = false;
3215
+ opts.memtable_factory.reset(test::NewSpecialSkipListFactory(1));
3216
+ opts.max_write_buffer_number = 64;
3217
+ opts.max_background_flushes = 4;
3218
+ env_->SetBackgroundThreads(4, Env::HIGH);
3219
+ DestroyAndReopen(opts);
3220
+ std::atomic_int flush_count = 0;
3221
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3222
+ SyncPoint::GetInstance()->DisableProcessing();
3223
+ SyncPoint::GetInstance()->SetCallBack(
3224
+ "FlushJob::WriteLevel0Table:s", [&](void* s_ptr) {
3225
+ int c = flush_count.fetch_add(1);
3226
+ if (c == 0) {
3227
+ Status* s = (Status*)(s_ptr);
3228
+ IOStatus io_error = IOStatus::IOError("injected foobar");
3229
+ io_error.SetRetryable(true);
3230
+ *s = io_error;
3231
+ TEST_SYNC_POINT("Let mem1 flush start");
3232
+ TEST_SYNC_POINT("Wait for mem1 flush to finish");
3233
+ }
3234
+ });
3235
+ SyncPoint::GetInstance()->LoadDependency(
3236
+ {{"Let mem1 flush start", "Mem1 flush starts"},
3237
+ {"DBImpl::BGWorkFlush:done", "Wait for mem1 flush to finish"},
3238
+ {"RecoverFromRetryableBGIOError:RecoverSuccess",
3239
+ "Wait for error recover"}});
3240
+ // Need first flush to wait for the second flush to finish
3241
+ SyncPoint::GetInstance()->EnableProcessing();
3242
+ ASSERT_OK(Put(Key(1), "val1"));
3243
+ // trigger bg flush mem0
3244
+ ASSERT_OK(Put(Key(2), "val2"));
3245
+ TEST_SYNC_POINT("Mem1 flush starts");
3246
+ // trigger bg flush mem1
3247
+ ASSERT_OK(Put(Key(3), "val3"));
3248
+
3249
+ TEST_SYNC_POINT("Wait for error recover");
3250
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3251
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3252
+ SyncPoint::GetInstance()->DisableProcessing();
3253
+ }
3254
+
3255
+ TEST_F(DBFlushTest, AbortNonAtomicFlushWhenBGError) {
3256
+ // Fix a bug in when atomic_flush=false.
3257
+ // The bug can happen as follows:
3258
+ // Start Flush0 for memtable M0 to SST0
3259
+ // Start Flush1 for memtable M1 to SST1
3260
+ // Flush1 returns OK, but doesn't install output MANIFEST and let whoever
3261
+ // flushes M0 to take care of it
3262
+ // Start Flush2 for memtable M2 to SST2
3263
+ // Flush0 finishes with a retryable IOError
3264
+ // - It rollbacks M0 AND M1
3265
+ // - Deletes SST1 and SST2
3266
+ // Flush2 finishes, does not rollback M2,
3267
+ // - releases the pending file number that keeps SST2 alive
3268
+ // - deletes SST2
3269
+ //
3270
+ // Then auto-recovery starts, error opening SST2 when try to install
3271
+ // flush result
3272
+ //
3273
+ // The fix is to let Flush2 rollback M2 if it finds that
3274
+ // there is a background error.
3275
+ Options opts = CurrentOptions();
3276
+ opts.atomic_flush = false;
3277
+ opts.memtable_factory.reset(test::NewSpecialSkipListFactory(1));
3278
+ opts.max_write_buffer_number = 64;
3279
+ opts.max_background_flushes = 4;
3280
+ env_->SetBackgroundThreads(4, Env::HIGH);
3281
+ DestroyAndReopen(opts);
3282
+ std::atomic_int flush_count = 0;
3283
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3284
+ SyncPoint::GetInstance()->DisableProcessing();
3285
+ SyncPoint::GetInstance()->SetCallBack(
3286
+ "FlushJob::WriteLevel0Table:s", [&](void* s_ptr) {
3287
+ int c = flush_count.fetch_add(1);
3288
+ if (c == 0) {
3289
+ Status* s = (Status*)(s_ptr);
3290
+ IOStatus io_error = IOStatus::IOError("injected foobar");
3291
+ io_error.SetRetryable(true);
3292
+ *s = io_error;
3293
+ TEST_SYNC_POINT("Let mem1 flush start");
3294
+ TEST_SYNC_POINT("Wait for mem1 flush to finish");
3295
+
3296
+ TEST_SYNC_POINT("Let mem2 flush start");
3297
+ TEST_SYNC_POINT("Wait for mem2 to start writing table");
3298
+ }
3299
+ });
3300
+
3301
+ SyncPoint::GetInstance()->SetCallBack(
3302
+ "FlushJob::WriteLevel0Table", [&](void* mems) {
3303
+ autovector<MemTable*>* mems_ptr = (autovector<MemTable*>*)mems;
3304
+ if ((*mems_ptr)[0]->GetID() == 3) {
3305
+ TEST_SYNC_POINT("Mem2 flush starts writing table");
3306
+ TEST_SYNC_POINT("Mem2 flush waits until rollback");
3307
+ }
3308
+ });
3309
+ SyncPoint::GetInstance()->LoadDependency(
3310
+ {{"Let mem1 flush start", "Mem1 flush starts"},
3311
+ {"DBImpl::BGWorkFlush:done", "Wait for mem1 flush to finish"},
3312
+ {"Let mem2 flush start", "Mem2 flush starts"},
3313
+ {"Mem2 flush starts writing table",
3314
+ "Wait for mem2 to start writing table"},
3315
+ {"RollbackMemtableFlush", "Mem2 flush waits until rollback"},
3316
+ {"RecoverFromRetryableBGIOError:RecoverSuccess",
3317
+ "Wait for error recover"}});
3318
+ SyncPoint::GetInstance()->EnableProcessing();
3319
+
3320
+ ASSERT_OK(Put(Key(1), "val1"));
3321
+ // trigger bg flush mem0
3322
+ ASSERT_OK(Put(Key(2), "val2"));
3323
+ TEST_SYNC_POINT("Mem1 flush starts");
3324
+ // trigger bg flush mem1
3325
+ ASSERT_OK(Put(Key(3), "val3"));
3326
+
3327
+ TEST_SYNC_POINT("Mem2 flush starts");
3328
+ ASSERT_OK(Put(Key(4), "val4"));
3329
+
3330
+ TEST_SYNC_POINT("Wait for error recover");
3331
+ // Recovery flush writes 3 memtables together into 1 file.
3332
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3333
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3334
+ SyncPoint::GetInstance()->DisableProcessing();
3335
+ }
3336
+
3337
+ TEST_F(DBFlushTest, NonAtomicNormalFlushAbortWhenBGError) {
3338
+ Options opts = CurrentOptions();
3339
+ opts.atomic_flush = false;
3340
+ opts.memtable_factory.reset(test::NewSpecialSkipListFactory(1));
3341
+ opts.max_write_buffer_number = 64;
3342
+ opts.max_background_flushes = 1;
3343
+ env_->SetBackgroundThreads(2, Env::HIGH);
3344
+ DestroyAndReopen(opts);
3345
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3346
+ SyncPoint::GetInstance()->DisableProcessing();
3347
+ std::atomic_int flush_write_table_count = 0;
3348
+ SyncPoint::GetInstance()->SetCallBack(
3349
+ "FlushJob::WriteLevel0Table:s", [&](void* s_ptr) {
3350
+ int c = flush_write_table_count.fetch_add(1);
3351
+ if (c == 0) {
3352
+ Status* s = (Status*)(s_ptr);
3353
+ IOStatus io_error = IOStatus::IOError("injected foobar");
3354
+ io_error.SetRetryable(true);
3355
+ *s = io_error;
3356
+ }
3357
+ });
3358
+
3359
+ SyncPoint::GetInstance()->EnableProcessing();
3360
+ SyncPoint::GetInstance()->LoadDependency(
3361
+ {{"Let error recovery start",
3362
+ "RecoverFromRetryableBGIOError:BeforeStart"},
3363
+ {"RecoverFromRetryableBGIOError:RecoverSuccess",
3364
+ "Wait for error recover"}});
3365
+
3366
+ ASSERT_OK(Put(Key(1), "val1"));
3367
+ // trigger bg flush0 for mem0
3368
+ ASSERT_OK(Put(Key(2), "val2"));
3369
+ // Not checking status since this wait can finish before flush starts.
3370
+ dbfull()->TEST_WaitForFlushMemTable().PermitUncheckedError();
3371
+
3372
+ // trigger bg flush1 for mem1, should see bg error and abort
3373
+ // before picking a memtable to flush
3374
+ ASSERT_OK(Put(Key(3), "val3"));
3375
+ ASSERT_NOK(dbfull()->TEST_WaitForFlushMemTable());
3376
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
3377
+
3378
+ TEST_SYNC_POINT("Let error recovery start");
3379
+ TEST_SYNC_POINT("Wait for error recover");
3380
+ // Recovery flush writes 2 memtables together into 1 file.
3381
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3382
+ // 1 for flush 0 and 1 for recovery flush
3383
+ ASSERT_EQ(2, flush_write_table_count);
3384
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3385
+ SyncPoint::GetInstance()->DisableProcessing();
3386
+ }
3387
+
3388
+ TEST_F(DBFlushTest, DBStuckAfterAtomicFlushError) {
3389
+ // Test for a bug with atomic flush where DB can become stuck
3390
+ // after a flush error. A repro timeline:
3391
+ //
3392
+ // Start Flush0 for mem0
3393
+ // Start Flush1 for mem1
3394
+ // Now Flush1 will wait for Flush0 to install mem0
3395
+ // Flush0 finishes with retryable IOError, rollbacks mem0
3396
+ // Resume starts and waits for background job to finish, i.e., Flush1
3397
+ // Fill memtable again, trigger Flush2 for mem0
3398
+ // Flush2 will get error status, and not rollback mem0, see code in
3399
+ // https://github.com/facebook/rocksdb/blob/b927ba5936216861c2c35ab68f50ba4a78e65747/db/db_impl/db_impl_compaction_flush.cc#L725
3400
+ //
3401
+ // DB is stuck since mem0 can never be picked now
3402
+ //
3403
+ // The fix is to rollback mem0 in Flush2, and let Flush1 also abort upon
3404
+ // background error besides waiting for older memtables to be installed.
3405
+ // The recovery flush in this case should pick up all memtables
3406
+ // and write them to a single L0 file.
3407
+ Options opts = CurrentOptions();
3408
+ opts.atomic_flush = true;
3409
+ opts.memtable_factory.reset(test::NewSpecialSkipListFactory(1));
3410
+ opts.max_write_buffer_number = 64;
3411
+ opts.max_background_flushes = 4;
3412
+ env_->SetBackgroundThreads(4, Env::HIGH);
3413
+ DestroyAndReopen(opts);
3414
+
3415
+ std::atomic_int flush_count = 0;
3416
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3417
+ SyncPoint::GetInstance()->DisableProcessing();
3418
+ SyncPoint::GetInstance()->SetCallBack(
3419
+ "FlushJob::WriteLevel0Table:s", [&](void* s_ptr) {
3420
+ int c = flush_count.fetch_add(1);
3421
+ if (c == 0) {
3422
+ Status* s = (Status*)(s_ptr);
3423
+ IOStatus io_error = IOStatus::IOError("injected foobar");
3424
+ io_error.SetRetryable(true);
3425
+ *s = io_error;
3426
+ TEST_SYNC_POINT("Let flush for mem1 start");
3427
+ // Wait for Flush1 to start waiting to install flush result
3428
+ TEST_SYNC_POINT("Wait for flush for mem1");
3429
+ }
3430
+ });
3431
+ SyncPoint::GetInstance()->LoadDependency(
3432
+ {{"Let flush for mem1 start", "Flush for mem1"},
3433
+ {"DBImpl::AtomicFlushMemTablesToOutputFiles:WaitCV",
3434
+ "Wait for flush for mem1"},
3435
+ {"RecoverFromRetryableBGIOError:BeforeStart",
3436
+ "Wait for resume to start"},
3437
+ {"Recovery should continue here",
3438
+ "RecoverFromRetryableBGIOError:BeforeStart2"},
3439
+ {"RecoverFromRetryableBGIOError:RecoverSuccess",
3440
+ "Wait for error recover"}});
3441
+ SyncPoint::GetInstance()->EnableProcessing();
3442
+ ASSERT_OK(Put(Key(1), "val1"));
3443
+ // trigger Flush0 for mem0
3444
+ ASSERT_OK(Put(Key(2), "val2"));
3445
+
3446
+ // trigger Flush1 for mem1
3447
+ TEST_SYNC_POINT("Flush for mem1");
3448
+ ASSERT_OK(Put(Key(3), "val3"));
3449
+
3450
+ // Wait until resume started to schedule another flush
3451
+ TEST_SYNC_POINT("Wait for resume to start");
3452
+ // This flush should not be scheduled due to bg error
3453
+ ASSERT_OK(Put(Key(4), "val4"));
3454
+
3455
+ // TEST_WaitForBackgroundWork() returns background error
3456
+ // after all background work is done.
3457
+ ASSERT_NOK(dbfull()->TEST_WaitForBackgroundWork());
3458
+ // Flush should abort and not writing any table
3459
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
3460
+
3461
+ // Wait until this flush is done.
3462
+ TEST_SYNC_POINT("Recovery should continue here");
3463
+ TEST_SYNC_POINT("Wait for error recover");
3464
+ // error recovery can schedule new flushes, but should not
3465
+ // encounter error
3466
+ ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
3467
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3468
+ }
3196
3469
  } // namespace ROCKSDB_NAMESPACE
3197
3470
 
3198
3471
  int main(int argc, char** argv) {
@@ -43,18 +43,25 @@ Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
43
43
  /*timestamp*/ nullptr);
44
44
  }
45
45
 
46
- Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
47
- const Slice& key, PinnableSlice* value,
48
- std::string* timestamp) {
49
- if (options.io_activity != Env::IOActivity::kUnknown) {
46
+ Status CompactedDBImpl::Get(const ReadOptions& _read_options,
47
+ ColumnFamilyHandle*, const Slice& key,
48
+ PinnableSlice* value, std::string* timestamp) {
49
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
50
+ _read_options.io_activity != Env::IOActivity::kGet) {
50
51
  return Status::InvalidArgument(
51
- "Cannot call Get with `ReadOptions::io_activity` != "
52
- "`Env::IOActivity::kUnknown`");
52
+ "Can only call Get with `ReadOptions::io_activity` is "
53
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
54
+ }
55
+ ReadOptions read_options(_read_options);
56
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
57
+ read_options.io_activity = Env::IOActivity::kGet;
53
58
  }
59
+
54
60
  assert(user_comparator_);
55
- if (options.timestamp) {
56
- const Status s = FailIfTsMismatchCf(
57
- DefaultColumnFamily(), *(options.timestamp), /*ts_for_read=*/true);
61
+ if (read_options.timestamp) {
62
+ const Status s =
63
+ FailIfTsMismatchCf(DefaultColumnFamily(), *(read_options.timestamp),
64
+ /*ts_for_read=*/true);
58
65
  if (!s.ok()) {
59
66
  return s;
60
67
  }
@@ -74,7 +81,7 @@ Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
74
81
  GetWithTimestampReadCallback read_cb(kMaxSequenceNumber);
75
82
  std::string* ts =
76
83
  user_comparator_->timestamp_size() > 0 ? timestamp : nullptr;
77
- LookupKey lkey(key, kMaxSequenceNumber, options.timestamp);
84
+ LookupKey lkey(key, kMaxSequenceNumber, read_options.timestamp);
78
85
  GetContext get_context(user_comparator_, nullptr, nullptr, nullptr,
79
86
  GetContext::kNotFound, lkey.user_key(), value,
80
87
  /*columns=*/nullptr, ts, nullptr, nullptr, true,
@@ -88,8 +95,8 @@ Status CompactedDBImpl::Get(const ReadOptions& options, ColumnFamilyHandle*,
88
95
  /*b_has_ts=*/false) < 0) {
89
96
  return Status::NotFound();
90
97
  }
91
- Status s = f.fd.table_reader->Get(options, lkey.internal_key(), &get_context,
92
- nullptr);
98
+ Status s = f.fd.table_reader->Get(read_options, lkey.internal_key(),
99
+ &get_context, nullptr);
93
100
  if (!s.ok() && !s.IsNotFound()) {
94
101
  return s;
95
102
  }
@@ -106,15 +113,28 @@ std::vector<Status> CompactedDBImpl::MultiGet(
106
113
  }
107
114
 
108
115
  std::vector<Status> CompactedDBImpl::MultiGet(
109
- const ReadOptions& options, const std::vector<ColumnFamilyHandle*>&,
116
+ const ReadOptions& _read_options, const std::vector<ColumnFamilyHandle*>&,
110
117
  const std::vector<Slice>& keys, std::vector<std::string>* values,
111
118
  std::vector<std::string>* timestamps) {
112
119
  assert(user_comparator_);
113
120
  size_t num_keys = keys.size();
121
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
122
+ _read_options.io_activity != Env::IOActivity::kMultiGet) {
123
+ Status s = Status::InvalidArgument(
124
+ "Can only call MultiGet with `ReadOptions::io_activity` is "
125
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kMultiGet`");
126
+ return std::vector<Status>(num_keys, s);
127
+ }
128
+
129
+ ReadOptions read_options(_read_options);
130
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
131
+ read_options.io_activity = Env::IOActivity::kMultiGet;
132
+ }
114
133
 
115
- if (options.timestamp) {
116
- Status s = FailIfTsMismatchCf(DefaultColumnFamily(), *(options.timestamp),
117
- /*ts_for_read=*/true);
134
+ if (read_options.timestamp) {
135
+ Status s =
136
+ FailIfTsMismatchCf(DefaultColumnFamily(), *(read_options.timestamp),
137
+ /*ts_for_read=*/true);
118
138
  if (!s.ok()) {
119
139
  return std::vector<Status>(num_keys, s);
120
140
  }
@@ -136,7 +156,7 @@ std::vector<Status> CompactedDBImpl::MultiGet(
136
156
  GetWithTimestampReadCallback read_cb(kMaxSequenceNumber);
137
157
  autovector<TableReader*, 16> reader_list;
138
158
  for (const auto& key : keys) {
139
- LookupKey lkey(key, kMaxSequenceNumber, options.timestamp);
159
+ LookupKey lkey(key, kMaxSequenceNumber, read_options.timestamp);
140
160
  const FdWithKeyRange& f = files_.files[FindFile(lkey.user_key())];
141
161
  if (user_comparator_->CompareWithoutTimestamp(
142
162
  key, /*a_has_ts=*/false,
@@ -159,14 +179,15 @@ std::vector<Status> CompactedDBImpl::MultiGet(
159
179
  if (r != nullptr) {
160
180
  PinnableSlice pinnable_val;
161
181
  std::string& value = (*values)[idx];
162
- LookupKey lkey(keys[idx], kMaxSequenceNumber, options.timestamp);
182
+ LookupKey lkey(keys[idx], kMaxSequenceNumber, read_options.timestamp);
163
183
  std::string* timestamp = timestamps ? &(*timestamps)[idx] : nullptr;
164
184
  GetContext get_context(
165
185
  user_comparator_, nullptr, nullptr, nullptr, GetContext::kNotFound,
166
186
  lkey.user_key(), &pinnable_val, /*columns=*/nullptr,
167
187
  user_comparator_->timestamp_size() > 0 ? timestamp : nullptr, nullptr,
168
188
  nullptr, true, nullptr, nullptr, nullptr, nullptr, &read_cb);
169
- Status s = r->Get(options, lkey.internal_key(), &get_context, nullptr);
189
+ Status s =
190
+ r->Get(read_options, lkey.internal_key(), &get_context, nullptr);
170
191
  assert(static_cast<size_t>(idx) < statuses.size());
171
192
  if (!s.ok() && !s.IsNotFound()) {
172
193
  statuses[idx] = s;
@@ -30,9 +30,9 @@ class CompactedDBImpl : public DBImpl {
30
30
  ColumnFamilyHandle* column_family, const Slice& key,
31
31
  PinnableSlice* value) override;
32
32
 
33
- Status Get(const ReadOptions& options, ColumnFamilyHandle* column_family,
34
- const Slice& key, PinnableSlice* value,
35
- std::string* timestamp) override;
33
+ Status Get(const ReadOptions& _read_options,
34
+ ColumnFamilyHandle* column_family, const Slice& key,
35
+ PinnableSlice* value, std::string* timestamp) override;
36
36
 
37
37
  using DB::MultiGet;
38
38
  // Note that CompactedDBImpl::MultiGet is not the optimized version of
@@ -43,7 +43,7 @@ class CompactedDBImpl : public DBImpl {
43
43
  const std::vector<Slice>& keys,
44
44
  std::vector<std::string>* values) override;
45
45
 
46
- std::vector<Status> MultiGet(const ReadOptions& options,
46
+ std::vector<Status> MultiGet(const ReadOptions& _read_options,
47
47
  const std::vector<ColumnFamilyHandle*>&,
48
48
  const std::vector<Slice>& keys,
49
49
  std::vector<std::string>* values,
@@ -118,12 +118,13 @@ class CompactedDBImpl : public DBImpl {
118
118
  const IngestExternalFileOptions& /*ingestion_options*/) override {
119
119
  return Status::NotSupported("Not supported in compacted db mode.");
120
120
  }
121
+
121
122
  using DB::CreateColumnFamilyWithImport;
122
123
  virtual Status CreateColumnFamilyWithImport(
123
124
  const ColumnFamilyOptions& /*options*/,
124
125
  const std::string& /*column_family_name*/,
125
126
  const ImportColumnFamilyOptions& /*import_options*/,
126
- const ExportImportFilesMetaData& /*metadata*/,
127
+ const std::vector<const ExportImportFilesMetaData*>& /*metadatas*/,
127
128
  ColumnFamilyHandle** /*handle*/) override {
128
129
  return Status::NotSupported("Not supported in compacted db mode.");
129
130
  }