@nxtedition/rocksdb 13.5.7 → 13.5.9

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 (509) hide show
  1. package/binding.cc +248 -70
  2. package/binding.gyp +2 -2
  3. package/deps/rocksdb/rocksdb/BUCK +12 -0
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
  5. package/deps/rocksdb/rocksdb/Makefile +28 -23
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
  15. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
  16. package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
  17. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
  18. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
  24. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
  25. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
  26. package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
  27. package/deps/rocksdb/rocksdb/db/builder.h +5 -4
  28. package/deps/rocksdb/rocksdb/db/c.cc +556 -15
  29. package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
  30. package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
  31. package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
  32. package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
  33. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
  58. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
  59. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
  60. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
  61. package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
  62. package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
  63. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
  64. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
  65. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
  66. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
  67. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
  68. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
  69. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
  70. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
  71. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
  72. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
  73. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
  79. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
  80. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
  81. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
  87. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
  88. package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
  89. package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
  90. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
  91. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
  92. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
  93. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
  94. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
  95. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
  96. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
  97. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
  98. package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
  99. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
  100. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
  101. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
  102. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
  103. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
  104. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
  105. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
  106. package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
  107. package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
  108. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  109. package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
  110. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
  111. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
  112. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
  113. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
  114. package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
  115. package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
  116. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
  117. package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
  118. package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
  119. package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
  120. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
  121. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
  122. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
  123. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
  124. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
  125. package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
  126. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
  127. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
  128. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  129. package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
  130. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
  131. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
  132. package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
  133. package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
  134. package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
  135. package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
  136. package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
  137. package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
  138. package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
  139. package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
  140. package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
  141. package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
  142. package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
  143. package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
  144. package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
  145. package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
  146. package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
  147. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
  148. package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
  149. package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
  150. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
  151. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
  152. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
  153. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
  154. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
  155. package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
  156. package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
  157. package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
  158. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
  159. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
  160. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
  161. package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
  162. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
  163. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
  164. package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
  165. package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
  166. package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
  167. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
  168. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
  169. package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
  170. package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
  171. package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
  172. package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
  173. package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
  174. package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
  175. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
  176. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
  177. package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
  178. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
  179. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
  180. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
  181. package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
  182. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
  183. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
  184. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
  185. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
  186. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
  187. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
  188. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
  189. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
  190. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
  191. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
  192. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
  193. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
  194. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
  195. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
  196. package/deps/rocksdb/rocksdb/env/env.cc +32 -2
  197. package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
  198. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
  199. package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
  200. package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
  201. package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
  202. package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
  203. package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
  204. package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
  205. package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
  206. package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
  207. package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
  208. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
  209. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
  210. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
  211. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
  212. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
  213. package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
  214. package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
  215. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
  216. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
  217. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
  218. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
  219. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
  220. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
  221. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
  222. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
  223. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
  224. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
  225. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
  226. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
  227. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
  228. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
  229. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
  230. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
  231. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
  232. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
  233. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
  234. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
  235. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
  236. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
  238. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
  239. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
  240. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
  241. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
  242. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
  243. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
  244. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
  245. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
  246. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
  248. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
  249. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
  250. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
  251. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
  252. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
  253. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
  254. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
  255. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
  256. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
  257. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
  258. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
  259. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
  260. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
  261. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
  268. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
  269. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
  270. package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
  271. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
  272. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
  273. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
  274. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
  275. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
  276. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
  277. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
  278. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
  279. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
  280. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  281. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
  282. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
  283. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
  284. package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
  285. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
  286. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
  287. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
  288. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
  289. package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
  290. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
  291. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
  292. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  293. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
  294. package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
  295. package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
  296. package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
  297. package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
  298. package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
  299. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
  300. package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
  301. package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
  302. package/deps/rocksdb/rocksdb/options/options.cc +296 -305
  303. package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
  304. package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
  305. package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
  306. package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
  307. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
  308. package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
  309. package/deps/rocksdb/rocksdb/port/lang.h +2 -1
  310. package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
  311. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
  312. package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
  313. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
  314. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
  315. package/deps/rocksdb/rocksdb/src.mk +17 -11
  316. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
  317. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
  318. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
  319. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
  320. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
  321. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
  322. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
  323. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
  324. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
  325. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
  326. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
  327. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
  328. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
  329. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
  330. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
  331. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  332. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
  333. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
  334. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
  335. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
  336. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
  337. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
  338. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
  339. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
  340. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
  341. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
  342. package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
  343. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
  344. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
  345. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
  346. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
  347. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
  348. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
  349. package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
  350. package/deps/rocksdb/rocksdb/table/format.cc +62 -44
  351. package/deps/rocksdb/rocksdb/table/format.h +35 -12
  352. package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
  353. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  354. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
  355. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
  356. package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
  357. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
  358. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
  359. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
  360. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
  361. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
  362. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
  363. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
  364. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  365. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
  366. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
  367. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
  368. package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
  369. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
  370. package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
  371. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
  372. package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
  373. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
  374. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
  375. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
  376. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
  377. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
  378. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
  379. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
  380. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
  381. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  382. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
  383. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
  384. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
  385. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
  386. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
  387. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
  388. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
  389. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
  390. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
  391. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
  392. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
  393. package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
  394. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
  395. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
  396. package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
  397. package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
  398. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
  399. package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
  400. package/deps/rocksdb/rocksdb/util/compression.h +348 -232
  401. package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
  402. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
  403. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
  404. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
  405. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
  406. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
  407. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
  408. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
  409. package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
  415. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
  416. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
  417. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
  418. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
  419. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
  420. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
  426. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
  427. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
  428. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
  429. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  430. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
  431. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
  432. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
  433. package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
  434. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
  435. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
  436. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
  437. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
  438. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
  439. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
  440. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
  441. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
  442. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
  443. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
  444. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
  445. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
  446. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
  447. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
  448. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
  449. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
  450. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
  451. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
  452. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
  453. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
  454. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
  455. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
  456. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
  457. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
  458. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
  459. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
  460. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
  461. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
  462. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
  463. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
  464. package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
  465. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
  466. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
  467. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
  468. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
  469. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
  470. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
  471. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
  472. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
  473. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
  474. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
  475. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  476. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
  477. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  478. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
  479. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
  480. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
  481. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
  482. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
  483. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
  484. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
  485. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
  486. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
  487. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
  488. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
  489. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
  490. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
  491. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
  492. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
  493. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
  494. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
  495. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
  496. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
  497. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
  498. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
  499. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
  500. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
  501. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
  502. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
  503. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
  504. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
  505. package/deps/rocksdb/rocksdb.gyp +9 -4
  506. package/index.js +50 -9
  507. package/package.json +8 -1
  508. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  509. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -191,8 +191,7 @@ namespace {
191
191
  class SharedState {
192
192
  public:
193
193
  explicit SharedState(CacheBench* cache_bench)
194
- : cv_(&mu_),
195
- cache_bench_(cache_bench) {}
194
+ : cv_(&mu_), cache_bench_(cache_bench) {}
196
195
 
197
196
  ~SharedState() = default;
198
197
 
@@ -24,7 +24,14 @@ CompressedSecondaryCache::CompressedSecondaryCache(
24
24
  cache_res_mgr_(std::make_shared<ConcurrentCacheReservationManager>(
25
25
  std::make_shared<CacheReservationManagerImpl<CacheEntryRole::kMisc>>(
26
26
  cache_))),
27
- disable_cache_(opts.capacity == 0) {}
27
+ disable_cache_(opts.capacity == 0) {
28
+ auto mgr =
29
+ GetBuiltinCompressionManager(cache_options_.compress_format_version);
30
+ compressor_ = mgr->GetCompressor(cache_options_.compression_opts,
31
+ cache_options_.compression_type);
32
+ decompressor_ =
33
+ mgr->GetDecompressorOptimizeFor(cache_options_.compression_type);
34
+ }
28
35
 
29
36
  CompressedSecondaryCache::~CompressedSecondaryCache() = default;
30
37
 
@@ -73,15 +80,16 @@ std::unique_ptr<SecondaryCacheResultHandle> CompressedSecondaryCache::Lookup(
73
80
  ptr = reinterpret_cast<CacheAllocationPtr*>(handle_value);
74
81
  handle_value_charge = cache_->GetCharge(lru_handle);
75
82
  data_ptr = ptr->get();
76
- data_ptr = GetVarint32Ptr(data_ptr, data_ptr + 1,
77
- static_cast<uint32_t*>(&type_32));
83
+ const char* limit = ptr->get() + handle_value_charge;
84
+ data_ptr =
85
+ GetVarint32Ptr(data_ptr, limit, static_cast<uint32_t*>(&type_32));
78
86
  type = static_cast<CompressionType>(type_32);
79
- data_ptr = GetVarint32Ptr(data_ptr, data_ptr + 1,
80
- static_cast<uint32_t*>(&source_32));
87
+ data_ptr =
88
+ GetVarint32Ptr(data_ptr, limit, static_cast<uint32_t*>(&source_32));
81
89
  source = static_cast<CacheTier>(source_32);
82
90
  uint64_t data_size = 0;
83
- data_ptr = GetVarint64Ptr(data_ptr, ptr->get() + handle_value_charge,
84
- static_cast<uint64_t*>(&data_size));
91
+ data_ptr =
92
+ GetVarint64Ptr(data_ptr, limit, static_cast<uint64_t*>(&data_size));
85
93
  assert(handle_value_charge > data_size);
86
94
  handle_value_charge = data_size;
87
95
  }
@@ -97,25 +105,24 @@ std::unique_ptr<SecondaryCacheResultHandle> CompressedSecondaryCache::Lookup(
97
105
  kNoCompression, CacheTier::kVolatileTier,
98
106
  create_context, allocator, &value, &charge);
99
107
  } else {
100
- UncompressionContext uncompression_context(
101
- cache_options_.compression_type);
102
- UncompressionInfo uncompression_info(uncompression_context,
103
- UncompressionDict::GetEmptyDict(),
104
- cache_options_.compression_type);
105
-
106
- size_t uncompressed_size{0};
107
- CacheAllocationPtr uncompressed =
108
- UncompressData(uncompression_info, (char*)data_ptr,
109
- handle_value_charge, &uncompressed_size,
110
- cache_options_.compress_format_version, allocator);
111
-
112
- if (!uncompressed) {
113
- cache_->Release(lru_handle, /*erase_if_last_ref=*/true);
114
- return nullptr;
108
+ // TODO: can we work some magic with create_cb, which might be based on
109
+ // custom compression, to decompress without an extra copy in create_cb?
110
+ Decompressor::Args args;
111
+ args.compressed_data = Slice(data_ptr, handle_value_charge);
112
+ args.compression_type = cache_options_.compression_type;
113
+ s = decompressor_->ExtractUncompressedSize(args);
114
+ assert(s.ok());
115
+ if (s.ok()) {
116
+ auto uncompressed = std::make_unique<char[]>(args.uncompressed_size);
117
+ s = decompressor_->DecompressBlock(args, uncompressed.get());
118
+ assert(s.ok());
119
+ if (s.ok()) {
120
+ s = helper->create_cb(
121
+ Slice(uncompressed.get(), args.uncompressed_size), kNoCompression,
122
+ CacheTier::kVolatileTier, create_context, allocator, &value,
123
+ &charge);
124
+ }
115
125
  }
116
- s = helper->create_cb(Slice(uncompressed.get(), uncompressed_size),
117
- kNoCompression, CacheTier::kVolatileTier,
118
- create_context, allocator, &value, &charge);
119
126
  }
120
127
  } else {
121
128
  // The item was not compressed by us. Let the helper create_cb
@@ -198,20 +205,17 @@ Status CompressedSecondaryCache::InsertInternal(
198
205
  type == kNoCompression &&
199
206
  !cache_options_.do_not_compress_roles.Contains(helper->role)) {
200
207
  PERF_COUNTER_ADD(compressed_sec_cache_uncompressed_bytes, data_size);
201
- CompressionContext compression_context(cache_options_.compression_type,
202
- cache_options_.compression_opts);
203
- uint64_t sample_for_compression{0};
204
- CompressionInfo compression_info(
205
- cache_options_.compression_opts, compression_context,
206
- CompressionDict::GetEmptyDict(), cache_options_.compression_type,
207
- sample_for_compression);
208
-
209
- bool success =
210
- CompressData(val, compression_info,
211
- cache_options_.compress_format_version, &compressed_val);
212
-
213
- if (!success) {
214
- return Status::Corruption("Error compressing value.");
208
+
209
+ CompressionType to_type = kNoCompression;
210
+ s = compressor_->CompressBlock(val, &compressed_val, &to_type,
211
+ nullptr /*working_area*/);
212
+ if (!s.ok()) {
213
+ return s;
214
+ }
215
+ // TODO: allow values not compressed when there's no size savings?
216
+ assert(to_type == cache_options_.compression_type);
217
+ if (to_type != cache_options_.compression_type) {
218
+ return Status::Corruption("Failed to compress value.");
215
219
  }
216
220
 
217
221
  val = Slice(compressed_val);
@@ -145,6 +145,8 @@ class CompressedSecondaryCache : public SecondaryCache {
145
145
  const Cache::CacheItemHelper* GetHelper(bool enable_custom_split_merge) const;
146
146
  std::shared_ptr<Cache> cache_;
147
147
  CompressedSecondaryCacheOptions cache_options_;
148
+ std::unique_ptr<Compressor> compressor_;
149
+ std::shared_ptr<Decompressor> decompressor_;
148
150
  mutable port::Mutex capacity_mutex_;
149
151
  std::shared_ptr<ConcurrentCacheReservationManager> cache_res_mgr_;
150
152
  bool disable_cache_;
@@ -845,7 +845,6 @@ TEST_P(CompressedSecondaryCacheTestWithCompressionParam,
845
845
  BasicTestHelper(sec_cache, sec_cache_is_compressed_);
846
846
  }
847
847
 
848
-
849
848
  TEST_P(CompressedSecondaryCacheTestWithCompressionParam, FailsTest) {
850
849
  FailsTest(sec_cache_is_compressed_);
851
850
  }
@@ -93,9 +93,8 @@ void LRUHandleTable::Resize() {
93
93
 
94
94
  uint32_t old_length = uint32_t{1} << length_bits_;
95
95
  int new_length_bits = length_bits_ + 1;
96
- std::unique_ptr<LRUHandle* []> new_list {
97
- new LRUHandle* [size_t{1} << new_length_bits] {}
98
- };
96
+ std::unique_ptr<LRUHandle*[]> new_list{
97
+ new LRUHandle* [size_t{1} << new_length_bits] {}};
99
98
  [[maybe_unused]] uint32_t count = 0;
100
99
  for (uint32_t i = 0; i < old_length; i++) {
101
100
  LRUHandle* h = list_[i];
@@ -546,7 +546,7 @@ TYPED_TEST(ClockCacheTest, Limits) {
546
546
  // verify usage tracking on detached entries.)
547
547
  {
548
548
  size_t n = kCapacity * 5 + 1;
549
- std::unique_ptr<HandleImpl* []> ha { new HandleImpl* [n] {} };
549
+ std::unique_ptr<HandleImpl*[]> ha{new HandleImpl* [n] {}};
550
550
  Status s;
551
551
  for (size_t i = 0; i < n && s.ok(); ++i) {
552
552
  hkey[1] = i;
@@ -713,7 +713,7 @@ TYPED_TEST(ClockCacheTest, ClockEvictionEffortCapTest) {
713
713
  // evictable entries are present beyond the cache capacity, despite
714
714
  // being evictable.
715
715
  constexpr size_t kCount = kCapacity - 1;
716
- std::unique_ptr<HandleImpl* []> ha { new HandleImpl* [kCount] {} };
716
+ std::unique_ptr<HandleImpl*[]> ha{new HandleImpl* [kCount] {}};
717
717
  for (size_t i = 0; i < 2 * kCount; ++i) {
718
718
  UniqueId64x2 hkey = this->CheapHash(i);
719
719
  ASSERT_OK(shard.Insert(
@@ -7,6 +7,4 @@
7
7
 
8
8
  #include "cache/cache_entry_roles.h"
9
9
 
10
- namespace ROCKSDB_NAMESPACE {
11
-
12
- } // namespace ROCKSDB_NAMESPACE
10
+ namespace ROCKSDB_NAMESPACE {} // namespace ROCKSDB_NAMESPACE
@@ -121,7 +121,17 @@ CacheWithSecondaryAdapter::~CacheWithSecondaryAdapter() {
121
121
  assert(s.ok());
122
122
  assert(placeholder_usage_ == 0);
123
123
  assert(reserved_usage_ == 0);
124
- assert(pri_cache_res_->GetTotalMemoryUsed() == sec_capacity);
124
+ bool pri_cache_res_mismatch =
125
+ pri_cache_res_->GetTotalMemoryUsed() != sec_capacity;
126
+ if (pri_cache_res_mismatch) {
127
+ fprintf(stderr,
128
+ "~CacheWithSecondaryAdapter: Primary cache reservation: "
129
+ "%zu, Secondary cache capacity: %zu, "
130
+ "Secondary cache reserved: %zu\n",
131
+ pri_cache_res_->GetTotalMemoryUsed(), sec_capacity,
132
+ sec_reserved_);
133
+ assert(pri_cache_res_mismatch);
134
+ }
125
135
  }
126
136
  #endif // NDEBUG
127
137
  }
@@ -951,12 +951,20 @@ TEST_F(DBTieredSecondaryCacheTest, FSBufferTest) {
951
951
  IODebugContext* dbg) override {
952
952
  for (size_t i = 0; i < num_reqs; ++i) {
953
953
  FSReadRequest& req = reqs[i];
954
- FSAllocationPtr buffer(new char[req.len], [](void* ptr) {
955
- delete[] static_cast<char*>(ptr);
956
- });
957
- req.fs_scratch = std::move(buffer);
954
+ // See https://github.com/facebook/rocksdb/pull/13195 for why we
955
+ // want to set up our test implementation for FSAllocationPtr this
956
+ // way.
957
+ char* internalData = new char[req.len];
958
958
  req.status = Read(req.offset, req.len, options, &req.result,
959
- static_cast<char*>(req.fs_scratch.get()), dbg);
959
+ internalData, dbg);
960
+
961
+ Slice* internalSlice = new Slice(internalData, req.len);
962
+ FSAllocationPtr internalPtr(internalSlice, [](void* ptr) {
963
+ delete[] static_cast<const char*>(
964
+ static_cast<Slice*>(ptr)->data_);
965
+ delete static_cast<Slice*>(ptr);
966
+ });
967
+ req.fs_scratch = std::move(internalPtr);
960
968
  }
961
969
  return IOStatus::OK();
962
970
  }
@@ -11,18 +11,29 @@ CRASHTEST_MAKE=$(MAKE) -f crash_test.mk
11
11
  CRASHTEST_PY=$(PYTHON) -u tools/db_crashtest.py --stress_cmd=$(DB_STRESS_CMD) --cleanup_cmd='$(DB_CLEANUP_CMD)'
12
12
 
13
13
  .PHONY: crash_test crash_test_with_atomic_flush crash_test_with_txn \
14
+ crash_test_with_wc_txn crash_test_with_wp_txn crash_test_with_wup_txn \
14
15
  crash_test_with_best_efforts_recovery crash_test_with_ts \
16
+ crash_test_with_multiops_wc_txn \
17
+ crash_test_with_multiops_wp_txn \
18
+ crash_test_with_multiops_wup_txn \
19
+ crash_test_with_optimistic_txn \
20
+ crash_test_with_tiered_storage \
15
21
  blackbox_crash_test blackbox_crash_test_with_atomic_flush \
22
+ blackbox_crash_test_with_wc_txn blackbox_crash_test_with_wp_txn \
23
+ blackbox_crash_test_with_wup_txn \
16
24
  blackbox_crash_test_with_txn blackbox_crash_test_with_ts \
17
25
  blackbox_crash_test_with_best_efforts_recovery \
18
- whitebox_crash_test whitebox_crash_test_with_atomic_flush \
19
- whitebox_crash_test_with_txn whitebox_crash_test_with_ts \
20
26
  blackbox_crash_test_with_multiops_wc_txn \
21
27
  blackbox_crash_test_with_multiops_wp_txn \
22
- crash_test_with_tiered_storage blackbox_crash_test_with_tiered_storage \
23
- whitebox_crash_test_with_tiered_storage \
24
- whitebox_crash_test_with_optimistic_txn \
28
+ blackbox_crash_test_with_multiops_wup_txn \
25
29
  blackbox_crash_test_with_optimistic_txn \
30
+ blackbox_crash_test_with_tiered_storage \
31
+ whitebox_crash_test whitebox_crash_test_with_atomic_flush \
32
+ whitebox_crash_test_with_wc_txn whitebox_crash_test_with_wp_txn \
33
+ whitebox_crash_test_with_wup_txn \
34
+ whitebox_crash_test_with_txn whitebox_crash_test_with_ts \
35
+ whitebox_crash_test_with_optimistic_txn \
36
+ whitebox_crash_test_with_tiered_storage \
26
37
 
27
38
  crash_test: $(DB_STRESS_CMD)
28
39
  # Do not parallelize
@@ -34,10 +45,20 @@ crash_test_with_atomic_flush: $(DB_STRESS_CMD)
34
45
  $(CRASHTEST_MAKE) whitebox_crash_test_with_atomic_flush
35
46
  $(CRASHTEST_MAKE) blackbox_crash_test_with_atomic_flush
36
47
 
37
- crash_test_with_txn: $(DB_STRESS_CMD)
48
+ crash_test_with_wc_txn: $(DB_STRESS_CMD)
49
+ # Do not parallelize
50
+ $(CRASHTEST_MAKE) whitebox_crash_test_with_wc_txn
51
+ $(CRASHTEST_MAKE) blackbox_crash_test_with_wc_txn
52
+
53
+ crash_test_with_wp_txn: $(DB_STRESS_CMD)
38
54
  # Do not parallelize
39
- $(CRASHTEST_MAKE) whitebox_crash_test_with_txn
40
- $(CRASHTEST_MAKE) blackbox_crash_test_with_txn
55
+ $(CRASHTEST_MAKE) whitebox_crash_test_with_wp_txn
56
+ $(CRASHTEST_MAKE) blackbox_crash_test_with_wp_txn
57
+
58
+ crash_test_with_wup_txn: $(DB_STRESS_CMD)
59
+ # Do not parallelize
60
+ $(CRASHTEST_MAKE) whitebox_crash_test_with_wup_txn
61
+ $(CRASHTEST_MAKE) blackbox_crash_test_with_wup_txn
41
62
 
42
63
  crash_test_with_optimistic_txn: $(DB_STRESS_CMD)
43
64
  # Do not parallelize
@@ -62,6 +83,9 @@ crash_test_with_multiops_wc_txn: $(DB_STRESS_CMD)
62
83
  crash_test_with_multiops_wp_txn: $(DB_STRESS_CMD)
63
84
  $(CRASHTEST_MAKE) blackbox_crash_test_with_multiops_wp_txn
64
85
 
86
+ crash_test_with_multiops_wup_txn: $(DB_STRESS_CMD)
87
+ $(CRASHTEST_MAKE) blackbox_crash_test_with_multiops_wup_txn
88
+
65
89
  blackbox_crash_test: $(DB_STRESS_CMD)
66
90
  $(CRASHTEST_PY) --simple blackbox $(CRASH_TEST_EXT_ARGS)
67
91
  $(CRASHTEST_PY) blackbox $(CRASH_TEST_EXT_ARGS)
@@ -69,8 +93,14 @@ blackbox_crash_test: $(DB_STRESS_CMD)
69
93
  blackbox_crash_test_with_atomic_flush: $(DB_STRESS_CMD)
70
94
  $(CRASHTEST_PY) --cf_consistency blackbox $(CRASH_TEST_EXT_ARGS)
71
95
 
72
- blackbox_crash_test_with_txn: $(DB_STRESS_CMD)
73
- $(CRASHTEST_PY) --txn blackbox $(CRASH_TEST_EXT_ARGS)
96
+ blackbox_crash_test_with_wc_txn: $(DB_STRESS_CMD)
97
+ $(CRASHTEST_PY) --txn blackbox --txn_write_policy 0 $(CRASH_TEST_EXT_ARGS)
98
+
99
+ blackbox_crash_test_with_wp_txn: $(DB_STRESS_CMD)
100
+ $(CRASHTEST_PY) --txn blackbox --txn_write_policy 1 $(CRASH_TEST_EXT_ARGS)
101
+
102
+ blackbox_crash_test_with_wup_txn: $(DB_STRESS_CMD)
103
+ $(CRASHTEST_PY) --txn blackbox --txn_write_policy 2 $(CRASH_TEST_EXT_ARGS)
74
104
 
75
105
  blackbox_crash_test_with_best_efforts_recovery: $(DB_STRESS_CMD)
76
106
  $(CRASHTEST_PY) --test_best_efforts_recovery blackbox $(CRASH_TEST_EXT_ARGS)
@@ -79,10 +109,13 @@ blackbox_crash_test_with_ts: $(DB_STRESS_CMD)
79
109
  $(CRASHTEST_PY) --enable_ts blackbox $(CRASH_TEST_EXT_ARGS)
80
110
 
81
111
  blackbox_crash_test_with_multiops_wc_txn: $(DB_STRESS_CMD)
82
- $(CRASHTEST_PY) --test_multiops_txn --write_policy write_committed blackbox $(CRASH_TEST_EXT_ARGS)
112
+ $(CRASHTEST_PY) --test_multiops_txn --txn_write_policy 0 blackbox $(CRASH_TEST_EXT_ARGS)
83
113
 
84
114
  blackbox_crash_test_with_multiops_wp_txn: $(DB_STRESS_CMD)
85
- $(CRASHTEST_PY) --test_multiops_txn --write_policy write_prepared blackbox $(CRASH_TEST_EXT_ARGS)
115
+ $(CRASHTEST_PY) --test_multiops_txn --txn_write_policy 1 blackbox $(CRASH_TEST_EXT_ARGS)
116
+
117
+ blackbox_crash_test_with_multiops_wup_txn: $(DB_STRESS_CMD)
118
+ $(CRASHTEST_PY) --test_multiops_txn --txn_write_policy 2 blackbox $(CRASH_TEST_EXT_ARGS)
86
119
 
87
120
  blackbox_crash_test_with_tiered_storage: $(DB_STRESS_CMD)
88
121
  $(CRASHTEST_PY) --test_tiered_storage blackbox $(CRASH_TEST_EXT_ARGS)
@@ -104,9 +137,17 @@ whitebox_crash_test_with_atomic_flush: $(DB_STRESS_CMD)
104
137
  $(CRASHTEST_PY) --cf_consistency whitebox --random_kill_odd \
105
138
  $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
106
139
 
107
- whitebox_crash_test_with_txn: $(DB_STRESS_CMD)
108
- $(CRASHTEST_PY) --txn whitebox --random_kill_odd \
109
- $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
140
+ whitebox_crash_test_with_wc_txn: $(DB_STRESS_CMD)
141
+ $(CRASHTEST_PY) --txn whitebox --txn_write_policy 0 \
142
+ --random_kill_odd $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
143
+
144
+ whitebox_crash_test_with_wp_txn: $(DB_STRESS_CMD)
145
+ $(CRASHTEST_PY) --txn whitebox --txn_write_policy 1 \
146
+ --random_kill_odd $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
147
+
148
+ whitebox_crash_test_with_wup_txn: $(DB_STRESS_CMD)
149
+ $(CRASHTEST_PY) --txn whitebox --txn_write_policy 2 \
150
+ --random_kill_odd $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
110
151
 
111
152
  whitebox_crash_test_with_ts: $(DB_STRESS_CMD)
112
153
  $(CRASHTEST_PY) --enable_ts whitebox --random_kill_odd \
@@ -119,3 +160,8 @@ whitebox_crash_test_with_tiered_storage: $(DB_STRESS_CMD)
119
160
  whitebox_crash_test_with_optimistic_txn: $(DB_STRESS_CMD)
120
161
  $(CRASHTEST_PY) --optimistic_txn whitebox --random_kill_odd \
121
162
  $(CRASH_TEST_KILL_ODD) $(CRASH_TEST_EXT_ARGS)
163
+
164
+ # Old names DEPRECATED
165
+ crash_test_with_txn: crash_test_with_wc_txn
166
+ whitebox_crash_test_with_txn: whitebox_crash_test_with_wc_txn
167
+ blackbox_crash_test_with_txn: blackbox_crash_test_with_wc_txn
@@ -42,9 +42,9 @@ Status ArenaWrappedDBIter::GetProperty(std::string prop_name,
42
42
  void ArenaWrappedDBIter::Init(
43
43
  Env* env, const ReadOptions& read_options, const ImmutableOptions& ioptions,
44
44
  const MutableCFOptions& mutable_cf_options, const Version* version,
45
- const SequenceNumber& sequence, uint64_t max_sequential_skip_in_iteration,
46
- uint64_t version_number, ReadCallback* read_callback,
47
- ColumnFamilyHandleImpl* cfh, bool expose_blob_index, bool allow_refresh) {
45
+ const SequenceNumber& sequence, uint64_t version_number,
46
+ ReadCallback* read_callback, ColumnFamilyHandleImpl* cfh,
47
+ bool expose_blob_index, bool allow_refresh, ReadOnlyMemTable* active_mem) {
48
48
  read_options_ = read_options;
49
49
  if (!CheckFSFeatureSupport(env->GetFileSystem().get(),
50
50
  FSSupportedOps::kAsyncIO)) {
@@ -52,20 +52,128 @@ void ArenaWrappedDBIter::Init(
52
52
  }
53
53
  read_options_.total_order_seek |= ioptions.prefix_seek_opt_in_only;
54
54
 
55
- auto mem = arena_.AllocateAligned(sizeof(DBIter));
56
- db_iter_ = new (mem) DBIter(env, read_options_, ioptions, mutable_cf_options,
57
- ioptions.user_comparator,
58
- /* iter */ nullptr, version, sequence, true,
59
- max_sequential_skip_in_iteration, read_callback,
60
- cfh, expose_blob_index);
55
+ db_iter_ = DBIter::NewIter(
56
+ env, read_options_, ioptions, mutable_cf_options,
57
+ ioptions.user_comparator, /*internal_iter=*/nullptr, version, sequence,
58
+ read_callback, active_mem, cfh, expose_blob_index, &arena_);
61
59
 
62
60
  sv_number_ = version_number;
63
61
  allow_refresh_ = allow_refresh;
62
+ allow_mark_memtable_for_flush_ = active_mem;
64
63
  memtable_range_tombstone_iter_ = nullptr;
65
64
  }
66
65
 
66
+ void ArenaWrappedDBIter::MaybeAutoRefresh(bool is_seek,
67
+ DBIter::Direction direction) {
68
+ if (cfh_ != nullptr && read_options_.snapshot != nullptr && allow_refresh_ &&
69
+ read_options_.auto_refresh_iterator_with_snapshot) {
70
+ // The intent here is to capture the superversion number change
71
+ // reasonably soon from the time it actually happened. As such,
72
+ // we're fine with weaker synchronization / ordering guarantees
73
+ // provided by relaxed atomic (in favor of less CPU / mem overhead).
74
+ uint64_t cur_sv_number = cfh_->cfd()->GetSuperVersionNumberRelaxed();
75
+ if ((sv_number_ != cur_sv_number) && status().ok()) {
76
+ // Changing iterators' direction is pretty heavy-weight operation and
77
+ // could have unintended consequences when it comes to prefix seek.
78
+ // Therefore, we need an efficient implementation that does not duplicate
79
+ // the effort by doing things like double seek(forprev).
80
+ //
81
+ // Auto refresh can be triggered on the following groups of operations:
82
+ //
83
+ // 1. [Seek]: Seek(), SeekForPrev()
84
+ // 2. [Non-Seek]: Next(), Prev()
85
+ //
86
+ // In case of 'Seek' group, procedure is fairly straightforward as we'll
87
+ // simply call refresh and then invoke the operation on intended target.
88
+ //
89
+ // In case of 'Non-Seek' group, we'll first advance the cursor by invoking
90
+ // intended user operation (Next() or Prev()), capture the target key T,
91
+ // refresh the iterator and then reconcile the refreshed iterator by
92
+ // explicitly calling [Seek(T) or SeekForPrev(T)]. Below is an example
93
+ // flow for Next(), but same principle applies to Prev():
94
+ //
95
+ //
96
+ // T0: Before the operation T1: Execute Next()
97
+ // | |
98
+ // | -------------
99
+ // | | * capture the key (T)
100
+ // DBIter(SV#A) | |
101
+ // --------------\ /------\ /---------
102
+ // SV #A | ... -> [ X ] -> [ T ] -> ... |
103
+ // -----------------------------------
104
+ // / |
105
+ // / |
106
+ // / T2: Refresh iterator
107
+ // /
108
+ // DBIter(SV#A') /
109
+ // ----------------------------------
110
+ // SV #A' | ... -> [ T ] -> ... |
111
+ // ----------------/ \---------------
112
+ // |
113
+ // ---- T3: Seek(T)
114
+ //
115
+ bool valid = false;
116
+ std::string key;
117
+ if (!is_seek && db_iter_->Valid()) {
118
+ // The key() Slice is valid until the iterator state changes.
119
+ // Given that refresh is heavy-weight operation it itself,
120
+ // we should copy the target key upfront to avoid reading bad value.
121
+ valid = true;
122
+ key = db_iter_->key().ToString();
123
+ }
124
+
125
+ // It's perfectly fine to unref the corresponding superversion
126
+ // as we rely on pinning behavior of snapshot for consistency.
127
+ DoRefresh(read_options_.snapshot, cur_sv_number);
128
+
129
+ if (!is_seek && valid) { // Reconcile new iterator after Next() / Prev()
130
+ if (direction == DBIter::kForward) {
131
+ db_iter_->Seek(key);
132
+ } else {
133
+ assert(direction == DBIter::kReverse);
134
+ db_iter_->SeekForPrev(key);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+
67
141
  Status ArenaWrappedDBIter::Refresh() { return Refresh(nullptr); }
68
142
 
143
+ void ArenaWrappedDBIter::DoRefresh(const Snapshot* snapshot,
144
+ [[maybe_unused]] uint64_t sv_number) {
145
+ Env* env = db_iter_->env();
146
+
147
+ // NOTE:
148
+ //
149
+ // Errors like file deletion (as a part of SV cleanup in ~DBIter) will be
150
+ // present in the error log, but won't be reflected in the iterator status.
151
+ // This is by design as we expect compaction to clean up those obsolete files
152
+ // eventually.
153
+ db_iter_->~DBIter();
154
+
155
+ arena_.~Arena();
156
+ new (&arena_) Arena();
157
+
158
+ auto cfd = cfh_->cfd();
159
+ auto db_impl = cfh_->db();
160
+
161
+ SuperVersion* sv = cfd->GetReferencedSuperVersion(db_impl);
162
+ assert(sv->version_number >= sv_number);
163
+ SequenceNumber read_seq = GetSeqNum(db_impl, snapshot);
164
+ if (read_callback_) {
165
+ read_callback_->Refresh(read_seq);
166
+ }
167
+ Init(env, read_options_, cfd->ioptions(), sv->mutable_cf_options, sv->current,
168
+ read_seq, sv->version_number, read_callback_, cfh_, expose_blob_index_,
169
+ allow_refresh_, allow_mark_memtable_for_flush_ ? sv->mem : nullptr);
170
+
171
+ InternalIterator* internal_iter = db_impl->NewInternalIterator(
172
+ read_options_, cfd, sv, &arena_, read_seq,
173
+ /* allow_unprepared_value */ true, /* db_iter */ this);
174
+ SetIterUnderDBIter(internal_iter);
175
+ }
176
+
69
177
  Status ArenaWrappedDBIter::Refresh(const Snapshot* snapshot) {
70
178
  if (cfh_ == nullptr || !allow_refresh_) {
71
179
  return Status::NotSupported("Creating renew iterator is not allowed.");
@@ -85,32 +193,9 @@ Status ArenaWrappedDBIter::Refresh(const Snapshot* snapshot) {
85
193
  TEST_SYNC_POINT("ArenaWrappedDBIter::Refresh:1");
86
194
  TEST_SYNC_POINT("ArenaWrappedDBIter::Refresh:2");
87
195
 
88
- auto reinit_internal_iter = [&]() {
89
- Env* env = db_iter_->env();
90
- db_iter_->~DBIter();
91
- arena_.~Arena();
92
- new (&arena_) Arena();
93
-
94
- SuperVersion* sv = cfd->GetReferencedSuperVersion(db_impl);
95
- assert(sv->version_number >= cur_sv_number);
96
- SequenceNumber read_seq = GetSeqNum(db_impl, snapshot);
97
- if (read_callback_) {
98
- read_callback_->Refresh(read_seq);
99
- }
100
- Init(env, read_options_, *(cfd->ioptions()), sv->mutable_cf_options,
101
- sv->current, read_seq,
102
- sv->mutable_cf_options.max_sequential_skip_in_iterations,
103
- sv->version_number, read_callback_, cfh_, expose_blob_index_,
104
- allow_refresh_);
105
-
106
- InternalIterator* internal_iter = db_impl->NewInternalIterator(
107
- read_options_, cfd, sv, &arena_, read_seq,
108
- /* allow_unprepared_value */ true, /* db_iter */ this);
109
- SetIterUnderDBIter(internal_iter);
110
- };
111
196
  while (true) {
112
197
  if (sv_number_ != cur_sv_number) {
113
- reinit_internal_iter();
198
+ DoRefresh(snapshot, cur_sv_number);
114
199
  break;
115
200
  } else {
116
201
  SequenceNumber read_seq = GetSeqNum(db_impl, snapshot);
@@ -138,7 +223,7 @@ Status ArenaWrappedDBIter::Refresh(const Snapshot* snapshot) {
138
223
  db_impl->ReturnAndCleanupSuperVersion(cfd, sv);
139
224
  // The memtable under DBIter did not have range tombstone before
140
225
  // refresh.
141
- reinit_internal_iter();
226
+ DoRefresh(snapshot, cur_sv_number);
142
227
  break;
143
228
  } else {
144
229
  *memtable_range_tombstone_iter_ =
@@ -166,20 +251,26 @@ Status ArenaWrappedDBIter::Refresh(const Snapshot* snapshot) {
166
251
  }
167
252
 
168
253
  ArenaWrappedDBIter* NewArenaWrappedDbIterator(
169
- Env* env, const ReadOptions& read_options, const ImmutableOptions& ioptions,
170
- const MutableCFOptions& mutable_cf_options, const Version* version,
171
- const SequenceNumber& sequence, uint64_t max_sequential_skip_in_iterations,
172
- uint64_t version_number, ReadCallback* read_callback,
173
- ColumnFamilyHandleImpl* cfh, bool expose_blob_index, bool allow_refresh) {
174
- ArenaWrappedDBIter* iter = new ArenaWrappedDBIter();
175
- iter->Init(env, read_options, ioptions, mutable_cf_options, version, sequence,
176
- max_sequential_skip_in_iterations, version_number, read_callback,
177
- cfh, expose_blob_index, allow_refresh);
254
+ Env* env, const ReadOptions& read_options, ColumnFamilyHandleImpl* cfh,
255
+ SuperVersion* sv, const SequenceNumber& sequence,
256
+ ReadCallback* read_callback, DBImpl* db_impl, bool expose_blob_index,
257
+ bool allow_refresh, bool allow_mark_memtable_for_flush) {
258
+ ArenaWrappedDBIter* db_iter = new ArenaWrappedDBIter();
259
+ db_iter->Init(env, read_options, cfh->cfd()->ioptions(),
260
+ sv->mutable_cf_options, sv->current, sequence,
261
+ sv->version_number, read_callback, cfh, expose_blob_index,
262
+ allow_refresh,
263
+ allow_mark_memtable_for_flush ? sv->mem : nullptr);
178
264
  if (cfh != nullptr && allow_refresh) {
179
- iter->StoreRefreshInfo(cfh, read_callback, expose_blob_index);
265
+ db_iter->StoreRefreshInfo(cfh, read_callback, expose_blob_index);
180
266
  }
181
267
 
182
- return iter;
268
+ InternalIterator* internal_iter = db_impl->NewInternalIterator(
269
+ db_iter->GetReadOptions(), cfh->cfd(), sv, db_iter->GetArena(), sequence,
270
+ /*allow_unprepared_value=*/true, db_iter);
271
+ db_iter->SetIterUnderDBIter(internal_iter);
272
+
273
+ return db_iter;
183
274
  }
184
275
 
185
276
  } // namespace ROCKSDB_NAMESPACE