@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
@@ -34,37 +34,36 @@ void VersionEditHandlerBase::Iterate(log::Reader& reader,
34
34
  reader.ReadRecord(&record, &scratch) && log_read_status->ok()) {
35
35
  VersionEdit edit;
36
36
  s = edit.DecodeFrom(record);
37
- if (!s.ok()) {
38
- break;
39
- }
40
-
41
- s = read_buffer_.AddEdit(&edit);
42
- if (!s.ok()) {
43
- break;
37
+ if (s.ok()) {
38
+ s = read_buffer_.AddEdit(&edit);
44
39
  }
45
- ColumnFamilyData* cfd = nullptr;
46
- if (edit.is_in_atomic_group_) {
47
- if (read_buffer_.IsFull()) {
48
- for (auto& e : read_buffer_.replay_buffer()) {
49
- s = ApplyVersionEdit(e, &cfd);
50
- if (!s.ok()) {
51
- break;
40
+ if (s.ok()) {
41
+ ColumnFamilyData* cfd = nullptr;
42
+ if (edit.IsInAtomicGroup()) {
43
+ if (read_buffer_.IsFull()) {
44
+ s = OnAtomicGroupReplayBegin();
45
+ for (size_t i = 0; s.ok() && i < read_buffer_.replay_buffer().size();
46
+ i++) {
47
+ auto& e = read_buffer_.replay_buffer()[i];
48
+ s = ApplyVersionEdit(e, &cfd);
49
+ if (s.ok()) {
50
+ recovered_edits++;
51
+ }
52
+ }
53
+ if (s.ok()) {
54
+ read_buffer_.Clear();
55
+ s = OnAtomicGroupReplayEnd();
52
56
  }
53
- ++recovered_edits;
54
57
  }
55
- if (!s.ok()) {
56
- break;
58
+ } else {
59
+ s = ApplyVersionEdit(edit, &cfd);
60
+ if (s.ok()) {
61
+ recovered_edits++;
57
62
  }
58
- read_buffer_.Clear();
59
- }
60
- } else {
61
- s = ApplyVersionEdit(edit, &cfd);
62
- if (s.ok()) {
63
- ++recovered_edits;
64
63
  }
65
64
  }
66
65
  }
67
- if (!log_read_status->ok()) {
66
+ if (s.ok() && !log_read_status->ok()) {
68
67
  s = *log_read_status;
69
68
  }
70
69
 
@@ -101,20 +100,18 @@ void VersionEditHandlerBase::Iterate(log::Reader& reader,
101
100
  Status ListColumnFamiliesHandler::ApplyVersionEdit(
102
101
  VersionEdit& edit, ColumnFamilyData** /*unused*/) {
103
102
  Status s;
104
- if (edit.is_column_family_add_) {
105
- if (column_family_names_.find(edit.column_family_) !=
106
- column_family_names_.end()) {
103
+ uint32_t cf_id = edit.GetColumnFamily();
104
+ if (edit.IsColumnFamilyAdd()) {
105
+ if (column_family_names_.find(cf_id) != column_family_names_.end()) {
107
106
  s = Status::Corruption("Manifest adding the same column family twice");
108
107
  } else {
109
- column_family_names_.insert(
110
- {edit.column_family_, edit.column_family_name_});
108
+ column_family_names_.insert({cf_id, edit.GetColumnFamilyName()});
111
109
  }
112
- } else if (edit.is_column_family_drop_) {
113
- if (column_family_names_.find(edit.column_family_) ==
114
- column_family_names_.end()) {
110
+ } else if (edit.IsColumnFamilyDrop()) {
111
+ if (column_family_names_.find(cf_id) == column_family_names_.end()) {
115
112
  s = Status::Corruption("Manifest - dropping non-existing column family");
116
113
  } else {
117
- column_family_names_.erase(edit.column_family_);
114
+ column_family_names_.erase(cf_id);
118
115
  }
119
116
  }
120
117
  return s;
@@ -155,7 +152,7 @@ Status FileChecksumRetriever::ApplyVersionEdit(VersionEdit& edit,
155
152
 
156
153
  VersionEditHandler::VersionEditHandler(
157
154
  bool read_only, std::vector<ColumnFamilyDescriptor> column_families,
158
- VersionSet* version_set, bool track_missing_files,
155
+ VersionSet* version_set, bool track_found_and_missing_files,
159
156
  bool no_error_if_files_missing, const std::shared_ptr<IOTracer>& io_tracer,
160
157
  const ReadOptions& read_options, bool skip_load_table_files,
161
158
  EpochNumberRequirement epoch_number_requirement)
@@ -163,7 +160,7 @@ VersionEditHandler::VersionEditHandler(
163
160
  read_only_(read_only),
164
161
  column_families_(std::move(column_families)),
165
162
  version_set_(version_set),
166
- track_missing_files_(track_missing_files),
163
+ track_found_and_missing_files_(track_found_and_missing_files),
167
164
  no_error_if_files_missing_(no_error_if_files_missing),
168
165
  io_tracer_(io_tracer),
169
166
  skip_load_table_files_(skip_load_table_files),
@@ -201,9 +198,9 @@ Status VersionEditHandler::Initialize() {
201
198
  Status VersionEditHandler::ApplyVersionEdit(VersionEdit& edit,
202
199
  ColumnFamilyData** cfd) {
203
200
  Status s;
204
- if (edit.is_column_family_add_) {
201
+ if (edit.IsColumnFamilyAdd()) {
205
202
  s = OnColumnFamilyAdd(edit, cfd);
206
- } else if (edit.is_column_family_drop_) {
203
+ } else if (edit.IsColumnFamilyDrop()) {
207
204
  s = OnColumnFamilyDrop(edit, cfd);
208
205
  } else if (edit.IsWalAddition()) {
209
206
  s = OnWalAddition(edit);
@@ -227,22 +224,22 @@ Status VersionEditHandler::OnColumnFamilyAdd(VersionEdit& edit,
227
224
 
228
225
  assert(cfd != nullptr);
229
226
  *cfd = nullptr;
227
+ const std::string& cf_name = edit.GetColumnFamilyName();
230
228
  Status s;
231
229
  if (cf_in_builders || cf_in_not_found) {
232
230
  s = Status::Corruption("MANIFEST adding the same column family twice: " +
233
- edit.column_family_name_);
231
+ cf_name);
234
232
  }
235
233
  if (s.ok()) {
236
- auto cf_options = name_to_options_.find(edit.column_family_name_);
234
+ auto cf_options = name_to_options_.find(cf_name);
237
235
  // implicitly add persistent_stats column family without requiring user
238
236
  // to specify
239
237
  ColumnFamilyData* tmp_cfd = nullptr;
240
238
  bool is_persistent_stats_column_family =
241
- edit.column_family_name_.compare(kPersistentStatsColumnFamilyName) == 0;
239
+ cf_name.compare(kPersistentStatsColumnFamilyName) == 0;
242
240
  if (cf_options == name_to_options_.end() &&
243
241
  !is_persistent_stats_column_family) {
244
- column_families_not_found_.emplace(edit.column_family_,
245
- edit.column_family_name_);
242
+ column_families_not_found_.emplace(edit.GetColumnFamily(), cf_name);
246
243
  } else {
247
244
  if (is_persistent_stats_column_family) {
248
245
  ColumnFamilyOptions cfo;
@@ -270,7 +267,7 @@ Status VersionEditHandler::OnColumnFamilyDrop(VersionEdit& edit,
270
267
  if (cf_in_builders) {
271
268
  tmp_cfd = DestroyCfAndCleanup(edit);
272
269
  } else if (cf_in_not_found) {
273
- column_families_not_found_.erase(edit.column_family_);
270
+ column_families_not_found_.erase(edit.GetColumnFamily());
274
271
  } else {
275
272
  s = Status::Corruption("MANIFEST - dropping non-existing column family");
276
273
  }
@@ -305,10 +302,10 @@ Status VersionEditHandler::OnNonCfOperation(VersionEdit& edit,
305
302
  }
306
303
  ColumnFamilyData* tmp_cfd = nullptr;
307
304
  if (s.ok()) {
308
- auto builder_iter = builders_.find(edit.column_family_);
305
+ auto builder_iter = builders_.find(edit.GetColumnFamily());
309
306
  assert(builder_iter != builders_.end());
310
307
  tmp_cfd = version_set_->GetColumnFamilySet()->GetColumnFamily(
311
- edit.column_family_);
308
+ edit.GetColumnFamily());
312
309
  assert(tmp_cfd != nullptr);
313
310
  // It's important to handle file boundaries before `MaybeCreateVersion`
314
311
  // because `VersionEditHandlerPointInTime::MaybeCreateVersion` does
@@ -362,11 +359,12 @@ void VersionEditHandler::CheckColumnFamilyId(const VersionEdit& edit,
362
359
  // record. Once we encounter column family drop record,
363
360
  // we will delete the column family from
364
361
  // column_families_not_found.
365
- bool in_not_found = column_families_not_found_.find(edit.column_family_) !=
362
+ uint32_t cf_id = edit.GetColumnFamily();
363
+ bool in_not_found = column_families_not_found_.find(cf_id) !=
366
364
  column_families_not_found_.end();
367
365
  // in builders means that user supplied that column family
368
366
  // option AND that we encountered column family add record
369
- bool in_builders = builders_.find(edit.column_family_) != builders_.end();
367
+ bool in_builders = builders_.find(cf_id) != builders_.end();
370
368
  // They cannot both be true
371
369
  assert(!(in_not_found && in_builders));
372
370
  *cf_in_not_found = in_not_found;
@@ -378,17 +376,17 @@ void VersionEditHandler::CheckIterationResult(const log::Reader& reader,
378
376
  assert(s != nullptr);
379
377
  if (!s->ok()) {
380
378
  // Do nothing here.
381
- } else if (!version_edit_params_.has_log_number_ ||
382
- !version_edit_params_.has_next_file_number_ ||
383
- !version_edit_params_.has_last_sequence_) {
379
+ } else if (!version_edit_params_.HasLogNumber() ||
380
+ !version_edit_params_.HasNextFile() ||
381
+ !version_edit_params_.HasLastSequence()) {
384
382
  std::string msg("no ");
385
- if (!version_edit_params_.has_log_number_) {
383
+ if (!version_edit_params_.HasLogNumber()) {
386
384
  msg.append("log_file_number, ");
387
385
  }
388
- if (!version_edit_params_.has_next_file_number_) {
386
+ if (!version_edit_params_.HasNextFile()) {
389
387
  msg.append("next_file_number, ");
390
388
  }
391
- if (!version_edit_params_.has_last_sequence_) {
389
+ if (!version_edit_params_.HasLastSequence()) {
392
390
  msg.append("last_sequence, ");
393
391
  }
394
392
  msg = msg.substr(0, msg.size() - 2);
@@ -409,11 +407,11 @@ void VersionEditHandler::CheckIterationResult(const log::Reader& reader,
409
407
  }
410
408
  if (s->ok()) {
411
409
  version_set_->GetColumnFamilySet()->UpdateMaxColumnFamily(
412
- version_edit_params_.max_column_family_);
410
+ version_edit_params_.GetMaxColumnFamily());
413
411
  version_set_->MarkMinLogNumberToKeep(
414
- version_edit_params_.min_log_number_to_keep_);
415
- version_set_->MarkFileNumberUsed(version_edit_params_.prev_log_number_);
416
- version_set_->MarkFileNumberUsed(version_edit_params_.log_number_);
412
+ version_edit_params_.GetMinLogNumberToKeep());
413
+ version_set_->MarkFileNumberUsed(version_edit_params_.GetPrevLogNumber());
414
+ version_set_->MarkFileNumberUsed(version_edit_params_.GetLogNumber());
417
415
  for (auto* cfd : *(version_set_->GetColumnFamilySet())) {
418
416
  if (cfd->IsDropped()) {
419
417
  continue;
@@ -464,9 +462,9 @@ void VersionEditHandler::CheckIterationResult(const log::Reader& reader,
464
462
  if (s->ok()) {
465
463
  version_set_->manifest_file_size_ = reader.GetReadOffset();
466
464
  assert(version_set_->manifest_file_size_ > 0);
467
- version_set_->next_file_number_.store(
468
- version_edit_params_.next_file_number_ + 1);
469
- SequenceNumber last_seq = version_edit_params_.last_sequence_;
465
+ version_set_->next_file_number_.store(version_edit_params_.GetNextFile() +
466
+ 1);
467
+ SequenceNumber last_seq = version_edit_params_.GetLastSequence();
470
468
  assert(last_seq != kMaxSequenceNumber);
471
469
  if (last_seq != kMaxSequenceNumber &&
472
470
  last_seq > version_set_->last_allocated_sequence_.load()) {
@@ -488,46 +486,51 @@ void VersionEditHandler::CheckIterationResult(const log::Reader& reader,
488
486
  // sequence number zeroed through compaction.
489
487
  version_set_->descriptor_last_sequence_ = last_seq;
490
488
  }
491
- version_set_->prev_log_number_ = version_edit_params_.prev_log_number_;
489
+ version_set_->prev_log_number_ = version_edit_params_.GetPrevLogNumber();
492
490
  }
493
491
  }
494
492
 
495
493
  ColumnFamilyData* VersionEditHandler::CreateCfAndInit(
496
494
  const ColumnFamilyOptions& cf_options, const VersionEdit& edit) {
495
+ uint32_t cf_id = edit.GetColumnFamily();
497
496
  ColumnFamilyData* cfd =
498
497
  version_set_->CreateColumnFamily(cf_options, read_options_, &edit);
499
498
  assert(cfd != nullptr);
500
499
  cfd->set_initialized();
501
- assert(builders_.find(edit.column_family_) == builders_.end());
502
- builders_.emplace(edit.column_family_,
500
+ assert(builders_.find(cf_id) == builders_.end());
501
+ builders_.emplace(cf_id,
503
502
  VersionBuilderUPtr(new BaseReferencedVersionBuilder(cfd)));
504
- if (track_missing_files_) {
505
- cf_to_missing_files_.emplace(edit.column_family_,
506
- std::unordered_set<uint64_t>());
507
- cf_to_missing_blob_files_high_.emplace(edit.column_family_,
508
- kInvalidBlobFileNumber);
503
+ if (track_found_and_missing_files_) {
504
+ cf_to_found_files_.emplace(cf_id, std::unordered_set<uint64_t>());
505
+ cf_to_missing_files_.emplace(cf_id, std::unordered_set<uint64_t>());
506
+ cf_to_missing_blob_files_high_.emplace(cf_id, kInvalidBlobFileNumber);
509
507
  }
510
508
  return cfd;
511
509
  }
512
510
 
513
511
  ColumnFamilyData* VersionEditHandler::DestroyCfAndCleanup(
514
512
  const VersionEdit& edit) {
515
- auto builder_iter = builders_.find(edit.column_family_);
513
+ uint32_t cf_id = edit.GetColumnFamily();
514
+ auto builder_iter = builders_.find(cf_id);
516
515
  assert(builder_iter != builders_.end());
517
516
  builders_.erase(builder_iter);
518
- if (track_missing_files_) {
519
- auto missing_files_iter = cf_to_missing_files_.find(edit.column_family_);
517
+ if (track_found_and_missing_files_) {
518
+ auto found_files_iter = cf_to_found_files_.find(cf_id);
519
+ assert(found_files_iter != cf_to_found_files_.end());
520
+ cf_to_found_files_.erase(found_files_iter);
521
+
522
+ auto missing_files_iter = cf_to_missing_files_.find(cf_id);
520
523
  assert(missing_files_iter != cf_to_missing_files_.end());
521
524
  cf_to_missing_files_.erase(missing_files_iter);
522
525
 
523
526
  auto missing_blob_files_high_iter =
524
- cf_to_missing_blob_files_high_.find(edit.column_family_);
527
+ cf_to_missing_blob_files_high_.find(cf_id);
525
528
  assert(missing_blob_files_high_iter !=
526
529
  cf_to_missing_blob_files_high_.end());
527
530
  cf_to_missing_blob_files_high_.erase(missing_blob_files_high_iter);
528
531
  }
529
532
  ColumnFamilyData* ret =
530
- version_set_->GetColumnFamilySet()->GetColumnFamily(edit.column_family_);
533
+ version_set_->GetColumnFamilySet()->GetColumnFamily(cf_id);
531
534
  assert(ret != nullptr);
532
535
  ret->SetDropped();
533
536
  ret->UnrefAndTryDelete();
@@ -598,33 +601,33 @@ Status VersionEditHandler::LoadTables(ColumnFamilyData* cfd,
598
601
  Status VersionEditHandler::ExtractInfoFromVersionEdit(ColumnFamilyData* cfd,
599
602
  const VersionEdit& edit) {
600
603
  Status s;
601
- if (edit.has_db_id_) {
604
+ if (edit.HasDbId()) {
602
605
  version_set_->db_id_ = edit.GetDbId();
603
- version_edit_params_.SetDBId(edit.db_id_);
606
+ version_edit_params_.SetDBId(edit.GetDbId());
604
607
  }
605
608
  if (cfd != nullptr) {
606
- if (edit.has_log_number_) {
607
- if (cfd->GetLogNumber() > edit.log_number_) {
609
+ if (edit.HasLogNumber()) {
610
+ if (cfd->GetLogNumber() > edit.GetLogNumber()) {
608
611
  ROCKS_LOG_WARN(
609
612
  version_set_->db_options()->info_log,
610
613
  "MANIFEST corruption detected, but ignored - Log numbers in "
611
614
  "records NOT monotonically increasing");
612
615
  } else {
613
- cfd->SetLogNumber(edit.log_number_);
614
- version_edit_params_.SetLogNumber(edit.log_number_);
616
+ cfd->SetLogNumber(edit.GetLogNumber());
617
+ version_edit_params_.SetLogNumber(edit.GetLogNumber());
615
618
  }
616
619
  }
617
- if (edit.has_comparator_) {
620
+ if (edit.HasComparatorName()) {
618
621
  bool mark_sst_files_has_no_udt = false;
619
622
  // If `persist_user_defined_timestamps` flag is recorded in manifest, it
620
623
  // is guaranteed to be in the same VersionEdit as comparator. Otherwise,
621
624
  // it's not recorded and it should have default value true.
622
625
  s = ValidateUserDefinedTimestampsOptions(
623
- cfd->user_comparator(), edit.comparator_,
626
+ cfd->user_comparator(), edit.GetComparatorName(),
624
627
  cfd->ioptions()->persist_user_defined_timestamps,
625
- edit.persist_user_defined_timestamps_, &mark_sst_files_has_no_udt);
628
+ edit.GetPersistUserDefinedTimestamps(), &mark_sst_files_has_no_udt);
626
629
  if (!s.ok() && cf_to_cmp_names_) {
627
- cf_to_cmp_names_->emplace(cfd->GetID(), edit.comparator_);
630
+ cf_to_cmp_names_->emplace(cfd->GetID(), edit.GetComparatorName());
628
631
  }
629
632
  if (mark_sst_files_has_no_udt) {
630
633
  cfds_to_mark_no_udt_.insert(cfd->GetID());
@@ -637,29 +640,29 @@ Status VersionEditHandler::ExtractInfoFromVersionEdit(ColumnFamilyData* cfd,
637
640
  }
638
641
 
639
642
  if (s.ok()) {
640
- if (edit.has_prev_log_number_) {
641
- version_edit_params_.SetPrevLogNumber(edit.prev_log_number_);
643
+ if (edit.HasPrevLogNumber()) {
644
+ version_edit_params_.SetPrevLogNumber(edit.GetPrevLogNumber());
642
645
  }
643
- if (edit.has_next_file_number_) {
644
- version_edit_params_.SetNextFile(edit.next_file_number_);
646
+ if (edit.HasNextFile()) {
647
+ version_edit_params_.SetNextFile(edit.GetNextFile());
645
648
  }
646
- if (edit.has_max_column_family_) {
647
- version_edit_params_.SetMaxColumnFamily(edit.max_column_family_);
649
+ if (edit.HasMaxColumnFamily()) {
650
+ version_edit_params_.SetMaxColumnFamily(edit.GetMaxColumnFamily());
648
651
  }
649
- if (edit.has_min_log_number_to_keep_) {
650
- version_edit_params_.min_log_number_to_keep_ =
651
- std::max(version_edit_params_.min_log_number_to_keep_,
652
- edit.min_log_number_to_keep_);
652
+ if (edit.HasMinLogNumberToKeep()) {
653
+ version_edit_params_.SetMinLogNumberToKeep(
654
+ std::max(version_edit_params_.GetMinLogNumberToKeep(),
655
+ edit.GetMinLogNumberToKeep()));
653
656
  }
654
- if (edit.has_last_sequence_) {
657
+ if (edit.HasLastSequence()) {
655
658
  // `VersionEdit::last_sequence_`s are assumed to be non-decreasing. This
656
659
  // is legacy behavior that cannot change without breaking downgrade
657
660
  // compatibility.
658
- assert(!version_edit_params_.has_last_sequence_ ||
659
- version_edit_params_.last_sequence_ <= edit.last_sequence_);
660
- version_edit_params_.SetLastSequence(edit.last_sequence_);
661
+ assert(!version_edit_params_.HasLastSequence() ||
662
+ version_edit_params_.GetLastSequence() <= edit.GetLastSequence());
663
+ version_edit_params_.SetLastSequence(edit.GetLastSequence());
661
664
  }
662
- if (!version_edit_params_.has_prev_log_number_) {
665
+ if (!version_edit_params_.HasPrevLogNumber()) {
663
666
  version_edit_params_.SetPrevLogNumber(0);
664
667
  }
665
668
  }
@@ -710,9 +713,15 @@ Status VersionEditHandler::MaybeHandleFileBoundariesForNewFiles(
710
713
  }
711
714
  std::string smallest_buf;
712
715
  std::string largest_buf;
716
+ Slice largest_slice = meta.largest.Encode();
713
717
  PadInternalKeyWithMinTimestamp(&smallest_buf, meta.smallest.Encode(),
714
718
  ts_sz);
715
- PadInternalKeyWithMinTimestamp(&largest_buf, meta.largest.Encode(), ts_sz);
719
+ auto largest_footer = ExtractInternalKeyFooter(largest_slice);
720
+ if (largest_footer == kRangeTombstoneSentinel) {
721
+ PadInternalKeyWithMaxTimestamp(&largest_buf, largest_slice, ts_sz);
722
+ } else {
723
+ PadInternalKeyWithMinTimestamp(&largest_buf, largest_slice, ts_sz);
724
+ }
716
725
  meta.smallest.DecodeFrom(smallest_buf);
717
726
  meta.largest.DecodeFrom(largest_buf);
718
727
  }
@@ -725,17 +734,85 @@ VersionEditHandlerPointInTime::VersionEditHandlerPointInTime(
725
734
  const ReadOptions& read_options,
726
735
  EpochNumberRequirement epoch_number_requirement)
727
736
  : VersionEditHandler(read_only, column_families, version_set,
728
- /*track_missing_files=*/true,
737
+ /*track_found_and_missing_files=*/true,
729
738
  /*no_error_if_files_missing=*/true, io_tracer,
730
739
  read_options, epoch_number_requirement) {}
731
740
 
732
741
  VersionEditHandlerPointInTime::~VersionEditHandlerPointInTime() {
742
+ for (const auto& cfid_and_version : atomic_update_versions_) {
743
+ delete cfid_and_version.second;
744
+ }
733
745
  for (const auto& elem : versions_) {
734
746
  delete elem.second;
735
747
  }
736
748
  versions_.clear();
737
749
  }
738
750
 
751
+ Status VersionEditHandlerPointInTime::OnAtomicGroupReplayBegin() {
752
+ if (in_atomic_group_) {
753
+ return Status::Corruption("unexpected AtomicGroup start");
754
+ }
755
+
756
+ // The AtomicGroup that is about to begin may block column families in a valid
757
+ // state from saving any more updates. So we should save any valid states
758
+ // before proceeding.
759
+ for (const auto& cfid_and_builder : builders_) {
760
+ ColumnFamilyData* cfd = version_set_->GetColumnFamilySet()->GetColumnFamily(
761
+ cfid_and_builder.first);
762
+ assert(!cfd->IsDropped());
763
+ assert(cfd->initialized());
764
+ VersionEdit edit;
765
+ Status s = MaybeCreateVersion(edit, cfd, true /* force_create_version */);
766
+ if (!s.ok()) {
767
+ return s;
768
+ }
769
+ }
770
+
771
+ // An old AtomicGroup is incomplete. Throw away the versions that failed to
772
+ // complete it. They must not be used for completing the upcoming
773
+ // AtomicGroup since they are too old.
774
+ for (auto& cfid_and_version : atomic_update_versions_) {
775
+ delete cfid_and_version.second;
776
+ }
777
+
778
+ in_atomic_group_ = true;
779
+ // We lazily assume the column families that exist at this point are all
780
+ // involved in the AtomicGroup. Overestimating the scope of the AtomicGroup
781
+ // will sometimes cause less data to be recovered, which is fine for
782
+ // best-effort recovery.
783
+ atomic_update_versions_.clear();
784
+ for (const auto& cfid_and_builder : builders_) {
785
+ atomic_update_versions_[cfid_and_builder.first] = nullptr;
786
+ }
787
+ atomic_update_versions_missing_ = atomic_update_versions_.size();
788
+ return Status::OK();
789
+ }
790
+
791
+ Status VersionEditHandlerPointInTime::OnAtomicGroupReplayEnd() {
792
+ if (!in_atomic_group_) {
793
+ return Status::Corruption("unexpected AtomicGroup end");
794
+ }
795
+ in_atomic_group_ = false;
796
+
797
+ // The AtomicGroup must not have changed the column families. We don't support
798
+ // CF adds or drops in an AtomicGroup.
799
+ if (builders_.size() != atomic_update_versions_.size()) {
800
+ return Status::Corruption("unexpected CF change in AtomicGroup");
801
+ }
802
+ for (const auto& cfid_and_builder : builders_) {
803
+ if (atomic_update_versions_.find(cfid_and_builder.first) ==
804
+ atomic_update_versions_.end()) {
805
+ return Status::Corruption("unexpected CF add in AtomicGroup");
806
+ }
807
+ }
808
+ for (const auto& cfid_and_version : atomic_update_versions_) {
809
+ if (builders_.find(cfid_and_version.first) == builders_.end()) {
810
+ return Status::Corruption("unexpected CF drop in AtomicGroup");
811
+ }
812
+ }
813
+ return Status::OK();
814
+ }
815
+
739
816
  void VersionEditHandlerPointInTime::CheckIterationResult(
740
817
  const log::Reader& reader, Status* s) {
741
818
  VersionEditHandler::CheckIterationResult(reader, s);
@@ -752,6 +829,12 @@ void VersionEditHandlerPointInTime::CheckIterationResult(
752
829
 
753
830
  version_set_->AppendVersion(cfd, v_iter->second);
754
831
  versions_.erase(v_iter);
832
+ // Let's clear found_files, since any files in that are part of the
833
+ // installed Version. Any files that got obsoleted would have already
834
+ // been moved to intermediate_files_
835
+ auto found_files_iter = cf_to_found_files_.find(cfd->GetID());
836
+ assert(found_files_iter != cf_to_found_files_.end());
837
+ found_files_iter->second.clear();
755
838
  }
756
839
  }
757
840
  } else {
@@ -765,7 +848,14 @@ void VersionEditHandlerPointInTime::CheckIterationResult(
765
848
  ColumnFamilyData* VersionEditHandlerPointInTime::DestroyCfAndCleanup(
766
849
  const VersionEdit& edit) {
767
850
  ColumnFamilyData* cfd = VersionEditHandler::DestroyCfAndCleanup(edit);
768
- auto v_iter = versions_.find(edit.column_family_);
851
+ uint32_t cfid = edit.GetColumnFamily();
852
+ if (AtomicUpdateVersionsContains(cfid)) {
853
+ AtomicUpdateVersionsDropCf(cfid);
854
+ if (AtomicUpdateVersionsCompleted()) {
855
+ AtomicUpdateVersionsApply();
856
+ }
857
+ }
858
+ auto v_iter = versions_.find(cfid);
769
859
  if (v_iter != versions_.end()) {
770
860
  delete v_iter->second;
771
861
  versions_.erase(v_iter);
@@ -775,10 +865,16 @@ ColumnFamilyData* VersionEditHandlerPointInTime::DestroyCfAndCleanup(
775
865
 
776
866
  Status VersionEditHandlerPointInTime::MaybeCreateVersion(
777
867
  const VersionEdit& edit, ColumnFamilyData* cfd, bool force_create_version) {
868
+ TEST_SYNC_POINT("VersionEditHandlerPointInTime::MaybeCreateVersion:Begin1");
869
+ TEST_SYNC_POINT("VersionEditHandlerPointInTime::MaybeCreateVersion:Begin2");
778
870
  assert(cfd != nullptr);
779
871
  if (!force_create_version) {
780
- assert(edit.column_family_ == cfd->GetID());
872
+ assert(edit.GetColumnFamily() == cfd->GetID());
781
873
  }
874
+ auto found_files_iter = cf_to_found_files_.find(cfd->GetID());
875
+ assert(found_files_iter != cf_to_found_files_.end());
876
+ std::unordered_set<uint64_t>& found_files = found_files_iter->second;
877
+
782
878
  auto missing_files_iter = cf_to_missing_files_.find(cfd->GetID());
783
879
  assert(missing_files_iter != cf_to_missing_files_.end());
784
880
  std::unordered_set<uint64_t>& missing_files = missing_files_iter->second;
@@ -810,6 +906,18 @@ Status VersionEditHandlerPointInTime::MaybeCreateVersion(
810
906
  auto fiter = missing_files.find(file_num);
811
907
  if (fiter != missing_files.end()) {
812
908
  missing_files.erase(fiter);
909
+ } else {
910
+ fiter = found_files.find(file_num);
911
+ // Only mark new files added during this catchup attempt for deletion.
912
+ // These files were never installed in VersionStorageInfo.
913
+ // Already referenced files that are deleted by a VersionEdit will
914
+ // be added to the VersionStorageInfo's obsolete files when the old
915
+ // version is dereferenced.
916
+ if (fiter != found_files.end()) {
917
+ intermediate_files_.emplace_back(
918
+ MakeTableFileName(cfd->ioptions()->cf_paths[0].path, file_num));
919
+ found_files.erase(fiter);
920
+ }
813
921
  }
814
922
  }
815
923
 
@@ -825,9 +933,14 @@ Status VersionEditHandlerPointInTime::MaybeCreateVersion(
825
933
  s = VerifyFile(cfd, fpath, level, meta);
826
934
  if (s.IsPathNotFound() || s.IsNotFound() || s.IsCorruption()) {
827
935
  missing_files.insert(file_num);
936
+ if (s.IsCorruption()) {
937
+ found_files.insert(file_num);
938
+ }
828
939
  s = Status::OK();
829
940
  } else if (!s.ok()) {
830
941
  break;
942
+ } else {
943
+ found_files.insert(file_num);
831
944
  }
832
945
  }
833
946
 
@@ -860,21 +973,22 @@ Status VersionEditHandlerPointInTime::MaybeCreateVersion(
860
973
  const bool has_missing_files =
861
974
  !missing_files.empty() || has_missing_blob_files;
862
975
 
863
- bool missing_info = !version_edit_params_.has_log_number_ ||
864
- !version_edit_params_.has_next_file_number_ ||
865
- !version_edit_params_.has_last_sequence_;
976
+ bool missing_info = !version_edit_params_.HasLogNumber() ||
977
+ !version_edit_params_.HasNextFile() ||
978
+ !version_edit_params_.HasLastSequence();
866
979
 
867
980
  // Create version before apply edit. The version will represent the state
868
981
  // before applying the version edit.
869
- // A new version will created if:
982
+ // A new version will be created if:
870
983
  // 1) no error has occurred so far, and
871
984
  // 2) log_number_, next_file_number_ and last_sequence_ are known, and
872
- // 3) any of the following:
985
+ // 3) not in an AtomicGroup
986
+ // 4) any of the following:
873
987
  // a) no missing file before, but will have missing file(s) after applying
874
988
  // this version edit.
875
989
  // b) no missing file after applying the version edit, and the caller
876
990
  // explicitly request that a new version be created.
877
- if (s.ok() && !missing_info &&
991
+ if (s.ok() && !missing_info && !in_atomic_group_ &&
878
992
  ((has_missing_files && !prev_has_missing_files) ||
879
993
  (!has_missing_files && force_create_version))) {
880
994
  if (!builder) {
@@ -903,15 +1017,22 @@ Status VersionEditHandlerPointInTime::MaybeCreateVersion(
903
1017
  }
904
1018
  s = builder->SaveTo(version->storage_info());
905
1019
  if (s.ok()) {
906
- version->PrepareAppend(
907
- *cfd->GetLatestMutableCFOptions(), read_options_,
908
- !version_set_->db_options_->skip_stats_update_on_db_open);
909
- auto v_iter = versions_.find(cfd->GetID());
910
- if (v_iter != versions_.end()) {
911
- delete v_iter->second;
912
- v_iter->second = version;
1020
+ if (AtomicUpdateVersionsContains(cfd->GetID())) {
1021
+ AtomicUpdateVersionsPut(version);
1022
+ if (AtomicUpdateVersionsCompleted()) {
1023
+ AtomicUpdateVersionsApply();
1024
+ }
913
1025
  } else {
914
- versions_.emplace(cfd->GetID(), version);
1026
+ version->PrepareAppend(
1027
+ *cfd->GetLatestMutableCFOptions(), read_options_,
1028
+ !version_set_->db_options_->skip_stats_update_on_db_open);
1029
+ auto v_iter = versions_.find(cfd->GetID());
1030
+ if (v_iter != versions_.end()) {
1031
+ delete v_iter->second;
1032
+ v_iter->second = version;
1033
+ } else {
1034
+ versions_.emplace(cfd->GetID(), version);
1035
+ }
915
1036
  }
916
1037
  } else {
917
1038
  delete version;
@@ -951,6 +1072,60 @@ Status VersionEditHandlerPointInTime::LoadTables(
951
1072
  return Status::OK();
952
1073
  }
953
1074
 
1075
+ bool VersionEditHandlerPointInTime::AtomicUpdateVersionsCompleted() {
1076
+ return atomic_update_versions_missing_ == 0;
1077
+ }
1078
+
1079
+ bool VersionEditHandlerPointInTime::AtomicUpdateVersionsContains(
1080
+ uint32_t cfid) {
1081
+ return atomic_update_versions_.find(cfid) != atomic_update_versions_.end();
1082
+ }
1083
+
1084
+ void VersionEditHandlerPointInTime::AtomicUpdateVersionsDropCf(uint32_t cfid) {
1085
+ assert(!AtomicUpdateVersionsCompleted());
1086
+ auto atomic_update_versions_iter = atomic_update_versions_.find(cfid);
1087
+ assert(atomic_update_versions_iter != atomic_update_versions_.end());
1088
+ if (atomic_update_versions_iter->second == nullptr) {
1089
+ atomic_update_versions_missing_--;
1090
+ } else {
1091
+ delete atomic_update_versions_iter->second;
1092
+ }
1093
+ atomic_update_versions_.erase(atomic_update_versions_iter);
1094
+ }
1095
+
1096
+ void VersionEditHandlerPointInTime::AtomicUpdateVersionsPut(Version* version) {
1097
+ assert(!AtomicUpdateVersionsCompleted());
1098
+ auto atomic_update_versions_iter =
1099
+ atomic_update_versions_.find(version->cfd()->GetID());
1100
+ assert(atomic_update_versions_iter != atomic_update_versions_.end());
1101
+ if (atomic_update_versions_iter->second == nullptr) {
1102
+ atomic_update_versions_missing_--;
1103
+ } else {
1104
+ delete atomic_update_versions_iter->second;
1105
+ }
1106
+ atomic_update_versions_iter->second = version;
1107
+ }
1108
+
1109
+ void VersionEditHandlerPointInTime::AtomicUpdateVersionsApply() {
1110
+ assert(AtomicUpdateVersionsCompleted());
1111
+ for (const auto& cfid_and_version : atomic_update_versions_) {
1112
+ uint32_t cfid = cfid_and_version.first;
1113
+ Version* version = cfid_and_version.second;
1114
+ assert(version != nullptr);
1115
+ version->PrepareAppend(
1116
+ *version->cfd()->GetLatestMutableCFOptions(), read_options_,
1117
+ !version_set_->db_options_->skip_stats_update_on_db_open);
1118
+ auto versions_iter = versions_.find(cfid);
1119
+ if (versions_iter != versions_.end()) {
1120
+ delete versions_iter->second;
1121
+ versions_iter->second = version;
1122
+ } else {
1123
+ versions_.emplace(cfid, version);
1124
+ }
1125
+ }
1126
+ atomic_update_versions_.clear();
1127
+ }
1128
+
954
1129
  Status ManifestTailer::Initialize() {
955
1130
  if (Mode::kRecovery == mode_) {
956
1131
  return VersionEditHandler::Initialize();