@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.
- package/binding.cc +248 -70
- package/binding.gyp +2 -2
- package/deps/rocksdb/rocksdb/BUCK +12 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
- package/deps/rocksdb/rocksdb/Makefile +28 -23
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
- package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
- package/deps/rocksdb/rocksdb/db/builder.h +5 -4
- package/deps/rocksdb/rocksdb/db/c.cc +556 -15
- package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
- package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
- package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
- package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
- package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
- package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
- package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
- package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
- package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
- package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
- package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
- package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
- package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
- package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
- package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
- package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
- package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
- package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
- package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
- package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
- package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
- package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
- package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
- package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
- package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
- package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
- package/deps/rocksdb/rocksdb/env/env.cc +32 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
- package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
- package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
- package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
- package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
- package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
- package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
- package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
- package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
- package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
- package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
- package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
- package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
- package/deps/rocksdb/rocksdb/options/options.cc +296 -305
- package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
- package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
- package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
- package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
- package/deps/rocksdb/rocksdb/port/lang.h +2 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
- package/deps/rocksdb/rocksdb/src.mk +17 -11
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
- package/deps/rocksdb/rocksdb/table/format.cc +62 -44
- package/deps/rocksdb/rocksdb/table/format.h +35 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
- package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
- package/deps/rocksdb/rocksdb/util/compression.h +348 -232
- package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
- package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
- package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
- package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
- package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
- package/deps/rocksdb/rocksdb.gyp +9 -4
- package/index.js +50 -9
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- 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
|
-
#
|
|
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
|
-
#
|
|
60
|
-
#
|
|
61
|
-
#
|
|
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 (
|
|
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
|
-
#
|
|
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
|
|
121
|
+
#else // ZSTD && !ROCKSDB_ZSTD_CUSTOM_MEM
|
|
113
122
|
zstd_ctx_ = ZSTD_createDCtx();
|
|
114
|
-
#endif
|
|
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
|
|
145
|
+
#if defined(XPRESS)
|
|
146
|
+
#include "port/xpress.h"
|
|
147
|
+
#endif
|
|
148
|
+
|
|
137
149
|
namespace ROCKSDB_NAMESPACE {
|
|
138
|
-
|
|
139
|
-
|
|
150
|
+
|
|
151
|
+
class FailureDecompressor : public Decompressor {
|
|
140
152
|
public:
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
154
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
272
|
+
#ifdef ZSTD
|
|
169
273
|
ZSTD_CDict* zstd_cdict_ = nullptr;
|
|
170
|
-
#endif //
|
|
274
|
+
#endif // ZSTD
|
|
171
275
|
std::string dict_;
|
|
172
276
|
|
|
173
277
|
public:
|
|
174
|
-
|
|
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
|
-
#
|
|
281
|
+
#ifdef ZSTD
|
|
181
282
|
zstd_cdict_ = nullptr;
|
|
182
|
-
if (!dict_.empty() &&
|
|
283
|
+
if (!dict_.empty() && type == kZSTD) {
|
|
183
284
|
if (level == CompressionOptions::kDefaultCompressionLevel) {
|
|
184
|
-
//
|
|
185
|
-
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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 //
|
|
326
|
+
#endif // ZSTD
|
|
208
327
|
}
|
|
209
328
|
|
|
210
|
-
#
|
|
329
|
+
#ifdef ZSTD
|
|
211
330
|
const ZSTD_CDict* GetDigestedZstdCDict() const { return zstd_cdict_; }
|
|
212
|
-
#endif //
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
504
|
+
#ifdef ZSTD
|
|
505
|
+
if (type == kZSTD) {
|
|
383
506
|
zstd_ctx_ = CreateZSTDContext();
|
|
384
|
-
#ifdef ZSTD_ADVANCED
|
|
385
507
|
if (level == CompressionOptions::kDefaultCompressionLevel) {
|
|
386
|
-
//
|
|
387
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
727
|
+
// NB: dictionary supported since 0.5.0. See ZSTD_VERSION_NUMBER check
|
|
728
|
+
// above.
|
|
637
729
|
return ZSTD_Supported();
|
|
638
|
-
|
|
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
|
-
|
|
671
|
-
|
|
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
|
|
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 =
|
|
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
|
|
1519
|
-
// available for dynamic linking until v1.1.3.
|
|
1520
|
-
//
|
|
1521
|
-
return
|
|
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
|
-
|
|
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
|
|
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 //
|
|
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
|
-
|
|
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
|
|
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 //
|
|
1681
|
+
#endif // ZSTD
|
|
1574
1682
|
}
|
|
1575
1683
|
|
|
1576
1684
|
inline bool ZSTD_FinalizeDictionarySupported() {
|
|
1577
|
-
#ifdef
|
|
1578
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
1596
|
-
|
|
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
|
|
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 //
|
|
1725
|
+
#endif // ROCKSDB_ZDICT_FINALIZE
|
|
1621
1726
|
}
|
|
1622
1727
|
|
|
1623
|
-
inline bool
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1989
|
+
#ifdef ZSTD
|
|
1874
1990
|
ZSTD_DCtx* dctx_;
|
|
1875
1991
|
ZSTD_inBuffer input_buffer_;
|
|
1876
1992
|
#endif
|