@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
@@ -5,7 +5,6 @@
5
5
 
6
6
  #pragma once
7
7
 
8
-
9
8
  #include "rocksdb/db.h"
10
9
  #include "rocksdb/types.h"
11
10
 
@@ -34,13 +33,12 @@ struct KeyVersion {
34
33
  // copied to memory, if the range covers too many keys, the memory usage
35
34
  // may be huge. `max_num_ikeys` can be used to cap the memory usage.
36
35
  // The result is inserted into the provided vector, `key_versions`.
37
- Status GetAllKeyVersions(DB* db, Slice begin_key, Slice end_key,
36
+ Status GetAllKeyVersions(DB* db, OptSlice begin_key, OptSlice end_key,
38
37
  size_t max_num_ikeys,
39
38
  std::vector<KeyVersion>* key_versions);
40
39
 
41
- Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh, Slice begin_key,
42
- Slice end_key, size_t max_num_ikeys,
40
+ Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh, OptSlice begin_key,
41
+ OptSlice end_key, size_t max_num_ikeys,
43
42
  std::vector<KeyVersion>* key_versions);
44
43
 
45
44
  } // namespace ROCKSDB_NAMESPACE
46
-
@@ -18,7 +18,6 @@
18
18
 
19
19
  #pragma once
20
20
 
21
-
22
21
  #include <algorithm>
23
22
  #include <iostream>
24
23
  #include <vector>
@@ -176,4 +175,3 @@ class EnvMirror : public EnvWrapper {
176
175
  };
177
176
 
178
177
  } // namespace ROCKSDB_NAMESPACE
179
-
@@ -5,7 +5,6 @@
5
5
  //
6
6
  #pragma once
7
7
 
8
-
9
8
  #include <stdio.h>
10
9
  #include <stdlib.h>
11
10
 
@@ -331,7 +330,7 @@ class LDBCommandRunner {
331
330
 
332
331
  // Returns the status code to return. 0 is no error.
333
332
  static int RunCommand(
334
- int argc, char const* const* argv, Options options,
333
+ int argc, char const* const* argv, const Options& options,
335
334
  const LDBOptions& ldb_options,
336
335
  const std::vector<ColumnFamilyDescriptor>* column_families);
337
336
  };
@@ -3,7 +3,6 @@
3
3
  // COPYING file in the root directory) and Apache 2.0 License
4
4
  // (found in the LICENSE.Apache file in the root directory).
5
5
 
6
-
7
6
  #pragma once
8
7
 
9
8
  #include <map>
@@ -5,7 +5,6 @@
5
5
 
6
6
  #pragma once
7
7
 
8
-
9
8
  #include <functional>
10
9
  #include <map>
11
10
  #include <memory>
@@ -163,7 +162,7 @@ class ObjectLibrary {
163
162
  size_t slength_; // The minimum required length to match the separators
164
163
  std::vector<std::pair<std::string, Quantifier>>
165
164
  separators_; // What to match
166
- }; // End class Entry
165
+ }; // End class Entry
167
166
 
168
167
  private:
169
168
  // An Entry containing a FactoryFunc for creating new Objects
@@ -6,7 +6,6 @@
6
6
  // This file contains utility functions for RocksDB Options.
7
7
  #pragma once
8
8
 
9
-
10
9
  #include <string>
11
10
  #include <vector>
12
11
 
@@ -6,10 +6,12 @@
6
6
 
7
7
  #pragma once
8
8
 
9
+ #include <memory>
9
10
  #include <optional>
10
11
  #include <string>
11
12
  #include <variant>
12
13
 
14
+ #include "rocksdb/iterator.h"
13
15
  #include "rocksdb/rocksdb_namespace.h"
14
16
  #include "rocksdb/slice.h"
15
17
  #include "rocksdb/status.h"
@@ -18,10 +20,8 @@ namespace ROCKSDB_NAMESPACE {
18
20
 
19
21
  class ColumnFamilyHandle;
20
22
 
21
- // / \ UNDER CONSTRUCTION
22
- // / ! \ UNDER CONSTRUCTION
23
- // /-----\ UNDER CONSTRUCTION
24
-
23
+ // EXPERIMENTAL
24
+ //
25
25
  // A secondary index is an additional data structure built over a set of primary
26
26
  // key-values that enables efficiently querying key-values by value instead of
27
27
  // key. Both plain and wide-column key-values can be indexed, the latter on a
@@ -49,6 +49,7 @@ class ColumnFamilyHandle;
49
49
  // Note: the methods of SecondaryIndex implementations are expected to be
50
50
  // thread-safe with the exception of Set{Primary,Secondary}ColumnFamily (which
51
51
  // are not expected to be called after initialization).
52
+
52
53
  class SecondaryIndex {
53
54
  public:
54
55
  virtual ~SecondaryIndex() = default;
@@ -77,14 +78,24 @@ class SecondaryIndex {
77
78
  // called by the transaction layer when adding or removing secondary index
78
79
  // entries (which have the form <secondary_key_prefix><primary_key> ->
79
80
  // <secondary_value>) and should be deterministic. The output parameter
80
- // secondary_key_prefix is expected to be based on primary_column_value,
81
- // potentially with some additional metadata to prevent ambiguities (e.g.
82
- // index id or length indicator). Returning a non-OK status rolls back all
83
- // operations in the transaction related to this primary key-value.
81
+ // secondary_key_prefix is expected to be based on primary_key and/or
82
+ // primary_column_value. Returning a non-OK status rolls back all operations
83
+ // in the transaction related to this primary key-value.
84
84
  virtual Status GetSecondaryKeyPrefix(
85
85
  const Slice& primary_key, const Slice& primary_column_value,
86
86
  std::variant<Slice, std::string>* secondary_key_prefix) const = 0;
87
87
 
88
+ // Finalize the secondary key prefix, for instance by adding some metadata to
89
+ // prevent ambiguities (e.g. index id or length indicator). This method is
90
+ // called by the transaction layer when adding or removing secondary index
91
+ // entries (which have the form <secondary_key_prefix><primary_key> ->
92
+ // <secondary_value>) and also when querying the index (in which case it is
93
+ // called with the search target). The method should be deterministic.
94
+ // Returning a non-OK status rolls back all operations in the transaction
95
+ // related to this primary key-value.
96
+ virtual Status FinalizeSecondaryKeyPrefix(
97
+ std::variant<Slice, std::string>* secondary_key_prefix) const = 0;
98
+
88
99
  // Get the optional secondary value for a given primary key-value. This method
89
100
  // is called by the transaction layer when adding secondary index
90
101
  // entries (which have the form <secondary_key_prefix><primary_key> ->
@@ -99,4 +110,81 @@ class SecondaryIndex {
99
110
  const = 0;
100
111
  };
101
112
 
113
+ // SecondaryIndexIterator can be used to find the primary keys for a given
114
+ // search target. It can be used as-is or as a building block. Its interface
115
+ // mirrors most of the Iterator API, with the exception of SeekToFirst,
116
+ // SeekToLast, and SeekForPrev, which are not applicable to secondary indices
117
+ // and thus not present. Querying the index can be performed by calling the
118
+ // returned iterator's Seek API with a search target, and then using Next (and
119
+ // potentially Prev) to iterate through the matching index entries. The iterator
120
+ // exposes primary keys, that is, the secondary key prefix is stripped from the
121
+ // index entries.
122
+
123
+ class SecondaryIndexIterator {
124
+ public:
125
+ // Constructs a SecondaryIndexIterator. The SecondaryIndexIterator takes
126
+ // ownership of the underlying iterator.
127
+ // PRE: index is not nullptr
128
+ // PRE: underlying_it is not nullptr and points to an iterator over the
129
+ // index's secondary column family
130
+ SecondaryIndexIterator(const SecondaryIndex* index,
131
+ std::unique_ptr<Iterator>&& underlying_it);
132
+
133
+ // Returns whether the iterator is valid, i.e. whether it is positioned on a
134
+ // secondary index entry matching the search target.
135
+ bool Valid() const;
136
+
137
+ // Returns the status of the iterator, which is guaranteed to be OK if the
138
+ // iterator is valid. Otherwise, it might be non-OK, which indicates an error,
139
+ // or OK, which means that the iterator has reached the end of the applicable
140
+ // secondary index entries.
141
+ Status status() const;
142
+
143
+ // Query the index with the given search target.
144
+ void Seek(const Slice& target);
145
+
146
+ // Move the iterator to the next entry.
147
+ // PRE: Valid()
148
+ void Next();
149
+
150
+ // Move the iterator back to the previous entry.
151
+ // PRE: Valid()
152
+ void Prev();
153
+
154
+ // Prepare the value of the current entry. Should be called before calling
155
+ // value() or columns() if the underlying iterator was constructed with the
156
+ // read option allow_unprepared_value set to true. Returns true upon success.
157
+ // Returns false and sets the status to non-OK upon failure.
158
+ // PRE: Valid()
159
+ bool PrepareValue();
160
+
161
+ // Returns the primary key from the current secondary index entry.
162
+ // PRE: Valid()
163
+ Slice key() const;
164
+
165
+ // Returns the value of the current secondary index entry.
166
+ // PRE: Valid()
167
+ Slice value() const;
168
+
169
+ // Returns the value of the current secondary index entry as a wide-column
170
+ // structure.
171
+ // PRE: Valid()
172
+ const WideColumns& columns() const;
173
+
174
+ // Returns the timestamp of the current secondary index entry.
175
+ // PRE: Valid()
176
+ Slice timestamp() const;
177
+
178
+ // Queries the given property of the underlying iterator. Returns OK on
179
+ // success, non-OK on failure.
180
+ // PRE: Valid()
181
+ Status GetProperty(std::string prop_name, std::string* prop) const;
182
+
183
+ private:
184
+ const SecondaryIndex* index_;
185
+ std::unique_ptr<Iterator> underlying_it_;
186
+ Status status_;
187
+ std::string prefix_;
188
+ };
189
+
102
190
  } // namespace ROCKSDB_NAMESPACE
@@ -0,0 +1,117 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
3
+ // This source code is licensed under both the GPLv2 (found in the
4
+ // COPYING file in the root directory) and Apache 2.0 License
5
+ // (found in the LICENSE.Apache file in the root directory).
6
+
7
+ #pragma once
8
+
9
+ #include <memory>
10
+ #include <string>
11
+ #include <utility>
12
+ #include <vector>
13
+
14
+ #include "rocksdb/rocksdb_namespace.h"
15
+ #include "rocksdb/slice.h"
16
+ #include "rocksdb/utilities/secondary_index.h"
17
+
18
+ namespace faiss {
19
+ struct IndexIVF;
20
+ }
21
+
22
+ namespace ROCKSDB_NAMESPACE {
23
+
24
+ // EXPERIMENTAL
25
+ //
26
+ // A SecondaryIndex implementation that wraps a FAISS inverted file based index.
27
+ // Indexes the embedding in the specified primary column using the given
28
+ // pre-trained faiss::IndexIVF object. Can be used to perform
29
+ // K-nearest-neighbors queries.
30
+
31
+ class FaissIVFIndex : public SecondaryIndex {
32
+ public:
33
+ // Constructs a FaissIVFIndex object. Takes ownership of the given
34
+ // faiss::IndexIVF instance.
35
+ // PRE: index is not nullptr
36
+ FaissIVFIndex(std::unique_ptr<faiss::IndexIVF>&& index,
37
+ std::string primary_column_name);
38
+ ~FaissIVFIndex() override;
39
+
40
+ void SetPrimaryColumnFamily(ColumnFamilyHandle* column_family) override;
41
+ void SetSecondaryColumnFamily(ColumnFamilyHandle* column_family) override;
42
+
43
+ ColumnFamilyHandle* GetPrimaryColumnFamily() const override;
44
+ ColumnFamilyHandle* GetSecondaryColumnFamily() const override;
45
+
46
+ Slice GetPrimaryColumnName() const override;
47
+
48
+ Status UpdatePrimaryColumnValue(
49
+ const Slice& primary_key, const Slice& primary_column_value,
50
+ std::optional<std::variant<Slice, std::string>>* updated_column_value)
51
+ const override;
52
+
53
+ Status GetSecondaryKeyPrefix(
54
+ const Slice& primary_key, const Slice& primary_column_value,
55
+ std::variant<Slice, std::string>* secondary_key_prefix) const override;
56
+
57
+ Status FinalizeSecondaryKeyPrefix(
58
+ std::variant<Slice, std::string>* secondary_key_prefix) const override;
59
+
60
+ Status GetSecondaryValue(const Slice& primary_key,
61
+ const Slice& primary_column_value,
62
+ const Slice& original_column_value,
63
+ std::optional<std::variant<Slice, std::string>>*
64
+ secondary_value) const override;
65
+
66
+ // Performs a K-nearest-neighbors vector similarity search for the target
67
+ // using the given secondary index iterator, where K is given by the parameter
68
+ // neighbors and the number of inverted lists to search is given by the
69
+ // parameter probes. The resulting primary keys and distances are returned in
70
+ // the result output parameter. Note that the search may return less than the
71
+ // requested number of results if the inverted lists probed are exhausted
72
+ // before finding K items.
73
+ //
74
+ // The parameter it should be non-nullptr and point to a secondary index
75
+ // iterator corresponding to this index. The search target should be of the
76
+ // correct dimension (i.e. target.size() == dim * sizeof(float), where dim is
77
+ // the dimensionality of the index), neighbors and probes should be positive,
78
+ // and result should be non-nullptr.
79
+ //
80
+ // Returns OK on success, InvalidArgument if the preconditions above are not
81
+ // met, or some other non-OK status if there is an error during the search.
82
+ Status FindKNearestNeighbors(
83
+ SecondaryIndexIterator* it, const Slice& target, size_t neighbors,
84
+ size_t probes, std::vector<std::pair<std::string, float>>* result) const;
85
+
86
+ private:
87
+ struct KNNContext;
88
+ class Adapter;
89
+
90
+ std::unique_ptr<Adapter> adapter_;
91
+ std::unique_ptr<faiss::IndexIVF> index_;
92
+ std::string primary_column_name_;
93
+ ColumnFamilyHandle* primary_column_family_{};
94
+ ColumnFamilyHandle* secondary_column_family_{};
95
+ };
96
+
97
+ // Helper methods to convert embeddings from a span of floats to Slice or vice
98
+ // versa
99
+
100
+ // Convert the given span of floats of size dim to a Slice.
101
+ // PRE: embedding points to a contiguous span of floats of size dim
102
+ inline Slice ConvertFloatsToSlice(const float* embedding, size_t dim) {
103
+ return Slice(reinterpret_cast<const char*>(embedding), dim * sizeof(float));
104
+ }
105
+
106
+ // Convert the given Slice to a span of floats of size dim.
107
+ // PRE: embedding.size() == dim * sizeof(float)
108
+ // Returns nullptr if the precondition is violated.
109
+ inline const float* ConvertSliceToFloats(const Slice& embedding, size_t dim) {
110
+ if (embedding.size() != dim * sizeof(float)) {
111
+ return nullptr;
112
+ }
113
+
114
+ return reinterpret_cast<const float*>(embedding.data());
115
+ }
116
+
117
+ } // namespace ROCKSDB_NAMESPACE
@@ -6,20 +6,21 @@
6
6
 
7
7
  #pragma once
8
8
 
9
- #include <memory>
10
9
  #include <string>
11
10
 
12
- #include "faiss/IndexIVF.h"
11
+ #include "rocksdb/rocksdb_namespace.h"
13
12
  #include "rocksdb/utilities/secondary_index.h"
14
13
 
15
14
  namespace ROCKSDB_NAMESPACE {
16
15
 
17
- // A SecondaryIndex implementation that wraps a FAISS inverted file index.
18
- class FaissIVFIndex : public SecondaryIndex {
16
+ // EXPERIMENTAL
17
+ //
18
+ // A simple secondary index implementation that indexes the specified column
19
+ // as-is.
20
+
21
+ class SimpleSecondaryIndex : public SecondaryIndex {
19
22
  public:
20
- explicit FaissIVFIndex(std::unique_ptr<faiss::IndexIVF>&& index,
21
- std::string primary_column_name);
22
- ~FaissIVFIndex() override;
23
+ explicit SimpleSecondaryIndex(std::string primary_column_name);
23
24
 
24
25
  void SetPrimaryColumnFamily(ColumnFamilyHandle* column_family) override;
25
26
  void SetSecondaryColumnFamily(ColumnFamilyHandle* column_family) override;
@@ -38,6 +39,9 @@ class FaissIVFIndex : public SecondaryIndex {
38
39
  const Slice& primary_key, const Slice& primary_column_value,
39
40
  std::variant<Slice, std::string>* secondary_key_prefix) const override;
40
41
 
42
+ Status FinalizeSecondaryKeyPrefix(
43
+ std::variant<Slice, std::string>* secondary_key_prefix) const override;
44
+
41
45
  Status GetSecondaryValue(const Slice& primary_key,
42
46
  const Slice& primary_column_value,
43
47
  const Slice& original_column_value,
@@ -45,13 +49,6 @@ class FaissIVFIndex : public SecondaryIndex {
45
49
  secondary_value) const override;
46
50
 
47
51
  private:
48
- class Adapter;
49
-
50
- static std::string SerializeLabel(faiss::idx_t label);
51
- static faiss::idx_t DeserializeLabel(Slice label_slice);
52
-
53
- std::unique_ptr<Adapter> adapter_;
54
- std::unique_ptr<faiss::IndexIVF> index_;
55
52
  std::string primary_column_name_;
56
53
  ColumnFamilyHandle* primary_column_family_{};
57
54
  ColumnFamilyHandle* secondary_column_family_{};
@@ -27,6 +27,10 @@ class StackableDB : public DB {
27
27
  explicit StackableDB(std::shared_ptr<DB> db)
28
28
  : db_(db.get()), shared_db_ptr_(db) {}
29
29
 
30
+ // StackableDB take sole ownership of the underlying db.
31
+ explicit StackableDB(std::unique_ptr<DB>&& db)
32
+ : db_(db.get()), shared_db_ptr_(std::move(db)) {}
33
+
30
34
  ~StackableDB() override {
31
35
  if (shared_db_ptr_ == nullptr) {
32
36
  delete db_;
@@ -285,6 +289,13 @@ class StackableDB : public DB {
285
289
  return db_->NewAttributeGroupIterator(options, column_families);
286
290
  }
287
291
 
292
+ using DB::NewMultiScan;
293
+ std::unique_ptr<MultiScan> NewMultiScan(
294
+ const ReadOptions& opts, ColumnFamilyHandle* column_family,
295
+ const std::vector<ScanOptions>& scan_opts) override {
296
+ return db_->NewMultiScan(opts, column_family, scan_opts);
297
+ }
298
+
288
299
  const Snapshot* GetSnapshot() override { return db_->GetSnapshot(); }
289
300
 
290
301
  void ReleaseSnapshot(const Snapshot* snapshot) override {
@@ -501,28 +512,24 @@ class StackableDB : public DB {
501
512
  return db_->GetFullHistoryTsLow(column_family, ts_low);
502
513
  }
503
514
 
515
+ Status GetNewestUserDefinedTimestamp(ColumnFamilyHandle* column_family,
516
+ std::string* newest_timestamp) override {
517
+ return db_->GetNewestUserDefinedTimestamp(column_family, newest_timestamp);
518
+ }
519
+
504
520
  Status GetSortedWalFiles(VectorWalPtr& files) override {
505
521
  return db_->GetSortedWalFiles(files);
506
522
  }
507
523
 
508
524
  Status GetCurrentWalFile(
509
- std::unique_ptr<WalFile>* current_log_file) override {
510
- return db_->GetCurrentWalFile(current_log_file);
525
+ std::unique_ptr<WalFile>* current_wal_file) override {
526
+ return db_->GetCurrentWalFile(current_wal_file);
511
527
  }
512
528
 
513
529
  Status GetCreationTimeOfOldestFile(uint64_t* creation_time) override {
514
530
  return db_->GetCreationTimeOfOldestFile(creation_time);
515
531
  }
516
532
 
517
- // WARNING: This API is planned for removal in RocksDB 7.0 since it does not
518
- // operate at the proper level of abstraction for a key-value store, and its
519
- // contract/restrictions are poorly documented. For example, it returns non-OK
520
- // `Status` for non-bottommost files and files undergoing compaction. Since we
521
- // do not plan to maintain it, the contract will likely remain underspecified
522
- // until its removal. Any user is encouraged to read the implementation
523
- // carefully and migrate away from it when possible.
524
- Status DeleteFile(std::string name) override { return db_->DeleteFile(name); }
525
-
526
533
  Status GetDbIdentity(std::string& identity) const override {
527
534
  return db_->GetDbIdentity(identity);
528
535
  }
@@ -559,6 +566,14 @@ class StackableDB : public DB {
559
566
  return db_->GetPropertiesOfTablesInRange(column_family, range, n, props);
560
567
  }
561
568
 
569
+ using DB::GetPropertiesOfTablesByLevel;
570
+ Status GetPropertiesOfTablesByLevel(
571
+ ColumnFamilyHandle* column_family,
572
+ std::vector<std::unique_ptr<TablePropertiesCollection>>* props_by_level)
573
+ override {
574
+ return db_->GetPropertiesOfTablesByLevel(column_family, props_by_level);
575
+ }
576
+
562
577
  Status GetUpdatesSince(
563
578
  SequenceNumber seq_number, std::unique_ptr<TransactionLogIterator>* iter,
564
579
  const TransactionLogIterator::ReadOptions& read_options) override {
@@ -23,15 +23,20 @@ class CompactOnDeletionCollectorFactory
23
23
  // A factory of a table property collector that marks a SST
24
24
  // file as need-compaction when it observe at least "D" deletion
25
25
  // entries in any "N" consecutive entries, or the ratio of tombstone
26
- // entries >= deletion_ratio.
26
+ // entries >= deletion_ratio for the entire file.
27
27
  //
28
28
  // @param sliding_window_size "N"
29
29
  // @param deletion_trigger "D"
30
30
  // @param deletion_ratio, if <= 0 or > 1, disable triggering compaction
31
31
  // based on deletion ratio.
32
+ // @param min_file_size, a file needs to be at least this size to be marked
33
+ // for compaction. See comments above
34
+ // TablePropertiesCollector::AddUserKey() for limitations/inaccuracies on
35
+ // the file size.
32
36
  CompactOnDeletionCollectorFactory(size_t sliding_window_size,
33
37
  size_t deletion_trigger,
34
- double deletion_ratio);
38
+ double deletion_ratio,
39
+ uint64_t min_file_size = 0);
35
40
 
36
41
  ~CompactOnDeletionCollectorFactory() override {}
37
42
 
@@ -59,6 +64,12 @@ class CompactOnDeletionCollectorFactory
59
64
  }
60
65
 
61
66
  double GetDeletionRatio() const { return deletion_ratio_.load(); }
67
+
68
+ uint64_t GetMinFileSize() const { return min_file_size_.load(); }
69
+ void SetMinFileSize(uint64_t min_file_size) {
70
+ min_file_size_.store(min_file_size);
71
+ }
72
+
62
73
  static const char* kClassName() { return "CompactOnDeletionCollector"; }
63
74
  const char* Name() const override { return kClassName(); }
64
75
 
@@ -68,6 +79,7 @@ class CompactOnDeletionCollectorFactory
68
79
  std::atomic<size_t> sliding_window_size_;
69
80
  std::atomic<size_t> deletion_trigger_;
70
81
  std::atomic<double> deletion_ratio_;
82
+ std::atomic<uint64_t> min_file_size_;
71
83
  };
72
84
 
73
85
  // Creates a factory of a table property collector that marks a SST
@@ -85,7 +97,8 @@ class CompactOnDeletionCollectorFactory
85
97
  std::shared_ptr<CompactOnDeletionCollectorFactory>
86
98
  NewCompactOnDeletionCollectorFactory(size_t sliding_window_size,
87
99
  size_t deletion_trigger,
88
- double deletion_ratio = 0);
100
+ double deletion_ratio = 0,
101
+ uint64_t min_file_size = 0);
89
102
 
90
103
  // A factory of a table property collector that marks a SST file as
91
104
  // need-compaction when for the tiering use case, it observes, among all the
@@ -750,8 +750,6 @@ class Transaction {
750
750
 
751
751
  virtual TxnTimestamp GetCommitTimestamp() const { return kMaxTxnTimestamp; }
752
752
 
753
- virtual bool GetCommitBypassMemTable() const { return false; }
754
-
755
753
  protected:
756
754
  explicit Transaction(const TransactionDB* /*db*/) {}
757
755
  Transaction() : log_number_(0), txn_state_(STARTED) {}
@@ -24,9 +24,16 @@ class SecondaryIndex;
24
24
  class TransactionDBMutexFactory;
25
25
 
26
26
  enum TxnDBWritePolicy {
27
- WRITE_COMMITTED = 0, // write only the committed data
28
- WRITE_PREPARED, // write data after the prepare phase of 2pc
29
- WRITE_UNPREPARED // write data before the prepare phase of 2pc
27
+ // Write data at transaction commit time
28
+ WRITE_COMMITTED = 0,
29
+
30
+ // EXPERIMENTAL: The remaining write policies are not as mature, well
31
+ // validated, nor as compatible with other features as WRITE_COMMITTED.
32
+
33
+ // Write data after the prepare phase of 2pc
34
+ WRITE_PREPARED,
35
+ // Write data before the prepare phase of 2pc
36
+ WRITE_UNPREPARED
30
37
  };
31
38
 
32
39
  constexpr uint32_t kInitialMaxDeadlocks = 5;
@@ -241,14 +248,24 @@ struct TransactionDBOptions {
241
248
  // user-defined timestamps so this option only applies in this case.
242
249
  bool enable_udt_validation = true;
243
250
 
244
- // / \ UNDER CONSTRUCTION
245
- // / ! \ UNDER CONSTRUCTION
246
- // /-----\ UNDER CONSTRUCTION
251
+ // EXPERIMENTAL
247
252
  //
248
253
  // The secondary indices to be maintained. See the SecondaryIndex interface
249
254
  // for more details.
250
255
  std::vector<std::shared_ptr<SecondaryIndex>> secondary_indices;
251
256
 
257
+ // Deprecated, this option has no effect and may be removed in the future.
258
+ // Use TransactionOptions::large_txn_commit_optimize_threshold instead.
259
+ //
260
+ // This option is only valid for write committed. If the number of updates in
261
+ // a transaction is at least this threshold, then the transaction commit will
262
+ // skip insertions into memtable as an optimization to reduce commit latency.
263
+ // See comment for TransactionOptions::commit_bypass_memtable for more detail.
264
+ // Setting TransactionOptions::commit_bypass_memtable to true takes precedence
265
+ // over this option.
266
+ uint32_t txn_commit_bypass_memtable_threshold =
267
+ std::numeric_limits<uint32_t>::max();
268
+
252
269
  private:
253
270
  // 128 entries
254
271
  // Should the default value change, please also update wp_snapshot_cache_bits
@@ -349,10 +366,28 @@ struct TransactionOptions {
349
366
  // DeleteRange, SingleDelete.
350
367
  bool write_batch_track_timestamp_size = false;
351
368
 
352
- // EXPERIMENTAL
369
+ // The following three options enable optimizations for large transaction
370
+ // commit to bypass memtable write.
371
+ // - If any transaction's commit should bybass memtable write,
372
+ // set commit_bypass_memtable to true.
373
+ // - If only bypass memtable write for transactions with >= n operations,
374
+ // set commit_bypass_memtable to false,
375
+ // large_txn_commit_optimize_threshold to n, and
376
+ // large_txn_commit_optimize_byte_threshold to 0.
377
+ // Similarly for only optimize when a transaction's write batch size is >= n.
378
+ // - If bypass memtable write for transactions with >= n operations or >= x
379
+ // bytes,
380
+ // set commit_bypass_memtable to false,
381
+ // large_txn_commit_optimize_threshold to n, and
382
+ // large_txn_commit_optimize_byte_threshold to x.
383
+ //
384
+ //
385
+ // EXPERIMENTAL, SUBJECT TO CHANGE
353
386
  // Only supports write-committed policy. If set to true, the transaction will
354
387
  // skip memtable write and ingest into the DB directly during Commit(). This
355
388
  // makes Commit() much faster for transactions with many operations.
389
+ // Transaction neeeds to call Prepare() before Commit() for this option to
390
+ // take effect.
356
391
  // Transactions with Merge() or PutEntity() is not supported yet.
357
392
  //
358
393
  // Note that the transaction will be ingested as an immutable memtable for
@@ -364,7 +399,28 @@ struct TransactionOptions {
364
399
  // without indexing (e.g. added directly to the transaction underlying
365
400
  // write batch through Transaction::GetWriteBatch()->GetWriteBatch())
366
401
  // are not supported. They will not be applied to the DB.
402
+ //
403
+ // NOTE: since WBWI keep track of the most recent update per key, a Put
404
+ // followed by a SingleDelete will be written to DB as a SingleDelete. This
405
+ // can cause flush/compaction to report `num_single_del_mismatch` due to
406
+ // consecutive SingleDeletes.
367
407
  bool commit_bypass_memtable = false;
408
+
409
+ // EXPERIMENTAL, SUBJECT TO CHANGE
410
+ // When the number of updates in a transaction is at least this threshold,
411
+ // we will enable optimizations for commiting a large transaction. See
412
+ // comment for `commit_bypass_memtable` for more optimization detail.
413
+ //
414
+ // Default: 0 (disabled).
415
+ uint32_t large_txn_commit_optimize_threshold = 0;
416
+
417
+ // EXPERIMENTAL, SUBJECT TO CHANGE
418
+ // When the size of a transaction's write batch is at least this threshold,
419
+ // we will enable optimizations for commiting a large transaction. See
420
+ // comment for `commit_bypass_memtable` for more optimization detail.
421
+ //
422
+ // Default: 0 (disabled).
423
+ uint64_t large_txn_commit_optimize_byte_threshold = 0;
368
424
  };
369
425
 
370
426
  // The per-write optimizations that do not involve transactions. TransactionDB
@@ -86,4 +86,3 @@ class TransactionDBMutexFactory {
86
86
  };
87
87
 
88
88
  } // namespace ROCKSDB_NAMESPACE
89
-