@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
@@ -8,7 +8,6 @@
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
  #pragma once
10
10
 
11
-
12
11
  #include <functional>
13
12
  #include <limits>
14
13
  #include <list>
@@ -281,4 +280,3 @@ class PersistentCacheDBTest : public DBTestBase {
281
280
  };
282
281
 
283
282
  } // namespace ROCKSDB_NAMESPACE
284
-
@@ -162,4 +162,3 @@ bool PersistentTieredCache::IsCompressed() {
162
162
  }
163
163
 
164
164
  } // namespace ROCKSDB_NAMESPACE
165
-
@@ -5,7 +5,6 @@
5
5
  //
6
6
  #pragma once
7
7
 
8
-
9
8
  #include <limits>
10
9
  #include <list>
11
10
  #include <map>
@@ -337,4 +336,3 @@ class PersistentTieredCache : public PersistentCacheTier {
337
336
  };
338
337
 
339
338
  } // namespace ROCKSDB_NAMESPACE
340
-
@@ -135,4 +135,3 @@ bool VolatileCacheTier::Evict() {
135
135
  }
136
136
 
137
137
  } // namespace ROCKSDB_NAMESPACE
138
-
@@ -5,7 +5,6 @@
5
5
  //
6
6
  #pragma once
7
7
 
8
-
9
8
  #include <atomic>
10
9
  #include <limits>
11
10
  #include <sstream>
@@ -136,4 +135,3 @@ class VolatileCacheTier : public PersistentCacheTier {
136
135
  };
137
136
 
138
137
  } // namespace ROCKSDB_NAMESPACE
139
-
@@ -3,15 +3,43 @@
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
- #include "utilities/secondary_index/faiss_ivf_index.h"
7
-
8
6
  #include <cassert>
7
+ #include <optional>
8
+ #include <stdexcept>
9
+ #include <utility>
9
10
 
11
+ #include "faiss/IndexIVF.h"
10
12
  #include "faiss/invlists/InvertedLists.h"
13
+ #include "rocksdb/utilities/secondary_index_faiss.h"
14
+ #include "util/autovector.h"
11
15
  #include "util/coding.h"
12
16
 
13
17
  namespace ROCKSDB_NAMESPACE {
14
18
 
19
+ namespace {
20
+
21
+ std::string SerializeLabel(faiss::idx_t label) {
22
+ std::string label_str;
23
+ PutVarsignedint64(&label_str, label);
24
+
25
+ return label_str;
26
+ }
27
+
28
+ faiss::idx_t DeserializeLabel(Slice label_slice) {
29
+ faiss::idx_t label = -1;
30
+ [[maybe_unused]] const bool ok = GetVarsignedint64(&label_slice, &label);
31
+ assert(ok);
32
+
33
+ return label;
34
+ }
35
+
36
+ } // namespace
37
+
38
+ struct FaissIVFIndex::KNNContext {
39
+ SecondaryIndexIterator* it;
40
+ autovector<std::string> keys;
41
+ };
42
+
15
43
  class FaissIVFIndex::Adapter : public faiss::InvertedLists {
16
44
  public:
17
45
  Adapter(size_t num_lists, size_t code_size)
@@ -36,14 +64,14 @@ class FaissIVFIndex::Adapter : public faiss::InvertedLists {
36
64
  return nullptr;
37
65
  }
38
66
 
39
- // Iterator-based read interface; not yet implemented
67
+ // Iterator-based read interface
40
68
  faiss::InvertedListsIterator* get_iterator(
41
- size_t /* list_no */,
42
- void* /* inverted_list_context */ = nullptr) const override {
43
- // TODO: implement this
69
+ size_t list_no, void* inverted_list_context = nullptr) const override {
70
+ KNNContext* const knn_context =
71
+ static_cast<KNNContext*>(inverted_list_context);
72
+ assert(knn_context);
44
73
 
45
- assert(false);
46
- return nullptr;
74
+ return new IteratorAdapter(knn_context, list_no, code_size);
47
75
  }
48
76
 
49
77
  // Write interface; only add_entry is implemented/required for now
@@ -80,22 +108,72 @@ class FaissIVFIndex::Adapter : public faiss::InvertedLists {
80
108
  void resize(size_t /* list_no */, size_t /* new_size */) override {
81
109
  assert(false);
82
110
  }
83
- };
84
-
85
- std::string FaissIVFIndex::SerializeLabel(faiss::idx_t label) {
86
- std::string label_str;
87
- PutVarsignedint64(&label_str, label);
88
-
89
- return label_str;
90
- }
91
111
 
92
- faiss::idx_t FaissIVFIndex::DeserializeLabel(Slice label_slice) {
93
- faiss::idx_t label = -1;
94
- [[maybe_unused]] const bool ok = GetVarsignedint64(&label_slice, &label);
95
- assert(ok);
96
-
97
- return label;
98
- }
112
+ private:
113
+ class IteratorAdapter : public faiss::InvertedListsIterator {
114
+ public:
115
+ IteratorAdapter(KNNContext* knn_context, size_t list_no, size_t code_size)
116
+ : knn_context_(knn_context),
117
+ it_(knn_context_->it),
118
+ code_size_(code_size) {
119
+ assert(knn_context_);
120
+ assert(it_);
121
+
122
+ const std::string label = SerializeLabel(list_no);
123
+ it_->Seek(label);
124
+ Update();
125
+ }
126
+
127
+ bool is_available() const override { return id_and_codes_.has_value(); }
128
+
129
+ void next() override {
130
+ it_->Next();
131
+ Update();
132
+ }
133
+
134
+ std::pair<faiss::idx_t, const uint8_t*> get_id_and_codes() override {
135
+ assert(is_available());
136
+
137
+ return *id_and_codes_;
138
+ }
139
+
140
+ private:
141
+ void Update() {
142
+ id_and_codes_.reset();
143
+
144
+ const Status status = it_->status();
145
+ if (!status.ok()) {
146
+ throw std::runtime_error(status.ToString());
147
+ }
148
+
149
+ if (!it_->Valid()) {
150
+ return;
151
+ }
152
+
153
+ if (!it_->PrepareValue()) {
154
+ throw std::runtime_error(
155
+ "Failed to prepare value during iteration in FaissIVFIndex");
156
+ }
157
+
158
+ const Slice value = it_->value();
159
+ if (value.size() != code_size_) {
160
+ throw std::runtime_error(
161
+ "Code with unexpected size encountered during iteration in "
162
+ "FaissIVFIndex");
163
+ }
164
+
165
+ const faiss::idx_t id = knn_context_->keys.size();
166
+ knn_context_->keys.emplace_back(it_->key().ToString());
167
+
168
+ id_and_codes_.emplace(id, reinterpret_cast<const uint8_t*>(value.data()));
169
+ }
170
+
171
+ KNNContext* knn_context_;
172
+ SecondaryIndexIterator* it_;
173
+ size_t code_size_;
174
+ std::optional<std::pair<faiss::idx_t, const uint8_t*>> id_and_codes_;
175
+ };
176
+ };
99
177
 
100
178
  FaissIVFIndex::FaissIVFIndex(std::unique_ptr<faiss::IndexIVF>&& index,
101
179
  std::string primary_column_name)
@@ -105,6 +183,7 @@ FaissIVFIndex::FaissIVFIndex(std::unique_ptr<faiss::IndexIVF>&& index,
105
183
  assert(index_);
106
184
  assert(index_->quantizer);
107
185
 
186
+ index_->parallel_mode = 0;
108
187
  index_->replace_invlists(adapter_.get());
109
188
  }
110
189
 
@@ -139,7 +218,9 @@ Status FaissIVFIndex::UpdatePrimaryColumnValue(
139
218
  const {
140
219
  assert(updated_column_value);
141
220
 
142
- if (primary_column_value.size() != index_->d * sizeof(float)) {
221
+ const float* const embedding =
222
+ ConvertSliceToFloats(primary_column_value, index_->d);
223
+ if (!embedding) {
143
224
  return Status::InvalidArgument(
144
225
  "Incorrectly sized vector passed to FaissIVFIndex");
145
226
  }
@@ -148,8 +229,7 @@ Status FaissIVFIndex::UpdatePrimaryColumnValue(
148
229
  faiss::idx_t label = -1;
149
230
 
150
231
  try {
151
- index_->quantizer->assign(
152
- n, reinterpret_cast<const float*>(primary_column_value.data()), &label);
232
+ index_->quantizer->assign(n, embedding, &label);
153
233
  } catch (const std::exception& e) {
154
234
  return Status::InvalidArgument(e.what());
155
235
  }
@@ -179,6 +259,11 @@ Status FaissIVFIndex::GetSecondaryKeyPrefix(
179
259
  return Status::OK();
180
260
  }
181
261
 
262
+ Status FaissIVFIndex::FinalizeSecondaryKeyPrefix(
263
+ std::variant<Slice, std::string>* /* secondary_key_prefix */) const {
264
+ return Status::OK();
265
+ }
266
+
182
267
  Status FaissIVFIndex::GetSecondaryValue(
183
268
  const Slice& /* primary_key */, const Slice& primary_column_value,
184
269
  const Slice& original_column_value,
@@ -190,20 +275,23 @@ Status FaissIVFIndex::GetSecondaryValue(
190
275
  assert(label < index_->nlist);
191
276
 
192
277
  constexpr faiss::idx_t n = 1;
278
+
279
+ const float* const embedding =
280
+ ConvertSliceToFloats(original_column_value, index_->d);
281
+ assert(embedding);
282
+
193
283
  constexpr faiss::idx_t* xids = nullptr;
194
284
  std::string code_str;
195
285
 
196
286
  try {
197
- index_->add_core(
198
- n, reinterpret_cast<const float*>(original_column_value.data()), xids,
199
- &label, &code_str);
287
+ index_->add_core(n, embedding, xids, &label, &code_str);
200
288
  } catch (const std::exception& e) {
201
- return Status::InvalidArgument(e.what());
289
+ return Status::Corruption(e.what());
202
290
  }
203
291
 
204
292
  if (code_str.size() != index_->code_size) {
205
- return Status::InvalidArgument(
206
- "Unexpected code returned by fine quantizer");
293
+ return Status::Corruption(
294
+ "Code with unexpected size returned by fine quantizer");
207
295
  }
208
296
 
209
297
  secondary_value->emplace(std::move(code_str));
@@ -211,4 +299,67 @@ Status FaissIVFIndex::GetSecondaryValue(
211
299
  return Status::OK();
212
300
  }
213
301
 
302
+ Status FaissIVFIndex::FindKNearestNeighbors(
303
+ SecondaryIndexIterator* it, const Slice& target, size_t neighbors,
304
+ size_t probes, std::vector<std::pair<std::string, float>>* result) const {
305
+ if (!it) {
306
+ return Status::InvalidArgument("Secondary index iterator must be provided");
307
+ }
308
+
309
+ const float* const embedding = ConvertSliceToFloats(target, index_->d);
310
+ if (!embedding) {
311
+ return Status::InvalidArgument(
312
+ "Incorrectly sized vector passed to FaissIVFIndex");
313
+ }
314
+
315
+ if (!neighbors) {
316
+ return Status::InvalidArgument("Invalid number of neighbors");
317
+ }
318
+
319
+ if (!probes) {
320
+ return Status::InvalidArgument("Invalid number of probes");
321
+ }
322
+
323
+ if (!result) {
324
+ return Status::InvalidArgument("Result parameter must be provided");
325
+ }
326
+
327
+ result->clear();
328
+
329
+ std::vector<float> distances(neighbors, 0.0f);
330
+ std::vector<faiss::idx_t> ids(neighbors, -1);
331
+
332
+ KNNContext knn_context{it, {}};
333
+
334
+ faiss::SearchParametersIVF params;
335
+ params.nprobe = probes;
336
+ params.inverted_list_context = &knn_context;
337
+
338
+ constexpr faiss::idx_t n = 1;
339
+
340
+ try {
341
+ index_->search(n, embedding, neighbors, distances.data(), ids.data(),
342
+ &params);
343
+ } catch (const std::exception& e) {
344
+ return Status::Corruption(e.what());
345
+ }
346
+
347
+ result->reserve(neighbors);
348
+
349
+ for (size_t i = 0; i < neighbors; ++i) {
350
+ if (ids[i] < 0) {
351
+ break;
352
+ }
353
+
354
+ if (ids[i] >= knn_context.keys.size()) {
355
+ result->clear();
356
+ return Status::Corruption("Unexpected id returned by FAISS");
357
+ }
358
+
359
+ result->emplace_back(knn_context.keys[ids[i]], distances[i]);
360
+ }
361
+
362
+ return Status::OK();
363
+ }
364
+
214
365
  } // namespace ROCKSDB_NAMESPACE
@@ -3,8 +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
- #include "utilities/secondary_index/faiss_ivf_index.h"
7
-
8
6
  #include <charconv>
9
7
  #include <memory>
10
8
  #include <string>
@@ -13,6 +11,7 @@
13
11
  #include "faiss/IndexFlat.h"
14
12
  #include "faiss/IndexIVFFlat.h"
15
13
  #include "faiss/utils/random.h"
14
+ #include "rocksdb/utilities/secondary_index_faiss.h"
16
15
  #include "rocksdb/utilities/transaction_db.h"
17
16
  #include "test_util/testharness.h"
18
17
  #include "util/coding.h"
@@ -33,7 +32,9 @@ TEST(FaissIVFIndexTest, Basic) {
33
32
 
34
33
  index->train(num_vectors, embeddings.data());
35
34
 
36
- index->nprobe = 2;
35
+ const std::string primary_column_name = "embedding";
36
+ auto faiss_ivf_index =
37
+ std::make_shared<FaissIVFIndex>(std::move(index), primary_column_name);
37
38
 
38
39
  const std::string db_name = test::PerThreadDBPath("faiss_ivf_index_test");
39
40
  EXPECT_OK(DestroyDB(db_name, Options()));
@@ -42,9 +43,7 @@ TEST(FaissIVFIndexTest, Basic) {
42
43
  options.create_if_missing = true;
43
44
 
44
45
  TransactionDBOptions txn_db_options;
45
- const std::string primary_column_name = "embedding";
46
- txn_db_options.secondary_indices.emplace_back(
47
- std::make_shared<FaissIVFIndex>(std::move(index), primary_column_name));
46
+ txn_db_options.secondary_indices.emplace_back(faiss_ivf_index);
48
47
 
49
48
  TransactionDB* db = nullptr;
50
49
  ASSERT_OK(TransactionDB::Open(options, txn_db_options, db_name, &db));
@@ -65,6 +64,8 @@ TEST(FaissIVFIndexTest, Basic) {
65
64
  secondary_index->SetPrimaryColumnFamily(cfh1);
66
65
  secondary_index->SetSecondaryColumnFamily(cfh2);
67
66
 
67
+ // Write the embeddings to the primary column family, indexing them in the
68
+ // process
68
69
  {
69
70
  std::unique_ptr<Transaction> txn(db->BeginTransaction(WriteOptions()));
70
71
 
@@ -75,13 +76,13 @@ TEST(FaissIVFIndexTest, Basic) {
75
76
  cfh1, primary_key,
76
77
  WideColumns{
77
78
  {primary_column_name,
78
- Slice(reinterpret_cast<const char*>(embeddings.data() + i * dim),
79
- dim * sizeof(float))}}));
79
+ ConvertFloatsToSlice(embeddings.data() + i * dim, dim)}}));
80
80
  }
81
81
 
82
82
  ASSERT_OK(txn->Commit());
83
83
  }
84
84
 
85
+ // Verify the raw index data in the secondary column family
85
86
  {
86
87
  size_t num_found = 0;
87
88
 
@@ -102,10 +103,8 @@ TEST(FaissIVFIndexTest, Basic) {
102
103
 
103
104
  // Since we use IndexIVFFlat, there is no fine quantization, so the code
104
105
  // is actually just the original embedding
105
- ASSERT_EQ(
106
- it->value(),
107
- Slice(reinterpret_cast<const char*>(embeddings.data() + id * dim),
108
- dim * sizeof(float)));
106
+ ASSERT_EQ(it->value(),
107
+ ConvertFloatsToSlice(embeddings.data() + id * dim, dim));
109
108
 
110
109
  ++num_found;
111
110
  }
@@ -113,6 +112,253 @@ TEST(FaissIVFIndexTest, Basic) {
113
112
  ASSERT_OK(it->status());
114
113
  ASSERT_EQ(num_found, num_vectors);
115
114
  }
115
+
116
+ // Query the index with some of the original embeddings
117
+ std::unique_ptr<Iterator> underlying_it(db->NewIterator(ReadOptions(), cfh2));
118
+ auto secondary_it = std::make_unique<SecondaryIndexIterator>(
119
+ faiss_ivf_index.get(), std::move(underlying_it));
120
+
121
+ auto get_id = [](const Slice& key) -> faiss::idx_t {
122
+ faiss::idx_t id = -1;
123
+
124
+ if (std::from_chars(key.data(), key.data() + key.size(), id).ec !=
125
+ std::errc()) {
126
+ return -1;
127
+ }
128
+
129
+ return id;
130
+ };
131
+
132
+ constexpr size_t neighbors = 8;
133
+
134
+ auto verify = [&](faiss::idx_t id) {
135
+ // Search for a vector from the original set; we expect to find the vector
136
+ // itself as the closest match, since we're performing an exhaustive search
137
+ std::vector<std::pair<std::string, float>> result;
138
+ ASSERT_OK(faiss_ivf_index->FindKNearestNeighbors(
139
+ secondary_it.get(),
140
+ ConvertFloatsToSlice(embeddings.data() + id * dim, dim), neighbors,
141
+ num_lists, &result));
142
+
143
+ ASSERT_EQ(result.size(), neighbors);
144
+
145
+ const faiss::idx_t first_id = get_id(result[0].first);
146
+
147
+ ASSERT_GE(first_id, 0);
148
+ ASSERT_LT(first_id, num_vectors);
149
+ ASSERT_EQ(first_id, id);
150
+
151
+ ASSERT_EQ(result[0].second, 0.0f);
152
+
153
+ // Iterate over the rest of the results
154
+ for (size_t i = 1; i < neighbors; ++i) {
155
+ const faiss::idx_t other_id = get_id(result[i].first);
156
+ ASSERT_GE(other_id, 0);
157
+ ASSERT_LT(other_id, num_vectors);
158
+ ASSERT_NE(other_id, id);
159
+
160
+ ASSERT_GE(result[i].second, result[i - 1].second);
161
+ }
162
+ };
163
+
164
+ verify(0);
165
+ verify(16);
166
+ verify(32);
167
+ verify(64);
168
+
169
+ // Sanity checks
170
+ {
171
+ // No secondary index iterator
172
+ constexpr SecondaryIndexIterator* bad_secondary_it = nullptr;
173
+ std::vector<std::pair<std::string, float>> result;
174
+ ASSERT_TRUE(faiss_ivf_index
175
+ ->FindKNearestNeighbors(
176
+ bad_secondary_it,
177
+ ConvertFloatsToSlice(embeddings.data(), dim), neighbors,
178
+ num_lists, &result)
179
+ .IsInvalidArgument());
180
+ }
181
+
182
+ {
183
+ // Invalid target
184
+ std::vector<std::pair<std::string, float>> result;
185
+ ASSERT_TRUE(faiss_ivf_index
186
+ ->FindKNearestNeighbors(secondary_it.get(), "foo",
187
+ neighbors, num_lists, &result)
188
+ .IsInvalidArgument());
189
+ }
190
+
191
+ {
192
+ // Invalid value for neighbors
193
+ constexpr size_t bad_neighbors = 0;
194
+ std::vector<std::pair<std::string, float>> result;
195
+ ASSERT_TRUE(faiss_ivf_index
196
+ ->FindKNearestNeighbors(
197
+ secondary_it.get(),
198
+ ConvertFloatsToSlice(embeddings.data(), dim),
199
+ bad_neighbors, num_lists, &result)
200
+ .IsInvalidArgument());
201
+ }
202
+
203
+ {
204
+ // Invalid value for neighbors
205
+ constexpr size_t bad_probes = 0;
206
+ std::vector<std::pair<std::string, float>> result;
207
+ ASSERT_TRUE(faiss_ivf_index
208
+ ->FindKNearestNeighbors(
209
+ secondary_it.get(),
210
+ ConvertFloatsToSlice(embeddings.data(), dim), neighbors,
211
+ bad_probes, &result)
212
+ .IsInvalidArgument());
213
+ }
214
+
215
+ {
216
+ // No result parameter
217
+ constexpr std::vector<std::pair<std::string, float>>* bad_result = nullptr;
218
+ ASSERT_TRUE(faiss_ivf_index
219
+ ->FindKNearestNeighbors(
220
+ secondary_it.get(),
221
+ ConvertFloatsToSlice(embeddings.data(), dim), neighbors,
222
+ num_lists, bad_result)
223
+ .IsInvalidArgument());
224
+ }
225
+ }
226
+
227
+ TEST(FaissIVFIndexTest, Compare) {
228
+ // Train two copies of the same index; hand over one to FaissIVFIndex and use
229
+ // the other one as a baseline for comparison
230
+ constexpr size_t dim = 128;
231
+ auto quantizer_cmp = std::make_unique<faiss::IndexFlatL2>(dim);
232
+ auto quantizer = std::make_unique<faiss::IndexFlatL2>(dim);
233
+
234
+ constexpr size_t num_lists = 16;
235
+ auto index_cmp = std::make_unique<faiss::IndexIVFFlat>(quantizer_cmp.get(),
236
+ dim, num_lists);
237
+ auto index =
238
+ std::make_unique<faiss::IndexIVFFlat>(quantizer.get(), dim, num_lists);
239
+
240
+ {
241
+ constexpr faiss::idx_t num_train = 1024;
242
+ std::vector<float> embeddings_train(dim * num_train);
243
+ faiss::float_rand(embeddings_train.data(), dim * num_train, 42);
244
+
245
+ index_cmp->train(num_train, embeddings_train.data());
246
+ index->train(num_train, embeddings_train.data());
247
+ }
248
+
249
+ auto faiss_ivf_index = std::make_shared<FaissIVFIndex>(
250
+ std::move(index), kDefaultWideColumnName.ToString());
251
+
252
+ const std::string db_name = test::PerThreadDBPath("faiss_ivf_index_test");
253
+ EXPECT_OK(DestroyDB(db_name, Options()));
254
+
255
+ Options options;
256
+ options.create_if_missing = true;
257
+
258
+ TransactionDBOptions txn_db_options;
259
+ txn_db_options.secondary_indices.emplace_back(faiss_ivf_index);
260
+
261
+ TransactionDB* db = nullptr;
262
+ ASSERT_OK(TransactionDB::Open(options, txn_db_options, db_name, &db));
263
+
264
+ std::unique_ptr<TransactionDB> db_guard(db);
265
+
266
+ ColumnFamilyOptions cf1_opts;
267
+ ColumnFamilyHandle* cfh1 = nullptr;
268
+ ASSERT_OK(db->CreateColumnFamily(cf1_opts, "cf1", &cfh1));
269
+ std::unique_ptr<ColumnFamilyHandle> cfh1_guard(cfh1);
270
+
271
+ ColumnFamilyOptions cf2_opts;
272
+ ColumnFamilyHandle* cfh2 = nullptr;
273
+ ASSERT_OK(db->CreateColumnFamily(cf2_opts, "cf2", &cfh2));
274
+ std::unique_ptr<ColumnFamilyHandle> cfh2_guard(cfh2);
275
+
276
+ const auto& secondary_index = txn_db_options.secondary_indices.back();
277
+ secondary_index->SetPrimaryColumnFamily(cfh1);
278
+ secondary_index->SetSecondaryColumnFamily(cfh2);
279
+
280
+ // Add the same set of database vectors to both indices
281
+ constexpr faiss::idx_t num_db = 4096;
282
+
283
+ {
284
+ std::vector<float> embeddings_db(dim * num_db);
285
+ faiss::float_rand(embeddings_db.data(), dim * num_db, 123);
286
+
287
+ for (faiss::idx_t i = 0; i < num_db; ++i) {
288
+ const float* const embedding = embeddings_db.data() + i * dim;
289
+
290
+ index_cmp->add(1, embedding);
291
+
292
+ const std::string primary_key = std::to_string(i);
293
+ ASSERT_OK(db->Put(WriteOptions(), cfh1, primary_key,
294
+ ConvertFloatsToSlice(embedding, dim)));
295
+ }
296
+ }
297
+
298
+ // Search both indices with the same set of query vectors and make sure the
299
+ // results match
300
+ {
301
+ constexpr faiss::idx_t num_query = 32;
302
+ std::vector<float> embeddings_query(dim * num_query);
303
+ faiss::float_rand(embeddings_query.data(), dim * num_query, 456);
304
+
305
+ std::unique_ptr<Iterator> underlying_it(
306
+ db->NewIterator(ReadOptions(), cfh2));
307
+ auto secondary_it = std::make_unique<SecondaryIndexIterator>(
308
+ faiss_ivf_index.get(), std::move(underlying_it));
309
+
310
+ auto get_id = [](const Slice& key) -> faiss::idx_t {
311
+ faiss::idx_t id = -1;
312
+
313
+ if (std::from_chars(key.data(), key.data() + key.size(), id).ec !=
314
+ std::errc()) {
315
+ return -1;
316
+ }
317
+
318
+ return id;
319
+ };
320
+
321
+ for (size_t neighbors : {1, 2, 4}) {
322
+ for (size_t probes : {1, 2, 4}) {
323
+ for (faiss::idx_t i = 0; i < num_query; ++i) {
324
+ const float* const embedding = embeddings_query.data() + i * dim;
325
+
326
+ std::vector<float> distances(neighbors, 0.0f);
327
+ std::vector<faiss::idx_t> ids(neighbors, -1);
328
+
329
+ faiss::SearchParametersIVF params;
330
+ params.nprobe = probes;
331
+
332
+ index_cmp->search(1, embedding, neighbors, distances.data(),
333
+ ids.data(), &params);
334
+
335
+ size_t result_size_cmp = 0;
336
+ for (faiss::idx_t id_cmp : ids) {
337
+ if (id_cmp < 0) {
338
+ break;
339
+ }
340
+
341
+ ++result_size_cmp;
342
+ }
343
+
344
+ std::vector<std::pair<std::string, float>> result;
345
+ ASSERT_OK(faiss_ivf_index->FindKNearestNeighbors(
346
+ secondary_it.get(), ConvertFloatsToSlice(embedding, dim),
347
+ neighbors, probes, &result));
348
+
349
+ ASSERT_EQ(result.size(), result_size_cmp);
350
+
351
+ for (size_t j = 0; j < result.size(); ++j) {
352
+ const faiss::idx_t id = get_id(result[j].first);
353
+ ASSERT_GE(id, 0);
354
+ ASSERT_LT(id, num_db);
355
+ ASSERT_EQ(id, ids[j]);
356
+ ASSERT_EQ(result[j].second, distances[j]);
357
+ }
358
+ }
359
+ }
360
+ }
361
+ }
116
362
  }
117
363
 
118
364
  } // namespace ROCKSDB_NAMESPACE
@@ -0,0 +1,33 @@
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 <string>
10
+ #include <variant>
11
+
12
+ #include "rocksdb/rocksdb_namespace.h"
13
+ #include "rocksdb/slice.h"
14
+ #include "util/overload.h"
15
+
16
+ namespace ROCKSDB_NAMESPACE {
17
+
18
+ class SecondaryIndexHelper {
19
+ public:
20
+ static Slice AsSlice(const std::variant<Slice, std::string>& var) {
21
+ return std::visit([](const auto& value) -> Slice { return value; }, var);
22
+ }
23
+
24
+ static std::string AsString(const std::variant<Slice, std::string>& var) {
25
+ return std::visit(
26
+ overload{
27
+ [](const Slice& value) -> std::string { return value.ToString(); },
28
+ [](const std::string& value) -> std::string { return value; }},
29
+ var);
30
+ }
31
+ };
32
+
33
+ } // namespace ROCKSDB_NAMESPACE