@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
@@ -17,6 +17,7 @@
17
17
  #include <unordered_map>
18
18
  #include <vector>
19
19
 
20
+ #include "rocksdb/attribute_groups.h"
20
21
  #include "rocksdb/block_cache_trace_writer.h"
21
22
  #include "rocksdb/iterator.h"
22
23
  #include "rocksdb/listener.h"
@@ -131,16 +132,31 @@ struct IngestExternalFileArg {
131
132
  IngestExternalFileOptions options;
132
133
  std::vector<std::string> files_checksums;
133
134
  std::vector<std::string> files_checksum_func_names;
135
+ // A hint as to the temperature for *reading* the files to be ingested.
134
136
  Temperature file_temperature = Temperature::kUnknown;
135
137
  };
136
138
 
137
139
  struct GetMergeOperandsOptions {
140
+ using ContinueCallback = std::function<bool(Slice)>;
141
+
138
142
  // A limit on the number of merge operands returned by the GetMergeOperands()
139
143
  // API. In contrast with ReadOptions::merge_operator_max_count, this is a hard
140
144
  // limit: when it is exceeded, no merge operands will be returned and the
141
145
  // query will fail with an Incomplete status. See also the
142
146
  // DB::GetMergeOperands() API below.
143
147
  int expected_max_number_of_operands = 0;
148
+
149
+ // `continue_cb` will be called after reading each merge operand, excluding
150
+ // any base value. Operands are read in order from newest to oldest. The
151
+ // operand value is provided as an argument.
152
+ //
153
+ // Returning false will end the lookup process at the merge operand on which
154
+ // `continue_cb` was just invoked. Returning true allows the lookup to
155
+ // continue.
156
+ //
157
+ // If it is nullptr, `GetMergeOperands()` will behave as if it always returned
158
+ // true (continue fetching merge operands until there are no more).
159
+ ContinueCallback continue_cb;
144
160
  };
145
161
 
146
162
  // A collections of table properties objects, where
@@ -282,6 +298,29 @@ class DB {
282
298
  const std::vector<ColumnFamilyDescriptor>& column_families,
283
299
  std::vector<ColumnFamilyHandle*>* handles, DB** dbptr);
284
300
 
301
+ // EXPERIMENTAL
302
+
303
+ // Open a database as a follower. The difference between this and opening
304
+ // as secondary is that the follower database has its own directory with
305
+ // links to the actual files, and can tolarate obsolete file deletions by
306
+ // the leader to its own database. Another difference is the follower
307
+ // tries to keep up with the leader by periodically tailing the leader's
308
+ // MANIFEST, and (in the future) memtable updates, rather than relying on
309
+ // the user to manually call TryCatchupWithPrimary().
310
+
311
+ // Open as a follower with the default column family
312
+ static Status OpenAsFollower(const Options& options, const std::string& name,
313
+ const std::string& leader_path,
314
+ std::unique_ptr<DB>* dbptr);
315
+
316
+ // Open as a follower with multiple column families
317
+ static Status OpenAsFollower(
318
+ const DBOptions& db_options, const std::string& name,
319
+ const std::string& leader_path,
320
+ const std::vector<ColumnFamilyDescriptor>& column_families,
321
+ std::vector<ColumnFamilyHandle*>* handles, std::unique_ptr<DB>* dbptr);
322
+ // End EXPERIMENTAL
323
+
285
324
  // Open DB and run the compaction.
286
325
  // It's a read-only operation, the result won't be installed to the DB, it
287
326
  // will be output to the `output_directory`. The API should only be used with
@@ -435,6 +474,10 @@ class DB {
435
474
  virtual Status PutEntity(const WriteOptions& options,
436
475
  ColumnFamilyHandle* column_family, const Slice& key,
437
476
  const WideColumns& columns);
477
+ // Split and store wide column entities in multiple column families (a.k.a.
478
+ // AttributeGroups)
479
+ virtual Status PutEntity(const WriteOptions& options, const Slice& key,
480
+ const AttributeGroups& attribute_groups);
438
481
 
439
482
  // Remove the database entry (if any) for "key". Returns OK on
440
483
  // success, and a non-OK status on error. It is not an error if "key"
@@ -498,6 +541,8 @@ class DB {
498
541
  // 2) Limiting the maximum number of open files in the presence of range
499
542
  // tombstones can degrade read performance. To avoid this problem, set
500
543
  // max_open_files to -1 whenever possible.
544
+ // 3) Incompatible with row_cache, will return Status::NotSupported() if
545
+ // row_cache is configured.
501
546
  virtual Status DeleteRange(const WriteOptions& options,
502
547
  ColumnFamilyHandle* column_family,
503
548
  const Slice& begin_key, const Slice& end_key);
@@ -505,6 +550,15 @@ class DB {
505
550
  ColumnFamilyHandle* column_family,
506
551
  const Slice& begin_key, const Slice& end_key,
507
552
  const Slice& ts);
553
+ virtual Status DeleteRange(const WriteOptions& options,
554
+ const Slice& begin_key, const Slice& end_key) {
555
+ return DeleteRange(options, DefaultColumnFamily(), begin_key, end_key);
556
+ }
557
+ virtual Status DeleteRange(const WriteOptions& options,
558
+ const Slice& begin_key, const Slice& end_key,
559
+ const Slice& ts) {
560
+ return DeleteRange(options, DefaultColumnFamily(), begin_key, end_key, ts);
561
+ }
508
562
 
509
563
  // Merge the database entry for "key" with "value". Returns OK on success,
510
564
  // and a non-OK status on error. The semantics of this operation is
@@ -536,53 +590,69 @@ class DB {
536
590
  // any, or an empty value otherwise.
537
591
  //
538
592
  // If timestamp is enabled and a non-null timestamp pointer is passed in,
539
- // timestamp is returned.
593
+ // timestamp is returned. If the underlying DB implementation doesn't
594
+ // support returning timestamp and the timestamp argument is non-null,
595
+ // a Status::NotSupported() error will be returned.
540
596
  //
541
597
  // Returns OK on success. Returns NotFound and an empty value in "*value" if
542
598
  // there is no entry for "key". Returns some other non-OK status on error.
599
+ // NOTE: Pure virtual => was virtual before
600
+ virtual Status Get(const ReadOptions& options,
601
+ ColumnFamilyHandle* column_family, const Slice& key,
602
+ PinnableSlice* value, std::string* timestamp) = 0;
603
+
604
+ // The timestamp of the key is returned if a non-null timestamp pointer is
605
+ // passed, and value is returned as a string
606
+ // NOTE: virtual final => disallow override (was previously allowed)
543
607
  virtual inline Status Get(const ReadOptions& options,
544
608
  ColumnFamilyHandle* column_family, const Slice& key,
545
- std::string* value) {
609
+ std::string* value, std::string* timestamp) final {
546
610
  assert(value != nullptr);
547
611
  PinnableSlice pinnable_val(value);
548
612
  assert(!pinnable_val.IsPinned());
549
- auto s = Get(options, column_family, key, &pinnable_val);
613
+ auto s = Get(options, column_family, key, &pinnable_val, timestamp);
550
614
  if (s.ok() && pinnable_val.IsPinned()) {
551
615
  value->assign(pinnable_val.data(), pinnable_val.size());
552
616
  } // else value is already assigned
553
617
  return s;
554
618
  }
619
+
620
+ // No timestamp, and value is returned in a PinnableSlice
621
+ // NOTE: virtual final => disallow override (was previously allowed)
555
622
  virtual Status Get(const ReadOptions& options,
556
623
  ColumnFamilyHandle* column_family, const Slice& key,
557
- PinnableSlice* value) = 0;
558
- virtual Status Get(const ReadOptions& options, const Slice& key,
559
- std::string* value) {
560
- return Get(options, DefaultColumnFamily(), key, value);
624
+ PinnableSlice* value) final {
625
+ return Get(options, column_family, key, value, nullptr);
561
626
  }
562
627
 
563
- // Get() methods that return timestamp. Derived DB classes don't need to worry
564
- // about this group of methods if they don't care about timestamp feature.
628
+ // No timestamp, and the value is returned as a string
629
+ // NOTE: virtual final => disallow override (was previously allowed)
565
630
  virtual inline Status Get(const ReadOptions& options,
566
631
  ColumnFamilyHandle* column_family, const Slice& key,
567
- std::string* value, std::string* timestamp) {
632
+ std::string* value) final {
568
633
  assert(value != nullptr);
569
634
  PinnableSlice pinnable_val(value);
570
635
  assert(!pinnable_val.IsPinned());
571
- auto s = Get(options, column_family, key, &pinnable_val, timestamp);
636
+ auto s = Get(options, column_family, key, &pinnable_val);
572
637
  if (s.ok() && pinnable_val.IsPinned()) {
573
638
  value->assign(pinnable_val.data(), pinnable_val.size());
574
639
  } // else value is already assigned
575
640
  return s;
576
641
  }
577
- virtual Status Get(const ReadOptions& /*options*/,
578
- ColumnFamilyHandle* /*column_family*/,
579
- const Slice& /*key*/, PinnableSlice* /*value*/,
580
- std::string* /*timestamp*/) {
581
- return Status::NotSupported(
582
- "Get() that returns timestamp is not implemented.");
642
+
643
+ // Gets a key in the default column family, returns the value as a string,
644
+ // and no timestamp returned
645
+ // NOTE: virtual final => disallow override (was previously allowed)
646
+ virtual Status Get(const ReadOptions& options, const Slice& key,
647
+ std::string* value) final {
648
+ return Get(options, DefaultColumnFamily(), key, value);
583
649
  }
650
+
651
+ // Gets a key in the default column family, returns the value as a string,
652
+ // and timestamp of the key is returned if timestamp parameter is non-null
653
+ // NOTE: virtual final => disallow override (was previously allowed)
584
654
  virtual Status Get(const ReadOptions& options, const Slice& key,
585
- std::string* value, std::string* timestamp) {
655
+ std::string* value, std::string* timestamp) final {
586
656
  return Get(options, DefaultColumnFamily(), key, value, timestamp);
587
657
  }
588
658
 
@@ -602,12 +672,23 @@ class DB {
602
672
  return Status::NotSupported("GetEntity not supported");
603
673
  }
604
674
 
675
+ // Returns logically grouped wide-column entities per column family (a.k.a.
676
+ // attribute groups) for a single key. PinnableAttributeGroups is a vector of
677
+ // PinnableAttributeGroup. Each PinnableAttributeGroup will have
678
+ // ColumnFamilyHandle* as input, and Status and PinnableWideColumns as output.
679
+ virtual Status GetEntity(const ReadOptions& /* options */,
680
+ const Slice& /* key */,
681
+ PinnableAttributeGroups* /* result */) {
682
+ return Status::NotSupported("GetEntity not supported");
683
+ }
684
+
605
685
  // Populates the `merge_operands` array with all the merge operands in the DB
606
- // for `key`. The `merge_operands` array will be populated in the order of
607
- // insertion. The number of entries populated in `merge_operands` will be
608
- // assigned to `*number_of_operands`.
686
+ // for `key`, or a customizable suffix of merge operands when
687
+ // `GetMergeOperandsOptions::continue_cb` is set. The `merge_operands` array
688
+ // will be populated in the order of insertion. The number of entries
689
+ // populated in `merge_operands` will be assigned to `*number_of_operands`.
609
690
  //
610
- // If the number of merge operands in DB for `key` is greater than
691
+ // If the number of merge operands to return for `key` is greater than
611
692
  // `merge_operands_options.expected_max_number_of_operands`,
612
693
  // `merge_operands` is not populated and the return value is
613
694
  // `Status::Incomplete`. In that case, `*number_of_operands` will be assigned
@@ -627,9 +708,10 @@ class DB {
627
708
  int* number_of_operands) = 0;
628
709
 
629
710
  // Consistent Get of many keys across column families without the need
630
- // for an explicit snapshot. NOTE: the implementation of this MultiGet API
631
- // does not have the performance benefits of the void-returning MultiGet
632
- // functions.
711
+ // for an explicit snapshot. The main difference between this set of
712
+ // MultiGet APis and the batched MultiGet APIs that follow are -
713
+ // 1. The APIs take std::vector instead of C style array pointers
714
+ // 2. Values are returned as std::string rather than PinnableSlice
633
715
  //
634
716
  // If keys[i] does not exist in the database, then the i'th returned
635
717
  // status will be one for which Status::IsNotFound() is true, and
@@ -639,34 +721,67 @@ class DB {
639
721
  //
640
722
  // (*values) will always be resized to be the same size as (keys).
641
723
  // Similarly, the number of returned statuses will be the number of keys.
724
+ // If timestamps is non-null, the vector pointed to by it will be resized to
725
+ // number of keys and filled with timestamps of the keys on return.
642
726
  // Note: keys will not be "de-duplicated". Duplicate keys will return
643
- // duplicate values in order.
727
+ // duplicate values in order, and may return different status values
728
+ // in case there are errors.
729
+ // NOTE: virtual final => disallow override (was previously allowed)
730
+ virtual std::vector<Status> MultiGet(
731
+ const ReadOptions& options,
732
+ const std::vector<ColumnFamilyHandle*>& column_families,
733
+ const std::vector<Slice>& keys, std::vector<std::string>* values,
734
+ std::vector<std::string>* timestamps) final {
735
+ size_t num_keys = keys.size();
736
+ std::vector<Status> statuses(num_keys);
737
+ std::vector<PinnableSlice> pin_values(num_keys);
738
+
739
+ values->resize(num_keys);
740
+ if (timestamps) {
741
+ timestamps->resize(num_keys);
742
+ }
743
+ MultiGet(options, num_keys,
744
+ const_cast<ColumnFamilyHandle**>(column_families.data()),
745
+ keys.data(), pin_values.data(),
746
+ timestamps ? timestamps->data() : nullptr, statuses.data(),
747
+ /*sorted_input=*/false);
748
+ for (size_t i = 0; i < num_keys; ++i) {
749
+ if (statuses[i].ok()) {
750
+ (*values)[i].assign(pin_values[i].data(), pin_values[i].size());
751
+ }
752
+ }
753
+ return statuses;
754
+ }
755
+
756
+ // No timestamps are returned
757
+ // NOTE: virtual final => disallow override (was previously allowed)
644
758
  virtual std::vector<Status> MultiGet(
645
759
  const ReadOptions& options,
646
760
  const std::vector<ColumnFamilyHandle*>& column_family,
647
- const std::vector<Slice>& keys, std::vector<std::string>* values) = 0;
761
+ const std::vector<Slice>& keys, std::vector<std::string>* values) final {
762
+ values->resize(keys.size());
763
+ return MultiGet(options, column_family, keys, values, nullptr);
764
+ }
765
+
766
+ // MultiGet for default column family, no timestamps returned
767
+ // NOTE: virtual final => disallow override (was previously allowed)
648
768
  virtual std::vector<Status> MultiGet(const ReadOptions& options,
649
769
  const std::vector<Slice>& keys,
650
- std::vector<std::string>* values) {
770
+ std::vector<std::string>* values) final {
771
+ values->resize(keys.size());
651
772
  return MultiGet(
652
773
  options,
653
774
  std::vector<ColumnFamilyHandle*>(keys.size(), DefaultColumnFamily()),
654
775
  keys, values);
655
776
  }
656
777
 
778
+ // MultiGet for default column family
779
+ // NOTE: virtual final => disallow override (was previously allowed)
657
780
  virtual std::vector<Status> MultiGet(
658
- const ReadOptions& /*options*/,
659
- const std::vector<ColumnFamilyHandle*>& /*column_family*/,
660
- const std::vector<Slice>& keys, std::vector<std::string>* /*values*/,
661
- std::vector<std::string>* /*timestamps*/) {
662
- return std::vector<Status>(
663
- keys.size(), Status::NotSupported(
664
- "MultiGet() returning timestamps not implemented."));
665
- }
666
- virtual std::vector<Status> MultiGet(const ReadOptions& options,
667
- const std::vector<Slice>& keys,
668
- std::vector<std::string>* values,
669
- std::vector<std::string>* timestamps) {
781
+ const ReadOptions& options, const std::vector<Slice>& keys,
782
+ std::vector<std::string>* values,
783
+ std::vector<std::string>* timestamps) final {
784
+ values->resize(keys.size());
670
785
  return MultiGet(
671
786
  options,
672
787
  std::vector<ColumnFamilyHandle*>(keys.size(), DefaultColumnFamily()),
@@ -681,123 +796,59 @@ class DB {
681
796
  // benefits.
682
797
  // Parameters -
683
798
  // options - ReadOptions
684
- // column_family - ColumnFamilyHandle* that the keys belong to. All the keys
685
- // passed to the API are restricted to a single column family
686
799
  // num_keys - Number of keys to lookup
800
+ // column_families - Pointer to C style array of ColumnFamilyHandle* that
801
+ // the keys belong to.
687
802
  // keys - Pointer to C style array of key Slices with num_keys elements
688
803
  // values - Pointer to C style array of PinnableSlices with num_keys elements
804
+ // timestamps - Pointer to C style array of std::string that, if non-null and
805
+ // timestamps are enabled, will be filled with timestamps of the
806
+ // keys on return. The array should be sized to num_keys entries
807
+ // by the caller.
689
808
  // statuses - Pointer to C style array of Status with num_keys elements
690
809
  // sorted_input - If true, it means the input keys are already sorted by key
691
810
  // order, so the MultiGet() API doesn't have to sort them
692
811
  // again. If false, the keys will be copied and sorted
693
812
  // internally by the API - the input array will not be
694
813
  // modified
695
- virtual void MultiGet(const ReadOptions& options,
696
- ColumnFamilyHandle* column_family,
697
- const size_t num_keys, const Slice* keys,
698
- PinnableSlice* values, Status* statuses,
699
- const bool /*sorted_input*/ = false) {
700
- std::vector<ColumnFamilyHandle*> cf;
701
- std::vector<Slice> user_keys;
702
- std::vector<Status> status;
703
- std::vector<std::string> vals;
704
814
 
705
- for (size_t i = 0; i < num_keys; ++i) {
706
- cf.emplace_back(column_family);
707
- user_keys.emplace_back(keys[i]);
708
- }
709
- status = MultiGet(options, cf, user_keys, &vals);
710
- std::copy(status.begin(), status.end(), statuses);
711
- for (auto& value : vals) {
712
- values->PinSelf(value);
713
- values++;
714
- }
715
- }
815
+ // NOTE: Pure virtual => was virtual (optional). If the concrete
816
+ // implementation
817
+ // doesn't support returning timestamps, and the timestamps paramater is
818
+ // non-null, it should return Status::NotSupported() for all the keys.
819
+ virtual void MultiGet(const ReadOptions& options, const size_t num_keys,
820
+ ColumnFamilyHandle** column_families, const Slice* keys,
821
+ PinnableSlice* values, std::string* timestamps,
822
+ Status* statuses, const bool sorted_input = false) = 0;
716
823
 
824
+ // MultiGet for single column family
825
+ // NOTE: virtual final => disallow override (was previously allowed)
717
826
  virtual void MultiGet(const ReadOptions& options,
718
827
  ColumnFamilyHandle* column_family,
719
828
  const size_t num_keys, const Slice* keys,
720
829
  PinnableSlice* values, std::string* timestamps,
721
- Status* statuses, const bool /*sorted_input*/ = false) {
722
- std::vector<ColumnFamilyHandle*> cf;
723
- std::vector<Slice> user_keys;
724
- std::vector<Status> status;
725
- std::vector<std::string> vals;
726
- std::vector<std::string> tss;
830
+ Status* statuses,
831
+ const bool sorted_input = false) final;
727
832
 
728
- for (size_t i = 0; i < num_keys; ++i) {
729
- cf.emplace_back(column_family);
730
- user_keys.emplace_back(keys[i]);
731
- }
732
- status = MultiGet(options, cf, user_keys, &vals, &tss);
733
- std::copy(status.begin(), status.end(), statuses);
734
- std::copy(tss.begin(), tss.end(), timestamps);
735
- for (auto& value : vals) {
736
- values->PinSelf(value);
737
- values++;
738
- }
833
+ // MultiGet for single column family, no timestamps returned
834
+ // NOTE: virtual final => disallow override (was previously allowed)
835
+ virtual void MultiGet(const ReadOptions& options,
836
+ ColumnFamilyHandle* column_family,
837
+ const size_t num_keys, const Slice* keys,
838
+ PinnableSlice* values, Status* statuses,
839
+ const bool sorted_input = false) final {
840
+ MultiGet(options, column_family, num_keys, keys, values, nullptr, statuses,
841
+ sorted_input);
739
842
  }
740
843
 
741
- // Overloaded MultiGet API that improves performance by batching operations
742
- // in the read path for greater efficiency. Currently, only the block based
743
- // table format with full filters are supported. Other table formats such
744
- // as plain table, block based table with block based filters and
745
- // partitioned indexes will still work, but will not get any performance
746
- // benefits.
747
- // Parameters -
748
- // options - ReadOptions
749
- // column_family - ColumnFamilyHandle* that the keys belong to. All the keys
750
- // passed to the API are restricted to a single column family
751
- // num_keys - Number of keys to lookup
752
- // keys - Pointer to C style array of key Slices with num_keys elements
753
- // values - Pointer to C style array of PinnableSlices with num_keys elements
754
- // statuses - Pointer to C style array of Status with num_keys elements
755
- // sorted_input - If true, it means the input keys are already sorted by key
756
- // order, so the MultiGet() API doesn't have to sort them
757
- // again. If false, the keys will be copied and sorted
758
- // internally by the API - the input array will not be
759
- // modified
844
+ // Multiple column families, no timestamps returned
845
+ // NOTE: virtual final => disallow override (was previously allowed)
760
846
  virtual void MultiGet(const ReadOptions& options, const size_t num_keys,
761
847
  ColumnFamilyHandle** column_families, const Slice* keys,
762
848
  PinnableSlice* values, Status* statuses,
763
- const bool /*sorted_input*/ = false) {
764
- std::vector<ColumnFamilyHandle*> cf;
765
- std::vector<Slice> user_keys;
766
- std::vector<Status> status;
767
- std::vector<std::string> vals;
768
-
769
- for (size_t i = 0; i < num_keys; ++i) {
770
- cf.emplace_back(column_families[i]);
771
- user_keys.emplace_back(keys[i]);
772
- }
773
- status = MultiGet(options, cf, user_keys, &vals);
774
- std::copy(status.begin(), status.end(), statuses);
775
- for (auto& value : vals) {
776
- values->PinSelf(value);
777
- values++;
778
- }
779
- }
780
- virtual void MultiGet(const ReadOptions& options, const size_t num_keys,
781
- ColumnFamilyHandle** column_families, const Slice* keys,
782
- PinnableSlice* values, std::string* timestamps,
783
- Status* statuses, const bool /*sorted_input*/ = false) {
784
- std::vector<ColumnFamilyHandle*> cf;
785
- std::vector<Slice> user_keys;
786
- std::vector<Status> status;
787
- std::vector<std::string> vals;
788
- std::vector<std::string> tss;
789
-
790
- for (size_t i = 0; i < num_keys; ++i) {
791
- cf.emplace_back(column_families[i]);
792
- user_keys.emplace_back(keys[i]);
793
- }
794
- status = MultiGet(options, cf, user_keys, &vals, &tss);
795
- std::copy(status.begin(), status.end(), statuses);
796
- std::copy(tss.begin(), tss.end(), timestamps);
797
- for (auto& value : vals) {
798
- values->PinSelf(value);
799
- values++;
800
- }
849
+ const bool sorted_input = false) final {
850
+ MultiGet(options, num_keys, column_families, keys, values, nullptr,
851
+ statuses, sorted_input);
801
852
  }
802
853
 
803
854
  // Batched MultiGet-like API that returns wide-column entities from a single
@@ -946,6 +997,31 @@ class DB {
946
997
  const std::vector<ColumnFamilyHandle*>& column_families,
947
998
  std::vector<Iterator*>* iterators) = 0;
948
999
 
1000
+ // EXPERIMENTAL
1001
+ // Return a cross-column-family iterator from a consistent database state.
1002
+ //
1003
+ // If a key exists in more than one column family, value() will be determined
1004
+ // by the wide column value of kDefaultColumnName after coalesced as described
1005
+ // below.
1006
+ //
1007
+ // Each wide column will be independently shadowed by the CFs.
1008
+ // For example, if CF1 has "key_1" ==> {"col_1": "foo",
1009
+ // "col_2", "baz"} and CF2 has "key_1" ==> {"col_2": "quux", "col_3", "bla"},
1010
+ // and when the iterator is at key_1, columns() will return
1011
+ // {"col_1": "foo", "col_2", "quux", "col_3", "bla"}
1012
+ // In this example, value() will be empty, because none of them have values
1013
+ // for kDefaultColumnName
1014
+ virtual std::unique_ptr<Iterator> NewCoalescingIterator(
1015
+ const ReadOptions& options,
1016
+ const std::vector<ColumnFamilyHandle*>& column_families) = 0;
1017
+
1018
+ // EXPERIMENTAL
1019
+ // A cross-column-family iterator that collects and returns attribute groups
1020
+ // for each key in order provided by comparator
1021
+ virtual std::unique_ptr<AttributeGroupIterator> NewAttributeGroupIterator(
1022
+ const ReadOptions& options,
1023
+ const std::vector<ColumnFamilyHandle*>& column_families) = 0;
1024
+
949
1025
  // Return a handle to the current DB state. Iterators created with
950
1026
  // this handle will all observe a stable snapshot of the current DB
951
1027
  // state. The caller must call ReleaseSnapshot(result) when the
@@ -1399,6 +1475,9 @@ class DB {
1399
1475
  // move the files back to the minimum level capable of holding the data set
1400
1476
  // or a given level (specified by non-negative options.target_level).
1401
1477
  //
1478
+ // For FIFO compaction, this will trigger a compaction (if available)
1479
+ // based on CompactionOptionsFIFO.
1480
+ //
1402
1481
  // In case of user-defined timestamp, if enabled, `begin` and `end` should
1403
1482
  // not contain timestamp.
1404
1483
  virtual Status CompactRange(const CompactRangeOptions& options,
@@ -1600,8 +1679,8 @@ class DB {
1600
1679
  // Freezes the logical state of the DB (by stopping writes), and if WAL is
1601
1680
  // enabled, ensures that state has been flushed to DB files (as in
1602
1681
  // FlushWAL()). This can be used for taking a Checkpoint at a known DB
1603
- // state, though the user must use options to insure no DB flush is invoked
1604
- // in this frozen state. Other operations allowed on a "read only" DB should
1682
+ // state, though while the WAL is locked, flushes as part of CreateCheckpoint
1683
+ // and simiar are skipped. Other operations allowed on a "read only" DB should
1605
1684
  // work while frozen. Each LockWAL() call that returns OK must eventually be
1606
1685
  // followed by a corresponding call to UnlockWAL(). Where supported, non-OK
1607
1686
  // status is generally only possible with some kind of corruption or I/O
@@ -1620,11 +1699,6 @@ class DB {
1620
1699
  // The sequence number of the most recent transaction.
1621
1700
  virtual SequenceNumber GetLatestSequenceNumber() const = 0;
1622
1701
 
1623
- // Prevent file deletions. Compactions will continue to occur,
1624
- // but no obsolete files will be deleted. Calling this multiple
1625
- // times have the same effect as calling it once.
1626
- virtual Status DisableFileDeletions() = 0;
1627
-
1628
1702
  // Increase the full_history_ts of column family. The new ts_low value should
1629
1703
  // be newer than current full_history_ts value.
1630
1704
  // If another thread updates full_history_ts_low concurrently to a higher
@@ -1636,16 +1710,24 @@ class DB {
1636
1710
  virtual Status GetFullHistoryTsLow(ColumnFamilyHandle* column_family,
1637
1711
  std::string* ts_low) = 0;
1638
1712
 
1639
- // Allow compactions to delete obsolete files.
1640
- // If force == true, the call to EnableFileDeletions() will guarantee that
1641
- // file deletions are enabled after the call, even if DisableFileDeletions()
1642
- // was called multiple times before.
1643
- // If force == false, EnableFileDeletions will only enable file deletion
1644
- // after it's been called at least as many times as DisableFileDeletions(),
1645
- // enabling the two methods to be called by two threads concurrently without
1713
+ // Suspend deleting obsolete files. Compactions will continue to occur,
1714
+ // but no obsolete files will be deleted. To resume file deletions, each
1715
+ // call to DisableFileDeletions() must be matched by a subsequent call to
1716
+ // EnableFileDeletions(). For more details, see EnableFileDeletions().
1717
+ virtual Status DisableFileDeletions() = 0;
1718
+
1719
+ // Resume deleting obsolete files, following up on `DisableFileDeletions()`.
1720
+ //
1721
+ // File deletions disabling and enabling is not controlled by a binary flag,
1722
+ // instead it's represented as a counter to allow different callers to
1723
+ // independently disable file deletion. Disabling file deletion can be
1724
+ // critical for operations like making a backup. So the counter implementation
1725
+ // makes the file deletion disabled as long as there is one caller requesting
1726
+ // so, and only when every caller agrees to re-enable file deletion, it will
1727
+ // be enabled. Two threads can call this method concurrently without
1646
1728
  // synchronization -- i.e., file deletions will be enabled only after both
1647
1729
  // threads call EnableFileDeletions()
1648
- virtual Status EnableFileDeletions(bool force = true) = 0;
1730
+ virtual Status EnableFileDeletions() = 0;
1649
1731
 
1650
1732
  // Retrieves the creation time of the oldest file in the DB.
1651
1733
  // This API only works if max_open_files = -1, if it is not then
@@ -1771,6 +1853,15 @@ class DB {
1771
1853
  // to Flush the memtable first before ingesting the file.
1772
1854
  // In the second mode we will always ingest in the bottom most level (see
1773
1855
  // docs to IngestExternalFileOptions::ingest_behind).
1856
+ // For a column family that enables user-defined timestamps, ingesting
1857
+ // external SST files are supported with these limitations: 1) Ingested file's
1858
+ // user key (without timestamp) range should not overlap with the db's key
1859
+ // range. 2) When ingesting multiple external SST files, their key ranges
1860
+ // should not overlap with each other either. 3) Ingestion behind mode is not
1861
+ // supported. 4) When an ingested file contains point data and range deletion
1862
+ // for the same key, the point data currently overrides the range deletion
1863
+ // regardless which one has the higher user-defined timestamps.
1864
+ // For FIFO compaction, SST files will always be ingested into L0.
1774
1865
  //
1775
1866
  // (1) External SST files can be created using SstFileWriter
1776
1867
  // (2) We will try to ingest the files to the lowest possible level
@@ -1783,6 +1874,16 @@ class DB {
1783
1874
  // the files cannot be ingested to the bottommost level, and it is the
1784
1875
  // user's responsibility to clear the bottommost level in the overlapping
1785
1876
  // range before re-attempting the ingestion.
1877
+ //
1878
+ // EXPERIMENTAL: the temperatures of the files after ingestion are currently
1879
+ // determined like this:
1880
+ // - If the ingested file is moved rather than copied, its temperature is
1881
+ // inherited from the input file.
1882
+ // - If either ingest_behind or fail_if_not_bottommost_level is set to true,
1883
+ // then the temperature is set to the CF's last_level_temperature.
1884
+ // - Otherwise, the temperature is set to the CF's default_write_temperature.
1885
+ // (Landing in the last level does not currently guarantee using
1886
+ // last_level_temperature - TODO)
1786
1887
  virtual Status IngestExternalFile(
1787
1888
  ColumnFamilyHandle* column_family,
1788
1889
  const std::vector<std::string>& external_files,
@@ -1908,6 +2009,8 @@ class DB {
1908
2009
  return Status::NotSupported("SuggestCompactRange() is not implemented.");
1909
2010
  }
1910
2011
 
2012
+ // Trivially move L0 files to target level. Should not be called with another
2013
+ // PromoteL0() concurrently
1911
2014
  virtual Status PromoteL0(ColumnFamilyHandle* /*column_family*/,
1912
2015
  int /*target_level*/) {
1913
2016
  return Status::NotSupported("PromoteL0() is not implemented.");