@nxtedition/rocksdb 13.5.8 → 13.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +209 -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 +5 -0
- package/index.js +47 -2
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
#pragma once
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
#include "rocksdb/db.h"
|
|
10
9
|
#include "rocksdb/types.h"
|
|
11
10
|
|
|
@@ -34,13 +33,12 @@ struct KeyVersion {
|
|
|
34
33
|
// copied to memory, if the range covers too many keys, the memory usage
|
|
35
34
|
// may be huge. `max_num_ikeys` can be used to cap the memory usage.
|
|
36
35
|
// The result is inserted into the provided vector, `key_versions`.
|
|
37
|
-
Status GetAllKeyVersions(DB* db,
|
|
36
|
+
Status GetAllKeyVersions(DB* db, OptSlice begin_key, OptSlice end_key,
|
|
38
37
|
size_t max_num_ikeys,
|
|
39
38
|
std::vector<KeyVersion>* key_versions);
|
|
40
39
|
|
|
41
|
-
Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh,
|
|
42
|
-
|
|
40
|
+
Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh, OptSlice begin_key,
|
|
41
|
+
OptSlice end_key, size_t max_num_ikeys,
|
|
43
42
|
std::vector<KeyVersion>* key_versions);
|
|
44
43
|
|
|
45
44
|
} // namespace ROCKSDB_NAMESPACE
|
|
46
|
-
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
//
|
|
6
6
|
#pragma once
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
#include <stdio.h>
|
|
10
9
|
#include <stdlib.h>
|
|
11
10
|
|
|
@@ -331,7 +330,7 @@ class LDBCommandRunner {
|
|
|
331
330
|
|
|
332
331
|
// Returns the status code to return. 0 is no error.
|
|
333
332
|
static int RunCommand(
|
|
334
|
-
int argc, char const* const* argv, Options options,
|
|
333
|
+
int argc, char const* const* argv, const Options& options,
|
|
335
334
|
const LDBOptions& ldb_options,
|
|
336
335
|
const std::vector<ColumnFamilyDescriptor>* column_families);
|
|
337
336
|
};
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
#pragma once
|
|
7
7
|
|
|
8
|
-
|
|
9
8
|
#include <functional>
|
|
10
9
|
#include <map>
|
|
11
10
|
#include <memory>
|
|
@@ -163,7 +162,7 @@ class ObjectLibrary {
|
|
|
163
162
|
size_t slength_; // The minimum required length to match the separators
|
|
164
163
|
std::vector<std::pair<std::string, Quantifier>>
|
|
165
164
|
separators_; // What to match
|
|
166
|
-
};
|
|
165
|
+
}; // End class Entry
|
|
167
166
|
|
|
168
167
|
private:
|
|
169
168
|
// An Entry containing a FactoryFunc for creating new Objects
|
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
#pragma once
|
|
8
8
|
|
|
9
|
+
#include <memory>
|
|
9
10
|
#include <optional>
|
|
10
11
|
#include <string>
|
|
11
12
|
#include <variant>
|
|
12
13
|
|
|
14
|
+
#include "rocksdb/iterator.h"
|
|
13
15
|
#include "rocksdb/rocksdb_namespace.h"
|
|
14
16
|
#include "rocksdb/slice.h"
|
|
15
17
|
#include "rocksdb/status.h"
|
|
@@ -18,10 +20,8 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
18
20
|
|
|
19
21
|
class ColumnFamilyHandle;
|
|
20
22
|
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// /-----\ UNDER CONSTRUCTION
|
|
24
|
-
|
|
23
|
+
// EXPERIMENTAL
|
|
24
|
+
//
|
|
25
25
|
// A secondary index is an additional data structure built over a set of primary
|
|
26
26
|
// key-values that enables efficiently querying key-values by value instead of
|
|
27
27
|
// key. Both plain and wide-column key-values can be indexed, the latter on a
|
|
@@ -49,6 +49,7 @@ class ColumnFamilyHandle;
|
|
|
49
49
|
// Note: the methods of SecondaryIndex implementations are expected to be
|
|
50
50
|
// thread-safe with the exception of Set{Primary,Secondary}ColumnFamily (which
|
|
51
51
|
// are not expected to be called after initialization).
|
|
52
|
+
|
|
52
53
|
class SecondaryIndex {
|
|
53
54
|
public:
|
|
54
55
|
virtual ~SecondaryIndex() = default;
|
|
@@ -77,14 +78,24 @@ class SecondaryIndex {
|
|
|
77
78
|
// called by the transaction layer when adding or removing secondary index
|
|
78
79
|
// entries (which have the form <secondary_key_prefix><primary_key> ->
|
|
79
80
|
// <secondary_value>) and should be deterministic. The output parameter
|
|
80
|
-
// secondary_key_prefix is expected to be based on
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
// operations in the transaction related to this primary key-value.
|
|
81
|
+
// secondary_key_prefix is expected to be based on primary_key and/or
|
|
82
|
+
// primary_column_value. Returning a non-OK status rolls back all operations
|
|
83
|
+
// in the transaction related to this primary key-value.
|
|
84
84
|
virtual Status GetSecondaryKeyPrefix(
|
|
85
85
|
const Slice& primary_key, const Slice& primary_column_value,
|
|
86
86
|
std::variant<Slice, std::string>* secondary_key_prefix) const = 0;
|
|
87
87
|
|
|
88
|
+
// Finalize the secondary key prefix, for instance by adding some metadata to
|
|
89
|
+
// prevent ambiguities (e.g. index id or length indicator). This method is
|
|
90
|
+
// called by the transaction layer when adding or removing secondary index
|
|
91
|
+
// entries (which have the form <secondary_key_prefix><primary_key> ->
|
|
92
|
+
// <secondary_value>) and also when querying the index (in which case it is
|
|
93
|
+
// called with the search target). The method should be deterministic.
|
|
94
|
+
// Returning a non-OK status rolls back all operations in the transaction
|
|
95
|
+
// related to this primary key-value.
|
|
96
|
+
virtual Status FinalizeSecondaryKeyPrefix(
|
|
97
|
+
std::variant<Slice, std::string>* secondary_key_prefix) const = 0;
|
|
98
|
+
|
|
88
99
|
// Get the optional secondary value for a given primary key-value. This method
|
|
89
100
|
// is called by the transaction layer when adding secondary index
|
|
90
101
|
// entries (which have the form <secondary_key_prefix><primary_key> ->
|
|
@@ -99,4 +110,81 @@ class SecondaryIndex {
|
|
|
99
110
|
const = 0;
|
|
100
111
|
};
|
|
101
112
|
|
|
113
|
+
// SecondaryIndexIterator can be used to find the primary keys for a given
|
|
114
|
+
// search target. It can be used as-is or as a building block. Its interface
|
|
115
|
+
// mirrors most of the Iterator API, with the exception of SeekToFirst,
|
|
116
|
+
// SeekToLast, and SeekForPrev, which are not applicable to secondary indices
|
|
117
|
+
// and thus not present. Querying the index can be performed by calling the
|
|
118
|
+
// returned iterator's Seek API with a search target, and then using Next (and
|
|
119
|
+
// potentially Prev) to iterate through the matching index entries. The iterator
|
|
120
|
+
// exposes primary keys, that is, the secondary key prefix is stripped from the
|
|
121
|
+
// index entries.
|
|
122
|
+
|
|
123
|
+
class SecondaryIndexIterator {
|
|
124
|
+
public:
|
|
125
|
+
// Constructs a SecondaryIndexIterator. The SecondaryIndexIterator takes
|
|
126
|
+
// ownership of the underlying iterator.
|
|
127
|
+
// PRE: index is not nullptr
|
|
128
|
+
// PRE: underlying_it is not nullptr and points to an iterator over the
|
|
129
|
+
// index's secondary column family
|
|
130
|
+
SecondaryIndexIterator(const SecondaryIndex* index,
|
|
131
|
+
std::unique_ptr<Iterator>&& underlying_it);
|
|
132
|
+
|
|
133
|
+
// Returns whether the iterator is valid, i.e. whether it is positioned on a
|
|
134
|
+
// secondary index entry matching the search target.
|
|
135
|
+
bool Valid() const;
|
|
136
|
+
|
|
137
|
+
// Returns the status of the iterator, which is guaranteed to be OK if the
|
|
138
|
+
// iterator is valid. Otherwise, it might be non-OK, which indicates an error,
|
|
139
|
+
// or OK, which means that the iterator has reached the end of the applicable
|
|
140
|
+
// secondary index entries.
|
|
141
|
+
Status status() const;
|
|
142
|
+
|
|
143
|
+
// Query the index with the given search target.
|
|
144
|
+
void Seek(const Slice& target);
|
|
145
|
+
|
|
146
|
+
// Move the iterator to the next entry.
|
|
147
|
+
// PRE: Valid()
|
|
148
|
+
void Next();
|
|
149
|
+
|
|
150
|
+
// Move the iterator back to the previous entry.
|
|
151
|
+
// PRE: Valid()
|
|
152
|
+
void Prev();
|
|
153
|
+
|
|
154
|
+
// Prepare the value of the current entry. Should be called before calling
|
|
155
|
+
// value() or columns() if the underlying iterator was constructed with the
|
|
156
|
+
// read option allow_unprepared_value set to true. Returns true upon success.
|
|
157
|
+
// Returns false and sets the status to non-OK upon failure.
|
|
158
|
+
// PRE: Valid()
|
|
159
|
+
bool PrepareValue();
|
|
160
|
+
|
|
161
|
+
// Returns the primary key from the current secondary index entry.
|
|
162
|
+
// PRE: Valid()
|
|
163
|
+
Slice key() const;
|
|
164
|
+
|
|
165
|
+
// Returns the value of the current secondary index entry.
|
|
166
|
+
// PRE: Valid()
|
|
167
|
+
Slice value() const;
|
|
168
|
+
|
|
169
|
+
// Returns the value of the current secondary index entry as a wide-column
|
|
170
|
+
// structure.
|
|
171
|
+
// PRE: Valid()
|
|
172
|
+
const WideColumns& columns() const;
|
|
173
|
+
|
|
174
|
+
// Returns the timestamp of the current secondary index entry.
|
|
175
|
+
// PRE: Valid()
|
|
176
|
+
Slice timestamp() const;
|
|
177
|
+
|
|
178
|
+
// Queries the given property of the underlying iterator. Returns OK on
|
|
179
|
+
// success, non-OK on failure.
|
|
180
|
+
// PRE: Valid()
|
|
181
|
+
Status GetProperty(std::string prop_name, std::string* prop) const;
|
|
182
|
+
|
|
183
|
+
private:
|
|
184
|
+
const SecondaryIndex* index_;
|
|
185
|
+
std::unique_ptr<Iterator> underlying_it_;
|
|
186
|
+
Status status_;
|
|
187
|
+
std::string prefix_;
|
|
188
|
+
};
|
|
189
|
+
|
|
102
190
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
//
|
|
3
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
4
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
5
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
6
|
+
|
|
7
|
+
#pragma once
|
|
8
|
+
|
|
9
|
+
#include <memory>
|
|
10
|
+
#include <string>
|
|
11
|
+
#include <utility>
|
|
12
|
+
#include <vector>
|
|
13
|
+
|
|
14
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
15
|
+
#include "rocksdb/slice.h"
|
|
16
|
+
#include "rocksdb/utilities/secondary_index.h"
|
|
17
|
+
|
|
18
|
+
namespace faiss {
|
|
19
|
+
struct IndexIVF;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
namespace ROCKSDB_NAMESPACE {
|
|
23
|
+
|
|
24
|
+
// EXPERIMENTAL
|
|
25
|
+
//
|
|
26
|
+
// A SecondaryIndex implementation that wraps a FAISS inverted file based index.
|
|
27
|
+
// Indexes the embedding in the specified primary column using the given
|
|
28
|
+
// pre-trained faiss::IndexIVF object. Can be used to perform
|
|
29
|
+
// K-nearest-neighbors queries.
|
|
30
|
+
|
|
31
|
+
class FaissIVFIndex : public SecondaryIndex {
|
|
32
|
+
public:
|
|
33
|
+
// Constructs a FaissIVFIndex object. Takes ownership of the given
|
|
34
|
+
// faiss::IndexIVF instance.
|
|
35
|
+
// PRE: index is not nullptr
|
|
36
|
+
FaissIVFIndex(std::unique_ptr<faiss::IndexIVF>&& index,
|
|
37
|
+
std::string primary_column_name);
|
|
38
|
+
~FaissIVFIndex() override;
|
|
39
|
+
|
|
40
|
+
void SetPrimaryColumnFamily(ColumnFamilyHandle* column_family) override;
|
|
41
|
+
void SetSecondaryColumnFamily(ColumnFamilyHandle* column_family) override;
|
|
42
|
+
|
|
43
|
+
ColumnFamilyHandle* GetPrimaryColumnFamily() const override;
|
|
44
|
+
ColumnFamilyHandle* GetSecondaryColumnFamily() const override;
|
|
45
|
+
|
|
46
|
+
Slice GetPrimaryColumnName() const override;
|
|
47
|
+
|
|
48
|
+
Status UpdatePrimaryColumnValue(
|
|
49
|
+
const Slice& primary_key, const Slice& primary_column_value,
|
|
50
|
+
std::optional<std::variant<Slice, std::string>>* updated_column_value)
|
|
51
|
+
const override;
|
|
52
|
+
|
|
53
|
+
Status GetSecondaryKeyPrefix(
|
|
54
|
+
const Slice& primary_key, const Slice& primary_column_value,
|
|
55
|
+
std::variant<Slice, std::string>* secondary_key_prefix) const override;
|
|
56
|
+
|
|
57
|
+
Status FinalizeSecondaryKeyPrefix(
|
|
58
|
+
std::variant<Slice, std::string>* secondary_key_prefix) const override;
|
|
59
|
+
|
|
60
|
+
Status GetSecondaryValue(const Slice& primary_key,
|
|
61
|
+
const Slice& primary_column_value,
|
|
62
|
+
const Slice& original_column_value,
|
|
63
|
+
std::optional<std::variant<Slice, std::string>>*
|
|
64
|
+
secondary_value) const override;
|
|
65
|
+
|
|
66
|
+
// Performs a K-nearest-neighbors vector similarity search for the target
|
|
67
|
+
// using the given secondary index iterator, where K is given by the parameter
|
|
68
|
+
// neighbors and the number of inverted lists to search is given by the
|
|
69
|
+
// parameter probes. The resulting primary keys and distances are returned in
|
|
70
|
+
// the result output parameter. Note that the search may return less than the
|
|
71
|
+
// requested number of results if the inverted lists probed are exhausted
|
|
72
|
+
// before finding K items.
|
|
73
|
+
//
|
|
74
|
+
// The parameter it should be non-nullptr and point to a secondary index
|
|
75
|
+
// iterator corresponding to this index. The search target should be of the
|
|
76
|
+
// correct dimension (i.e. target.size() == dim * sizeof(float), where dim is
|
|
77
|
+
// the dimensionality of the index), neighbors and probes should be positive,
|
|
78
|
+
// and result should be non-nullptr.
|
|
79
|
+
//
|
|
80
|
+
// Returns OK on success, InvalidArgument if the preconditions above are not
|
|
81
|
+
// met, or some other non-OK status if there is an error during the search.
|
|
82
|
+
Status FindKNearestNeighbors(
|
|
83
|
+
SecondaryIndexIterator* it, const Slice& target, size_t neighbors,
|
|
84
|
+
size_t probes, std::vector<std::pair<std::string, float>>* result) const;
|
|
85
|
+
|
|
86
|
+
private:
|
|
87
|
+
struct KNNContext;
|
|
88
|
+
class Adapter;
|
|
89
|
+
|
|
90
|
+
std::unique_ptr<Adapter> adapter_;
|
|
91
|
+
std::unique_ptr<faiss::IndexIVF> index_;
|
|
92
|
+
std::string primary_column_name_;
|
|
93
|
+
ColumnFamilyHandle* primary_column_family_{};
|
|
94
|
+
ColumnFamilyHandle* secondary_column_family_{};
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Helper methods to convert embeddings from a span of floats to Slice or vice
|
|
98
|
+
// versa
|
|
99
|
+
|
|
100
|
+
// Convert the given span of floats of size dim to a Slice.
|
|
101
|
+
// PRE: embedding points to a contiguous span of floats of size dim
|
|
102
|
+
inline Slice ConvertFloatsToSlice(const float* embedding, size_t dim) {
|
|
103
|
+
return Slice(reinterpret_cast<const char*>(embedding), dim * sizeof(float));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Convert the given Slice to a span of floats of size dim.
|
|
107
|
+
// PRE: embedding.size() == dim * sizeof(float)
|
|
108
|
+
// Returns nullptr if the precondition is violated.
|
|
109
|
+
inline const float* ConvertSliceToFloats(const Slice& embedding, size_t dim) {
|
|
110
|
+
if (embedding.size() != dim * sizeof(float)) {
|
|
111
|
+
return nullptr;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return reinterpret_cast<const float*>(embedding.data());
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -6,20 +6,21 @@
|
|
|
6
6
|
|
|
7
7
|
#pragma once
|
|
8
8
|
|
|
9
|
-
#include <memory>
|
|
10
9
|
#include <string>
|
|
11
10
|
|
|
12
|
-
#include "
|
|
11
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
13
12
|
#include "rocksdb/utilities/secondary_index.h"
|
|
14
13
|
|
|
15
14
|
namespace ROCKSDB_NAMESPACE {
|
|
16
15
|
|
|
17
|
-
//
|
|
18
|
-
|
|
16
|
+
// EXPERIMENTAL
|
|
17
|
+
//
|
|
18
|
+
// A simple secondary index implementation that indexes the specified column
|
|
19
|
+
// as-is.
|
|
20
|
+
|
|
21
|
+
class SimpleSecondaryIndex : public SecondaryIndex {
|
|
19
22
|
public:
|
|
20
|
-
explicit
|
|
21
|
-
std::string primary_column_name);
|
|
22
|
-
~FaissIVFIndex() override;
|
|
23
|
+
explicit SimpleSecondaryIndex(std::string primary_column_name);
|
|
23
24
|
|
|
24
25
|
void SetPrimaryColumnFamily(ColumnFamilyHandle* column_family) override;
|
|
25
26
|
void SetSecondaryColumnFamily(ColumnFamilyHandle* column_family) override;
|
|
@@ -38,6 +39,9 @@ class FaissIVFIndex : public SecondaryIndex {
|
|
|
38
39
|
const Slice& primary_key, const Slice& primary_column_value,
|
|
39
40
|
std::variant<Slice, std::string>* secondary_key_prefix) const override;
|
|
40
41
|
|
|
42
|
+
Status FinalizeSecondaryKeyPrefix(
|
|
43
|
+
std::variant<Slice, std::string>* secondary_key_prefix) const override;
|
|
44
|
+
|
|
41
45
|
Status GetSecondaryValue(const Slice& primary_key,
|
|
42
46
|
const Slice& primary_column_value,
|
|
43
47
|
const Slice& original_column_value,
|
|
@@ -45,13 +49,6 @@ class FaissIVFIndex : public SecondaryIndex {
|
|
|
45
49
|
secondary_value) const override;
|
|
46
50
|
|
|
47
51
|
private:
|
|
48
|
-
class Adapter;
|
|
49
|
-
|
|
50
|
-
static std::string SerializeLabel(faiss::idx_t label);
|
|
51
|
-
static faiss::idx_t DeserializeLabel(Slice label_slice);
|
|
52
|
-
|
|
53
|
-
std::unique_ptr<Adapter> adapter_;
|
|
54
|
-
std::unique_ptr<faiss::IndexIVF> index_;
|
|
55
52
|
std::string primary_column_name_;
|
|
56
53
|
ColumnFamilyHandle* primary_column_family_{};
|
|
57
54
|
ColumnFamilyHandle* secondary_column_family_{};
|
|
@@ -27,6 +27,10 @@ class StackableDB : public DB {
|
|
|
27
27
|
explicit StackableDB(std::shared_ptr<DB> db)
|
|
28
28
|
: db_(db.get()), shared_db_ptr_(db) {}
|
|
29
29
|
|
|
30
|
+
// StackableDB take sole ownership of the underlying db.
|
|
31
|
+
explicit StackableDB(std::unique_ptr<DB>&& db)
|
|
32
|
+
: db_(db.get()), shared_db_ptr_(std::move(db)) {}
|
|
33
|
+
|
|
30
34
|
~StackableDB() override {
|
|
31
35
|
if (shared_db_ptr_ == nullptr) {
|
|
32
36
|
delete db_;
|
|
@@ -285,6 +289,13 @@ class StackableDB : public DB {
|
|
|
285
289
|
return db_->NewAttributeGroupIterator(options, column_families);
|
|
286
290
|
}
|
|
287
291
|
|
|
292
|
+
using DB::NewMultiScan;
|
|
293
|
+
std::unique_ptr<MultiScan> NewMultiScan(
|
|
294
|
+
const ReadOptions& opts, ColumnFamilyHandle* column_family,
|
|
295
|
+
const std::vector<ScanOptions>& scan_opts) override {
|
|
296
|
+
return db_->NewMultiScan(opts, column_family, scan_opts);
|
|
297
|
+
}
|
|
298
|
+
|
|
288
299
|
const Snapshot* GetSnapshot() override { return db_->GetSnapshot(); }
|
|
289
300
|
|
|
290
301
|
void ReleaseSnapshot(const Snapshot* snapshot) override {
|
|
@@ -501,28 +512,24 @@ class StackableDB : public DB {
|
|
|
501
512
|
return db_->GetFullHistoryTsLow(column_family, ts_low);
|
|
502
513
|
}
|
|
503
514
|
|
|
515
|
+
Status GetNewestUserDefinedTimestamp(ColumnFamilyHandle* column_family,
|
|
516
|
+
std::string* newest_timestamp) override {
|
|
517
|
+
return db_->GetNewestUserDefinedTimestamp(column_family, newest_timestamp);
|
|
518
|
+
}
|
|
519
|
+
|
|
504
520
|
Status GetSortedWalFiles(VectorWalPtr& files) override {
|
|
505
521
|
return db_->GetSortedWalFiles(files);
|
|
506
522
|
}
|
|
507
523
|
|
|
508
524
|
Status GetCurrentWalFile(
|
|
509
|
-
std::unique_ptr<WalFile>*
|
|
510
|
-
return db_->GetCurrentWalFile(
|
|
525
|
+
std::unique_ptr<WalFile>* current_wal_file) override {
|
|
526
|
+
return db_->GetCurrentWalFile(current_wal_file);
|
|
511
527
|
}
|
|
512
528
|
|
|
513
529
|
Status GetCreationTimeOfOldestFile(uint64_t* creation_time) override {
|
|
514
530
|
return db_->GetCreationTimeOfOldestFile(creation_time);
|
|
515
531
|
}
|
|
516
532
|
|
|
517
|
-
// WARNING: This API is planned for removal in RocksDB 7.0 since it does not
|
|
518
|
-
// operate at the proper level of abstraction for a key-value store, and its
|
|
519
|
-
// contract/restrictions are poorly documented. For example, it returns non-OK
|
|
520
|
-
// `Status` for non-bottommost files and files undergoing compaction. Since we
|
|
521
|
-
// do not plan to maintain it, the contract will likely remain underspecified
|
|
522
|
-
// until its removal. Any user is encouraged to read the implementation
|
|
523
|
-
// carefully and migrate away from it when possible.
|
|
524
|
-
Status DeleteFile(std::string name) override { return db_->DeleteFile(name); }
|
|
525
|
-
|
|
526
533
|
Status GetDbIdentity(std::string& identity) const override {
|
|
527
534
|
return db_->GetDbIdentity(identity);
|
|
528
535
|
}
|
|
@@ -559,6 +566,14 @@ class StackableDB : public DB {
|
|
|
559
566
|
return db_->GetPropertiesOfTablesInRange(column_family, range, n, props);
|
|
560
567
|
}
|
|
561
568
|
|
|
569
|
+
using DB::GetPropertiesOfTablesByLevel;
|
|
570
|
+
Status GetPropertiesOfTablesByLevel(
|
|
571
|
+
ColumnFamilyHandle* column_family,
|
|
572
|
+
std::vector<std::unique_ptr<TablePropertiesCollection>>* props_by_level)
|
|
573
|
+
override {
|
|
574
|
+
return db_->GetPropertiesOfTablesByLevel(column_family, props_by_level);
|
|
575
|
+
}
|
|
576
|
+
|
|
562
577
|
Status GetUpdatesSince(
|
|
563
578
|
SequenceNumber seq_number, std::unique_ptr<TransactionLogIterator>* iter,
|
|
564
579
|
const TransactionLogIterator::ReadOptions& read_options) override {
|
|
@@ -23,15 +23,20 @@ class CompactOnDeletionCollectorFactory
|
|
|
23
23
|
// A factory of a table property collector that marks a SST
|
|
24
24
|
// file as need-compaction when it observe at least "D" deletion
|
|
25
25
|
// entries in any "N" consecutive entries, or the ratio of tombstone
|
|
26
|
-
// entries >= deletion_ratio.
|
|
26
|
+
// entries >= deletion_ratio for the entire file.
|
|
27
27
|
//
|
|
28
28
|
// @param sliding_window_size "N"
|
|
29
29
|
// @param deletion_trigger "D"
|
|
30
30
|
// @param deletion_ratio, if <= 0 or > 1, disable triggering compaction
|
|
31
31
|
// based on deletion ratio.
|
|
32
|
+
// @param min_file_size, a file needs to be at least this size to be marked
|
|
33
|
+
// for compaction. See comments above
|
|
34
|
+
// TablePropertiesCollector::AddUserKey() for limitations/inaccuracies on
|
|
35
|
+
// the file size.
|
|
32
36
|
CompactOnDeletionCollectorFactory(size_t sliding_window_size,
|
|
33
37
|
size_t deletion_trigger,
|
|
34
|
-
double deletion_ratio
|
|
38
|
+
double deletion_ratio,
|
|
39
|
+
uint64_t min_file_size = 0);
|
|
35
40
|
|
|
36
41
|
~CompactOnDeletionCollectorFactory() override {}
|
|
37
42
|
|
|
@@ -59,6 +64,12 @@ class CompactOnDeletionCollectorFactory
|
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
double GetDeletionRatio() const { return deletion_ratio_.load(); }
|
|
67
|
+
|
|
68
|
+
uint64_t GetMinFileSize() const { return min_file_size_.load(); }
|
|
69
|
+
void SetMinFileSize(uint64_t min_file_size) {
|
|
70
|
+
min_file_size_.store(min_file_size);
|
|
71
|
+
}
|
|
72
|
+
|
|
62
73
|
static const char* kClassName() { return "CompactOnDeletionCollector"; }
|
|
63
74
|
const char* Name() const override { return kClassName(); }
|
|
64
75
|
|
|
@@ -68,6 +79,7 @@ class CompactOnDeletionCollectorFactory
|
|
|
68
79
|
std::atomic<size_t> sliding_window_size_;
|
|
69
80
|
std::atomic<size_t> deletion_trigger_;
|
|
70
81
|
std::atomic<double> deletion_ratio_;
|
|
82
|
+
std::atomic<uint64_t> min_file_size_;
|
|
71
83
|
};
|
|
72
84
|
|
|
73
85
|
// Creates a factory of a table property collector that marks a SST
|
|
@@ -85,7 +97,8 @@ class CompactOnDeletionCollectorFactory
|
|
|
85
97
|
std::shared_ptr<CompactOnDeletionCollectorFactory>
|
|
86
98
|
NewCompactOnDeletionCollectorFactory(size_t sliding_window_size,
|
|
87
99
|
size_t deletion_trigger,
|
|
88
|
-
double deletion_ratio = 0
|
|
100
|
+
double deletion_ratio = 0,
|
|
101
|
+
uint64_t min_file_size = 0);
|
|
89
102
|
|
|
90
103
|
// A factory of a table property collector that marks a SST file as
|
|
91
104
|
// need-compaction when for the tiering use case, it observes, among all the
|
|
@@ -750,8 +750,6 @@ class Transaction {
|
|
|
750
750
|
|
|
751
751
|
virtual TxnTimestamp GetCommitTimestamp() const { return kMaxTxnTimestamp; }
|
|
752
752
|
|
|
753
|
-
virtual bool GetCommitBypassMemTable() const { return false; }
|
|
754
|
-
|
|
755
753
|
protected:
|
|
756
754
|
explicit Transaction(const TransactionDB* /*db*/) {}
|
|
757
755
|
Transaction() : log_number_(0), txn_state_(STARTED) {}
|
|
@@ -24,9 +24,16 @@ class SecondaryIndex;
|
|
|
24
24
|
class TransactionDBMutexFactory;
|
|
25
25
|
|
|
26
26
|
enum TxnDBWritePolicy {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
// Write data at transaction commit time
|
|
28
|
+
WRITE_COMMITTED = 0,
|
|
29
|
+
|
|
30
|
+
// EXPERIMENTAL: The remaining write policies are not as mature, well
|
|
31
|
+
// validated, nor as compatible with other features as WRITE_COMMITTED.
|
|
32
|
+
|
|
33
|
+
// Write data after the prepare phase of 2pc
|
|
34
|
+
WRITE_PREPARED,
|
|
35
|
+
// Write data before the prepare phase of 2pc
|
|
36
|
+
WRITE_UNPREPARED
|
|
30
37
|
};
|
|
31
38
|
|
|
32
39
|
constexpr uint32_t kInitialMaxDeadlocks = 5;
|
|
@@ -241,14 +248,24 @@ struct TransactionDBOptions {
|
|
|
241
248
|
// user-defined timestamps so this option only applies in this case.
|
|
242
249
|
bool enable_udt_validation = true;
|
|
243
250
|
|
|
244
|
-
//
|
|
245
|
-
// / ! \ UNDER CONSTRUCTION
|
|
246
|
-
// /-----\ UNDER CONSTRUCTION
|
|
251
|
+
// EXPERIMENTAL
|
|
247
252
|
//
|
|
248
253
|
// The secondary indices to be maintained. See the SecondaryIndex interface
|
|
249
254
|
// for more details.
|
|
250
255
|
std::vector<std::shared_ptr<SecondaryIndex>> secondary_indices;
|
|
251
256
|
|
|
257
|
+
// Deprecated, this option has no effect and may be removed in the future.
|
|
258
|
+
// Use TransactionOptions::large_txn_commit_optimize_threshold instead.
|
|
259
|
+
//
|
|
260
|
+
// This option is only valid for write committed. If the number of updates in
|
|
261
|
+
// a transaction is at least this threshold, then the transaction commit will
|
|
262
|
+
// skip insertions into memtable as an optimization to reduce commit latency.
|
|
263
|
+
// See comment for TransactionOptions::commit_bypass_memtable for more detail.
|
|
264
|
+
// Setting TransactionOptions::commit_bypass_memtable to true takes precedence
|
|
265
|
+
// over this option.
|
|
266
|
+
uint32_t txn_commit_bypass_memtable_threshold =
|
|
267
|
+
std::numeric_limits<uint32_t>::max();
|
|
268
|
+
|
|
252
269
|
private:
|
|
253
270
|
// 128 entries
|
|
254
271
|
// Should the default value change, please also update wp_snapshot_cache_bits
|
|
@@ -349,10 +366,28 @@ struct TransactionOptions {
|
|
|
349
366
|
// DeleteRange, SingleDelete.
|
|
350
367
|
bool write_batch_track_timestamp_size = false;
|
|
351
368
|
|
|
352
|
-
//
|
|
369
|
+
// The following three options enable optimizations for large transaction
|
|
370
|
+
// commit to bypass memtable write.
|
|
371
|
+
// - If any transaction's commit should bybass memtable write,
|
|
372
|
+
// set commit_bypass_memtable to true.
|
|
373
|
+
// - If only bypass memtable write for transactions with >= n operations,
|
|
374
|
+
// set commit_bypass_memtable to false,
|
|
375
|
+
// large_txn_commit_optimize_threshold to n, and
|
|
376
|
+
// large_txn_commit_optimize_byte_threshold to 0.
|
|
377
|
+
// Similarly for only optimize when a transaction's write batch size is >= n.
|
|
378
|
+
// - If bypass memtable write for transactions with >= n operations or >= x
|
|
379
|
+
// bytes,
|
|
380
|
+
// set commit_bypass_memtable to false,
|
|
381
|
+
// large_txn_commit_optimize_threshold to n, and
|
|
382
|
+
// large_txn_commit_optimize_byte_threshold to x.
|
|
383
|
+
//
|
|
384
|
+
//
|
|
385
|
+
// EXPERIMENTAL, SUBJECT TO CHANGE
|
|
353
386
|
// Only supports write-committed policy. If set to true, the transaction will
|
|
354
387
|
// skip memtable write and ingest into the DB directly during Commit(). This
|
|
355
388
|
// makes Commit() much faster for transactions with many operations.
|
|
389
|
+
// Transaction neeeds to call Prepare() before Commit() for this option to
|
|
390
|
+
// take effect.
|
|
356
391
|
// Transactions with Merge() or PutEntity() is not supported yet.
|
|
357
392
|
//
|
|
358
393
|
// Note that the transaction will be ingested as an immutable memtable for
|
|
@@ -364,7 +399,28 @@ struct TransactionOptions {
|
|
|
364
399
|
// without indexing (e.g. added directly to the transaction underlying
|
|
365
400
|
// write batch through Transaction::GetWriteBatch()->GetWriteBatch())
|
|
366
401
|
// are not supported. They will not be applied to the DB.
|
|
402
|
+
//
|
|
403
|
+
// NOTE: since WBWI keep track of the most recent update per key, a Put
|
|
404
|
+
// followed by a SingleDelete will be written to DB as a SingleDelete. This
|
|
405
|
+
// can cause flush/compaction to report `num_single_del_mismatch` due to
|
|
406
|
+
// consecutive SingleDeletes.
|
|
367
407
|
bool commit_bypass_memtable = false;
|
|
408
|
+
|
|
409
|
+
// EXPERIMENTAL, SUBJECT TO CHANGE
|
|
410
|
+
// When the number of updates in a transaction is at least this threshold,
|
|
411
|
+
// we will enable optimizations for commiting a large transaction. See
|
|
412
|
+
// comment for `commit_bypass_memtable` for more optimization detail.
|
|
413
|
+
//
|
|
414
|
+
// Default: 0 (disabled).
|
|
415
|
+
uint32_t large_txn_commit_optimize_threshold = 0;
|
|
416
|
+
|
|
417
|
+
// EXPERIMENTAL, SUBJECT TO CHANGE
|
|
418
|
+
// When the size of a transaction's write batch is at least this threshold,
|
|
419
|
+
// we will enable optimizations for commiting a large transaction. See
|
|
420
|
+
// comment for `commit_bypass_memtable` for more optimization detail.
|
|
421
|
+
//
|
|
422
|
+
// Default: 0 (disabled).
|
|
423
|
+
uint64_t large_txn_commit_optimize_byte_threshold = 0;
|
|
368
424
|
};
|
|
369
425
|
|
|
370
426
|
// The per-write optimizations that do not involve transactions. TransactionDB
|