@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
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include <algorithm>
13
13
  #include <limits>
14
+
14
15
  #ifdef ROCKSDB_MALLOC_USABLE_SIZE
15
16
  #ifdef OS_FREEBSD
16
17
  #include <malloc_np.h>
@@ -21,10 +22,13 @@
21
22
  #include <string>
22
23
 
23
24
  #include "memory/memory_allocator_impl.h"
25
+ #include "port/likely.h"
26
+ #include "rocksdb/advanced_compression.h"
24
27
  #include "rocksdb/options.h"
25
- #include "rocksdb/table.h"
26
28
  #include "table/block_based/block_type.h"
27
29
  #include "test_util/sync_point.h"
30
+ #include "util/atomic.h"
31
+ #include "util/cast_util.h"
28
32
  #include "util/coding.h"
29
33
  #include "util/compression_context_cache.h"
30
34
  #include "util/string_util.h"
@@ -46,48 +50,51 @@
46
50
  #include <lz4hc.h>
47
51
  #endif
48
52
 
49
- #if defined(ZSTD)
53
+ #ifdef ZSTD
50
54
  #include <zstd.h>
51
- // v1.1.3+
52
- #if ZSTD_VERSION_NUMBER >= 10103
53
- #include <zdict.h>
54
- #endif // ZSTD_VERSION_NUMBER >= 10103
55
- // v1.4.0+
56
55
  // ZSTD_Compress2(), ZSTD_compressStream2() and frame parameters all belong to
57
- // advanced APIs and require v1.4.0+.
56
+ // advanced APIs and require v1.4.0+, which is from April 2019.
58
57
  // https://github.com/facebook/zstd/blob/eb9f881eb810f2242f1ef36b3f3e7014eecb8fa6/lib/zstd.h#L297C40-L297C45
59
- #if ZSTD_VERSION_NUMBER >= 10400
60
- #define ZSTD_ADVANCED
61
- #endif // ZSTD_VERSION_NUMBER >= 10400
58
+ // To avoid a rat's nest of #ifdefs, we now require v1.4.0+ for ZSTD support.
59
+ #if ZSTD_VERSION_NUMBER < 10400
60
+ #error "ZSTD support requires version >= 1.4.0 (libzstd-devel)"
61
+ #endif // ZSTD_VERSION_NUMBER
62
+ // The above release also includes digested dictionary support, but some
63
+ // required functions (ZSTD_createDDict_byReference) are still only exported
64
+ // with ZSTD_STATIC_LINKING_ONLY defined.
65
+ #if defined(ZSTD_STATIC_LINKING_ONLY)
66
+ #define ROCKSDB_ZSTD_DDICT
67
+ #endif // defined(ZSTD_STATIC_LINKING_ONLY)
68
+ // For ZDICT_* functions
69
+ #include <zdict.h>
70
+ // ZDICT_finalizeDictionary API is exported and stable since v1.4.5
71
+ #if ZSTD_VERSION_NUMBER >= 10405
72
+ #define ROCKSDB_ZDICT_FINALIZE
73
+ #endif // ZSTD_VERSION_NUMBER >= 10405
74
+ #endif // ZSTD
75
+
62
76
  namespace ROCKSDB_NAMESPACE {
63
77
  // Need this for the context allocation override
64
78
  // On windows we need to do this explicitly
65
- #if (ZSTD_VERSION_NUMBER >= 500)
66
- #if defined(ROCKSDB_JEMALLOC) && defined(OS_WIN) && \
79
+ #if defined(ZSTD) && defined(ROCKSDB_JEMALLOC) && defined(OS_WIN) && \
67
80
  defined(ZSTD_STATIC_LINKING_ONLY)
68
81
  #define ROCKSDB_ZSTD_CUSTOM_MEM
69
82
  namespace port {
70
83
  ZSTD_customMem GetJeZstdAllocationOverrides();
71
84
  } // namespace port
72
- #endif // defined(ROCKSDB_JEMALLOC) && defined(OS_WIN) &&
85
+ #endif // defined(ZSTD) && defined(ROCKSDB_JEMALLOC) && defined(OS_WIN) &&
73
86
  // defined(ZSTD_STATIC_LINKING_ONLY)
74
87
 
75
- // We require `ZSTD_sizeof_DDict` and `ZSTD_createDDict_byReference` to use
76
- // `ZSTD_DDict`. The former was introduced in v1.0.0 and the latter was
77
- // introduced in v1.1.3. But an important bug fix for `ZSTD_sizeof_DDict` came
78
- // in v1.1.4, so that is the version we require. As of today's latest version
79
- // (v1.3.8), they are both still in the experimental API, which means they are
80
- // only exported when the compiler flag `ZSTD_STATIC_LINKING_ONLY` is set.
81
- #if defined(ZSTD_STATIC_LINKING_ONLY) && ZSTD_VERSION_NUMBER >= 10104
82
- #define ROCKSDB_ZSTD_DDICT
83
- #endif // defined(ZSTD_STATIC_LINKING_ONLY) && ZSTD_VERSION_NUMBER >= 10104
84
-
85
88
  // Cached data represents a portion that can be re-used
86
89
  // If, in the future we have more than one native context to
87
90
  // cache we can arrange this as a tuple
88
91
  class ZSTDUncompressCachedData {
89
92
  public:
93
+ #if defined(ZSTD)
90
94
  using ZSTDNativeContext = ZSTD_DCtx*;
95
+ #else
96
+ using ZSTDNativeContext = void*;
97
+ #endif // ZSTD
91
98
  ZSTDUncompressCachedData() {}
92
99
  // Init from cache
93
100
  ZSTDUncompressCachedData(const ZSTDUncompressCachedData& o) = delete;
@@ -106,12 +113,14 @@ class ZSTDUncompressCachedData {
106
113
  int64_t GetCacheIndex() const { return cache_idx_; }
107
114
  void CreateIfNeeded() {
108
115
  if (zstd_ctx_ == nullptr) {
109
- #ifdef ROCKSDB_ZSTD_CUSTOM_MEM
116
+ #if !defined(ZSTD)
117
+ zstd_ctx_ = nullptr;
118
+ #elif defined(ROCKSDB_ZSTD_CUSTOM_MEM)
110
119
  zstd_ctx_ =
111
120
  ZSTD_createDCtx_advanced(port::GetJeZstdAllocationOverrides());
112
- #else // ROCKSDB_ZSTD_CUSTOM_MEM
121
+ #else // ZSTD && !ROCKSDB_ZSTD_CUSTOM_MEM
113
122
  zstd_ctx_ = ZSTD_createDCtx();
114
- #endif // ROCKSDB_ZSTD_CUSTOM_MEM
123
+ #endif
115
124
  cache_idx_ = -1;
116
125
  }
117
126
  }
@@ -120,110 +129,218 @@ class ZSTDUncompressCachedData {
120
129
  cache_idx_ = idx;
121
130
  }
122
131
  ~ZSTDUncompressCachedData() {
132
+ #if defined(ZSTD)
123
133
  if (zstd_ctx_ != nullptr && cache_idx_ == -1) {
124
134
  ZSTD_freeDCtx(zstd_ctx_);
125
135
  }
136
+ #endif // ZSTD
126
137
  }
127
138
 
128
139
  private:
129
140
  ZSTDNativeContext zstd_ctx_ = nullptr;
130
141
  int64_t cache_idx_ = -1; // -1 means this instance owns the context
131
142
  };
132
- #endif // (ZSTD_VERSION_NUMBER >= 500)
133
143
  } // namespace ROCKSDB_NAMESPACE
134
- #endif // ZSTD
135
144
 
136
- #if !(defined ZSTD) || !(ZSTD_VERSION_NUMBER >= 500)
145
+ #if defined(XPRESS)
146
+ #include "port/xpress.h"
147
+ #endif
148
+
137
149
  namespace ROCKSDB_NAMESPACE {
138
- class ZSTDUncompressCachedData {
139
- void* padding; // unused
150
+
151
+ class FailureDecompressor : public Decompressor {
140
152
  public:
141
- using ZSTDNativeContext = void*;
142
- ZSTDUncompressCachedData() {}
143
- ZSTDUncompressCachedData(const ZSTDUncompressCachedData&) {}
144
- ZSTDUncompressCachedData& operator=(const ZSTDUncompressCachedData&) = delete;
145
- ZSTDUncompressCachedData(ZSTDUncompressCachedData&&) noexcept = default;
146
- ZSTDUncompressCachedData& operator=(ZSTDUncompressCachedData&&) noexcept =
147
- default;
148
- ZSTDNativeContext Get() const { return nullptr; }
149
- int64_t GetCacheIndex() const { return -1; }
150
- void CreateIfNeeded() {}
151
- void InitFromCache(const ZSTDUncompressCachedData&, int64_t) {}
153
+ explicit FailureDecompressor(Status&& status) : status_(std::move(status)) {
154
+ assert(!status_.ok());
155
+ }
156
+ ~FailureDecompressor() override { status_.PermitUncheckedError(); }
152
157
 
153
- private:
154
- void ignore_padding__() { padding = nullptr; }
158
+ const char* Name() const override { return "FailureDecompressor"; }
159
+
160
+ Status ExtractUncompressedSize(Args& /*args*/) override { return status_; }
161
+
162
+ Status DecompressBlock(const Args& /*args*/,
163
+ char* /*uncompressed_output*/) override {
164
+ return status_;
165
+ }
166
+
167
+ protected:
168
+ Status status_;
155
169
  };
156
- } // namespace ROCKSDB_NAMESPACE
157
- #endif
158
170
 
159
- #if defined(XPRESS)
160
- #include "port/xpress.h"
161
- #endif
171
+ // Owns a decompression dictionary, and associated Decompressor, for storing
172
+ // in the block cache.
173
+ //
174
+ // Justification: for a "processed" dictionary to be saved in block cache, we
175
+ // also need a reference to the decompressor that processed it, to ensure it
176
+ // is recognized properly. At that point, we might as well have the dictionary
177
+ // part of the decompressor identity and track an associated decompressor along
178
+ // with a decompression dictionary in the block cache, and the decompressor
179
+ // hides potential details of processing the dictionary.
180
+ struct DecompressorDict {
181
+ // Block containing the data for the compression dictionary in case the
182
+ // constructor that takes a string parameter is used.
183
+ std::string dict_str_;
162
184
 
163
- namespace ROCKSDB_NAMESPACE {
185
+ // Block containing the data for the compression dictionary in case the
186
+ // constructor that takes a Slice parameter is used and the passed in
187
+ // CacheAllocationPtr is not nullptr.
188
+ CacheAllocationPtr dict_allocation_;
189
+
190
+ // A Decompressor referencing and using the dictionary owned by this.
191
+ std::unique_ptr<Decompressor> decompressor_;
192
+
193
+ // Approximate owned memory usage
194
+ size_t memory_usage_;
195
+
196
+ DecompressorDict(std::string&& dict, Decompressor& from_decompressor)
197
+ : dict_str_(std::move(dict)) {
198
+ Populate(from_decompressor, dict_str_);
199
+ }
200
+
201
+ DecompressorDict(Slice slice, CacheAllocationPtr&& allocation,
202
+ Decompressor& from_decompressor)
203
+ : dict_allocation_(std::move(allocation)) {
204
+ Populate(from_decompressor, slice);
205
+ }
206
+
207
+ DecompressorDict(DecompressorDict&& rhs) noexcept
208
+ : dict_str_(std::move(rhs.dict_str_)),
209
+ dict_allocation_(std::move(rhs.dict_allocation_)),
210
+ decompressor_(std::move(rhs.decompressor_)),
211
+ memory_usage_(std::move(rhs.memory_usage_)) {}
212
+
213
+ DecompressorDict& operator=(DecompressorDict&& rhs) noexcept {
214
+ if (this == &rhs) {
215
+ return *this;
216
+ }
217
+ dict_str_ = std::move(rhs.dict_str_);
218
+ dict_allocation_ = std::move(rhs.dict_allocation_);
219
+ decompressor_ = std::move(rhs.decompressor_);
220
+ return *this;
221
+ }
222
+ // Disable copy
223
+ DecompressorDict(const DecompressorDict&) = delete;
224
+ DecompressorDict& operator=(const DecompressorDict&) = delete;
225
+
226
+ // The object is self-contained if the string constructor is used, or the
227
+ // Slice constructor is invoked with a non-null allocation. Otherwise, it
228
+ // is the caller's responsibility to ensure that the underlying storage
229
+ // outlives this object.
230
+ bool own_bytes() const { return !dict_str_.empty() || dict_allocation_; }
231
+
232
+ const Slice& GetRawDict() const { return decompressor_->GetSerializedDict(); }
233
+
234
+ // For TypedCacheInterface
235
+ const Slice& ContentSlice() const { return GetRawDict(); }
236
+ static constexpr CacheEntryRole kCacheEntryRole = CacheEntryRole::kOtherBlock;
237
+ static constexpr BlockType kBlockType = BlockType::kCompressionDictionary;
238
+
239
+ size_t ApproximateMemoryUsage() const { return memory_usage_; }
240
+
241
+ private:
242
+ void Populate(Decompressor& from_decompressor, Slice dict) {
243
+ Status s = from_decompressor.MaybeCloneForDict(dict, &decompressor_);
244
+ if (decompressor_ == nullptr) {
245
+ dict_str_ = {};
246
+ dict_allocation_ = {};
247
+ assert(!s.ok());
248
+ decompressor_ = std::make_unique<FailureDecompressor>(std::move(s));
249
+ } else {
250
+ assert(s.ok());
251
+ assert(decompressor_->GetSerializedDict() == dict);
252
+ }
253
+
254
+ memory_usage_ = sizeof(struct DecompressorDict);
255
+ memory_usage_ += dict_str_.size();
256
+ if (dict_allocation_) {
257
+ auto allocator = dict_allocation_.get_deleter().allocator;
258
+ if (allocator) {
259
+ memory_usage_ +=
260
+ allocator->UsableSize(dict_allocation_.get(), GetRawDict().size());
261
+ } else {
262
+ memory_usage_ += GetRawDict().size();
263
+ }
264
+ }
265
+ memory_usage_ += decompressor_->ApproximateOwnedMemoryUsage();
266
+ }
267
+ };
164
268
 
165
269
  // Holds dictionary and related data, like ZSTD's digested compression
166
270
  // dictionary.
167
271
  struct CompressionDict {
168
- #if ZSTD_VERSION_NUMBER >= 700
272
+ #ifdef ZSTD
169
273
  ZSTD_CDict* zstd_cdict_ = nullptr;
170
- #endif // ZSTD_VERSION_NUMBER >= 700
274
+ #endif // ZSTD
171
275
  std::string dict_;
172
276
 
173
277
  public:
174
- #if ZSTD_VERSION_NUMBER >= 700
175
- CompressionDict(std::string dict, CompressionType type, int level) {
176
- #else // ZSTD_VERSION_NUMBER >= 700
177
- CompressionDict(std::string dict, CompressionType /*type*/, int /*level*/) {
178
- #endif // ZSTD_VERSION_NUMBER >= 700
278
+ CompressionDict() = default;
279
+ CompressionDict(std::string&& dict, CompressionType type, int level) {
179
280
  dict_ = std::move(dict);
180
- #if ZSTD_VERSION_NUMBER >= 700
281
+ #ifdef ZSTD
181
282
  zstd_cdict_ = nullptr;
182
- if (!dict_.empty() && (type == kZSTD || type == kZSTDNotFinalCompression)) {
283
+ if (!dict_.empty() && type == kZSTD) {
183
284
  if (level == CompressionOptions::kDefaultCompressionLevel) {
184
- // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
185
- // https://github.com/facebook/zstd/issues/1148
186
- // TODO(cbi): ZSTD_CLEVEL_DEFAULT is exposed after
187
- // https://github.com/facebook/zstd/pull/1174. Use ZSTD_CLEVEL_DEFAULT
188
- // instead of hardcoding 3.
189
- level = 3;
285
+ // NB: ZSTD_CLEVEL_DEFAULT is historically == 3
286
+ level = ZSTD_CLEVEL_DEFAULT;
190
287
  }
191
288
  // Should be safe (but slower) if below call fails as we'll use the
192
289
  // raw dictionary to compress.
193
290
  zstd_cdict_ = ZSTD_createCDict(dict_.data(), dict_.size(), level);
194
291
  assert(zstd_cdict_ != nullptr);
195
292
  }
196
- #endif // ZSTD_VERSION_NUMBER >= 700
293
+ #else
294
+ (void)type;
295
+ (void)level;
296
+ #endif // ZSTD
297
+ }
298
+
299
+ CompressionDict(CompressionDict&& other) {
300
+ #ifdef ZSTD
301
+ zstd_cdict_ = other.zstd_cdict_;
302
+ other.zstd_cdict_ = nullptr;
303
+ #endif // ZSTD
304
+ dict_ = std::move(other.dict_);
305
+ }
306
+ CompressionDict& operator=(CompressionDict&& other) {
307
+ if (this == &other) {
308
+ return *this;
309
+ }
310
+ #ifdef ZSTD
311
+ zstd_cdict_ = other.zstd_cdict_;
312
+ other.zstd_cdict_ = nullptr;
313
+ #endif // ZSTD
314
+ dict_ = std::move(other.dict_);
315
+ return *this;
197
316
  }
198
317
 
199
318
  ~CompressionDict() {
200
- #if ZSTD_VERSION_NUMBER >= 700
319
+ #ifdef ZSTD
201
320
  size_t res = 0;
202
321
  if (zstd_cdict_ != nullptr) {
203
322
  res = ZSTD_freeCDict(zstd_cdict_);
204
323
  }
205
324
  assert(res == 0); // Last I checked they can't fail
206
325
  (void)res; // prevent unused var warning
207
- #endif // ZSTD_VERSION_NUMBER >= 700
326
+ #endif // ZSTD
208
327
  }
209
328
 
210
- #if ZSTD_VERSION_NUMBER >= 700
329
+ #ifdef ZSTD
211
330
  const ZSTD_CDict* GetDigestedZstdCDict() const { return zstd_cdict_; }
212
- #endif // ZSTD_VERSION_NUMBER >= 700
331
+ #endif // ZSTD
213
332
 
214
333
  Slice GetRawDict() const { return dict_; }
334
+ bool empty() const { return dict_.empty(); }
215
335
 
216
336
  static const CompressionDict& GetEmptyDict() {
217
337
  static CompressionDict empty_dict{};
218
338
  return empty_dict;
219
339
  }
220
340
 
221
- CompressionDict() = default;
222
- // Disable copy/move
341
+ // Disable copy
223
342
  CompressionDict(const CompressionDict&) = delete;
224
343
  CompressionDict& operator=(const CompressionDict&) = delete;
225
- CompressionDict(CompressionDict&&) = delete;
226
- CompressionDict& operator=(CompressionDict&&) = delete;
227
344
  };
228
345
 
229
346
  // Holds dictionary and related data, like ZSTD's digested uncompression
@@ -248,33 +365,28 @@ struct UncompressionDict {
248
365
  ZSTD_DDict* zstd_ddict_ = nullptr;
249
366
  #endif // ROCKSDB_ZSTD_DDICT
250
367
 
251
- #ifdef ROCKSDB_ZSTD_DDICT
252
- UncompressionDict(std::string dict, bool using_zstd)
253
- #else // ROCKSDB_ZSTD_DDICT
254
- UncompressionDict(std::string dict, bool /* using_zstd */)
255
- #endif // ROCKSDB_ZSTD_DDICT
368
+ UncompressionDict(std::string&& dict, bool using_zstd)
256
369
  : dict_(std::move(dict)), slice_(dict_) {
257
370
  #ifdef ROCKSDB_ZSTD_DDICT
258
371
  if (!slice_.empty() && using_zstd) {
259
372
  zstd_ddict_ = ZSTD_createDDict_byReference(slice_.data(), slice_.size());
260
373
  assert(zstd_ddict_ != nullptr);
261
374
  }
375
+ #else
376
+ (void)using_zstd;
262
377
  #endif // ROCKSDB_ZSTD_DDICT
263
378
  }
264
379
 
265
- #ifdef ROCKSDB_ZSTD_DDICT
266
380
  UncompressionDict(Slice slice, CacheAllocationPtr&& allocation,
267
381
  bool using_zstd)
268
- #else // ROCKSDB_ZSTD_DDICT
269
- UncompressionDict(Slice slice, CacheAllocationPtr&& allocation,
270
- bool /* using_zstd */)
271
- #endif // ROCKSDB_ZSTD_DDICT
272
382
  : allocation_(std::move(allocation)), slice_(std::move(slice)) {
273
383
  #ifdef ROCKSDB_ZSTD_DDICT
274
384
  if (!slice_.empty() && using_zstd) {
275
385
  zstd_ddict_ = ZSTD_createDDict_byReference(slice_.data(), slice_.size());
276
386
  assert(zstd_ddict_ != nullptr);
277
387
  }
388
+ #else
389
+ (void)using_zstd;
278
390
  #endif // ROCKSDB_ZSTD_DDICT
279
391
  }
280
392
 
@@ -365,9 +477,9 @@ struct UncompressionDict {
365
477
  UncompressionDict& operator=(const CompressionDict&) = delete;
366
478
  };
367
479
 
368
- class CompressionContext {
480
+ class CompressionContext : public Compressor::WorkingArea {
369
481
  private:
370
- #if defined(ZSTD) && (ZSTD_VERSION_NUMBER >= 500)
482
+ #ifdef ZSTD
371
483
  ZSTD_CCtx* zstd_ctx_ = nullptr;
372
484
 
373
485
  ZSTD_CCtx* CreateZSTDContext() {
@@ -378,14 +490,23 @@ class CompressionContext {
378
490
  #endif // ROCKSDB_ZSTD_CUSTOM_MEM
379
491
  }
380
492
 
493
+ public:
494
+ // callable inside ZSTD_Compress
495
+ ZSTD_CCtx* ZSTDPreallocCtx() const {
496
+ assert(zstd_ctx_ != nullptr);
497
+ return zstd_ctx_;
498
+ }
499
+
500
+ private:
501
+ #endif // ZSTD
502
+
381
503
  void CreateNativeContext(CompressionType type, int level, bool checksum) {
382
- if (type == kZSTD || type == kZSTDNotFinalCompression) {
504
+ #ifdef ZSTD
505
+ if (type == kZSTD) {
383
506
  zstd_ctx_ = CreateZSTDContext();
384
- #ifdef ZSTD_ADVANCED
385
507
  if (level == CompressionOptions::kDefaultCompressionLevel) {
386
- // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
387
- // https://github.com/facebook/zstd/issues/1148
388
- level = 3;
508
+ // NB: ZSTD_CLEVEL_DEFAULT is historically == 3
509
+ level = ZSTD_CLEVEL_DEFAULT;
389
510
  }
390
511
  size_t err =
391
512
  ZSTD_CCtx_setParameter(zstd_ctx_, ZSTD_c_compressionLevel, level);
@@ -402,31 +523,21 @@ class CompressionContext {
402
523
  zstd_ctx_ = CreateZSTDContext();
403
524
  }
404
525
  }
405
- #else
406
- (void)level;
407
- (void)checksum;
408
- #endif
409
526
  }
527
+ #else
528
+ (void)type;
529
+ (void)level;
530
+ (void)checksum;
531
+ #endif // ZSTD
410
532
  }
411
533
  void DestroyNativeContext() {
534
+ #ifdef ZSTD
412
535
  if (zstd_ctx_ != nullptr) {
413
536
  ZSTD_freeCCtx(zstd_ctx_);
414
537
  }
538
+ #endif // ZSTD
415
539
  }
416
540
 
417
- public:
418
- // callable inside ZSTD_Compress
419
- ZSTD_CCtx* ZSTDPreallocCtx() const {
420
- assert(zstd_ctx_ != nullptr);
421
- return zstd_ctx_;
422
- }
423
-
424
- #else // ZSTD && (ZSTD_VERSION_NUMBER >= 500)
425
- private:
426
- void CreateNativeContext(CompressionType /* type */, int /* level */,
427
- bool /* checksum */) {}
428
- void DestroyNativeContext() {}
429
- #endif // ZSTD && (ZSTD_VERSION_NUMBER >= 500)
430
541
  public:
431
542
  explicit CompressionContext(CompressionType type,
432
543
  const CompressionOptions& options) {
@@ -437,39 +548,35 @@ class CompressionContext {
437
548
  CompressionContext& operator=(const CompressionContext&) = delete;
438
549
  };
439
550
 
551
+ // TODO: rename
440
552
  class CompressionInfo {
441
553
  const CompressionOptions& opts_;
442
554
  const CompressionContext& context_;
443
555
  const CompressionDict& dict_;
444
556
  const CompressionType type_;
445
- const uint64_t sample_for_compression_;
446
557
 
447
558
  public:
448
559
  CompressionInfo(const CompressionOptions& _opts,
449
560
  const CompressionContext& _context,
450
- const CompressionDict& _dict, CompressionType _type,
451
- uint64_t _sample_for_compression)
452
- : opts_(_opts),
453
- context_(_context),
454
- dict_(_dict),
455
- type_(_type),
456
- sample_for_compression_(_sample_for_compression) {}
561
+ const CompressionDict& _dict, CompressionType _type)
562
+ : opts_(_opts), context_(_context), dict_(_dict), type_(_type) {}
457
563
 
458
564
  const CompressionOptions& options() const { return opts_; }
459
565
  const CompressionContext& context() const { return context_; }
460
566
  const CompressionDict& dict() const { return dict_; }
461
567
  CompressionType type() const { return type_; }
462
- uint64_t SampleForCompression() const { return sample_for_compression_; }
463
568
  };
464
569
 
465
- class UncompressionContext {
570
+ // This is like a working area, reusable for different dicts, etc.
571
+ // TODO: refactor / consolidate
572
+ class UncompressionContext : public Decompressor::WorkingArea {
466
573
  private:
467
574
  CompressionContextCache* ctx_cache_ = nullptr;
468
575
  ZSTDUncompressCachedData uncomp_cached_data_;
469
576
 
470
577
  public:
471
578
  explicit UncompressionContext(CompressionType type) {
472
- if (type == kZSTD || type == kZSTDNotFinalCompression) {
579
+ if (type == kZSTD) {
473
580
  ctx_cache_ = CompressionContextCache::Instance();
474
581
  uncomp_cached_data_ = ctx_cache_->GetCachedZSTDUncompressData();
475
582
  }
@@ -546,15 +653,8 @@ inline bool XPRESS_Supported() {
546
653
 
547
654
  inline bool ZSTD_Supported() {
548
655
  #ifdef ZSTD
549
- // ZSTD format is finalized since version 0.8.0.
550
- return (ZSTD_versionNumber() >= 800);
551
- #else
552
- return false;
553
- #endif
554
- }
555
-
556
- inline bool ZSTDNotFinal_Supported() {
557
- #ifdef ZSTD
656
+ // NB: ZSTD format is finalized since version 0.8.0. See ZSTD_VERSION_NUMBER
657
+ // check above.
558
658
  return true;
559
659
  #else
560
660
  return false;
@@ -562,7 +662,7 @@ inline bool ZSTDNotFinal_Supported() {
562
662
  }
563
663
 
564
664
  inline bool ZSTD_Streaming_Supported() {
565
- #if defined(ZSTD_ADVANCED)
665
+ #if defined(ZSTD)
566
666
  return true;
567
667
  #else
568
668
  return false;
@@ -597,12 +697,9 @@ inline bool CompressionTypeSupported(CompressionType compression_type) {
597
697
  return LZ4_Supported();
598
698
  case kXpressCompression:
599
699
  return XPRESS_Supported();
600
- case kZSTDNotFinalCompression:
601
- return ZSTDNotFinal_Supported();
602
700
  case kZSTD:
603
701
  return ZSTD_Supported();
604
- default:
605
- assert(false);
702
+ default: // Including custom compression types
606
703
  return false;
607
704
  }
608
705
  }
@@ -626,24 +723,16 @@ inline bool DictCompressionTypeSupported(CompressionType compression_type) {
626
723
  #endif
627
724
  case kXpressCompression:
628
725
  return false;
629
- case kZSTDNotFinalCompression:
630
- #if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
631
- return ZSTDNotFinal_Supported();
632
- #else
633
- return false;
634
- #endif
635
726
  case kZSTD:
636
- #if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
727
+ // NB: dictionary supported since 0.5.0. See ZSTD_VERSION_NUMBER check
728
+ // above.
637
729
  return ZSTD_Supported();
638
- #else
639
- return false;
640
- #endif
641
- default:
642
- assert(false);
730
+ default: // Including custom compression types
643
731
  return false;
644
732
  }
645
733
  }
646
734
 
735
+ // WART: does not match OptionsHelper::compression_type_string_map
647
736
  inline std::string CompressionTypeToString(CompressionType compression_type) {
648
737
  switch (compression_type) {
649
738
  case kNoCompression:
@@ -662,18 +751,68 @@ inline std::string CompressionTypeToString(CompressionType compression_type) {
662
751
  return "Xpress";
663
752
  case kZSTD:
664
753
  return "ZSTD";
665
- case kZSTDNotFinalCompression:
666
- return "ZSTDNotFinal";
667
754
  case kDisableCompressionOption:
668
755
  return "DisableOption";
669
- default:
670
- assert(false);
671
- return "";
756
+ default: {
757
+ bool is_custom = compression_type >= kFirstCustomCompression &&
758
+ compression_type <= kLastCustomCompression;
759
+ unsigned char c = lossless_cast<unsigned char>(compression_type);
760
+ return (is_custom ? "Custom" : "Reserved") +
761
+ ToBaseCharsString<16>(2, c, /*uppercase=*/true);
762
+ }
672
763
  }
673
764
  }
674
765
 
766
+ // WART: does not match OptionsHelper::compression_type_string_map
767
+ inline CompressionType CompressionTypeFromString(
768
+ std::string compression_type_str) {
769
+ if (!compression_type_str.empty()) {
770
+ switch (compression_type_str[0]) {
771
+ case 'N':
772
+ if (compression_type_str == "NoCompression") {
773
+ return kNoCompression;
774
+ }
775
+ break;
776
+ case 'S':
777
+ if (compression_type_str == "Snappy") {
778
+ return kSnappyCompression;
779
+ }
780
+ break;
781
+ case 'Z':
782
+ if (compression_type_str == "ZSTD") {
783
+ return kZSTD;
784
+ }
785
+ if (compression_type_str == "Zlib") {
786
+ return kZlibCompression;
787
+ }
788
+ break;
789
+ case 'B':
790
+ if (compression_type_str == "BZip2") {
791
+ return kBZip2Compression;
792
+ }
793
+ break;
794
+ case 'L':
795
+ if (compression_type_str == "LZ4") {
796
+ return kLZ4Compression;
797
+ }
798
+ if (compression_type_str == "LZ4HC") {
799
+ return kLZ4HCCompression;
800
+ }
801
+ break;
802
+ case 'X':
803
+ if (compression_type_str == "Xpress") {
804
+ return kXpressCompression;
805
+ }
806
+ break;
807
+ default:;
808
+ }
809
+ }
810
+ // unrecognized
811
+ return kDisableCompressionOption;
812
+ }
813
+
675
814
  inline std::string CompressionOptionsToString(
676
- CompressionOptions& compression_options) {
815
+ const CompressionOptions& compression_options) {
677
816
  std::string result;
678
817
  result.reserve(512);
679
818
  result.append("window_bits=")
@@ -691,6 +830,8 @@ inline std::string CompressionOptionsToString(
691
830
  result.append("zstd_max_train_bytes=")
692
831
  .append(std::to_string(compression_options.zstd_max_train_bytes))
693
832
  .append("; ");
833
+ // NOTE: parallel_threads is skipped because it doesn't really affect the file
834
+ // contents written, arguably doesn't belong in CompressionOptions
694
835
  result.append("enabled=")
695
836
  .append(std::to_string(compression_options.enabled))
696
837
  .append("; ");
@@ -700,6 +841,12 @@ inline std::string CompressionOptionsToString(
700
841
  result.append("use_zstd_dict_trainer=")
701
842
  .append(std::to_string(compression_options.use_zstd_dict_trainer))
702
843
  .append("; ");
844
+ result.append("max_compressed_bytes_per_kb=")
845
+ .append(std::to_string(compression_options.max_compressed_bytes_per_kb))
846
+ .append("; ");
847
+ result.append("checksum=")
848
+ .append(std::to_string(compression_options.checksum))
849
+ .append("; ");
703
850
  return result;
704
851
  }
705
852
 
@@ -708,7 +855,8 @@ inline std::string CompressionOptionsToString(
708
855
  // block. Also, decompressed sizes for LZ4 are encoded in platform-dependent
709
856
  // way.
710
857
  // 2 -- Zlib, BZip2 and LZ4 encode decompressed size as Varint32 just before the
711
- // start of compressed block. Snappy format is the same as version 1.
858
+ // start of compressed block. Snappy and XPRESS instead extract the decompressed
859
+ // size from the compressed block itself, same as version 1.
712
860
 
713
861
  inline bool Snappy_Compress(const CompressionInfo& /*info*/, const char* input,
714
862
  size_t length, ::std::string* output) {
@@ -1006,7 +1154,7 @@ inline bool BZip2_Compress(const CompressionInfo& /*info*/,
1006
1154
 
1007
1155
  // Initialize the output size.
1008
1156
  _stream.avail_out = static_cast<unsigned int>(length);
1009
- _stream.next_out = reinterpret_cast<char*>(&(*output)[output_header_len]);
1157
+ _stream.next_out = output->data() + output_header_len;
1010
1158
 
1011
1159
  bool compressed = false;
1012
1160
  st = BZ2_bzCompress(&_stream, BZ_FINISH);
@@ -1384,12 +1532,11 @@ inline bool ZSTD_Compress(const CompressionInfo& info, const char* input,
1384
1532
  output, static_cast<uint32_t>(length));
1385
1533
 
1386
1534
  size_t compressBound = ZSTD_compressBound(length);
1535
+ // TODO: use resize_and_overwrite with c++23
1387
1536
  output->resize(static_cast<size_t>(output_header_len + compressBound));
1388
1537
  size_t outlen = 0;
1389
- #if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
1390
1538
  ZSTD_CCtx* context = info.context().ZSTDPreallocCtx();
1391
1539
  assert(context != nullptr);
1392
- #ifdef ZSTD_ADVANCED
1393
1540
  if (info.dict().GetDigestedZstdCDict() != nullptr) {
1394
1541
  ZSTD_CCtx_refCDict(context, info.dict().GetDigestedZstdCDict());
1395
1542
  } else {
@@ -1400,34 +1547,6 @@ inline bool ZSTD_Compress(const CompressionInfo& info, const char* input,
1400
1547
  // Compression level is set in `contex` during CreateNativeContext()
1401
1548
  outlen = ZSTD_compress2(context, &(*output)[output_header_len], compressBound,
1402
1549
  input, length);
1403
- #else // ZSTD_ADVANCED
1404
- #if ZSTD_VERSION_NUMBER >= 700 // v0.7.0+
1405
- if (info.dict().GetDigestedZstdCDict() != nullptr) {
1406
- outlen = ZSTD_compress_usingCDict(context, &(*output)[output_header_len],
1407
- compressBound, input, length,
1408
- info.dict().GetDigestedZstdCDict());
1409
- }
1410
- #endif // ZSTD_VERSION_NUMBER >= 700
1411
- // TODO (cbi): error handling for compression.
1412
- if (outlen == 0) {
1413
- int level;
1414
- if (info.options().level == CompressionOptions::kDefaultCompressionLevel) {
1415
- // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
1416
- // https://github.com/facebook/zstd/issues/1148
1417
- level = 3;
1418
- } else {
1419
- level = info.options().level;
1420
- }
1421
- outlen = ZSTD_compress_usingDict(context, &(*output)[output_header_len],
1422
- compressBound, input, length,
1423
- info.dict().GetRawDict().data(),
1424
- info.dict().GetRawDict().size(), level);
1425
- }
1426
- #endif // ZSTD_ADVANCED
1427
- #else // up to v0.4.x
1428
- outlen = ZSTD_compress(&(*output)[output_header_len], compressBound, input,
1429
- length, level);
1430
- #endif // ZSTD_VERSION_NUMBER >= 500
1431
1550
  if (outlen == 0) {
1432
1551
  return false;
1433
1552
  }
@@ -1467,7 +1586,6 @@ inline CacheAllocationPtr ZSTD_Uncompress(
1467
1586
 
1468
1587
  CacheAllocationPtr output = AllocateBlock(output_len, allocator);
1469
1588
  size_t actual_output_length = 0;
1470
- #if ZSTD_VERSION_NUMBER >= 500 // v0.5.0+
1471
1589
  ZSTD_DCtx* context = info.context().GetZSTDContext();
1472
1590
  assert(context != nullptr);
1473
1591
  #ifdef ROCKSDB_ZSTD_DDICT
@@ -1483,11 +1601,6 @@ inline CacheAllocationPtr ZSTD_Uncompress(
1483
1601
  #ifdef ROCKSDB_ZSTD_DDICT
1484
1602
  }
1485
1603
  #endif // ROCKSDB_ZSTD_DDICT
1486
- #else // up to v0.4.x
1487
- (void)info;
1488
- actual_output_length =
1489
- ZSTD_decompress(output.get(), output_len, input_data, input_length);
1490
- #endif // ZSTD_VERSION_NUMBER >= 500
1491
1604
  if (ZSTD_isError(actual_output_length)) {
1492
1605
  if (error_message) {
1493
1606
  *error_message = ZSTD_getErrorName(actual_output_length);
@@ -1515,10 +1628,10 @@ inline CacheAllocationPtr ZSTD_Uncompress(
1515
1628
 
1516
1629
  inline bool ZSTD_TrainDictionarySupported() {
1517
1630
  #ifdef ZSTD
1518
- // Dictionary trainer is available since v0.6.1 for static linking, but not
1519
- // available for dynamic linking until v1.1.3. For now we enable the feature
1520
- // in v1.1.3+ only.
1521
- return (ZSTD_versionNumber() >= 10103);
1631
+ // NB: Dictionary trainer is available since v0.6.1 for static linking, but
1632
+ // not available for dynamic linking until v1.1.3. See ZSTD_VERSION_NUMBER
1633
+ // check above.
1634
+ return true;
1522
1635
  #else
1523
1636
  return false;
1524
1637
  #endif
@@ -1527,10 +1640,7 @@ inline bool ZSTD_TrainDictionarySupported() {
1527
1640
  inline std::string ZSTD_TrainDictionary(const std::string& samples,
1528
1641
  const std::vector<size_t>& sample_lens,
1529
1642
  size_t max_dict_bytes) {
1530
- // Dictionary trainer is available since v0.6.1 for static linking, but not
1531
- // available for dynamic linking until v1.1.3. For now we enable the feature
1532
- // in v1.1.3+ only.
1533
- #if ZSTD_VERSION_NUMBER >= 10103 // v1.1.3+
1643
+ #ifdef ZSTD
1534
1644
  assert(samples.empty() == sample_lens.empty());
1535
1645
  if (samples.empty()) {
1536
1646
  return "";
@@ -1545,38 +1655,35 @@ inline std::string ZSTD_TrainDictionary(const std::string& samples,
1545
1655
  assert(dict_len <= max_dict_bytes);
1546
1656
  dict_data.resize(dict_len);
1547
1657
  return dict_data;
1548
- #else // up to v1.1.2
1658
+ #else
1549
1659
  assert(false);
1550
1660
  (void)samples;
1551
1661
  (void)sample_lens;
1552
1662
  (void)max_dict_bytes;
1553
1663
  return "";
1554
- #endif // ZSTD_VERSION_NUMBER >= 10103
1664
+ #endif // ZSTD
1555
1665
  }
1556
1666
 
1557
1667
  inline std::string ZSTD_TrainDictionary(const std::string& samples,
1558
1668
  size_t sample_len_shift,
1559
1669
  size_t max_dict_bytes) {
1560
- // Dictionary trainer is available since v0.6.1, but ZSTD was marked stable
1561
- // only since v0.8.0. For now we enable the feature in stable versions only.
1562
- #if ZSTD_VERSION_NUMBER >= 10103 // v1.1.3+
1670
+ #ifdef ZSTD
1563
1671
  // skips potential partial sample at the end of "samples"
1564
1672
  size_t num_samples = samples.size() >> sample_len_shift;
1565
1673
  std::vector<size_t> sample_lens(num_samples, size_t(1) << sample_len_shift);
1566
1674
  return ZSTD_TrainDictionary(samples, sample_lens, max_dict_bytes);
1567
- #else // up to v1.1.2
1675
+ #else
1568
1676
  assert(false);
1569
1677
  (void)samples;
1570
1678
  (void)sample_len_shift;
1571
1679
  (void)max_dict_bytes;
1572
1680
  return "";
1573
- #endif // ZSTD_VERSION_NUMBER >= 10103
1681
+ #endif // ZSTD
1574
1682
  }
1575
1683
 
1576
1684
  inline bool ZSTD_FinalizeDictionarySupported() {
1577
- #ifdef ZSTD
1578
- // ZDICT_finalizeDictionary API is stable since v1.4.5
1579
- return (ZSTD_versionNumber() >= 10405);
1685
+ #ifdef ROCKSDB_ZDICT_FINALIZE
1686
+ return true;
1580
1687
  #else
1581
1688
  return false;
1582
1689
  #endif
@@ -1585,16 +1692,14 @@ inline bool ZSTD_FinalizeDictionarySupported() {
1585
1692
  inline std::string ZSTD_FinalizeDictionary(
1586
1693
  const std::string& samples, const std::vector<size_t>& sample_lens,
1587
1694
  size_t max_dict_bytes, int level) {
1588
- // ZDICT_finalizeDictionary is stable since version v1.4.5
1589
- #if ZSTD_VERSION_NUMBER >= 10405 // v1.4.5+
1695
+ #ifdef ROCKSDB_ZDICT_FINALIZE
1590
1696
  assert(samples.empty() == sample_lens.empty());
1591
1697
  if (samples.empty()) {
1592
1698
  return "";
1593
1699
  }
1594
1700
  if (level == CompressionOptions::kDefaultCompressionLevel) {
1595
- // 3 is the value of ZSTD_CLEVEL_DEFAULT (not exposed publicly), see
1596
- // https://github.com/facebook/zstd/issues/1148
1597
- level = 3;
1701
+ // NB: ZSTD_CLEVEL_DEFAULT is historically == 3
1702
+ level = ZSTD_CLEVEL_DEFAULT;
1598
1703
  }
1599
1704
  std::string dict_data(max_dict_bytes, '\0');
1600
1705
  size_t dict_len = ZDICT_finalizeDictionary(
@@ -1610,20 +1715,20 @@ inline std::string ZSTD_FinalizeDictionary(
1610
1715
  dict_data.resize(dict_len);
1611
1716
  return dict_data;
1612
1717
  }
1613
- #else // up to v1.4.4
1718
+ #else
1614
1719
  assert(false);
1615
1720
  (void)samples;
1616
1721
  (void)sample_lens;
1617
1722
  (void)max_dict_bytes;
1618
1723
  (void)level;
1619
1724
  return "";
1620
- #endif // ZSTD_VERSION_NUMBER >= 10405
1725
+ #endif // ROCKSDB_ZDICT_FINALIZE
1621
1726
  }
1622
1727
 
1623
- inline bool CompressData(const Slice& raw,
1624
- const CompressionInfo& compression_info,
1625
- uint32_t compress_format_version,
1626
- std::string* compressed_output) {
1728
+ inline bool OLD_CompressData(const Slice& raw,
1729
+ const CompressionInfo& compression_info,
1730
+ uint32_t compress_format_version,
1731
+ std::string* compressed_output) {
1627
1732
  bool ret = false;
1628
1733
 
1629
1734
  // Will return compressed block contents if (1) the compression method is
@@ -1653,7 +1758,6 @@ inline bool CompressData(const Slice& raw,
1653
1758
  ret = XPRESS_Compress(raw.data(), raw.size(), compressed_output);
1654
1759
  break;
1655
1760
  case kZSTD:
1656
- case kZSTDNotFinalCompression:
1657
1761
  ret = ZSTD_Compress(compression_info, raw.data(), raw.size(),
1658
1762
  compressed_output);
1659
1763
  break;
@@ -1668,7 +1772,7 @@ inline bool CompressData(const Slice& raw,
1668
1772
  return ret;
1669
1773
  }
1670
1774
 
1671
- inline CacheAllocationPtr UncompressData(
1775
+ inline CacheAllocationPtr OLD_UncompressData(
1672
1776
  const UncompressionInfo& uncompression_info, const char* data, size_t n,
1673
1777
  size_t* uncompressed_size, uint32_t compress_format_version,
1674
1778
  MemoryAllocator* allocator = nullptr,
@@ -1691,7 +1795,6 @@ inline CacheAllocationPtr UncompressData(
1691
1795
  // allocator.
1692
1796
  return CacheAllocationPtr(XPRESS_Uncompress(data, n, uncompressed_size));
1693
1797
  case kZSTD:
1694
- case kZSTDNotFinalCompression:
1695
1798
  // TODO(cbi): error message handling for other compression algorithms.
1696
1799
  return ZSTD_Uncompress(uncompression_info, data, n, uncompressed_size,
1697
1800
  allocator, error_message);
@@ -1700,6 +1803,19 @@ inline CacheAllocationPtr UncompressData(
1700
1803
  }
1701
1804
  }
1702
1805
 
1806
+ // ***********************************************************************
1807
+ // BEGIN built-in implementation of customization interface
1808
+ // ***********************************************************************
1809
+
1810
+ // NOTE: to avoid compression API depending on block-based table API, uses
1811
+ // its own format version. See internal function GetCompressFormatForVersion()
1812
+ const std::shared_ptr<CompressionManager>& GetBuiltinCompressionManager(
1813
+ int compression_format_version);
1814
+
1815
+ // ***********************************************************************
1816
+ // END built-in implementation of customization interface
1817
+ // ***********************************************************************
1818
+
1703
1819
  // Records the compression type for subsequent WAL records.
1704
1820
  class CompressionTypeRecord {
1705
1821
  public:
@@ -1762,12 +1878,12 @@ class StreamingCompress {
1762
1878
  // output - compressed buffer allocated by caller, should be at least
1763
1879
  // max_output_len
1764
1880
  // output_size - size of the output buffer
1765
- // Returns -1 for errors, the remaining size of the input buffer that needs to
1766
- // be compressed
1881
+ // Returns -1 for errors, the remaining size of the input buffer that needs
1882
+ // to be compressed
1767
1883
  virtual int Compress(const char* input, size_t input_size, char* output,
1768
1884
  size_t* output_pos) = 0;
1769
- // static method to create object of a class inherited from StreamingCompress
1770
- // based on the actual compression type.
1885
+ // static method to create object of a class inherited from
1886
+ // StreamingCompress based on the actual compression type.
1771
1887
  static StreamingCompress* Create(CompressionType compression_type,
1772
1888
  const CompressionOptions& opts,
1773
1889
  uint32_t compress_format_version,
@@ -1827,7 +1943,7 @@ class ZSTDStreamingCompress final : public StreamingCompress {
1827
1943
  size_t max_output_len)
1828
1944
  : StreamingCompress(kZSTD, opts, compress_format_version,
1829
1945
  max_output_len) {
1830
- #ifdef ZSTD_ADVANCED
1946
+ #ifdef ZSTD
1831
1947
  cctx_ = ZSTD_createCCtx();
1832
1948
  // Each compressed frame will have a checksum
1833
1949
  ZSTD_CCtx_setParameter(cctx_, ZSTD_c_checksumFlag, 1);
@@ -1836,14 +1952,14 @@ class ZSTDStreamingCompress final : public StreamingCompress {
1836
1952
  #endif
1837
1953
  }
1838
1954
  ~ZSTDStreamingCompress() override {
1839
- #ifdef ZSTD_ADVANCED
1955
+ #ifdef ZSTD
1840
1956
  ZSTD_freeCCtx(cctx_);
1841
1957
  #endif
1842
1958
  }
1843
1959
  int Compress(const char* input, size_t input_size, char* output,
1844
1960
  size_t* output_pos) override;
1845
1961
  void Reset() override;
1846
- #ifdef ZSTD_ADVANCED
1962
+ #ifdef ZSTD
1847
1963
  ZSTD_CCtx* cctx_;
1848
1964
  ZSTD_inBuffer input_buffer_;
1849
1965
  #endif
@@ -1854,14 +1970,14 @@ class ZSTDStreamingUncompress final : public StreamingUncompress {
1854
1970
  explicit ZSTDStreamingUncompress(uint32_t compress_format_version,
1855
1971
  size_t max_output_len)
1856
1972
  : StreamingUncompress(kZSTD, compress_format_version, max_output_len) {
1857
- #ifdef ZSTD_ADVANCED
1973
+ #ifdef ZSTD
1858
1974
  dctx_ = ZSTD_createDCtx();
1859
1975
  assert(dctx_ != nullptr);
1860
1976
  input_buffer_ = {/*src=*/nullptr, /*size=*/0, /*pos=*/0};
1861
1977
  #endif
1862
1978
  }
1863
1979
  ~ZSTDStreamingUncompress() override {
1864
- #ifdef ZSTD_ADVANCED
1980
+ #ifdef ZSTD
1865
1981
  ZSTD_freeDCtx(dctx_);
1866
1982
  #endif
1867
1983
  }
@@ -1870,7 +1986,7 @@ class ZSTDStreamingUncompress final : public StreamingUncompress {
1870
1986
  void Reset() override;
1871
1987
 
1872
1988
  private:
1873
- #ifdef ZSTD_ADVANCED
1989
+ #ifdef ZSTD
1874
1990
  ZSTD_DCtx* dctx_;
1875
1991
  ZSTD_inBuffer input_buffer_;
1876
1992
  #endif