@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
@@ -10,7 +10,6 @@
10
10
  #include <atomic>
11
11
  #include <cstdlib>
12
12
  #include <functional>
13
- #include <iostream>
14
13
  #include <memory>
15
14
 
16
15
  #include "db/db_test_util.h"
@@ -25,11 +24,13 @@
25
24
  #include "rocksdb/persistent_cache.h"
26
25
  #include "rocksdb/trace_record.h"
27
26
  #include "rocksdb/trace_record_result.h"
27
+ #include "rocksdb/utilities/object_registry.h"
28
28
  #include "rocksdb/utilities/replayer.h"
29
29
  #include "rocksdb/wal_filter.h"
30
30
  #include "test_util/testutil.h"
31
31
  #include "util/defer.h"
32
32
  #include "util/random.h"
33
+ #include "util/simple_mixed_compressor.h"
33
34
  #include "utilities/fault_injection_env.h"
34
35
 
35
36
  namespace ROCKSDB_NAMESPACE {
@@ -135,7 +136,6 @@ TEST_F(DBTest2, PartitionedIndexUserToInternalKey) {
135
136
  }
136
137
  }
137
138
 
138
-
139
139
  class PrefixFullBloomWithReverseComparator
140
140
  : public DBTestBase,
141
141
  public ::testing::WithParamInterface<bool> {
@@ -1476,8 +1476,7 @@ TEST_P(PresetCompressionDictTest, Flush) {
1476
1476
  // TODO(ajkr): fix the below assertion to work with ZSTD. The expectation on
1477
1477
  // number of bytes needs to be adjusted in case the cached block is in
1478
1478
  // ZSTD's digested dictionary format.
1479
- if (compression_type_ != kZSTD &&
1480
- compression_type_ != kZSTDNotFinalCompression) {
1479
+ if (compression_type_ != kZSTD) {
1481
1480
  // Although we limited buffering to `kBlockLen`, there may be up to two
1482
1481
  // blocks of data included in the dictionary since we only check limit
1483
1482
  // after each block is built.
@@ -1554,8 +1553,7 @@ TEST_P(PresetCompressionDictTest, CompactNonBottommost) {
1554
1553
  // TODO(ajkr): fix the below assertion to work with ZSTD. The expectation on
1555
1554
  // number of bytes needs to be adjusted in case the cached block is in
1556
1555
  // ZSTD's digested dictionary format.
1557
- if (compression_type_ != kZSTD &&
1558
- compression_type_ != kZSTDNotFinalCompression) {
1556
+ if (compression_type_ != kZSTD) {
1559
1557
  // Although we limited buffering to `kBlockLen`, there may be up to two
1560
1558
  // blocks of data included in the dictionary since we only check limit
1561
1559
  // after each block is built.
@@ -1616,8 +1614,7 @@ TEST_P(PresetCompressionDictTest, CompactBottommost) {
1616
1614
  // TODO(ajkr): fix the below assertion to work with ZSTD. The expectation on
1617
1615
  // number of bytes needs to be adjusted in case the cached block is in ZSTD's
1618
1616
  // digested dictionary format.
1619
- if (compression_type_ != kZSTD &&
1620
- compression_type_ != kZSTDNotFinalCompression) {
1617
+ if (compression_type_ != kZSTD) {
1621
1618
  // Although we limited buffering to `kBlockLen`, there may be up to two
1622
1619
  // blocks of data included in the dictionary since we only check limit after
1623
1620
  // each block is built.
@@ -1726,16 +1723,14 @@ TEST_P(CompressionFailuresTest, CompressionFailures) {
1726
1723
  });
1727
1724
  } else if (compression_failure_type_ == kTestDecompressionFail) {
1728
1725
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1729
- "UncompressBlockData:TamperWithReturnValue", [](void* arg) {
1726
+ "DecompressBlockData:TamperWithReturnValue", [](void* arg) {
1730
1727
  Status* ret = static_cast<Status*>(arg);
1731
1728
  ASSERT_OK(*ret);
1732
1729
  *ret = Status::Corruption("kTestDecompressionFail");
1733
1730
  });
1734
1731
  } else if (compression_failure_type_ == kTestDecompressionCorruption) {
1735
1732
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1736
- "UncompressBlockData:"
1737
- "TamperWithDecompressionOutput",
1738
- [](void* arg) {
1733
+ "DecompressBlockData:TamperWithDecompressionOutput", [](void* arg) {
1739
1734
  BlockContents* contents = static_cast<BlockContents*>(arg);
1740
1735
  // Ensure uncompressed data != original data
1741
1736
  const size_t len = contents->data.size() + 1;
@@ -1889,6 +1884,542 @@ TEST_F(DBTest2, CompressionOptions) {
1889
1884
  }
1890
1885
  }
1891
1886
 
1887
+ TEST_F(DBTest2, RoundRobinManager) {
1888
+ if (ZSTD_Supported()) {
1889
+ auto mgr =
1890
+ std::make_shared<RoundRobinManager>(GetBuiltinV2CompressionManager());
1891
+
1892
+ std::vector<std::string> values;
1893
+ for (bool use_wrapper : {true}) {
1894
+ SCOPED_TRACE((use_wrapper ? "With " : "No ") + std::string("wrapper"));
1895
+
1896
+ Options options = CurrentOptions();
1897
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
1898
+ options.statistics->set_stats_level(StatsLevel::kExceptTimeForMutex);
1899
+ BlockBasedTableOptions bbto;
1900
+ bbto.enable_index_compression = false;
1901
+ options.table_factory.reset(NewBlockBasedTableFactory(bbto));
1902
+ options.compression_manager = use_wrapper ? mgr : nullptr;
1903
+ DestroyAndReopen(options);
1904
+
1905
+ Random rnd(301);
1906
+ constexpr int kCount = 13;
1907
+
1908
+ // Highly compressible blocks, except 1 non-compressible. Half of the
1909
+ // compressible are morked for bypass and 1 marked for rejection. Values
1910
+ // are large enough to ensure just 1 k-v per block.
1911
+ for (int i = 0; i < kCount; ++i) {
1912
+ std::string value;
1913
+ if (i == 6) {
1914
+ // One non-compressible block
1915
+ value = rnd.RandomBinaryString(20000);
1916
+ } else {
1917
+ test::CompressibleString(&rnd, 0.1, 20000, &value);
1918
+ }
1919
+ values.push_back(value);
1920
+ ASSERT_OK(Put(Key(i), value));
1921
+ ASSERT_EQ(Get(Key(i)), value);
1922
+ }
1923
+ ASSERT_OK(Flush());
1924
+
1925
+ // Ensure well-formed for reads
1926
+ for (int i = 0; i < kCount; ++i) {
1927
+ ASSERT_NE(Get(Key(i)), "NOT_FOUND");
1928
+ ASSERT_EQ(Get(Key(i)), values[i]);
1929
+ }
1930
+ ASSERT_EQ(Get(Key(kCount)), "NOT_FOUND");
1931
+ }
1932
+ }
1933
+ }
1934
+
1935
+ TEST_F(DBTest2, RandomMixedCompressionManager) {
1936
+ if (ZSTD_Supported()) {
1937
+ auto mgr = std::make_shared<RandomMixedCompressionManager>(
1938
+ GetBuiltinV2CompressionManager());
1939
+ std::vector<std::string> values;
1940
+ for (bool use_wrapper : {true}) {
1941
+ SCOPED_TRACE((use_wrapper ? "With " : "No ") + std::string("wrapper"));
1942
+
1943
+ Options options = CurrentOptions();
1944
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
1945
+ options.statistics->set_stats_level(StatsLevel::kExceptTimeForMutex);
1946
+ BlockBasedTableOptions bbto;
1947
+ bbto.enable_index_compression = false;
1948
+ options.table_factory.reset(NewBlockBasedTableFactory(bbto));
1949
+ options.compression_manager = use_wrapper ? mgr : nullptr;
1950
+ DestroyAndReopen(options);
1951
+
1952
+ Random rnd(301);
1953
+ constexpr int kCount = 13;
1954
+
1955
+ // Highly compressible blocks, except 1 non-compressible. Half of the
1956
+ // compressible are morked for bypass and 1 marked for rejection. Values
1957
+ // are large enough to ensure just 1 k-v per block.
1958
+ for (int i = 0; i < kCount; ++i) {
1959
+ std::string value;
1960
+ if (i == 6) {
1961
+ // One non-compressible block
1962
+ value = rnd.RandomBinaryString(20000);
1963
+ } else {
1964
+ test::CompressibleString(&rnd, 0.1, 20000, &value);
1965
+ }
1966
+ values.push_back(value);
1967
+ ASSERT_OK(Put(Key(i), value));
1968
+ ASSERT_EQ(Get(Key(i)), value);
1969
+ }
1970
+ ASSERT_OK(Flush());
1971
+
1972
+ // Ensure well-formed for reads
1973
+ for (int i = 0; i < kCount; ++i) {
1974
+ ASSERT_NE(Get(Key(i)), "NOT_FOUND");
1975
+ ASSERT_EQ(Get(Key(i)), values[i]);
1976
+ }
1977
+ ASSERT_EQ(Get(Key(kCount)), "NOT_FOUND");
1978
+ }
1979
+ }
1980
+ }
1981
+
1982
+ TEST_F(DBTest2, CompressionManagerWrapper) {
1983
+ // Test that we can use a custom CompressionManager to wrap the built-in
1984
+ // CompressionManager, thus adopting a custom *strategy* based on existing
1985
+ // algorithms. This will "mark" some blocks (in their contents) as "do not
1986
+ // compress", i.e. no attempt to compress, and some blocks as "reject
1987
+ // compression", i.e. compression attempted but rejected because of ratio
1988
+ // or otherwise. These cases are distinguishable for statistics that
1989
+ // approximate "wasted effort".
1990
+ static std::string kDoNotCompress = "do_not_compress";
1991
+ static std::string kRejectCompression = "reject_compression";
1992
+
1993
+ struct MyCompressor : public CompressorWrapper {
1994
+ using CompressorWrapper::CompressorWrapper;
1995
+ const char* Name() const override { return "MyCompressor"; }
1996
+
1997
+ Status CompressBlock(Slice uncompressed_data,
1998
+ std::string* compressed_output,
1999
+ CompressionType* out_compression_type,
2000
+ ManagedWorkingArea* working_area) override {
2001
+ auto begin = uncompressed_data.data();
2002
+ auto end = uncompressed_data.data() + uncompressed_data.size();
2003
+ if (std::search(begin, end, kDoNotCompress.begin(),
2004
+ kDoNotCompress.end()) != end) {
2005
+ // Do not attempt compression
2006
+ EXPECT_EQ(*out_compression_type, kNoCompression);
2007
+ return Status::OK();
2008
+ } else if (std::search(begin, end, kRejectCompression.begin(),
2009
+ kRejectCompression.end()) != end) {
2010
+ // Simulate attempted & rejected compression
2011
+ *compressed_output = "blah";
2012
+ EXPECT_EQ(*out_compression_type, kNoCompression);
2013
+ return Status::OK();
2014
+ } else {
2015
+ return wrapped_->CompressBlock(uncompressed_data, compressed_output,
2016
+ out_compression_type, working_area);
2017
+ }
2018
+ }
2019
+ };
2020
+ struct MyManager : public CompressionManagerWrapper {
2021
+ using CompressionManagerWrapper::CompressionManagerWrapper;
2022
+ const char* Name() const override { return "MyManager"; }
2023
+ std::unique_ptr<Compressor> GetCompressorForSST(
2024
+ const FilterBuildingContext& context, const CompressionOptions& opts,
2025
+ CompressionType preferred) override {
2026
+ return std::make_unique<MyCompressor>(
2027
+ wrapped_->GetCompressorForSST(context, opts, preferred));
2028
+ }
2029
+ };
2030
+ auto mgr = std::make_shared<MyManager>(GetBuiltinV2CompressionManager());
2031
+
2032
+ for (CompressionType type : GetSupportedCompressions()) {
2033
+ for (bool use_wrapper : {false, true}) {
2034
+ if (type == kNoCompression) {
2035
+ continue;
2036
+ }
2037
+ SCOPED_TRACE("Compression type: " + std::to_string(type) +
2038
+ (use_wrapper ? " with " : " no ") + "wrapper");
2039
+
2040
+ Options options = CurrentOptions();
2041
+ options.compression = type;
2042
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
2043
+ options.statistics->set_stats_level(StatsLevel::kExceptTimeForMutex);
2044
+ BlockBasedTableOptions bbto;
2045
+ bbto.enable_index_compression = false;
2046
+ options.table_factory.reset(NewBlockBasedTableFactory(bbto));
2047
+ options.compression_manager = use_wrapper ? mgr : nullptr;
2048
+ DestroyAndReopen(options);
2049
+
2050
+ auto PopStat = [&](Tickers t) -> uint64_t {
2051
+ return options.statistics->getAndResetTickerCount(t);
2052
+ };
2053
+
2054
+ Random rnd(301);
2055
+ constexpr int kCount = 13;
2056
+
2057
+ // Highly compressible blocks, except 1 non-compressible. Half of the
2058
+ // compressible are morked for bypass and 1 marked for rejection. Values
2059
+ // are large enough to ensure just 1 k-v per block.
2060
+ for (int i = 0; i < kCount; ++i) {
2061
+ std::string value;
2062
+ if (i == 6) {
2063
+ // One non-compressible block
2064
+ value = rnd.RandomBinaryString(20000);
2065
+ } else {
2066
+ test::CompressibleString(&rnd, 0.1, 20000, &value);
2067
+ if ((i % 2) == 0) {
2068
+ // Half for bypass
2069
+ value += kDoNotCompress;
2070
+ } else if (i == 7) {
2071
+ // One for rejection
2072
+ value += kRejectCompression;
2073
+ }
2074
+ }
2075
+ ASSERT_OK(Put(Key(i), value));
2076
+ }
2077
+ ASSERT_OK(Flush());
2078
+
2079
+ if (use_wrapper) {
2080
+ EXPECT_EQ(kCount / 2 - 1, PopStat(NUMBER_BLOCK_COMPRESSED));
2081
+ EXPECT_EQ(kCount / 2, PopStat(NUMBER_BLOCK_COMPRESSION_BYPASSED));
2082
+ EXPECT_EQ(1 + 1, PopStat(NUMBER_BLOCK_COMPRESSION_REJECTED));
2083
+ } else {
2084
+ EXPECT_EQ(kCount - 1, PopStat(NUMBER_BLOCK_COMPRESSED));
2085
+ EXPECT_EQ(0, PopStat(NUMBER_BLOCK_COMPRESSION_BYPASSED));
2086
+ EXPECT_EQ(1, PopStat(NUMBER_BLOCK_COMPRESSION_REJECTED));
2087
+ }
2088
+
2089
+ // Ensure well-formed for reads
2090
+ for (int i = 0; i < kCount; ++i) {
2091
+ ASSERT_NE(Get(Key(i)), "NOT_FOUND");
2092
+ }
2093
+ ASSERT_EQ(Get(Key(kCount)), "NOT_FOUND");
2094
+ }
2095
+ }
2096
+ }
2097
+
2098
+ TEST_F(DBTest2, CompressionManagerCustomCompression) {
2099
+ // Test that we can use a custom CompressionManager to implement custom
2100
+ // compression algorithms, and that there are appropriate schema guard rails
2101
+ // to ensure data is not processed by the wrong algorithm.
2102
+ using Compressor8A = test::CompressorCustomAlg<kCustomCompression8A>;
2103
+ using Compressor8B = test::CompressorCustomAlg<kCustomCompression8B>;
2104
+ using Compressor8C = test::CompressorCustomAlg<kCustomCompression8C>;
2105
+
2106
+ if (!Compressor8A::Supported() || !LZ4_Supported()) {
2107
+ fprintf(stderr,
2108
+ "Prerequisite compression library not supported. Skipping\n");
2109
+ return;
2110
+ }
2111
+
2112
+ class MyManager : public CompressionManager {
2113
+ public:
2114
+ explicit MyManager(const char* compat_name) : compat_name_(compat_name) {}
2115
+ const char* Name() const override { return name_.c_str(); }
2116
+ const char* CompatibilityName() const override { return compat_name_; }
2117
+
2118
+ bool SupportsCompressionType(CompressionType type) const override {
2119
+ return type == kCustomCompression8A || type == kCustomCompression8B ||
2120
+ type == kCustomCompression8C ||
2121
+ GetBuiltinV2CompressionManager()->SupportsCompressionType(type);
2122
+ }
2123
+
2124
+ int used_compressor8A_count_ = 0;
2125
+ int used_compressor8B_count_ = 0;
2126
+ int used_compressor8C_count_ = 0;
2127
+
2128
+ std::unique_ptr<Compressor> GetCompressor(const CompressionOptions& opts,
2129
+ CompressionType type) override {
2130
+ switch (static_cast<unsigned char>(type)) {
2131
+ case kCustomCompression8A:
2132
+ used_compressor8A_count_++;
2133
+ return std::make_unique<Compressor8A>();
2134
+ case kCustomCompression8B:
2135
+ used_compressor8B_count_++;
2136
+ return std::make_unique<Compressor8B>();
2137
+ case kCustomCompression8C:
2138
+ used_compressor8C_count_++;
2139
+ return std::make_unique<Compressor8C>();
2140
+ // Also support built-in compression algorithms
2141
+ default:
2142
+ return GetBuiltinV2CompressionManager()->GetCompressor(opts, type);
2143
+ }
2144
+ }
2145
+
2146
+ std::shared_ptr<Decompressor> GetDecompressor() override {
2147
+ return std::make_shared<test::DecompressorCustomAlg>();
2148
+ }
2149
+
2150
+ RelaxedAtomic<CompressionType> last_specific_decompressor_type_{
2151
+ kNoCompression};
2152
+
2153
+ std::shared_ptr<Decompressor> GetDecompressorForTypes(
2154
+ const CompressionType* types_begin,
2155
+ const CompressionType* types_end) override {
2156
+ assert(types_end > types_begin);
2157
+ last_specific_decompressor_type_.StoreRelaxed(*types_begin);
2158
+ auto decomp = std::make_shared<test::DecompressorCustomAlg>();
2159
+ decomp->SetAllowedTypes(types_begin, types_end);
2160
+ return decomp;
2161
+ }
2162
+
2163
+ void AddFriend(const std::shared_ptr<CompressionManager>& mgr) {
2164
+ friends_[mgr->CompatibilityName()] = mgr;
2165
+ }
2166
+ std::shared_ptr<CompressionManager> FindCompatibleCompressionManager(
2167
+ Slice compatibility_name) override {
2168
+ std::shared_ptr<CompressionManager> rv =
2169
+ CompressionManager::FindCompatibleCompressionManager(
2170
+ compatibility_name);
2171
+ if (!rv) {
2172
+ auto it = friends_.find(compatibility_name.ToString());
2173
+ if (it != friends_.end()) {
2174
+ return it->second.lock();
2175
+ }
2176
+ }
2177
+ return rv;
2178
+ }
2179
+
2180
+ private:
2181
+ const char* compat_name_;
2182
+ std::string name_;
2183
+ // weak_ptr to avoid cycles
2184
+ std::map<std::string, std::weak_ptr<CompressionManager>> friends_;
2185
+ };
2186
+
2187
+ for (bool use_dict : {false, true}) {
2188
+ SCOPED_TRACE(use_dict ? "With dict" : "No dict");
2189
+
2190
+ // Although these compression managers are actually compatible, we must
2191
+ // respect their distinct compatibility names and treat them as incompatible
2192
+ // (or else risk processing data incorrectly)
2193
+ // NOTE: these are not registered in ObjectRegistry to test what happens
2194
+ // when the original CompressionManager might not be available, but
2195
+ // mgr_bar will be registered during the test, with different names to
2196
+ // prevent interference between iterations.
2197
+ auto mgr_foo = std::make_shared<MyManager>("Foo");
2198
+ auto mgr_bar = std::make_shared<MyManager>(use_dict ? "Bar1" : "Bar2");
2199
+
2200
+ // And this one claims to be fully compatible with the built-in compression
2201
+ // manager when it's not fully compatible (for custom CompressionTypes)
2202
+ auto mgr_claim_compatible = std::make_shared<MyManager>("BuiltinV2");
2203
+
2204
+ constexpr uint16_t kValueSize = 10000;
2205
+
2206
+ Options options = CurrentOptions();
2207
+ options.level0_file_num_compaction_trigger = 20;
2208
+ BlockBasedTableOptions bbto;
2209
+ bbto.enable_index_compression = false;
2210
+ bbto.format_version = 6; // Before custom compression alg support
2211
+ options.table_factory.reset(NewBlockBasedTableFactory(bbto));
2212
+ // Claims not to use custom compression (and doesn't unless setting a custom
2213
+ // CompressionType)
2214
+ options.compression_manager = mgr_claim_compatible;
2215
+ // Use a built-in compression type with dictionary support
2216
+ options.compression = kLZ4Compression;
2217
+ options.compression_opts.max_dict_bytes = kValueSize / 2;
2218
+ DestroyAndReopen(options);
2219
+
2220
+ Random rnd(404);
2221
+ std::string value;
2222
+ ASSERT_OK(
2223
+ Put("a", test::CompressibleString(&rnd, 0.1, kValueSize, &value)));
2224
+ ASSERT_OK(Flush());
2225
+
2226
+ // That data should be readable without access to the original compression
2227
+ // manager, because it used the built-in CompatibilityName and a built-in
2228
+ // CompressionType
2229
+ options.compression_manager = nullptr;
2230
+ Reopen(options);
2231
+ ASSERT_EQ(Get("a"), value);
2232
+
2233
+ // Verify it was compressed
2234
+ Range r = {"a", "a0"};
2235
+ TablePropertiesCollection tables_properties;
2236
+ ASSERT_OK(db_->GetPropertiesOfTablesInRange(db_->DefaultColumnFamily(), &r,
2237
+ 1, &tables_properties));
2238
+ ASSERT_EQ(tables_properties.size(), 1U);
2239
+ EXPECT_LT(tables_properties.begin()->second->data_size, kValueSize / 2);
2240
+ EXPECT_EQ(tables_properties.begin()->second->compression_name, "LZ4");
2241
+
2242
+ // Disallow setting a custom CompressionType with a CompressionManager
2243
+ // claiming to be built-in compatible.
2244
+ options.compression_manager = mgr_claim_compatible;
2245
+ options.compression = kCustomCompression8A;
2246
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kInvalidArgument);
2247
+
2248
+ options.compression_manager = nullptr;
2249
+ options.compression = kCustomCompressionFE;
2250
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kInvalidArgument);
2251
+ options.compression =
2252
+ static_cast<CompressionType>(kLastBuiltinCompression + 1);
2253
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kInvalidArgument);
2254
+
2255
+ // Custom compression schema (different CompatibilityName) not supported
2256
+ // before format_version=7
2257
+ options.compression_manager = mgr_foo;
2258
+ options.compression = kLZ4Compression;
2259
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kInvalidArgument);
2260
+
2261
+ // Set format version supporting custom compression
2262
+ bbto.format_version = 7;
2263
+ options.table_factory.reset(NewBlockBasedTableFactory(bbto));
2264
+
2265
+ // Custom compression type not supported with built-in schema name, even
2266
+ // with format_version=7
2267
+ options.compression_manager = mgr_claim_compatible;
2268
+ options.compression = kCustomCompression8B;
2269
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kInvalidArgument);
2270
+
2271
+ // Custom compression schema, but specifying a custom compression type it
2272
+ // doesn't support.
2273
+ options.compression_manager = mgr_foo;
2274
+ options.compression = kCustomCompressionF0;
2275
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kNotSupported);
2276
+
2277
+ // Using a built-in compression type with fv=7 but named custom schema
2278
+ options.compression = kLZ4Compression;
2279
+ Reopen(options);
2280
+ ASSERT_OK(
2281
+ Put("b", test::CompressibleString(&rnd, 0.1, kValueSize, &value)));
2282
+ ASSERT_OK(Flush());
2283
+ ASSERT_EQ(NumTableFilesAtLevel(0), 2);
2284
+ ASSERT_EQ(Get("b"), value);
2285
+
2286
+ // Verify it was compressed with LZ4
2287
+ r = {"b", "b0"};
2288
+ tables_properties.clear();
2289
+ ASSERT_OK(db_->GetPropertiesOfTablesInRange(db_->DefaultColumnFamily(), &r,
2290
+ 1, &tables_properties));
2291
+ ASSERT_EQ(tables_properties.size(), 1U);
2292
+ EXPECT_LT(tables_properties.begin()->second->data_size, kValueSize / 2);
2293
+ // Uses new format for "compression_name" property
2294
+ EXPECT_EQ(tables_properties.begin()->second->compression_name, "Foo;04;");
2295
+ EXPECT_EQ(mgr_foo->last_specific_decompressor_type_.LoadRelaxed(),
2296
+ kLZ4Compression);
2297
+
2298
+ // Custom compression type
2299
+ options.compression = kCustomCompression8A;
2300
+ Reopen(options);
2301
+ ASSERT_OK(
2302
+ Put("c", test::CompressibleString(&rnd, 0.1, kValueSize, &value)));
2303
+ EXPECT_EQ(mgr_foo->used_compressor8A_count_, 0);
2304
+ ASSERT_OK(Flush());
2305
+ ASSERT_EQ(NumTableFilesAtLevel(0), 3);
2306
+ ASSERT_EQ(Get("c"), value);
2307
+ EXPECT_EQ(mgr_foo->used_compressor8A_count_, 1);
2308
+
2309
+ // Verify it was compressed with custom format
2310
+ r = {"c", "c0"};
2311
+ tables_properties.clear();
2312
+ ASSERT_OK(db_->GetPropertiesOfTablesInRange(db_->DefaultColumnFamily(), &r,
2313
+ 1, &tables_properties));
2314
+ ASSERT_EQ(tables_properties.size(), 1U);
2315
+ EXPECT_LT(tables_properties.begin()->second->data_size, kValueSize / 2);
2316
+ EXPECT_EQ(tables_properties.begin()->second->compression_name, "Foo;8A;");
2317
+ EXPECT_EQ(mgr_foo->last_specific_decompressor_type_.LoadRelaxed(),
2318
+ kCustomCompression8A);
2319
+
2320
+ // Also dynamically changeable, because the compression manager will respect
2321
+ // the current setting as reported under the legacy logic
2322
+ ASSERT_OK(dbfull()->SetOptions({{"compression", "kLZ4Compression"}}));
2323
+ ASSERT_OK(
2324
+ Put("d", test::CompressibleString(&rnd, 0.1, kValueSize, &value)));
2325
+ ASSERT_OK(Flush());
2326
+ ASSERT_EQ(NumTableFilesAtLevel(0), 4);
2327
+ ASSERT_EQ(Get("d"), value);
2328
+
2329
+ // Verify it was compressed with LZ4
2330
+ r = {"d", "d0"};
2331
+ tables_properties.clear();
2332
+ ASSERT_OK(db_->GetPropertiesOfTablesInRange(db_->DefaultColumnFamily(), &r,
2333
+ 1, &tables_properties));
2334
+ ASSERT_EQ(tables_properties.size(), 1U);
2335
+ EXPECT_LT(tables_properties.begin()->second->data_size, kValueSize / 2);
2336
+ EXPECT_EQ(tables_properties.begin()->second->compression_name, "Foo;04;");
2337
+ EXPECT_EQ(mgr_foo->last_specific_decompressor_type_.LoadRelaxed(),
2338
+ kLZ4Compression);
2339
+
2340
+ // Dynamically changeable to custom compressions also
2341
+ ASSERT_OK(dbfull()->SetOptions({{"compression", "kCustomCompression8B"}}));
2342
+ ASSERT_OK(
2343
+ Put("e", test::CompressibleString(&rnd, 0.1, kValueSize, &value)));
2344
+ ASSERT_OK(Flush());
2345
+ ASSERT_EQ(NumTableFilesAtLevel(0), 5);
2346
+ ASSERT_EQ(Get("e"), value);
2347
+
2348
+ // Verify it was compressed with custom format
2349
+ r = {"e", "e0"};
2350
+ tables_properties.clear();
2351
+ ASSERT_OK(db_->GetPropertiesOfTablesInRange(db_->DefaultColumnFamily(), &r,
2352
+ 1, &tables_properties));
2353
+ ASSERT_EQ(tables_properties.size(), 1U);
2354
+ EXPECT_LT(tables_properties.begin()->second->data_size, kValueSize / 2);
2355
+ EXPECT_EQ(tables_properties.begin()->second->compression_name, "Foo;8B;");
2356
+ EXPECT_EQ(mgr_foo->last_specific_decompressor_type_.LoadRelaxed(),
2357
+ kCustomCompression8B);
2358
+
2359
+ // Fails to re-open with incompatible compression manager (can't find
2360
+ // compression manager Foo because it's not registered nor known by Bar)
2361
+ options.compression_manager = mgr_bar;
2362
+ options.compression = kLZ4Compression;
2363
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kNotSupported);
2364
+
2365
+ // But should re-open if we make Bar aware of the Foo compression manager
2366
+ mgr_bar->AddFriend(mgr_foo);
2367
+ Reopen(options);
2368
+
2369
+ // Can still read everything
2370
+ ASSERT_EQ(Get("a").size(), kValueSize);
2371
+ ASSERT_EQ(Get("b").size(), kValueSize);
2372
+ ASSERT_EQ(Get("c").size(), kValueSize);
2373
+ ASSERT_EQ(Get("d").size(), kValueSize);
2374
+ ASSERT_EQ(Get("e").size(), kValueSize);
2375
+
2376
+ // Add a file using mgr_bar
2377
+ ASSERT_OK(
2378
+ Put("f", test::CompressibleString(&rnd, 0.1, kValueSize, &value)));
2379
+ ASSERT_OK(Flush());
2380
+ ASSERT_EQ(NumTableFilesAtLevel(0), 6);
2381
+ ASSERT_EQ(Get("f"), value);
2382
+
2383
+ // Verify it was compressed appropriately
2384
+ r = {"f", "f0"};
2385
+ tables_properties.clear();
2386
+ ASSERT_OK(db_->GetPropertiesOfTablesInRange(db_->DefaultColumnFamily(), &r,
2387
+ 1, &tables_properties));
2388
+ ASSERT_EQ(tables_properties.size(), 1U);
2389
+ EXPECT_LT(tables_properties.begin()->second->data_size, kValueSize / 2);
2390
+ EXPECT_EQ(mgr_bar->last_specific_decompressor_type_.LoadRelaxed(),
2391
+ kLZ4Compression);
2392
+
2393
+ // Fails to re-open with incompatible compression manager (can't find
2394
+ // compression manager Bar because it's not registered nor known by Foo)
2395
+ options.compression_manager = mgr_foo;
2396
+ ASSERT_EQ(TryReopen(options).code(), Status::Code::kNotSupported);
2397
+
2398
+ // Register and re-open
2399
+ auto& library = *ObjectLibrary::Default();
2400
+ library.AddFactory<CompressionManager>(
2401
+ mgr_bar->CompatibilityName(),
2402
+ [mgr_bar](const std::string& /*uri*/,
2403
+ std::unique_ptr<CompressionManager>* guard,
2404
+ std::string* /*errmsg*/) {
2405
+ *guard = std::make_unique<MyManager>(mgr_bar->CompatibilityName());
2406
+ return guard->get();
2407
+ });
2408
+ Reopen(options);
2409
+
2410
+ // Can still read everything
2411
+ ASSERT_EQ(Get("a").size(), kValueSize);
2412
+ ASSERT_EQ(Get("b").size(), kValueSize);
2413
+ ASSERT_EQ(Get("c").size(), kValueSize);
2414
+ ASSERT_EQ(Get("d").size(), kValueSize);
2415
+ ASSERT_EQ(Get("e").size(), kValueSize);
2416
+ ASSERT_EQ(Get("f").size(), kValueSize);
2417
+
2418
+ // TODO: test old version of a compression manager unable to read a
2419
+ // compression type
2420
+ }
2421
+ }
2422
+
1892
2423
  class CompactionStallTestListener : public EventListener {
1893
2424
  public:
1894
2425
  CompactionStallTestListener()
@@ -1977,7 +2508,6 @@ TEST_F(DBTest2, CompactionStall) {
1977
2508
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1978
2509
  }
1979
2510
 
1980
-
1981
2511
  TEST_F(DBTest2, FirstSnapshotTest) {
1982
2512
  Options options;
1983
2513
  options.write_buffer_size = 100000; // Small write buffer
@@ -3015,7 +3545,7 @@ TEST_F(DBTest2, PausingManualCompaction1) {
3015
3545
  "TestCompactFiles:PausingManualCompaction:3", [&](void* arg) {
3016
3546
  auto paused = static_cast<std::atomic<int>*>(arg);
3017
3547
  // CompactFiles() relies on manual_compactions_paused to
3018
- // determine if thie compaction should be paused or not
3548
+ // determine if this compaction should be paused or not
3019
3549
  ASSERT_EQ(0, paused->load(std::memory_order_acquire));
3020
3550
  paused->fetch_add(1, std::memory_order_release);
3021
3551
  });
@@ -3127,6 +3657,7 @@ TEST_F(DBTest2, PausingManualCompaction3) {
3127
3657
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
3128
3658
 
3129
3659
  dbfull()->DisableManualCompaction();
3660
+
3130
3661
  ASSERT_TRUE(dbfull()
3131
3662
  ->CompactRange(compact_options, nullptr, nullptr)
3132
3663
  .IsManualCompactionPaused());
@@ -3600,7 +4131,6 @@ TEST_F(DBTest2, OptimizeForSmallDB) {
3600
4131
  value.Reset();
3601
4132
  }
3602
4133
 
3603
-
3604
4134
  TEST_F(DBTest2, IterRaceFlush1) {
3605
4135
  ASSERT_OK(Put("foo", "v1"));
3606
4136
 
@@ -4104,7 +4634,6 @@ TEST_F(DBTest2, ReadCallbackTest) {
4104
4634
  }
4105
4635
  }
4106
4636
 
4107
-
4108
4637
  TEST_F(DBTest2, LiveFilesOmitObsoleteFiles) {
4109
4638
  // Regression test for race condition where an obsolete file is returned to
4110
4639
  // user as a "live file" but then deleted, all while file deletions are
@@ -4432,7 +4961,7 @@ TEST_F(DBTest2, TraceAndReplay) {
4432
4961
  db2->NewDefaultReplayer(handles, std::move(trace_reader), &replayer));
4433
4962
 
4434
4963
  TraceExecutionResultHandler res_handler;
4435
- std::function<void(Status, std::unique_ptr<TraceRecordResult> &&)> res_cb =
4964
+ std::function<void(Status, std::unique_ptr<TraceRecordResult>&&)> res_cb =
4436
4965
  [&res_handler](Status exec_s, std::unique_ptr<TraceRecordResult>&& res) {
4437
4966
  ASSERT_TRUE(exec_s.ok() || exec_s.IsNotSupported());
4438
4967
  if (res != nullptr) {
@@ -5164,7 +5693,6 @@ TEST_F(DBTest2, TraceWithFilter) {
5164
5693
  ASSERT_EQ(count, 6);
5165
5694
  }
5166
5695
 
5167
-
5168
5696
  TEST_F(DBTest2, PinnableSliceAndMmapReads) {
5169
5697
  Options options = CurrentOptions();
5170
5698
  options.env = env_;
@@ -5429,6 +5957,103 @@ TEST_F(DBTest2, TestCompactFiles) {
5429
5957
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
5430
5958
  }
5431
5959
 
5960
+ TEST_F(DBTest2, TestCancelCompactFiles) {
5961
+ SyncPoint::GetInstance()->EnableProcessing();
5962
+
5963
+ Options options;
5964
+ options.env = env_;
5965
+ options.num_levels = 2;
5966
+ options.disable_auto_compactions = true;
5967
+ Reopen(options);
5968
+
5969
+ auto* handle = db_->DefaultColumnFamily();
5970
+ ASSERT_EQ(db_->NumberLevels(handle), 2);
5971
+
5972
+ ROCKSDB_NAMESPACE::SstFileWriter sst_file_writer{
5973
+ ROCKSDB_NAMESPACE::EnvOptions(), options};
5974
+
5975
+ // ingest large SST files
5976
+ std::vector<std::string> external_sst_file_names;
5977
+ int key_counter = 0;
5978
+ const int num_keys_per_file = 100000;
5979
+ const int num_files = 10;
5980
+ for (int i = 0; i < num_files; ++i) {
5981
+ std::string file_name =
5982
+ dbname_ + "/test_compact_files" + std::to_string(i) + ".sst_t";
5983
+ external_sst_file_names.push_back(file_name);
5984
+ ASSERT_OK(sst_file_writer.Open(file_name));
5985
+ for (int j = 0; j < num_keys_per_file; ++j) {
5986
+ ASSERT_OK(sst_file_writer.Put(Key(j + num_keys_per_file * key_counter),
5987
+ std::to_string(j)));
5988
+ }
5989
+ key_counter += 1;
5990
+ ASSERT_OK(sst_file_writer.Finish());
5991
+ }
5992
+
5993
+ ASSERT_OK(db_->IngestExternalFile(handle, external_sst_file_names,
5994
+ IngestExternalFileOptions()));
5995
+ ASSERT_EQ(NumTableFilesAtLevel(1, 0), num_files);
5996
+ std::vector<std::string> files;
5997
+ GetSstFiles(env_, dbname_, &files);
5998
+ ASSERT_EQ(files.size(), num_files);
5999
+
6000
+ // Test that 0 compactions happen - canceled is set to True initially
6001
+ CompactionOptions compaction_options;
6002
+ std::atomic<bool> canceled(true);
6003
+ compaction_options.canceled = &canceled;
6004
+
6005
+ ASSERT_TRUE(db_->CompactFiles(compaction_options, handle, files, 1)
6006
+ .IsManualCompactionPaused());
6007
+ ASSERT_EQ(NumTableFilesAtLevel(1, 0), num_files);
6008
+
6009
+ // Test cancellation before the check to cancel compaction happens -
6010
+ // compaction should not occur
6011
+ bool disable_compaction = false;
6012
+ compaction_options.canceled->store(false, std::memory_order_release);
6013
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
6014
+ "TestCancelCompactFiles:SuccessfulCompaction", [&](void* arg) {
6015
+ auto paused = static_cast<std::atomic<int>*>(arg);
6016
+ if (disable_compaction) {
6017
+ db_->DisableManualCompaction();
6018
+ ASSERT_EQ(1, paused->load(std::memory_order_acquire));
6019
+ } else {
6020
+ compaction_options.canceled->store(true, std::memory_order_release);
6021
+ ASSERT_EQ(0, paused->load(std::memory_order_acquire));
6022
+ }
6023
+ });
6024
+
6025
+ ASSERT_TRUE(db_->CompactFiles(compaction_options, handle, files, 1)
6026
+ .IsManualCompactionPaused());
6027
+ ASSERT_EQ(NumTableFilesAtLevel(1, 0), num_files);
6028
+
6029
+ // DisableManualCompaction() should successfully cancel compaction
6030
+ disable_compaction = true;
6031
+ compaction_options.canceled->store(false, std::memory_order_release);
6032
+ ASSERT_TRUE(db_->CompactFiles(compaction_options, handle, files, 1)
6033
+ .IsManualCompactionPaused());
6034
+ ASSERT_EQ(NumTableFilesAtLevel(1, 0), num_files);
6035
+ // unlike CompactRange, value of compaction_options.canceled will be
6036
+ // unaffected by calling DisableManualCompactions()
6037
+ ASSERT_FALSE(compaction_options.canceled->load());
6038
+
6039
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
6040
+ db_->EnableManualCompaction();
6041
+
6042
+ // Test cancelation after the check to cancel compaction - compaction should
6043
+ // occur, leaving only 1 file
6044
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
6045
+ "CompactFilesImpl:0", [&](void* /*arg*/) {
6046
+ compaction_options.canceled->store(true, std::memory_order_release);
6047
+ });
6048
+
6049
+ compaction_options.canceled->store(false, std::memory_order_release);
6050
+ ASSERT_OK(db_->CompactFiles(compaction_options, handle, files, 1));
6051
+ ASSERT_EQ(NumTableFilesAtLevel(1, 0), 1);
6052
+
6053
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
6054
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
6055
+ }
6056
+
5432
6057
  TEST_F(DBTest2, MultiDBParallelOpenTest) {
5433
6058
  const int kNumDbs = 2;
5434
6059
  Options options = CurrentOptions();
@@ -7693,7 +8318,6 @@ TEST_F(DBTest2, RecoverEpochNumber) {
7693
8318
  }
7694
8319
  }
7695
8320
 
7696
-
7697
8321
  TEST_F(DBTest2, RenameDirectory) {
7698
8322
  Options options = CurrentOptions();
7699
8323
  DestroyAndReopen(options);
@@ -8006,7 +8630,7 @@ TEST_F(DBTest2, GetLatestSeqAndTsForKey) {
8006
8630
  ASSERT_EQ(0, options.statistics->getTickerCount(GET_HIT_L0));
8007
8631
  }
8008
8632
 
8009
- #if defined(ZSTD_ADVANCED)
8633
+ #if defined(ZSTD)
8010
8634
  TEST_F(DBTest2, ZSTDChecksum) {
8011
8635
  // Verify that corruption during decompression is caught.
8012
8636
  Options options = CurrentOptions();