@nxtedition/rocksdb 13.5.8 → 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 (508) hide show
  1. package/binding.cc +209 -2
  2. package/deps/rocksdb/rocksdb/BUCK +12 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
  4. package/deps/rocksdb/rocksdb/Makefile +28 -23
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
  7. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
  11. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
  12. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
  14. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
  15. package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
  16. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
  17. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
  23. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
  25. package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
  26. package/deps/rocksdb/rocksdb/db/builder.h +5 -4
  27. package/deps/rocksdb/rocksdb/db/c.cc +556 -15
  28. package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
  29. package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
  30. package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
  57. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
  58. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
  59. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
  60. package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
  61. package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
  62. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
  63. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
  64. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
  65. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
  66. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
  67. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
  68. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
  69. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
  70. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
  79. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
  80. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
  81. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
  86. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
  87. package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
  88. package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
  89. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
  90. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
  91. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
  92. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
  93. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
  94. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
  95. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
  96. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
  97. package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
  98. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
  99. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
  100. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
  101. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
  102. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
  103. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
  104. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
  105. package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
  106. package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
  107. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  108. package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
  109. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
  110. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
  111. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
  112. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
  113. package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
  114. package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
  115. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
  116. package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
  117. package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
  118. package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
  119. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
  120. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
  121. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
  122. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
  123. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
  124. package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
  125. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
  126. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
  127. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  128. package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
  129. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
  130. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
  131. package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
  132. package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
  133. package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
  134. package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
  135. package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
  136. package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
  137. package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
  138. package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
  139. package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
  140. package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
  141. package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
  142. package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
  143. package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
  144. package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
  145. package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
  146. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
  147. package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
  148. package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
  149. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
  150. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
  151. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
  152. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
  153. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
  154. package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
  155. package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
  156. package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
  157. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
  158. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
  159. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
  160. package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
  161. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
  162. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
  163. package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
  164. package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
  165. package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
  166. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
  167. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
  168. package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
  169. package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
  170. package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
  171. package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
  172. package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
  173. package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
  174. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
  175. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
  176. package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
  177. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
  178. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
  179. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
  180. package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
  181. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
  182. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
  183. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
  184. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
  185. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
  186. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
  187. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
  188. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
  189. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
  190. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
  191. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
  192. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
  193. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
  194. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
  195. package/deps/rocksdb/rocksdb/env/env.cc +32 -2
  196. package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
  197. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
  198. package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
  199. package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
  200. package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
  201. package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
  202. package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
  203. package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
  204. package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
  205. package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
  206. package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
  207. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
  208. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
  209. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
  210. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
  211. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
  212. package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
  213. package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
  214. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
  215. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
  216. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
  217. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
  218. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
  219. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
  220. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
  221. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
  222. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
  223. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
  224. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
  225. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
  226. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
  227. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
  228. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
  229. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
  230. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
  231. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
  232. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
  233. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
  234. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
  235. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
  236. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
  237. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
  238. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
  239. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
  240. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
  241. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
  242. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
  243. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
  244. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
  245. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
  246. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
  247. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
  248. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
  249. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
  250. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
  251. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
  252. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
  253. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
  254. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
  255. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
  257. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
  259. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
  260. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
  261. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
  268. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
  269. package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
  270. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
  271. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
  272. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
  273. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
  274. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
  275. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
  276. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
  277. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
  278. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
  279. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  280. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
  281. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
  282. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
  283. package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
  284. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
  285. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
  286. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
  287. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
  288. package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
  289. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
  290. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
  291. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  292. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
  293. package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
  294. package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
  295. package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
  296. package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
  297. package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
  298. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
  299. package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
  300. package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
  301. package/deps/rocksdb/rocksdb/options/options.cc +296 -305
  302. package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
  303. package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
  304. package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
  305. package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
  306. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
  307. package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
  308. package/deps/rocksdb/rocksdb/port/lang.h +2 -1
  309. package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
  310. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
  311. package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
  312. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
  313. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
  314. package/deps/rocksdb/rocksdb/src.mk +17 -11
  315. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
  316. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
  317. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
  318. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
  319. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
  320. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
  321. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
  322. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
  323. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
  324. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
  325. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
  326. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
  327. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
  328. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
  329. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
  330. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  331. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
  332. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
  333. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
  334. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
  335. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
  336. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
  337. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
  338. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
  339. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
  340. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
  341. package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
  342. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
  343. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
  344. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
  345. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
  346. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
  347. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
  348. package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
  349. package/deps/rocksdb/rocksdb/table/format.cc +62 -44
  350. package/deps/rocksdb/rocksdb/table/format.h +35 -12
  351. package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
  352. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  353. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
  354. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
  355. package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
  356. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
  357. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
  358. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
  359. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
  360. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
  361. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
  362. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
  363. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  364. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
  365. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
  366. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
  367. package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
  368. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
  369. package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
  370. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
  371. package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
  372. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
  373. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
  374. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
  375. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
  376. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
  377. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
  378. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
  379. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
  380. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  381. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
  382. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
  383. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
  384. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
  385. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
  386. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
  387. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
  388. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
  389. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
  390. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
  391. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
  392. package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
  393. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
  394. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
  395. package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
  396. package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
  397. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
  398. package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
  399. package/deps/rocksdb/rocksdb/util/compression.h +348 -232
  400. package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
  401. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
  402. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
  403. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
  404. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
  405. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
  406. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
  407. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
  408. package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
  409. package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
  410. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  411. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  412. package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
  413. package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
  414. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
  415. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
  416. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
  417. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
  418. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
  419. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
  420. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
  427. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
  428. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  429. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
  430. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
  431. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
  432. package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
  433. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
  434. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
  435. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
  436. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
  437. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
  438. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
  439. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
  440. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
  441. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
  442. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
  443. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
  444. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
  445. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
  446. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
  447. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
  448. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
  449. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
  450. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
  451. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
  452. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
  453. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
  454. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
  455. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
  456. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
  457. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
  458. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
  459. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
  460. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
  461. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
  462. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
  463. package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
  464. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
  465. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
  466. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
  467. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
  468. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
  469. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
  470. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
  471. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
  472. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
  473. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
  474. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  475. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
  476. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  477. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
  478. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
  479. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
  480. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
  481. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
  482. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
  483. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
  484. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
  485. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
  486. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
  487. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
  488. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
  489. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
  490. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
  491. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
  492. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
  493. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
  494. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
  495. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
  496. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
  497. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
  498. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
  499. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
  500. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
  501. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
  502. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
  503. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
  504. package/deps/rocksdb/rocksdb.gyp +5 -0
  505. package/index.js +47 -2
  506. package/package.json +8 -1
  507. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  508. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -4,7 +4,6 @@
4
4
  // (found in the LICENSE.Apache file in the root directory).
5
5
  //
6
6
 
7
-
8
7
  #include "rocksdb/convenience.h"
9
8
 
10
9
  #include "db/convenience_impl.h"
@@ -27,6 +26,17 @@ Status DeleteFilesInRange(DB* db, ColumnFamilyHandle* column_family,
27
26
 
28
27
  Status DeleteFilesInRanges(DB* db, ColumnFamilyHandle* column_family,
29
28
  const RangePtr* ranges, size_t n, bool include_end) {
29
+ std::vector<RangeOpt> range_opts(n);
30
+ for (size_t i = 0; i < n; ++i) {
31
+ range_opts[i] = {OptSlice::CopyFromPtr(ranges[i].start),
32
+ OptSlice::CopyFromPtr(ranges[i].limit)};
33
+ }
34
+ return DeleteFilesInRanges(db, column_family, range_opts.data(), n,
35
+ include_end);
36
+ }
37
+
38
+ Status DeleteFilesInRanges(DB* db, ColumnFamilyHandle* column_family,
39
+ const RangeOpt* ranges, size_t n, bool include_end) {
30
40
  return (static_cast_with_check<DBImpl>(db->GetRootDB()))
31
41
  ->DeleteFilesInRanges(column_family, ranges, n, include_end);
32
42
  }
@@ -83,9 +93,10 @@ Status VerifySstFileChecksumInternal(const Options& options,
83
93
  nullptr /* file_read_hist */, ioptions.rate_limiter.get()));
84
94
  const bool kImmortal = true;
85
95
  auto reader_options = TableReaderOptions(
86
- ioptions, options.prefix_extractor, env_options, internal_comparator,
87
- options.block_protection_bytes_per_key, false /* skip_filters */,
88
- !kImmortal, false /* force_direct_prefetch */, -1 /* level */);
96
+ ioptions, options.prefix_extractor, options.compression_manager.get(),
97
+ env_options, internal_comparator, options.block_protection_bytes_per_key,
98
+ false /* skip_filters */, !kImmortal, false /* force_direct_prefetch */,
99
+ -1 /* level */);
89
100
  reader_options.largest_seqno = largest_seqno;
90
101
  s = options.table_factory->NewTableReader(
91
102
  read_options, reader_options, std::move(file_reader), file_size,
@@ -7,8 +7,6 @@
7
7
  // Use of this source code is governed by a BSD-style license that can be
8
8
  // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
9
 
10
- #include "rocksdb/options.h"
11
-
12
10
  #include <fcntl.h>
13
11
  #include <sys/stat.h>
14
12
  #include <sys/types.h>
@@ -25,6 +23,7 @@
25
23
  #include "rocksdb/convenience.h"
26
24
  #include "rocksdb/db.h"
27
25
  #include "rocksdb/env.h"
26
+ #include "rocksdb/options.h"
28
27
  #include "rocksdb/table.h"
29
28
  #include "rocksdb/utilities/transaction_db.h"
30
29
  #include "rocksdb/write_batch.h"
@@ -864,7 +863,6 @@ TEST_F(CorruptionTest, ParanoidFileChecksOnCompact) {
864
863
  ASSERT_OK(DB::Open(options, dbname_, &db_));
865
864
  assert(db_ != nullptr); // suppress false clang-analyze report
866
865
  Build(100, 2);
867
- // ASSERT_OK(db_->Flush(FlushOptions()));
868
866
  DBImpl* dbi = static_cast_with_check<DBImpl>(db_);
869
867
  ASSERT_OK(dbi->TEST_FlushMemTable());
870
868
  mock->SetCorruptionMode(mode);
@@ -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
  #include "db/db_impl/db_impl.h"
8
7
  #include "db/db_test_util.h"
9
8
  #include "rocksdb/db.h"
@@ -349,4 +348,3 @@ int main(int argc, char** argv) {
349
348
  return 0;
350
349
  }
351
350
  }
352
-
@@ -161,6 +161,7 @@ TEST_F(DBBasicTest, UniqueSession) {
161
161
 
162
162
  ASSERT_EQ(sid2, sid3);
163
163
 
164
+ DestroyAndReopen(options);
164
165
  CreateAndReopenWithCF({"goku"}, options);
165
166
  ASSERT_OK(db_->GetDbSessionId(sid1));
166
167
  ASSERT_OK(Put("bar", "e1"));
@@ -179,6 +180,7 @@ TEST_F(DBBasicTest, UniqueSession) {
179
180
  TEST_F(DBBasicTest, ReadOnlyDB) {
180
181
  ASSERT_OK(Put("foo", "v1"));
181
182
  ASSERT_OK(Put("bar", "v2"));
183
+ ASSERT_OK(Flush());
182
184
  ASSERT_OK(Put("foo", "v3"));
183
185
  Close();
184
186
 
@@ -208,10 +210,11 @@ TEST_F(DBBasicTest, ReadOnlyDB) {
208
210
 
209
211
  auto options = CurrentOptions();
210
212
  assert(options.env == env_);
211
- ASSERT_OK(ReadOnlyReopen(options));
213
+ ASSERT_OK(EnforcedReadOnlyReopen(options));
212
214
  ASSERT_EQ("v3", Get("foo"));
213
215
  ASSERT_EQ("v2", Get("bar"));
214
216
  verify_all_iters();
217
+ ASSERT_EQ(Flush().code(), Status::Code::kNotSupported);
215
218
  Close();
216
219
 
217
220
  // Reopen and flush memtable.
@@ -219,26 +222,38 @@ TEST_F(DBBasicTest, ReadOnlyDB) {
219
222
  ASSERT_OK(Flush());
220
223
  Close();
221
224
  // Now check keys in read only mode.
222
- ASSERT_OK(ReadOnlyReopen(options));
225
+ ASSERT_OK(EnforcedReadOnlyReopen(options));
223
226
  ASSERT_EQ("v3", Get("foo"));
224
227
  ASSERT_EQ("v2", Get("bar"));
225
228
  verify_all_iters();
226
- ASSERT_TRUE(db_->SyncWAL().IsNotSupported());
229
+ ASSERT_EQ(db_->SyncWAL().code(), Status::Code::kNotSupported);
230
+
231
+ // More ops that should fail
232
+ std::vector<ColumnFamilyHandle*> cfhs{{}};
233
+ ASSERT_EQ(db_->CreateColumnFamily(options, "blah", &cfhs[0]).code(),
234
+ Status::Code::kNotSupported);
235
+
236
+ ASSERT_EQ(db_->CreateColumnFamilies(options, {"blah"}, &cfhs).code(),
237
+ Status::Code::kNotSupported);
238
+
239
+ std::vector<ColumnFamilyDescriptor> cfds;
240
+ cfds.push_back({"blah", options});
241
+ ASSERT_EQ(db_->CreateColumnFamilies(cfds, &cfhs).code(),
242
+ Status::Code::kNotSupported);
227
243
  }
228
244
 
229
- // TODO akanksha: Update the test to check that combination
230
- // does not actually write to FS (use open read-only with
231
- // CompositeEnvWrapper+ReadOnlyFileSystem).
232
- TEST_F(DBBasicTest, DISABLED_ReadOnlyDBWithWriteDBIdToManifestSet) {
245
+ TEST_F(DBBasicTest, ReadOnlyDBWithWriteDBIdToManifestSet) {
246
+ auto options = CurrentOptions();
247
+ options.write_dbid_to_manifest = false;
248
+ DestroyAndReopen(options);
233
249
  ASSERT_OK(Put("foo", "v1"));
234
250
  ASSERT_OK(Put("bar", "v2"));
235
251
  ASSERT_OK(Put("foo", "v3"));
236
252
  Close();
237
253
 
238
- auto options = CurrentOptions();
239
254
  options.write_dbid_to_manifest = true;
240
255
  assert(options.env == env_);
241
- ASSERT_OK(ReadOnlyReopen(options));
256
+ ASSERT_OK(EnforcedReadOnlyReopen(options));
242
257
  std::string db_id1;
243
258
  ASSERT_OK(db_->GetDbIdentity(db_id1));
244
259
  ASSERT_EQ("v3", Get("foo"));
@@ -258,7 +273,7 @@ TEST_F(DBBasicTest, DISABLED_ReadOnlyDBWithWriteDBIdToManifestSet) {
258
273
  ASSERT_OK(Flush());
259
274
  Close();
260
275
  // Now check keys in read only mode.
261
- ASSERT_OK(ReadOnlyReopen(options));
276
+ ASSERT_OK(EnforcedReadOnlyReopen(options));
262
277
  ASSERT_EQ("v3", Get("foo"));
263
278
  ASSERT_EQ("v2", Get("bar"));
264
279
  ASSERT_TRUE(db_->SyncWAL().IsNotSupported());
@@ -878,7 +893,6 @@ TEST_F(DBBasicTest, Snapshot) {
878
893
  } while (ChangeOptions());
879
894
  }
880
895
 
881
-
882
896
  class DBBasicMultiConfigs : public DBBasicTest,
883
897
  public ::testing::WithParamInterface<int> {
884
898
  public:
@@ -2604,8 +2618,7 @@ class DBMultiGetAsyncIOTest : public DBBasicTest,
2604
2618
  // Warm up the block cache so we don't need to use the IO uring
2605
2619
  Iterator* iter = dbfull()->NewIterator(ReadOptions());
2606
2620
  for (iter->SeekToFirst(); iter->Valid() && iter->status().ok();
2607
- iter->Next())
2608
- ;
2621
+ iter->Next());
2609
2622
  EXPECT_OK(iter->status());
2610
2623
  delete iter;
2611
2624
  #endif // ROCKSDB_IOURING_PRESENT
@@ -3275,8 +3288,7 @@ TEST_F(DBBasicTest, GetAllKeyVersions) {
3275
3288
  ASSERT_OK(Delete(std::to_string(i)));
3276
3289
  }
3277
3290
  std::vector<KeyVersion> key_versions;
3278
- ASSERT_OK(GetAllKeyVersions(db_, Slice(), Slice(),
3279
- std::numeric_limits<size_t>::max(),
3291
+ ASSERT_OK(GetAllKeyVersions(db_, {}, {}, std::numeric_limits<size_t>::max(),
3280
3292
  &key_versions));
3281
3293
  ASSERT_EQ(kNumInserts + kNumDeletes + kNumUpdates, key_versions.size());
3282
3294
  for (size_t i = 0; i < kNumInserts + kNumDeletes + kNumUpdates; i++) {
@@ -3286,7 +3298,7 @@ TEST_F(DBBasicTest, GetAllKeyVersions) {
3286
3298
  ASSERT_EQ(key_versions[i].GetTypeName(), "TypeValue");
3287
3299
  }
3288
3300
  }
3289
- ASSERT_OK(GetAllKeyVersions(db_, handles_[0], Slice(), Slice(),
3301
+ ASSERT_OK(GetAllKeyVersions(db_, handles_[0], {}, {},
3290
3302
  std::numeric_limits<size_t>::max(),
3291
3303
  &key_versions));
3292
3304
  ASSERT_EQ(kNumInserts + kNumDeletes + kNumUpdates, key_versions.size());
@@ -3301,10 +3313,17 @@ TEST_F(DBBasicTest, GetAllKeyVersions) {
3301
3313
  for (size_t i = 0; i + 1 != kNumDeletes; ++i) {
3302
3314
  ASSERT_OK(Delete(1, std::to_string(i)));
3303
3315
  }
3304
- ASSERT_OK(GetAllKeyVersions(db_, handles_[1], Slice(), Slice(),
3316
+ ASSERT_OK(GetAllKeyVersions(db_, handles_[1], {}, {},
3305
3317
  std::numeric_limits<size_t>::max(),
3306
3318
  &key_versions));
3307
3319
  ASSERT_EQ(kNumInserts + kNumDeletes + kNumUpdates - 3, key_versions.size());
3320
+
3321
+ // Change from historical behavior: empty key is now interpreted literally as
3322
+ // a legal key (rather than as a "not present" key)
3323
+ ASSERT_OK(GetAllKeyVersions(db_, handles_[1], Slice(), Slice(),
3324
+ std::numeric_limits<size_t>::max(),
3325
+ &key_versions));
3326
+ ASSERT_EQ(key_versions.size(), 0);
3308
3327
  }
3309
3328
 
3310
3329
  TEST_F(DBBasicTest, ValueTypeString) {
@@ -3356,6 +3375,69 @@ TEST_F(DBBasicTest, MultiGetIOBufferOverrun) {
3356
3375
  keys.data(), values.data(), statuses.data(), true);
3357
3376
  }
3358
3377
 
3378
+ TEST_F(DBBasicTest, MultiGetWithSnapshotsAndPersistedTier) {
3379
+ Options options = CurrentOptions();
3380
+ options.create_if_missing = true;
3381
+ options.atomic_flush = true;
3382
+ DestroyAndReopen(options);
3383
+ CreateAndReopenWithCF({"cf1", "cf2"}, options);
3384
+
3385
+ // Insert initial data
3386
+ ASSERT_OK(Put(0, "key1", "value1_cf0"));
3387
+ ASSERT_OK(Put(1, "key1", "value1_cf1"));
3388
+ ASSERT_OK(Put(2, "key1", "value1_cf2"));
3389
+ ASSERT_OK(Flush({0, 1, 2}));
3390
+ for (auto cf : {0, 1, 2}) {
3391
+ ASSERT_EQ(1, NumTableFilesAtLevel(0, cf));
3392
+ }
3393
+
3394
+ ASSERT_OK(Put(0, "key1", "value2_cf0"));
3395
+ ASSERT_OK(Put(1, "key1", "value2_cf1"));
3396
+ ASSERT_OK(Put(2, "key1", "value2_cf2"));
3397
+
3398
+ // Prepare for concurrent atomic flush
3399
+ std::atomic<bool> flush_done(false);
3400
+ std::thread flush_thread([&]() {
3401
+ ASSERT_OK(Flush({0, 1, 2}));
3402
+ flush_done.store(true);
3403
+ });
3404
+
3405
+ // Perform MultiGet with snapshot and read_tier = kPersistentTier
3406
+ ReadOptions ro;
3407
+ const Snapshot* snapshot = db_->GetSnapshot();
3408
+ ro.snapshot = snapshot;
3409
+ ro.read_tier = kPersistedTier;
3410
+
3411
+ std::string k = "key1";
3412
+ std::vector<Slice> keys(3, Slice(k));
3413
+ std::vector<Status> statuses(keys.size());
3414
+ std::vector<ColumnFamilyHandle*> cfs(keys.size());
3415
+ std::vector<Slice> new_keys(keys.size());
3416
+ std::vector<PinnableSlice> pin_values(keys.size());
3417
+ for (size_t i = 0; i < keys.size(); ++i) {
3418
+ cfs[i] = handles_[i];
3419
+ }
3420
+ db_->MultiGet(ro, cfs.size(), cfs.data(), keys.data(), pin_values.data(),
3421
+ statuses.data());
3422
+ for (const auto& s : statuses) {
3423
+ ASSERT_OK(s);
3424
+ }
3425
+
3426
+ if (pin_values[0] == "value1_cf0") {
3427
+ // Check if the first value matches expected value
3428
+ ASSERT_EQ(pin_values[1], "value1_cf1");
3429
+ ASSERT_EQ(pin_values[2], "value1_cf2");
3430
+ } else {
3431
+ // If first value doesn't match, check if we got the updated values
3432
+ ASSERT_EQ(pin_values[0], "value2_cf0");
3433
+ ASSERT_EQ(pin_values[1], "value2_cf1");
3434
+ ASSERT_EQ(pin_values[2], "value2_cf2");
3435
+ }
3436
+
3437
+ flush_thread.join();
3438
+ db_->ReleaseSnapshot(snapshot);
3439
+ }
3440
+
3359
3441
  TEST_F(DBBasicTest, IncrementalRecoveryNoCorrupt) {
3360
3442
  Options options = CurrentOptions();
3361
3443
  DestroyAndReopen(options);
@@ -4996,6 +5078,103 @@ TEST_F(DBBasicTest, VerifyFileChecksumsReadahead) {
4996
5078
  (sst_size + alignment - 1) / (alignment));
4997
5079
  }
4998
5080
 
5081
+ TEST_F(DBBasicTest, DisallowMemtableWrite) {
5082
+ // This test is mostly about what you can't do with memtable writes
5083
+ // disallowed. For what you can do, see
5084
+ // ExternalSSTFileBasicTest.FailIfNotBottommostLevelAndDisallowMemtable
5085
+ Options options_allow = GetDefaultOptions();
5086
+ options_allow.create_if_missing = true;
5087
+ Options options_disallow = options_allow;
5088
+ options_disallow.disallow_memtable_writes = true;
5089
+ options_disallow.paranoid_memory_checks = true;
5090
+
5091
+ DestroyAndReopen(options_allow);
5092
+ // CFs allowing and disallowing memtable write
5093
+ CreateColumnFamilies({"cf1", "cf2"}, options_allow);
5094
+ CreateColumnFamilies({"cf3"}, options_disallow);
5095
+ // XXX: needed to get consistent handles_ mappings
5096
+ ReopenWithColumnFamilies(
5097
+ {"default", "cf1", "cf2", "cf3"},
5098
+ {options_allow, options_allow, options_allow, options_disallow});
5099
+
5100
+ EXPECT_EQ(Put(0, "a0", "1").code(), Status::Code::kOk);
5101
+ EXPECT_EQ(Put(1, "a1", "1").code(), Status::Code::kOk);
5102
+ EXPECT_EQ(Put(2, "a2", "1").code(), Status::Code::kOk);
5103
+ EXPECT_EQ(Put(3, "a3", "1").code(), Status::Code::kInvalidArgument);
5104
+
5105
+ EXPECT_EQ(Get(0, "a0"), "1");
5106
+ EXPECT_EQ(Get(1, "a1"), "1");
5107
+ EXPECT_EQ(Get(2, "a2"), "1");
5108
+ EXPECT_EQ(Get(3, "a3"), "NOT_FOUND");
5109
+
5110
+ EXPECT_EQ(Delete(0, "z0").code(), Status::Code::kOk);
5111
+ EXPECT_EQ(Delete(1, "z1").code(), Status::Code::kOk);
5112
+ EXPECT_EQ(Delete(2, "z2").code(), Status::Code::kOk);
5113
+ EXPECT_EQ(Delete(3, "z3").code(), Status::Code::kInvalidArgument);
5114
+
5115
+ WriteBatch wb;
5116
+ EXPECT_EQ(wb.Put(handles_[0], "b0", "2").code(), Status::Code::kOk);
5117
+ EXPECT_EQ(wb.Put(handles_[1], "b1", "2").code(), Status::Code::kOk);
5118
+ EXPECT_EQ(wb.Put(handles_[2], "b2", "2").code(), Status::Code::kOk);
5119
+ EXPECT_EQ(wb.Put(handles_[3], "b3", "2").code(),
5120
+ Status::Code::kInvalidArgument);
5121
+ ASSERT_OK(db_->Write({}, &wb));
5122
+ wb.Clear();
5123
+
5124
+ EXPECT_EQ(Get(0, "b0"), "2");
5125
+ EXPECT_EQ(Get(1, "b1"), "2");
5126
+ EXPECT_EQ(Get(2, "b2"), "2");
5127
+ EXPECT_EQ(Get(3, "b3"), "NOT_FOUND");
5128
+
5129
+ std::unique_ptr<Iterator> iter(
5130
+ dbfull()->NewIterator(ReadOptions(), handles_[3]));
5131
+ iter->Seek("a3");
5132
+ ASSERT_OK(iter->status());
5133
+ iter.reset();
5134
+ // When the DB is re-opened with WAL entries for a CF that is newly setting
5135
+ // disallow_memtable_writes, we detect that and fail the open gracefully.
5136
+ ASSERT_EQ(TryReopenWithColumnFamilies(
5137
+ {"default", "cf1", "cf2", "cf3"},
5138
+ {options_allow, options_allow, options_disallow, options_allow})
5139
+ .code(),
5140
+ Status::Code::kInvalidArgument);
5141
+
5142
+ // Successfully opening with allow creates L0 files from the WAL
5143
+ ReopenWithColumnFamilies({"default", "cf1", "cf2", "cf3"}, options_allow);
5144
+
5145
+ EXPECT_EQ(Get(0, "a0"), "1");
5146
+ EXPECT_EQ(Get(1, "a1"), "1");
5147
+ EXPECT_EQ(Get(2, "a2"), "1");
5148
+ EXPECT_EQ(Get(3, "a3"), "NOT_FOUND");
5149
+
5150
+ // Now able to disallow on CF2 because no relevant WAL entries
5151
+ ReopenWithColumnFamilies(
5152
+ {"default", "cf1", "cf2", "cf3"},
5153
+ {options_allow, options_allow, options_disallow, options_allow});
5154
+
5155
+ EXPECT_EQ(Get(0, "a0"), "1");
5156
+ EXPECT_EQ(Get(1, "a1"), "1");
5157
+ EXPECT_EQ(Get(2, "a2"), "1");
5158
+ EXPECT_EQ(Get(3, "a3"), "NOT_FOUND");
5159
+
5160
+ // Now able to write to CF 3 but not CF 2
5161
+ EXPECT_EQ(Put(0, "c0", "3").code(), Status::Code::kOk);
5162
+ EXPECT_EQ(Put(1, "c1", "3").code(), Status::Code::kOk);
5163
+ EXPECT_EQ(Put(2, "c2", "3").code(), Status::Code::kInvalidArgument);
5164
+ EXPECT_EQ(Put(3, "c3", "3").code(), Status::Code::kOk);
5165
+
5166
+ EXPECT_EQ(Get(0, "c0"), "3");
5167
+ EXPECT_EQ(Get(1, "c1"), "3");
5168
+ EXPECT_EQ(Get(2, "c2"), "NOT_FOUND");
5169
+ EXPECT_EQ(Get(3, "c3"), "3");
5170
+
5171
+ // disallow_memtable_writes not supported on default column family.
5172
+ // (Would be complicated to make a WriteBatch aware of the setting in order
5173
+ // to reject the write before entering the write path.)
5174
+ Destroy(options_allow);
5175
+ EXPECT_EQ(TryReopen(options_disallow).code(), Status::Code::kInvalidArgument);
5176
+ }
5177
+
4999
5178
  // TODO: re-enable after we provide finer-grained control for WAL tracking to
5000
5179
  // meet the needs of different use cases, durability levels and recovery modes.
5001
5180
  TEST_F(DBBasicTest, DISABLED_ManualWalSync) {
@@ -305,7 +305,6 @@ class ReadOnlyCacheWrapper : public CacheWrapper {
305
305
  } // anonymous namespace
306
306
  #endif // SNAPPY
307
307
 
308
-
309
308
  // Make sure that when options.block_cache is set, after a new table is
310
309
  // created its index/filter blocks are added to block cache.
311
310
  TEST_F(DBBlockCacheTest, IndexAndFilterBlocksOfNewTableAddedToCache) {
@@ -507,6 +506,8 @@ TEST_P(DBBlockCacheTest1, WarmCacheWithBlocksDuringFlush) {
507
506
  table_options.prepopulate_block_cache =
508
507
  BlockBasedTableOptions::PrepopulateBlockCache::kFlushOnly;
509
508
  options.table_factory.reset(NewBlockBasedTableFactory(table_options));
509
+ // Include a compression dictionary block
510
+ options.compression_opts.max_dict_bytes = 123;
510
511
  DestroyAndReopen(options);
511
512
 
512
513
  std::string value(kValueSize, 'a');
@@ -538,6 +539,9 @@ TEST_P(DBBlockCacheTest1, WarmCacheWithBlocksDuringFlush) {
538
539
  options.statistics->getTickerCount(BLOCK_CACHE_FILTER_HIT));
539
540
  }
540
541
  ASSERT_EQ(0, options.statistics->getTickerCount(BLOCK_CACHE_FILTER_MISS));
542
+
543
+ // Including compression dict
544
+ ASSERT_EQ(0, options.statistics->getTickerCount(BLOCK_CACHE_MISS));
541
545
  }
542
546
 
543
547
  // Verify compaction not counted
@@ -825,70 +829,78 @@ TEST_F(DBBlockCacheTest, CacheCompressionDict) {
825
829
  const int kNumEntriesPerFile = 128;
826
830
  const int kNumBytesPerEntry = 1024;
827
831
 
828
- // Try all the available libraries that support dictionary compression
829
- std::vector<CompressionType> compression_types;
830
- if (Zlib_Supported()) {
831
- compression_types.push_back(kZlibCompression);
832
- }
833
- if (LZ4_Supported()) {
834
- compression_types.push_back(kLZ4Compression);
835
- compression_types.push_back(kLZ4HCCompression);
836
- }
837
- if (ZSTD_Supported()) {
838
- compression_types.push_back(kZSTD);
839
- } else if (ZSTDNotFinal_Supported()) {
840
- compression_types.push_back(kZSTDNotFinalCompression);
841
- }
832
+ std::vector<CompressionType> dict_compressions =
833
+ GetSupportedDictCompressions();
842
834
  Random rnd(301);
843
- for (auto compression_type : compression_types) {
844
- Options options = CurrentOptions();
845
- options.bottommost_compression = compression_type;
846
- options.bottommost_compression_opts.max_dict_bytes = 4096;
847
- options.bottommost_compression_opts.enabled = true;
848
- options.create_if_missing = true;
849
- options.num_levels = 2;
850
- options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
851
- options.target_file_size_base = kNumEntriesPerFile * kNumBytesPerEntry;
852
- BlockBasedTableOptions table_options;
853
- table_options.cache_index_and_filter_blocks = true;
854
- table_options.block_cache.reset(new MockCache());
855
- options.table_factory.reset(NewBlockBasedTableFactory(table_options));
856
- DestroyAndReopen(options);
835
+ // Format version before and after compression handling changes
836
+ for (int format_version : {6, 7}) {
837
+ // Test all supported compression types because (at least historically)
838
+ // dictionary compression could be enabled and a dictionary block saved
839
+ // but ignored by some compression types. Ensure we at least don't crash
840
+ // or return corruption for those.
841
+ for (auto compression_type : GetSupportedCompressions()) {
842
+ // Extra handling checks only for types actually supporting dictionary
843
+ // compression.
844
+ bool dict_supported =
845
+ std::count(dict_compressions.begin(), dict_compressions.end(),
846
+ compression_type) > 0;
857
847
 
858
- RecordCacheCountersForCompressionDict(options);
848
+ Options options = CurrentOptions();
849
+ options.bottommost_compression = compression_type;
850
+ options.bottommost_compression_opts.max_dict_bytes = 4096;
851
+ options.bottommost_compression_opts.enabled = true;
852
+ options.create_if_missing = true;
853
+ options.num_levels = 2;
854
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
855
+ options.target_file_size_base = kNumEntriesPerFile * kNumBytesPerEntry;
856
+ BlockBasedTableOptions table_options;
857
+ table_options.cache_index_and_filter_blocks = true;
858
+ table_options.block_cache.reset(new MockCache());
859
+ table_options.format_version = format_version;
860
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
861
+ DestroyAndReopen(options);
859
862
 
860
- for (int i = 0; i < kNumFiles; ++i) {
861
- ASSERT_EQ(i, NumTableFilesAtLevel(0, 0));
862
- for (int j = 0; j < kNumEntriesPerFile; ++j) {
863
- std::string value = rnd.RandomString(kNumBytesPerEntry);
864
- ASSERT_OK(Put(Key(j * kNumFiles + i), value.c_str()));
863
+ RecordCacheCountersForCompressionDict(options);
864
+
865
+ for (int i = 0; i < kNumFiles; ++i) {
866
+ ASSERT_EQ(i, NumTableFilesAtLevel(0, 0));
867
+ for (int j = 0; j < kNumEntriesPerFile; ++j) {
868
+ std::string value = rnd.RandomString(kNumBytesPerEntry);
869
+ ASSERT_OK(Put(Key(j * kNumFiles + i), value.c_str()));
870
+ }
871
+ ASSERT_OK(Flush());
872
+ }
873
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
874
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
875
+ ASSERT_EQ(kNumFiles, NumTableFilesAtLevel(1));
876
+
877
+ if (dict_supported) {
878
+ // Compression dictionary blocks are preloaded.
879
+ CheckCacheCountersForCompressionDict(
880
+ options, kNumFiles /* expected_compression_dict_misses */,
881
+ 0 /* expected_compression_dict_hits */,
882
+ kNumFiles /* expected_compression_dict_inserts */);
883
+ }
884
+
885
+ // Seek to a key in a file. It should cause the SST's dictionary
886
+ // meta-block to be read.
887
+ RecordCacheCounters(options);
888
+ RecordCacheCountersForCompressionDict(options);
889
+ ReadOptions read_options;
890
+ ASSERT_NE("NOT_FOUND", Get(Key(kNumFiles * kNumEntriesPerFile - 1)));
891
+
892
+ if (dict_supported) {
893
+ // Two block hits: index and dictionary since they are prefetched
894
+ // One block missed/added: data block
895
+ CheckCacheCounters(options, 1 /* expected_misses */,
896
+ 2 /* expected_hits */, 1 /* expected_inserts */,
897
+ 0 /* expected_failures */);
898
+ CheckCacheCountersForCompressionDict(
899
+ options, 0 /* expected_compression_dict_misses */,
900
+ 1 /* expected_compression_dict_hits */,
901
+ 0 /* expected_compression_dict_inserts */);
865
902
  }
866
- ASSERT_OK(Flush());
867
903
  }
868
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
869
- ASSERT_EQ(0, NumTableFilesAtLevel(0));
870
- ASSERT_EQ(kNumFiles, NumTableFilesAtLevel(1));
871
-
872
- // Compression dictionary blocks are preloaded.
873
- CheckCacheCountersForCompressionDict(
874
- options, kNumFiles /* expected_compression_dict_misses */,
875
- 0 /* expected_compression_dict_hits */,
876
- kNumFiles /* expected_compression_dict_inserts */);
877
-
878
- // Seek to a key in a file. It should cause the SST's dictionary meta-block
879
- // to be read.
880
- RecordCacheCounters(options);
881
- RecordCacheCountersForCompressionDict(options);
882
- ReadOptions read_options;
883
- ASSERT_NE("NOT_FOUND", Get(Key(kNumFiles * kNumEntriesPerFile - 1)));
884
- // Two block hits: index and dictionary since they are prefetched
885
- // One block missed/added: data block
886
- CheckCacheCounters(options, 1 /* expected_misses */, 2 /* expected_hits */,
887
- 1 /* expected_inserts */, 0 /* expected_failures */);
888
- CheckCacheCountersForCompressionDict(
889
- options, 0 /* expected_compression_dict_misses */,
890
- 1 /* expected_compression_dict_hits */,
891
- 0 /* expected_compression_dict_inserts */);
892
904
  }
893
905
  }
894
906
 
@@ -1758,8 +1770,8 @@ class CacheKeyTest : public testing::Test {
1758
1770
  tp_.db_id = std::to_string(db_id_);
1759
1771
  tp_.orig_file_number = file_number;
1760
1772
  bool is_stable;
1761
- std::string cur_session_id; // ignored
1762
- uint64_t cur_file_number = 42; // ignored
1773
+ std::string cur_session_id; // ignored
1774
+ uint64_t cur_file_number = 42; // ignored
1763
1775
  OffsetableCacheKey rv;
1764
1776
  BlockBasedTable::SetupBaseCacheKey(&tp_, cur_session_id, cur_file_number,
1765
1777
  &rv, &is_stable);
@@ -2244,6 +2244,54 @@ TEST_F(DBBloomFilterTest, MemtableWholeKeyBloomFilterMultiGet) {
2244
2244
 
2245
2245
  db_->ReleaseSnapshot(snapshot);
2246
2246
  }
2247
+
2248
+ TEST_F(DBBloomFilterTest, TestMemtableBloomAndWBM) {
2249
+ Options options = CurrentOptions();
2250
+ options.arena_block_size = 4096;
2251
+ options.write_buffer_size = 4000000;
2252
+ std::shared_ptr<Cache> cache = NewLRUCache(LRUCacheOptions(
2253
+ options.write_buffer_size * 3 /* capacity */, 1 /* num_shard_bits */,
2254
+ false /* strict_capacity_limit */, 0.0 /* high_pri_pool_ratio */,
2255
+ nullptr /* memory_allocator */, kDefaultToAdaptiveMutex,
2256
+ kDontChargeCacheMetadata));
2257
+
2258
+ options.write_buffer_manager.reset(
2259
+ new WriteBufferManager(options.write_buffer_size, cache));
2260
+ Reopen(options);
2261
+ ASSERT_OK(Put("foo", "bar"));
2262
+
2263
+ const auto kDummyEntrySize =
2264
+ CacheReservationManagerImpl<CacheEntryRole::kMisc>::GetDummyEntrySize();
2265
+
2266
+ // Just the start of a memtable, no Bloom
2267
+ ASSERT_GE(cache->GetUsage(), options.arena_block_size);
2268
+ ASSERT_LE(cache->GetUsage(), kDummyEntrySize);
2269
+
2270
+ // Now enable memtable bloom filter
2271
+ const double kRatio = 0.25;
2272
+ options.memtable_prefix_bloom_size_ratio = kRatio;
2273
+ options.memtable_whole_key_filtering = true;
2274
+ Reopen(options);
2275
+ ASSERT_OK(Put("foo2", "bar2"));
2276
+
2277
+ // Expecting a memtable Bloom of ratio times write_buffer_size, memory tracked
2278
+ auto bloom_size = static_cast<size_t>(kRatio * options.write_buffer_size);
2279
+ ASSERT_GE(cache->GetUsage(), bloom_size);
2280
+ ASSERT_LE(cache->GetUsage(), bloom_size + 2U * kDummyEntrySize);
2281
+
2282
+ // Now get another memtable and test
2283
+ // Pin this memtable with an iterator
2284
+ std::unique_ptr<Iterator> iter{db_->NewIterator({})};
2285
+ iter->Seek("foo2");
2286
+ ASSERT_TRUE(iter->Valid());
2287
+ ASSERT_OK(Flush());
2288
+ ASSERT_OK(Put("foo2", "bar2"));
2289
+
2290
+ // Expecting twice as much
2291
+ ASSERT_GE(cache->GetUsage(), 2U * bloom_size);
2292
+ ASSERT_LE(cache->GetUsage(), 2U * bloom_size + 2U * kDummyEntrySize);
2293
+ }
2294
+
2247
2295
  namespace {
2248
2296
  std::pair<uint64_t, uint64_t> GetBloomStat(const Options& options, bool sst) {
2249
2297
  if (sst) {