@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
|
@@ -862,9 +862,9 @@ Version::~Version() {
|
|
|
862
862
|
// to get current mutable options from
|
|
863
863
|
auto* sv = cfd_->GetSuperVersion();
|
|
864
864
|
uint32_t path_id = f->fd.GetPathId();
|
|
865
|
-
assert(path_id < cfd_->ioptions()
|
|
865
|
+
assert(path_id < cfd_->ioptions().cf_paths.size());
|
|
866
866
|
vset_->obsolete_files_.emplace_back(
|
|
867
|
-
f, cfd_->ioptions()
|
|
867
|
+
f, cfd_->ioptions().cf_paths[path_id].path,
|
|
868
868
|
sv ? sv->mutable_cf_options.uncache_aggressiveness : 0,
|
|
869
869
|
cfd_->GetFileMetadataCacheReservationManager());
|
|
870
870
|
}
|
|
@@ -1002,7 +1002,8 @@ class LevelIterator final : public InternalIterator {
|
|
|
1002
1002
|
skip_filters_(skip_filters),
|
|
1003
1003
|
allow_unprepared_value_(allow_unprepared_value),
|
|
1004
1004
|
is_next_read_sequential_(false),
|
|
1005
|
-
to_return_sentinel_(false)
|
|
1005
|
+
to_return_sentinel_(false),
|
|
1006
|
+
scan_opts_(nullptr) {
|
|
1006
1007
|
// Empty level is not supported.
|
|
1007
1008
|
assert(flevel_ != nullptr && flevel_->num_files > 0);
|
|
1008
1009
|
if (range_tombstone_iter_ptr_) {
|
|
@@ -1098,6 +1099,13 @@ class LevelIterator final : public InternalIterator {
|
|
|
1098
1099
|
read_seq_ = read_seq;
|
|
1099
1100
|
}
|
|
1100
1101
|
|
|
1102
|
+
void Prepare(const std::vector<ScanOptions>* scan_opts) override {
|
|
1103
|
+
scan_opts_ = scan_opts;
|
|
1104
|
+
if (file_iter_.iter()) {
|
|
1105
|
+
file_iter_.Prepare(scan_opts_);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1101
1109
|
private:
|
|
1102
1110
|
// Return true if at least one invalid file is seen and skipped.
|
|
1103
1111
|
bool SkipEmptyFileForward();
|
|
@@ -1223,6 +1231,7 @@ class LevelIterator final : public InternalIterator {
|
|
|
1223
1231
|
bool prefix_exhausted_ = false;
|
|
1224
1232
|
// Whether next/prev key is a sentinel key.
|
|
1225
1233
|
bool to_return_sentinel_ = false;
|
|
1234
|
+
const std::vector<ScanOptions>* scan_opts_;
|
|
1226
1235
|
|
|
1227
1236
|
// Sets flags for if we should return the sentinel key next.
|
|
1228
1237
|
// The condition for returning sentinel is reaching the end of current
|
|
@@ -1533,6 +1542,11 @@ void LevelIterator::SetFileIterator(InternalIterator* iter) {
|
|
|
1533
1542
|
}
|
|
1534
1543
|
|
|
1535
1544
|
InternalIterator* old_iter = file_iter_.Set(iter);
|
|
1545
|
+
// Since this is a new table iterator, no need to call Prepare() if
|
|
1546
|
+
// scan_opts_ is null
|
|
1547
|
+
if (iter && scan_opts_) {
|
|
1548
|
+
file_iter_.Prepare(scan_opts_);
|
|
1549
|
+
}
|
|
1536
1550
|
|
|
1537
1551
|
// Update the read pattern for PrefetchBuffer.
|
|
1538
1552
|
if (is_next_read_sequential_) {
|
|
@@ -1574,8 +1588,8 @@ Status Version::GetTableProperties(const ReadOptions& read_options,
|
|
|
1574
1588
|
std::shared_ptr<const TableProperties>* tp,
|
|
1575
1589
|
const FileMetaData* file_meta,
|
|
1576
1590
|
const std::string* fname) const {
|
|
1577
|
-
auto table_cache = cfd_->table_cache();
|
|
1578
|
-
auto ioptions = cfd_->ioptions();
|
|
1591
|
+
auto* table_cache = cfd_->table_cache();
|
|
1592
|
+
const auto& ioptions = cfd_->ioptions();
|
|
1579
1593
|
Status s = table_cache->GetTableProperties(
|
|
1580
1594
|
file_options_, read_options, cfd_->internal_comparator(), *file_meta, tp,
|
|
1581
1595
|
mutable_cf_options_, true /* no io */);
|
|
@@ -1596,11 +1610,11 @@ Status Version::GetTableProperties(const ReadOptions& read_options,
|
|
|
1596
1610
|
if (fname != nullptr) {
|
|
1597
1611
|
file_name = *fname;
|
|
1598
1612
|
} else {
|
|
1599
|
-
file_name = TableFileName(ioptions
|
|
1613
|
+
file_name = TableFileName(ioptions.cf_paths, file_meta->fd.GetNumber(),
|
|
1600
1614
|
file_meta->fd.GetPathId());
|
|
1601
1615
|
}
|
|
1602
|
-
s = ioptions
|
|
1603
|
-
|
|
1616
|
+
s = ioptions.fs->NewRandomAccessFile(file_name, file_options_, &file,
|
|
1617
|
+
nullptr);
|
|
1604
1618
|
if (!s.ok()) {
|
|
1605
1619
|
return s;
|
|
1606
1620
|
}
|
|
@@ -1609,26 +1623,26 @@ Status Version::GetTableProperties(const ReadOptions& read_options,
|
|
|
1609
1623
|
// the magic number check in the footer.
|
|
1610
1624
|
std::unique_ptr<RandomAccessFileReader> file_reader(
|
|
1611
1625
|
new RandomAccessFileReader(
|
|
1612
|
-
std::move(file), file_name, ioptions
|
|
1613
|
-
ioptions
|
|
1626
|
+
std::move(file), file_name, ioptions.clock /* clock */, io_tracer_,
|
|
1627
|
+
ioptions.stats /* stats */,
|
|
1614
1628
|
Histograms::SST_READ_MICROS /* hist_type */,
|
|
1615
1629
|
nullptr /* file_read_hist */, nullptr /* rate_limiter */,
|
|
1616
|
-
ioptions
|
|
1630
|
+
ioptions.listeners));
|
|
1617
1631
|
std::unique_ptr<TableProperties> props;
|
|
1618
1632
|
s = ReadTableProperties(
|
|
1619
1633
|
file_reader.get(), file_meta->fd.GetFileSize(),
|
|
1620
|
-
Footer::kNullTableMagicNumber /* table's magic number */,
|
|
1634
|
+
Footer::kNullTableMagicNumber /* table's magic number */, ioptions,
|
|
1621
1635
|
read_options, &props);
|
|
1622
1636
|
if (!s.ok()) {
|
|
1623
1637
|
return s;
|
|
1624
1638
|
}
|
|
1625
1639
|
*tp = std::move(props);
|
|
1626
|
-
RecordTick(ioptions
|
|
1640
|
+
RecordTick(ioptions.stats, NUMBER_DIRECT_LOAD_TABLE_PROPERTIES);
|
|
1627
1641
|
return s;
|
|
1628
1642
|
}
|
|
1629
1643
|
|
|
1630
|
-
Status Version::GetPropertiesOfAllTables(
|
|
1631
|
-
|
|
1644
|
+
Status Version::GetPropertiesOfAllTables(
|
|
1645
|
+
const ReadOptions& read_options, TablePropertiesCollection* props) const {
|
|
1632
1646
|
Status s;
|
|
1633
1647
|
for (int level = 0; level < storage_info_.num_levels_; level++) {
|
|
1634
1648
|
s = GetPropertiesOfAllTables(read_options, props, level);
|
|
@@ -1654,7 +1668,7 @@ Status Version::TablesRangeTombstoneSummary(int max_entries_to_print,
|
|
|
1654
1668
|
for (int level = 0; level < storage_info_.num_levels_; level++) {
|
|
1655
1669
|
for (const auto& file_meta : storage_info_.files_[level]) {
|
|
1656
1670
|
auto fname =
|
|
1657
|
-
TableFileName(cfd_->ioptions()
|
|
1671
|
+
TableFileName(cfd_->ioptions().cf_paths, file_meta->fd.GetNumber(),
|
|
1658
1672
|
file_meta->fd.GetPathId());
|
|
1659
1673
|
|
|
1660
1674
|
ss << "=== file : " << fname << " ===\n";
|
|
@@ -1699,10 +1713,10 @@ Status Version::TablesRangeTombstoneSummary(int max_entries_to_print,
|
|
|
1699
1713
|
|
|
1700
1714
|
Status Version::GetPropertiesOfAllTables(const ReadOptions& read_options,
|
|
1701
1715
|
TablePropertiesCollection* props,
|
|
1702
|
-
int level) {
|
|
1716
|
+
int level) const {
|
|
1703
1717
|
for (const auto& file_meta : storage_info_.files_[level]) {
|
|
1704
1718
|
auto fname =
|
|
1705
|
-
TableFileName(cfd_->ioptions()
|
|
1719
|
+
TableFileName(cfd_->ioptions().cf_paths, file_meta->fd.GetNumber(),
|
|
1706
1720
|
file_meta->fd.GetPathId());
|
|
1707
1721
|
// 1. If the table is already present in table cache, load table
|
|
1708
1722
|
// properties from there.
|
|
@@ -1732,7 +1746,7 @@ Status Version::GetPropertiesOfTablesInRange(
|
|
|
1732
1746
|
false);
|
|
1733
1747
|
for (const auto& file_meta : files) {
|
|
1734
1748
|
auto fname =
|
|
1735
|
-
TableFileName(cfd_->ioptions()
|
|
1749
|
+
TableFileName(cfd_->ioptions().cf_paths, file_meta->fd.GetNumber(),
|
|
1736
1750
|
file_meta->fd.GetPathId());
|
|
1737
1751
|
if (props->count(fname) == 0) {
|
|
1738
1752
|
// 1. If the table is already present in table cache, load table
|
|
@@ -1753,6 +1767,24 @@ Status Version::GetPropertiesOfTablesInRange(
|
|
|
1753
1767
|
return Status::OK();
|
|
1754
1768
|
}
|
|
1755
1769
|
|
|
1770
|
+
Status Version::GetPropertiesOfTablesByLevel(
|
|
1771
|
+
const ReadOptions& read_options,
|
|
1772
|
+
std::vector<std::unique_ptr<TablePropertiesCollection>>* props_by_level)
|
|
1773
|
+
const {
|
|
1774
|
+
Status s;
|
|
1775
|
+
|
|
1776
|
+
props_by_level->reserve(storage_info_.num_levels_);
|
|
1777
|
+
for (int level = 0; level < storage_info_.num_levels_; level++) {
|
|
1778
|
+
props_by_level->push_back(std::make_unique<TablePropertiesCollection>());
|
|
1779
|
+
s = GetPropertiesOfAllTables(read_options, props_by_level->back().get(),
|
|
1780
|
+
level);
|
|
1781
|
+
if (!s.ok()) {
|
|
1782
|
+
return s;
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
return Status::OK();
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1756
1788
|
Status Version::GetAggregatedTableProperties(
|
|
1757
1789
|
const ReadOptions& read_options, std::shared_ptr<const TableProperties>* tp,
|
|
1758
1790
|
int level) {
|
|
@@ -1800,7 +1832,7 @@ void Version::GetColumnFamilyMetaData(ColumnFamilyMetaData* cf_meta) {
|
|
|
1800
1832
|
cf_meta->blob_file_count = 0;
|
|
1801
1833
|
cf_meta->blob_files.clear();
|
|
1802
1834
|
|
|
1803
|
-
auto
|
|
1835
|
+
const auto& ioptions = cfd_->ioptions();
|
|
1804
1836
|
auto* vstorage = storage_info();
|
|
1805
1837
|
|
|
1806
1838
|
for (int level = 0; level < cfd_->NumberLevels(); level++) {
|
|
@@ -1810,11 +1842,11 @@ void Version::GetColumnFamilyMetaData(ColumnFamilyMetaData* cf_meta) {
|
|
|
1810
1842
|
for (const auto& file : vstorage->LevelFiles(level)) {
|
|
1811
1843
|
uint32_t path_id = file->fd.GetPathId();
|
|
1812
1844
|
std::string file_path;
|
|
1813
|
-
if (path_id < ioptions
|
|
1814
|
-
file_path = ioptions
|
|
1845
|
+
if (path_id < ioptions.cf_paths.size()) {
|
|
1846
|
+
file_path = ioptions.cf_paths[path_id].path;
|
|
1815
1847
|
} else {
|
|
1816
|
-
assert(!ioptions
|
|
1817
|
-
file_path = ioptions
|
|
1848
|
+
assert(!ioptions.cf_paths.empty());
|
|
1849
|
+
file_path = ioptions.cf_paths.back().path;
|
|
1818
1850
|
}
|
|
1819
1851
|
const uint64_t file_number = file->fd.GetNumber();
|
|
1820
1852
|
files.emplace_back(
|
|
@@ -1841,7 +1873,7 @@ void Version::GetColumnFamilyMetaData(ColumnFamilyMetaData* cf_meta) {
|
|
|
1841
1873
|
|
|
1842
1874
|
cf_meta->blob_files.emplace_back(
|
|
1843
1875
|
meta->GetBlobFileNumber(), BlobFileName("", meta->GetBlobFileNumber()),
|
|
1844
|
-
ioptions
|
|
1876
|
+
ioptions.cf_paths.front().path, meta->GetBlobFileSize(),
|
|
1845
1877
|
meta->GetTotalBlobCount(), meta->GetTotalBlobBytes(),
|
|
1846
1878
|
meta->GetGarbageBlobCount(), meta->GetGarbageBlobBytes(),
|
|
1847
1879
|
meta->GetChecksumMethod(), meta->GetChecksumValue());
|
|
@@ -2202,31 +2234,31 @@ VersionStorageInfo::VersionStorageInfo(
|
|
|
2202
2234
|
|
|
2203
2235
|
Version::Version(ColumnFamilyData* column_family_data, VersionSet* vset,
|
|
2204
2236
|
const FileOptions& file_opt,
|
|
2205
|
-
const MutableCFOptions mutable_cf_options,
|
|
2237
|
+
const MutableCFOptions& mutable_cf_options,
|
|
2206
2238
|
const std::shared_ptr<IOTracer>& io_tracer,
|
|
2207
2239
|
uint64_t version_number,
|
|
2208
2240
|
EpochNumberRequirement epoch_number_requirement)
|
|
2209
2241
|
: env_(vset->env_),
|
|
2210
2242
|
clock_(vset->clock_),
|
|
2211
2243
|
cfd_(column_family_data),
|
|
2212
|
-
info_log_((cfd_ == nullptr) ? nullptr : cfd_->ioptions()
|
|
2213
|
-
db_statistics_((cfd_ == nullptr) ? nullptr : cfd_->ioptions()
|
|
2244
|
+
info_log_((cfd_ == nullptr) ? nullptr : cfd_->ioptions().logger),
|
|
2245
|
+
db_statistics_((cfd_ == nullptr) ? nullptr : cfd_->ioptions().stats),
|
|
2214
2246
|
table_cache_((cfd_ == nullptr) ? nullptr : cfd_->table_cache()),
|
|
2215
2247
|
blob_source_(cfd_ ? cfd_->blob_source() : nullptr),
|
|
2216
2248
|
merge_operator_(
|
|
2217
|
-
(cfd_ == nullptr) ? nullptr : cfd_->ioptions()
|
|
2249
|
+
(cfd_ == nullptr) ? nullptr : cfd_->ioptions().merge_operator.get()),
|
|
2218
2250
|
storage_info_(
|
|
2219
2251
|
(cfd_ == nullptr) ? nullptr : &cfd_->internal_comparator(),
|
|
2220
2252
|
(cfd_ == nullptr) ? nullptr : cfd_->user_comparator(),
|
|
2221
2253
|
cfd_ == nullptr ? 0 : cfd_->NumberLevels(),
|
|
2222
2254
|
cfd_ == nullptr ? kCompactionStyleLevel
|
|
2223
|
-
: cfd_->ioptions()
|
|
2255
|
+
: cfd_->ioptions().compaction_style,
|
|
2224
2256
|
(cfd_ == nullptr || cfd_->current() == nullptr)
|
|
2225
2257
|
? nullptr
|
|
2226
2258
|
: cfd_->current()->storage_info(),
|
|
2227
|
-
cfd_ == nullptr ? false : cfd_->ioptions()
|
|
2259
|
+
cfd_ == nullptr ? false : cfd_->ioptions().force_consistency_checks,
|
|
2228
2260
|
epoch_number_requirement,
|
|
2229
|
-
cfd_ == nullptr ? nullptr : cfd_->ioptions()
|
|
2261
|
+
cfd_ == nullptr ? nullptr : cfd_->ioptions().clock,
|
|
2230
2262
|
cfd_ == nullptr ? 0
|
|
2231
2263
|
: mutable_cf_options.bottommost_file_compaction_delay,
|
|
2232
2264
|
vset->offpeak_time_option()),
|
|
@@ -3064,7 +3096,7 @@ Status Version::MultiGetAsync(
|
|
|
3064
3096
|
bool Version::IsFilterSkipped(int level, bool is_file_last_in_level) {
|
|
3065
3097
|
// Reaching the bottom level implies misses at all upper levels, so we'll
|
|
3066
3098
|
// skip checking the filters when we predict a hit.
|
|
3067
|
-
return cfd_->ioptions()
|
|
3099
|
+
return cfd_->ioptions().optimize_filters_for_hits &&
|
|
3068
3100
|
(level > 0 || is_file_last_in_level) &&
|
|
3069
3101
|
level == storage_info_.num_non_empty_levels() - 1;
|
|
3070
3102
|
}
|
|
@@ -3091,8 +3123,7 @@ void VersionStorageInfo::PrepareForVersionAppend(
|
|
|
3091
3123
|
GenerateFileLocationIndex();
|
|
3092
3124
|
}
|
|
3093
3125
|
|
|
3094
|
-
void Version::PrepareAppend(const
|
|
3095
|
-
const ReadOptions& read_options,
|
|
3126
|
+
void Version::PrepareAppend(const ReadOptions& read_options,
|
|
3096
3127
|
bool update_stats) {
|
|
3097
3128
|
TEST_SYNC_POINT_CALLBACK(
|
|
3098
3129
|
"Version::PrepareAppend:forced_check",
|
|
@@ -3102,7 +3133,7 @@ void Version::PrepareAppend(const MutableCFOptions& mutable_cf_options,
|
|
|
3102
3133
|
UpdateAccumulatedStats(read_options);
|
|
3103
3134
|
}
|
|
3104
3135
|
|
|
3105
|
-
storage_info_.PrepareForVersionAppend(
|
|
3136
|
+
storage_info_.PrepareForVersionAppend(cfd_->ioptions(), mutable_cf_options_);
|
|
3106
3137
|
}
|
|
3107
3138
|
|
|
3108
3139
|
bool Version::MaybeInitializeFileMetaData(const ReadOptions& read_options,
|
|
@@ -3987,26 +4018,25 @@ void SortFileByOverlappingRatio(
|
|
|
3987
4018
|
? VersionStorageInfo::kNumberFilesToSort
|
|
3988
4019
|
: temp->size();
|
|
3989
4020
|
|
|
3990
|
-
std::partial_sort(
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
|
|
3996
|
-
|
|
3997
|
-
|
|
3998
|
-
|
|
3999
|
-
|
|
4000
|
-
|
|
4001
|
-
|
|
4002
|
-
|
|
4003
|
-
|
|
4004
|
-
|
|
4005
|
-
|
|
4006
|
-
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
});
|
|
4021
|
+
std::partial_sort(
|
|
4022
|
+
temp->begin(), temp->begin() + num_to_sort, temp->end(),
|
|
4023
|
+
[&](const Fsize& f1, const Fsize& f2) -> bool {
|
|
4024
|
+
// If score is the same, pick file with smaller keys.
|
|
4025
|
+
// This makes the algorithm more deterministic, and also
|
|
4026
|
+
// help the trivial move case to have more files to
|
|
4027
|
+
// extend.
|
|
4028
|
+
if (f1.file->marked_for_compaction == f2.file->marked_for_compaction) {
|
|
4029
|
+
if (file_to_order[f1.file->fd.GetNumber()] ==
|
|
4030
|
+
file_to_order[f2.file->fd.GetNumber()]) {
|
|
4031
|
+
return icmp.Compare(f1.file->smallest, f2.file->smallest) < 0;
|
|
4032
|
+
}
|
|
4033
|
+
return file_to_order[f1.file->fd.GetNumber()] <
|
|
4034
|
+
file_to_order[f2.file->fd.GetNumber()];
|
|
4035
|
+
} else {
|
|
4036
|
+
return f1.file->marked_for_compaction >
|
|
4037
|
+
f2.file->marked_for_compaction;
|
|
4038
|
+
}
|
|
4039
|
+
});
|
|
4010
4040
|
}
|
|
4011
4041
|
|
|
4012
4042
|
void SortFileByRoundRobin(const InternalKeyComparator& icmp,
|
|
@@ -4086,7 +4116,7 @@ void VersionStorageInfo::UpdateFilesByCompactionPri(
|
|
|
4086
4116
|
temp[i].file = files[i];
|
|
4087
4117
|
}
|
|
4088
4118
|
|
|
4089
|
-
// sort the top
|
|
4119
|
+
// sort the top kNumberFilesToSort based on file size
|
|
4090
4120
|
size_t num = VersionStorageInfo::kNumberFilesToSort;
|
|
4091
4121
|
if (num > temp.size()) {
|
|
4092
4122
|
num = temp.size();
|
|
@@ -4614,12 +4644,12 @@ void VersionStorageInfo::RecoverEpochNumbers(ColumnFamilyData* cfd,
|
|
|
4614
4644
|
cfd->ResetNextEpochNumber();
|
|
4615
4645
|
|
|
4616
4646
|
bool reserve_epoch_num_for_file_ingested_behind =
|
|
4617
|
-
cfd->ioptions()
|
|
4647
|
+
cfd->ioptions().allow_ingest_behind;
|
|
4618
4648
|
if (reserve_epoch_num_for_file_ingested_behind) {
|
|
4619
4649
|
uint64_t reserved_epoch_number = cfd->NewEpochNumber();
|
|
4620
4650
|
assert(reserved_epoch_number ==
|
|
4621
4651
|
kReservedEpochNumberForFileIngestedBehind);
|
|
4622
|
-
ROCKS_LOG_INFO(cfd->ioptions()
|
|
4652
|
+
ROCKS_LOG_INFO(cfd->ioptions().info_log.get(),
|
|
4623
4653
|
"[%s]CF has reserved epoch number %" PRIu64
|
|
4624
4654
|
" for files ingested "
|
|
4625
4655
|
"behind since `Options::allow_ingest_behind` is true",
|
|
@@ -4647,7 +4677,7 @@ void VersionStorageInfo::RecoverEpochNumbers(ColumnFamilyData* cfd,
|
|
|
4647
4677
|
if (missing_epoch_number) {
|
|
4648
4678
|
assert(epoch_number_requirement_ ==
|
|
4649
4679
|
EpochNumberRequirement::kMightMissing);
|
|
4650
|
-
ROCKS_LOG_WARN(cfd->ioptions()
|
|
4680
|
+
ROCKS_LOG_WARN(cfd->ioptions().info_log.get(),
|
|
4651
4681
|
"[%s]CF's epoch numbers are inferred based on seqno",
|
|
4652
4682
|
cfd->GetName().c_str());
|
|
4653
4683
|
epoch_number_requirement_ = EpochNumberRequirement::kMustPresent;
|
|
@@ -4763,7 +4793,7 @@ void VersionStorageInfo::CalculateBaseBytes(const ImmutableOptions& ioptions,
|
|
|
4763
4793
|
cur_level_size <= base_bytes_min &&
|
|
4764
4794
|
(options.preclude_last_level_data_seconds == 0 ||
|
|
4765
4795
|
i < num_levels_ - 2)) {
|
|
4766
|
-
// When per_key_placement is enabled, the
|
|
4796
|
+
// When per_key_placement is enabled, the proximal level is
|
|
4767
4797
|
// necessary.
|
|
4768
4798
|
lowest_unnecessary_level_ = i;
|
|
4769
4799
|
}
|
|
@@ -4905,24 +4935,38 @@ bool VersionStorageInfo::RangeMightExistAfterSortedRun(
|
|
|
4905
4935
|
}
|
|
4906
4936
|
|
|
4907
4937
|
Env::WriteLifeTimeHint VersionStorageInfo::CalculateSSTWriteHint(
|
|
4908
|
-
int level) const {
|
|
4909
|
-
if (compaction_style_
|
|
4938
|
+
int level, CompactionStyleSet compaction_style_set) const {
|
|
4939
|
+
if (!compaction_style_set.Contains(compaction_style_)) {
|
|
4910
4940
|
return Env::WLTH_NOT_SET;
|
|
4911
4941
|
}
|
|
4912
|
-
if (level == 0) {
|
|
4913
|
-
return Env::WLTH_MEDIUM;
|
|
4914
|
-
}
|
|
4915
4942
|
|
|
4916
|
-
|
|
4917
|
-
|
|
4918
|
-
|
|
4919
|
-
|
|
4920
|
-
|
|
4921
|
-
|
|
4922
|
-
|
|
4943
|
+
switch (compaction_style_) {
|
|
4944
|
+
case kCompactionStyleLevel:
|
|
4945
|
+
if (level == 0) {
|
|
4946
|
+
return Env::WLTH_MEDIUM;
|
|
4947
|
+
}
|
|
4948
|
+
|
|
4949
|
+
// L1: medium, L2: long, ...
|
|
4950
|
+
if (level - base_level_ >= 2) {
|
|
4951
|
+
return Env::WLTH_EXTREME;
|
|
4952
|
+
} else if (level < base_level_) {
|
|
4953
|
+
// There is no restriction which prevents level passed in to be smaller
|
|
4954
|
+
// than base_level.
|
|
4955
|
+
return Env::WLTH_MEDIUM;
|
|
4956
|
+
}
|
|
4957
|
+
return static_cast<Env::WriteLifeTimeHint>(
|
|
4958
|
+
level - base_level_ + static_cast<int>(Env::WLTH_MEDIUM));
|
|
4959
|
+
case kCompactionStyleUniversal:
|
|
4960
|
+
if (level == 0) {
|
|
4961
|
+
return Env::WLTH_SHORT;
|
|
4962
|
+
}
|
|
4963
|
+
if (level == 1) {
|
|
4964
|
+
return Env::WLTH_MEDIUM;
|
|
4965
|
+
}
|
|
4966
|
+
return Env::WLTH_LONG;
|
|
4967
|
+
default:
|
|
4968
|
+
return Env::WLTH_NOT_SET;
|
|
4923
4969
|
}
|
|
4924
|
-
return static_cast<Env::WriteLifeTimeHint>(
|
|
4925
|
-
level - base_level_ + static_cast<int>(Env::WLTH_MEDIUM));
|
|
4926
4970
|
}
|
|
4927
4971
|
|
|
4928
4972
|
void Version::AddLiveFiles(std::vector<uint64_t>* live_table_files,
|
|
@@ -5038,18 +5082,16 @@ struct VersionSet::ManifestWriter {
|
|
|
5038
5082
|
bool done;
|
|
5039
5083
|
InstrumentedCondVar cv;
|
|
5040
5084
|
ColumnFamilyData* cfd;
|
|
5041
|
-
const MutableCFOptions mutable_cf_options;
|
|
5042
5085
|
const autovector<VersionEdit*>& edit_list;
|
|
5043
5086
|
const std::function<void(const Status&)> manifest_write_callback;
|
|
5044
5087
|
|
|
5045
5088
|
explicit ManifestWriter(
|
|
5046
5089
|
InstrumentedMutex* mu, ColumnFamilyData* _cfd,
|
|
5047
|
-
const
|
|
5090
|
+
const autovector<VersionEdit*>& e,
|
|
5048
5091
|
const std::function<void(const Status&)>& manifest_wcb)
|
|
5049
5092
|
: done(false),
|
|
5050
5093
|
cv(mu),
|
|
5051
5094
|
cfd(_cfd),
|
|
5052
|
-
mutable_cf_options(cf_options),
|
|
5053
5095
|
edit_list(e),
|
|
5054
5096
|
manifest_write_callback(manifest_wcb) {}
|
|
5055
5097
|
~ManifestWriter() { status.PermitUncheckedError(); }
|
|
@@ -5118,7 +5160,7 @@ VersionSet::VersionSet(
|
|
|
5118
5160
|
BlockCacheTracer* const block_cache_tracer,
|
|
5119
5161
|
const std::shared_ptr<IOTracer>& io_tracer, const std::string& db_id,
|
|
5120
5162
|
const std::string& db_session_id, const std::string& daily_offpeak_time_utc,
|
|
5121
|
-
ErrorHandler*
|
|
5163
|
+
ErrorHandler* error_handler, bool unchanging)
|
|
5122
5164
|
: column_family_set_(new ColumnFamilySet(
|
|
5123
5165
|
dbname, _db_options, storage_options, table_cache,
|
|
5124
5166
|
write_buffer_manager, write_controller, block_cache_tracer, io_tracer,
|
|
@@ -5147,12 +5189,12 @@ VersionSet::VersionSet(
|
|
|
5147
5189
|
db_session_id_(db_session_id),
|
|
5148
5190
|
offpeak_time_option_(OffpeakTimeOption(daily_offpeak_time_utc)),
|
|
5149
5191
|
error_handler_(error_handler),
|
|
5150
|
-
|
|
5192
|
+
unchanging_(unchanging),
|
|
5151
5193
|
closed_(false) {}
|
|
5152
5194
|
|
|
5153
5195
|
Status VersionSet::Close(FSDirectory* db_dir, InstrumentedMutex* mu) {
|
|
5154
5196
|
Status s;
|
|
5155
|
-
if (closed_ ||
|
|
5197
|
+
if (closed_ || unchanging_ || !manifest_file_number_ || !descriptor_log_) {
|
|
5156
5198
|
return s;
|
|
5157
5199
|
}
|
|
5158
5200
|
|
|
@@ -5172,12 +5214,11 @@ Status VersionSet::Close(FSDirectory* db_dir, InstrumentedMutex* mu) {
|
|
|
5172
5214
|
io_s = IOStatus::Corruption();
|
|
5173
5215
|
}
|
|
5174
5216
|
ColumnFamilyData* cfd = GetColumnFamilySet()->GetDefault();
|
|
5175
|
-
const ImmutableOptions* ioptions = cfd->ioptions();
|
|
5176
5217
|
IOErrorInfo io_error_info(io_s, FileOperationType::kVerify,
|
|
5177
5218
|
manifest_file_name, /*length=*/size,
|
|
5178
5219
|
/*offset=*/0);
|
|
5179
5220
|
|
|
5180
|
-
for (auto& listener : ioptions
|
|
5221
|
+
for (auto& listener : cfd->ioptions().listeners) {
|
|
5181
5222
|
listener->OnIOError(io_error_info);
|
|
5182
5223
|
}
|
|
5183
5224
|
io_s.PermitUncheckedError();
|
|
@@ -5191,9 +5232,7 @@ Status VersionSet::Close(FSDirectory* db_dir, InstrumentedMutex* mu) {
|
|
|
5191
5232
|
io_s.ToString().c_str(), size);
|
|
5192
5233
|
VersionEdit edit;
|
|
5193
5234
|
assert(cfd);
|
|
5194
|
-
|
|
5195
|
-
s = LogAndApply(cfd, cf_opts, ReadOptions(), WriteOptions(), &edit, mu,
|
|
5196
|
-
db_dir);
|
|
5235
|
+
s = LogAndApply(cfd, ReadOptions(), WriteOptions(), &edit, mu, db_dir);
|
|
5197
5236
|
}
|
|
5198
5237
|
|
|
5199
5238
|
closed_ = true;
|
|
@@ -5256,8 +5295,8 @@ void VersionSet::AppendVersion(ColumnFamilyData* column_family_data,
|
|
|
5256
5295
|
Version* v) {
|
|
5257
5296
|
// compute new compaction score
|
|
5258
5297
|
v->storage_info()->ComputeCompactionScore(
|
|
5259
|
-
|
|
5260
|
-
|
|
5298
|
+
column_family_data->ioptions(),
|
|
5299
|
+
column_family_data->GetLatestMutableCFOptions());
|
|
5261
5300
|
|
|
5262
5301
|
// Mark v finalized
|
|
5263
5302
|
v->storage_info_.SetFinalized();
|
|
@@ -5301,7 +5340,6 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5301
5340
|
// element removed, `batch_edits_ts_sz` should be updated too.
|
|
5302
5341
|
autovector<std::optional<size_t>> batch_edits_ts_sz;
|
|
5303
5342
|
autovector<Version*> versions;
|
|
5304
|
-
autovector<const MutableCFOptions*> mutable_cf_options_ptrs;
|
|
5305
5343
|
std::vector<std::unique_ptr<BaseReferencedVersionBuilder>> builder_guards;
|
|
5306
5344
|
autovector<const autovector<uint64_t>*> files_to_quarantine_if_commit_fail;
|
|
5307
5345
|
autovector<uint64_t> limbo_descriptor_log_file_number;
|
|
@@ -5313,6 +5351,9 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5313
5351
|
// succeeds.
|
|
5314
5352
|
SequenceNumber max_last_sequence = descriptor_last_sequence_;
|
|
5315
5353
|
|
|
5354
|
+
bool skip_manifest_write =
|
|
5355
|
+
first_writer.edit_list.front()->IsNoManifestWriteDummy();
|
|
5356
|
+
|
|
5316
5357
|
if (first_writer.edit_list.front()->IsColumnFamilyManipulation()) {
|
|
5317
5358
|
// No group commits for column family add or drop
|
|
5318
5359
|
LogAndApplyCFHelper(first_writer.edit_list.front(), &max_last_sequence);
|
|
@@ -5321,12 +5362,9 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5321
5362
|
} else {
|
|
5322
5363
|
auto it = manifest_writers_.cbegin();
|
|
5323
5364
|
size_t group_start = std::numeric_limits<size_t>::max();
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
break;
|
|
5328
|
-
}
|
|
5329
|
-
last_writer = *(it++);
|
|
5365
|
+
for (;;) {
|
|
5366
|
+
assert(!(*it)->edit_list.front()->IsColumnFamilyManipulation());
|
|
5367
|
+
last_writer = *it;
|
|
5330
5368
|
assert(last_writer != nullptr);
|
|
5331
5369
|
assert(last_writer->cfd != nullptr);
|
|
5332
5370
|
if (last_writer->cfd->IsDropped()) {
|
|
@@ -5361,65 +5399,83 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5361
5399
|
}
|
|
5362
5400
|
}
|
|
5363
5401
|
}
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5375
|
-
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
|
|
5380
|
-
}
|
|
5381
|
-
}
|
|
5382
|
-
if (version == nullptr) {
|
|
5383
|
-
// WAL manipulations do not need to be applied to versions.
|
|
5384
|
-
if (!last_writer->IsAllWalEdits()) {
|
|
5385
|
-
version = new Version(last_writer->cfd, this, file_options_,
|
|
5386
|
-
last_writer->mutable_cf_options, io_tracer_,
|
|
5387
|
-
current_version_number_++);
|
|
5388
|
-
versions.push_back(version);
|
|
5389
|
-
mutable_cf_options_ptrs.push_back(&last_writer->mutable_cf_options);
|
|
5390
|
-
builder_guards.emplace_back(
|
|
5391
|
-
new BaseReferencedVersionBuilder(last_writer->cfd));
|
|
5392
|
-
builder = builder_guards.back()->version_builder();
|
|
5402
|
+
} else {
|
|
5403
|
+
// We do a linear search on versions because versions is small.
|
|
5404
|
+
// TODO(yanqin) maybe consider unordered_map
|
|
5405
|
+
Version* version = nullptr;
|
|
5406
|
+
VersionBuilder* builder = nullptr;
|
|
5407
|
+
for (int i = 0; i != static_cast<int>(versions.size()); ++i) {
|
|
5408
|
+
uint32_t cf_id = last_writer->cfd->GetID();
|
|
5409
|
+
if (versions[i]->cfd()->GetID() == cf_id) {
|
|
5410
|
+
version = versions[i];
|
|
5411
|
+
assert(!builder_guards.empty() &&
|
|
5412
|
+
builder_guards.size() == versions.size());
|
|
5413
|
+
builder = builder_guards[i]->version_builder();
|
|
5414
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
5415
|
+
"VersionSet::ProcessManifestWrites:SameColumnFamily", &cf_id);
|
|
5416
|
+
break;
|
|
5417
|
+
}
|
|
5393
5418
|
}
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
batch_edits.back()->GetRemainingEntries() == 0)) {
|
|
5407
|
-
group_start = batch_edits.size();
|
|
5419
|
+
if (version == nullptr) {
|
|
5420
|
+
// WAL manipulations do not need to be applied to versions.
|
|
5421
|
+
if (!last_writer->IsAllWalEdits()) {
|
|
5422
|
+
version = new Version(
|
|
5423
|
+
last_writer->cfd, this, file_options_,
|
|
5424
|
+
last_writer->cfd ? last_writer->cfd->GetLatestMutableCFOptions()
|
|
5425
|
+
: MutableCFOptions(*new_cf_options),
|
|
5426
|
+
io_tracer_, current_version_number_++);
|
|
5427
|
+
versions.push_back(version);
|
|
5428
|
+
builder_guards.emplace_back(
|
|
5429
|
+
new BaseReferencedVersionBuilder(last_writer->cfd));
|
|
5430
|
+
builder = builder_guards.back()->version_builder();
|
|
5408
5431
|
}
|
|
5409
|
-
|
|
5410
|
-
|
|
5432
|
+
assert(last_writer->IsAllWalEdits() || builder);
|
|
5433
|
+
assert(last_writer->IsAllWalEdits() || version);
|
|
5434
|
+
TEST_SYNC_POINT_CALLBACK(
|
|
5435
|
+
"VersionSet::ProcessManifestWrites:NewVersion", version);
|
|
5411
5436
|
}
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
|
|
5437
|
+
const Comparator* ucmp = last_writer->cfd->user_comparator();
|
|
5438
|
+
assert(ucmp);
|
|
5439
|
+
std::optional<size_t> edit_ts_sz = ucmp->timestamp_size();
|
|
5440
|
+
for (const auto& e : last_writer->edit_list) {
|
|
5441
|
+
if (e->IsInAtomicGroup()) {
|
|
5442
|
+
if (batch_edits.empty() || !batch_edits.back()->IsInAtomicGroup() ||
|
|
5443
|
+
(batch_edits.back()->IsInAtomicGroup() &&
|
|
5444
|
+
batch_edits.back()->GetRemainingEntries() == 0)) {
|
|
5445
|
+
group_start = batch_edits.size();
|
|
5446
|
+
}
|
|
5447
|
+
} else if (group_start != std::numeric_limits<size_t>::max()) {
|
|
5448
|
+
group_start = std::numeric_limits<size_t>::max();
|
|
5418
5449
|
}
|
|
5419
|
-
|
|
5450
|
+
Status s = LogAndApplyHelper(last_writer->cfd, builder, e,
|
|
5451
|
+
&max_last_sequence, mu);
|
|
5452
|
+
if (!s.ok()) {
|
|
5453
|
+
// free up the allocated memory
|
|
5454
|
+
for (auto v : versions) {
|
|
5455
|
+
delete v;
|
|
5456
|
+
}
|
|
5457
|
+
// FIXME? manifest_writers_ still has requested updates
|
|
5458
|
+
return s;
|
|
5459
|
+
}
|
|
5460
|
+
batch_edits.push_back(e);
|
|
5461
|
+
batch_edits_ts_sz.push_back(edit_ts_sz);
|
|
5420
5462
|
}
|
|
5421
|
-
|
|
5422
|
-
|
|
5463
|
+
}
|
|
5464
|
+
// Loop increment/conditions
|
|
5465
|
+
++it;
|
|
5466
|
+
if (it == manifest_writers_.cend()) {
|
|
5467
|
+
break;
|
|
5468
|
+
}
|
|
5469
|
+
if (skip_manifest_write) {
|
|
5470
|
+
// no grouping when skipping manifest write
|
|
5471
|
+
break;
|
|
5472
|
+
}
|
|
5473
|
+
const auto* next = (*it)->edit_list.front();
|
|
5474
|
+
if (next->IsColumnFamilyManipulation() ||
|
|
5475
|
+
next->IsNoManifestWriteDummy()) {
|
|
5476
|
+
// no group commits for column family add or drop
|
|
5477
|
+
// nor for dummy skipping manifest write
|
|
5478
|
+
break;
|
|
5423
5479
|
}
|
|
5424
5480
|
}
|
|
5425
5481
|
for (int i = 0; i < static_cast<int>(versions.size()); ++i) {
|
|
@@ -5432,6 +5488,7 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5432
5488
|
for (auto v : versions) {
|
|
5433
5489
|
delete v;
|
|
5434
5490
|
}
|
|
5491
|
+
// FIXME? manifest_writers_ still has requested updates
|
|
5435
5492
|
return s;
|
|
5436
5493
|
}
|
|
5437
5494
|
}
|
|
@@ -5471,11 +5528,16 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5471
5528
|
"VersionSet::ProcessManifestWrites:CheckOneAtomicGroup", &tmp);
|
|
5472
5529
|
k = i;
|
|
5473
5530
|
}
|
|
5531
|
+
if (skip_manifest_write) {
|
|
5532
|
+
// no grouping when skipping manifest write
|
|
5533
|
+
assert(last_writer == &first_writer);
|
|
5534
|
+
}
|
|
5474
5535
|
#endif // NDEBUG
|
|
5475
5536
|
|
|
5476
5537
|
assert(pending_manifest_file_number_ == 0);
|
|
5477
|
-
if (!
|
|
5478
|
-
|
|
5538
|
+
if (!skip_manifest_write &&
|
|
5539
|
+
(!descriptor_log_ ||
|
|
5540
|
+
manifest_file_size_ > db_options_->max_manifest_file_size)) {
|
|
5479
5541
|
TEST_SYNC_POINT("VersionSet::ProcessManifestWrites:BeforeNewManifest");
|
|
5480
5542
|
new_descriptor_log = true;
|
|
5481
5543
|
} else {
|
|
@@ -5513,8 +5575,18 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5513
5575
|
Status s;
|
|
5514
5576
|
IOStatus io_s;
|
|
5515
5577
|
IOStatus manifest_io_status;
|
|
5578
|
+
manifest_io_status.PermitUncheckedError();
|
|
5516
5579
|
std::unique_ptr<log::Writer> new_desc_log_ptr;
|
|
5517
|
-
{
|
|
5580
|
+
if (skip_manifest_write) {
|
|
5581
|
+
if (s.ok()) {
|
|
5582
|
+
constexpr bool update_stats = true;
|
|
5583
|
+
for (int i = 0; i < static_cast<int>(versions.size()); ++i) {
|
|
5584
|
+
// NOTE: normally called with DB mutex released, but we don't
|
|
5585
|
+
// want to release the DB mutex in this mode of LogAndApply
|
|
5586
|
+
versions[i]->PrepareAppend(read_options, update_stats);
|
|
5587
|
+
}
|
|
5588
|
+
}
|
|
5589
|
+
} else {
|
|
5518
5590
|
FileOptions opt_file_opts = fs_->OptimizeForManifestWrite(file_options_);
|
|
5519
5591
|
// DB option (in file_options_) takes precedence when not kUnknown
|
|
5520
5592
|
if (file_options_.temperature != Temperature::kUnknown) {
|
|
@@ -5527,14 +5599,13 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5527
5599
|
for (int i = 0; i < static_cast<int>(versions.size()); ++i) {
|
|
5528
5600
|
assert(!builder_guards.empty() &&
|
|
5529
5601
|
builder_guards.size() == versions.size());
|
|
5530
|
-
assert(!mutable_cf_options_ptrs.empty() &&
|
|
5531
|
-
builder_guards.size() == versions.size());
|
|
5532
5602
|
ColumnFamilyData* cfd = versions[i]->cfd_;
|
|
5533
5603
|
s = builder_guards[i]->version_builder()->LoadTableHandlers(
|
|
5534
5604
|
cfd->internal_stats(), 1 /* max_threads */,
|
|
5535
5605
|
true /* prefetch_index_and_filter_in_cache */,
|
|
5536
|
-
false /* is_initial_load */,
|
|
5537
|
-
MaxFileSizeForL0MetaPin(
|
|
5606
|
+
false /* is_initial_load */, versions[i]->GetMutableCFOptions(),
|
|
5607
|
+
MaxFileSizeForL0MetaPin(versions[i]->GetMutableCFOptions()),
|
|
5608
|
+
read_options);
|
|
5538
5609
|
if (!s.ok()) {
|
|
5539
5610
|
if (db_options_->paranoid_checks) {
|
|
5540
5611
|
break;
|
|
@@ -5584,8 +5655,7 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5584
5655
|
constexpr bool update_stats = true;
|
|
5585
5656
|
|
|
5586
5657
|
for (int i = 0; i < static_cast<int>(versions.size()); ++i) {
|
|
5587
|
-
versions[i]->PrepareAppend(
|
|
5588
|
-
update_stats);
|
|
5658
|
+
versions[i]->PrepareAppend(read_options, update_stats);
|
|
5589
5659
|
}
|
|
5590
5660
|
}
|
|
5591
5661
|
|
|
@@ -5717,7 +5787,8 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5717
5787
|
assert(new_cf_options != nullptr);
|
|
5718
5788
|
assert(max_last_sequence == descriptor_last_sequence_);
|
|
5719
5789
|
CreateColumnFamily(*new_cf_options, read_options,
|
|
5720
|
-
first_writer.edit_list.front()
|
|
5790
|
+
first_writer.edit_list.front(),
|
|
5791
|
+
/*read_only*/ false);
|
|
5721
5792
|
} else if (first_writer.edit_list.front()->IsColumnFamilyDrop()) {
|
|
5722
5793
|
assert(batch_edits.size() == 1);
|
|
5723
5794
|
assert(max_last_sequence == descriptor_last_sequence_);
|
|
@@ -5759,11 +5830,13 @@ Status VersionSet::ProcessManifestWrites(
|
|
|
5759
5830
|
AppendVersion(cfd, versions[i]);
|
|
5760
5831
|
}
|
|
5761
5832
|
}
|
|
5762
|
-
|
|
5763
|
-
|
|
5764
|
-
|
|
5765
|
-
|
|
5766
|
-
|
|
5833
|
+
if (!skip_manifest_write) {
|
|
5834
|
+
assert(max_last_sequence >= descriptor_last_sequence_);
|
|
5835
|
+
descriptor_last_sequence_ = max_last_sequence;
|
|
5836
|
+
manifest_file_number_ = pending_manifest_file_number_;
|
|
5837
|
+
manifest_file_size_ = new_manifest_file_size;
|
|
5838
|
+
prev_log_number_ = first_writer.edit_list.front()->GetPrevLogNumber();
|
|
5839
|
+
}
|
|
5767
5840
|
} else {
|
|
5768
5841
|
std::string version_edits;
|
|
5769
5842
|
for (auto& e : batch_edits) {
|
|
@@ -5882,12 +5955,12 @@ void VersionSet::WakeUpWaitingManifestWriters() {
|
|
|
5882
5955
|
// that this variable represents a collection of column_family_data.
|
|
5883
5956
|
Status VersionSet::LogAndApply(
|
|
5884
5957
|
const autovector<ColumnFamilyData*>& column_family_datas,
|
|
5885
|
-
const autovector<const MutableCFOptions*>& mutable_cf_options_list,
|
|
5886
5958
|
const ReadOptions& read_options, const WriteOptions& write_options,
|
|
5887
5959
|
const autovector<autovector<VersionEdit*>>& edit_lists,
|
|
5888
5960
|
InstrumentedMutex* mu, FSDirectory* dir_contains_current_file,
|
|
5889
5961
|
bool new_descriptor_log, const ColumnFamilyOptions* new_cf_options,
|
|
5890
|
-
const std::vector<std::function<void(const Status&)>>& manifest_wcbs
|
|
5962
|
+
const std::vector<std::function<void(const Status&)>>& manifest_wcbs,
|
|
5963
|
+
const std::function<Status()>& pre_cb) {
|
|
5891
5964
|
mu->AssertHeld();
|
|
5892
5965
|
int num_edits = 0;
|
|
5893
5966
|
for (const auto& elist : edit_lists) {
|
|
@@ -5900,6 +5973,7 @@ Status VersionSet::LogAndApply(
|
|
|
5900
5973
|
for (const auto& edit_list : edit_lists) {
|
|
5901
5974
|
for (const auto& edit : edit_list) {
|
|
5902
5975
|
assert(!edit->IsColumnFamilyManipulation());
|
|
5976
|
+
assert(!edit->IsNoManifestWriteDummy());
|
|
5903
5977
|
}
|
|
5904
5978
|
}
|
|
5905
5979
|
#endif /* ! NDEBUG */
|
|
@@ -5913,14 +5987,12 @@ Status VersionSet::LogAndApply(
|
|
|
5913
5987
|
}
|
|
5914
5988
|
std::deque<ManifestWriter> writers;
|
|
5915
5989
|
if (num_cfds > 0) {
|
|
5916
|
-
assert(static_cast<size_t>(num_cfds) == mutable_cf_options_list.size());
|
|
5917
5990
|
assert(static_cast<size_t>(num_cfds) == edit_lists.size());
|
|
5918
5991
|
}
|
|
5919
5992
|
for (int i = 0; i < num_cfds; ++i) {
|
|
5920
5993
|
const auto wcb =
|
|
5921
5994
|
manifest_wcbs.empty() ? [](const Status&) {} : manifest_wcbs[i];
|
|
5922
|
-
writers.emplace_back(mu, column_family_datas[i],
|
|
5923
|
-
*mutable_cf_options_list[i], edit_lists[i], wcb);
|
|
5995
|
+
writers.emplace_back(mu, column_family_datas[i], edit_lists[i], wcb);
|
|
5924
5996
|
manifest_writers_.push_back(&writers[i]);
|
|
5925
5997
|
}
|
|
5926
5998
|
assert(!writers.empty());
|
|
@@ -5940,8 +6012,11 @@ Status VersionSet::LogAndApply(
|
|
|
5940
6012
|
}
|
|
5941
6013
|
TEST_SYNC_POINT_CALLBACK("VersionSet::LogAndApply:WakeUpAndDone", mu);
|
|
5942
6014
|
#endif /* !NDEBUG */
|
|
6015
|
+
// FIXME: One MANIFEST write failure can cause all writes to SetBGError,
|
|
6016
|
+
// should only SetBGError once.
|
|
5943
6017
|
return first_writer.status;
|
|
5944
6018
|
}
|
|
6019
|
+
TEST_SYNC_POINT_CALLBACK("VersionSet::LogAndApply:WakeUpAndNotDone", mu);
|
|
5945
6020
|
|
|
5946
6021
|
int num_undropped_cfds = 0;
|
|
5947
6022
|
for (auto cfd : column_family_datas) {
|
|
@@ -5950,7 +6025,17 @@ Status VersionSet::LogAndApply(
|
|
|
5950
6025
|
++num_undropped_cfds;
|
|
5951
6026
|
}
|
|
5952
6027
|
}
|
|
6028
|
+
Status s;
|
|
5953
6029
|
if (0 == num_undropped_cfds) {
|
|
6030
|
+
s = Status::ColumnFamilyDropped();
|
|
6031
|
+
}
|
|
6032
|
+
// Call pre_cb once we know we have work to do and are scheduled as the
|
|
6033
|
+
// exclusive manifest writer (and new Version appender)
|
|
6034
|
+
if (s.ok() && pre_cb) {
|
|
6035
|
+
s = pre_cb();
|
|
6036
|
+
}
|
|
6037
|
+
if (!s.ok()) {
|
|
6038
|
+
// Revert manifest_writers_
|
|
5954
6039
|
for (int i = 0; i != num_cfds; ++i) {
|
|
5955
6040
|
manifest_writers_.pop_front();
|
|
5956
6041
|
}
|
|
@@ -5958,11 +6043,12 @@ Status VersionSet::LogAndApply(
|
|
|
5958
6043
|
if (!manifest_writers_.empty()) {
|
|
5959
6044
|
manifest_writers_.front()->cv.Signal();
|
|
5960
6045
|
}
|
|
5961
|
-
return
|
|
6046
|
+
return s;
|
|
6047
|
+
} else {
|
|
6048
|
+
return ProcessManifestWrites(writers, mu, dir_contains_current_file,
|
|
6049
|
+
new_descriptor_log, new_cf_options,
|
|
6050
|
+
read_options, write_options);
|
|
5962
6051
|
}
|
|
5963
|
-
return ProcessManifestWrites(writers, mu, dir_contains_current_file,
|
|
5964
|
-
new_descriptor_log, new_cf_options, read_options,
|
|
5965
|
-
write_options);
|
|
5966
6052
|
}
|
|
5967
6053
|
|
|
5968
6054
|
void VersionSet::LogAndApplyCFHelper(VersionEdit* edit,
|
|
@@ -6408,13 +6494,12 @@ Status VersionSet::ReduceNumberOfLevels(const std::string& dbname,
|
|
|
6408
6494
|
vstorage->num_levels_ = new_levels;
|
|
6409
6495
|
vstorage->ResizeCompactCursors(new_levels);
|
|
6410
6496
|
|
|
6411
|
-
MutableCFOptions mutable_cf_options(*options);
|
|
6412
6497
|
VersionEdit ve;
|
|
6413
6498
|
InstrumentedMutex dummy_mutex;
|
|
6414
6499
|
InstrumentedMutexLock l(&dummy_mutex);
|
|
6415
6500
|
return versions.LogAndApply(versions.GetColumnFamilySet()->GetDefault(),
|
|
6416
|
-
|
|
6417
|
-
|
|
6501
|
+
read_options, write_options, &ve, &dummy_mutex,
|
|
6502
|
+
nullptr, true);
|
|
6418
6503
|
}
|
|
6419
6504
|
|
|
6420
6505
|
// Get the checksum information including the checksum and checksum function
|
|
@@ -6632,7 +6717,7 @@ Status VersionSet::WriteCurrentStateToManifest(
|
|
|
6632
6717
|
edit.SetComparatorName(
|
|
6633
6718
|
cfd->internal_comparator().user_comparator()->Name());
|
|
6634
6719
|
edit.SetPersistUserDefinedTimestamps(
|
|
6635
|
-
cfd->ioptions()
|
|
6720
|
+
cfd->ioptions().persist_user_defined_timestamps);
|
|
6636
6721
|
std::string record;
|
|
6637
6722
|
if (!edit.EncodeTo(&record)) {
|
|
6638
6723
|
return Status::Corruption("Unable to Encode VersionEdit:" +
|
|
@@ -7084,13 +7169,13 @@ InternalIterator* VersionSet::MakeInputIterator(
|
|
|
7084
7169
|
list[num++] = cfd->table_cache()->NewIterator(
|
|
7085
7170
|
read_options, file_options_compactions,
|
|
7086
7171
|
cfd->internal_comparator(), fmd, range_del_agg,
|
|
7087
|
-
|
|
7172
|
+
c->mutable_cf_options(),
|
|
7088
7173
|
/*table_reader_ptr=*/nullptr,
|
|
7089
7174
|
/*file_read_hist=*/nullptr, TableReaderCaller::kCompaction,
|
|
7090
7175
|
/*arena=*/nullptr,
|
|
7091
7176
|
/*skip_filters=*/false,
|
|
7092
7177
|
/*level=*/static_cast<int>(c->level(which)),
|
|
7093
|
-
MaxFileSizeForL0MetaPin(
|
|
7178
|
+
MaxFileSizeForL0MetaPin(c->mutable_cf_options()),
|
|
7094
7179
|
/*smallest_compaction_key=*/nullptr,
|
|
7095
7180
|
/*largest_compaction_key=*/nullptr,
|
|
7096
7181
|
/*allow_unprepared_value=*/false,
|
|
@@ -7105,7 +7190,7 @@ InternalIterator* VersionSet::MakeInputIterator(
|
|
|
7105
7190
|
nullptr;
|
|
7106
7191
|
list[num++] = new LevelIterator(
|
|
7107
7192
|
cfd->table_cache(), read_options, file_options_compactions,
|
|
7108
|
-
cfd->internal_comparator(), flevel,
|
|
7193
|
+
cfd->internal_comparator(), flevel, c->mutable_cf_options(),
|
|
7109
7194
|
/*should_sample=*/false,
|
|
7110
7195
|
/*no per level latency histogram=*/nullptr,
|
|
7111
7196
|
TableReaderCaller::kCompaction, /*skip_filters=*/false,
|
|
@@ -7121,7 +7206,8 @@ InternalIterator* VersionSet::MakeInputIterator(
|
|
|
7121
7206
|
assert(num <= space);
|
|
7122
7207
|
InternalIterator* result = NewCompactionMergingIterator(
|
|
7123
7208
|
&c->column_family_data()->internal_comparator(), list,
|
|
7124
|
-
static_cast<int>(num), range_tombstones
|
|
7209
|
+
static_cast<int>(num), range_tombstones, /*arena=*/nullptr,
|
|
7210
|
+
c->column_family_data()->internal_stats());
|
|
7125
7211
|
delete[] list;
|
|
7126
7212
|
return result;
|
|
7127
7213
|
}
|
|
@@ -7174,11 +7260,11 @@ void VersionSet::GetLiveFilesMetaData(std::vector<LiveFileMetaData>* metadata) {
|
|
|
7174
7260
|
LiveFileMetaData filemetadata;
|
|
7175
7261
|
filemetadata.column_family_name = cfd->GetName();
|
|
7176
7262
|
uint32_t path_id = file->fd.GetPathId();
|
|
7177
|
-
if (path_id < cfd->ioptions()
|
|
7178
|
-
filemetadata.db_path = cfd->ioptions()
|
|
7263
|
+
if (path_id < cfd->ioptions().cf_paths.size()) {
|
|
7264
|
+
filemetadata.db_path = cfd->ioptions().cf_paths[path_id].path;
|
|
7179
7265
|
} else {
|
|
7180
|
-
assert(!cfd->ioptions()
|
|
7181
|
-
filemetadata.db_path = cfd->ioptions()
|
|
7266
|
+
assert(!cfd->ioptions().cf_paths.empty());
|
|
7267
|
+
filemetadata.db_path = cfd->ioptions().cf_paths.back().path;
|
|
7182
7268
|
}
|
|
7183
7269
|
filemetadata.directory = filemetadata.db_path;
|
|
7184
7270
|
const uint64_t file_number = file->fd.GetNumber();
|
|
@@ -7255,8 +7341,10 @@ uint64_t VersionSet::GetObsoleteSstFilesSize() const {
|
|
|
7255
7341
|
|
|
7256
7342
|
ColumnFamilyData* VersionSet::CreateColumnFamily(
|
|
7257
7343
|
const ColumnFamilyOptions& cf_options, const ReadOptions& read_options,
|
|
7258
|
-
const VersionEdit* edit) {
|
|
7344
|
+
const VersionEdit* edit, bool read_only) {
|
|
7259
7345
|
assert(edit->IsColumnFamilyAdd());
|
|
7346
|
+
// Unchanging LSM tree implies no writes to the CF
|
|
7347
|
+
assert(!unchanging_ || read_only);
|
|
7260
7348
|
|
|
7261
7349
|
MutableCFOptions dummy_cf_options;
|
|
7262
7350
|
Version* dummy_versions =
|
|
@@ -7266,22 +7354,20 @@ ColumnFamilyData* VersionSet::CreateColumnFamily(
|
|
|
7266
7354
|
dummy_versions->Ref();
|
|
7267
7355
|
auto new_cfd = column_family_set_->CreateColumnFamily(
|
|
7268
7356
|
edit->GetColumnFamilyName(), edit->GetColumnFamily(), dummy_versions,
|
|
7269
|
-
cf_options);
|
|
7357
|
+
cf_options, read_only);
|
|
7270
7358
|
|
|
7271
7359
|
Version* v = new Version(new_cfd, this, file_options_,
|
|
7272
|
-
|
|
7360
|
+
new_cfd->GetLatestMutableCFOptions(), io_tracer_,
|
|
7273
7361
|
current_version_number_++);
|
|
7274
7362
|
|
|
7275
7363
|
constexpr bool update_stats = false;
|
|
7276
7364
|
|
|
7277
|
-
v->PrepareAppend(
|
|
7278
|
-
update_stats);
|
|
7365
|
+
v->PrepareAppend(read_options, update_stats);
|
|
7279
7366
|
|
|
7280
7367
|
AppendVersion(new_cfd, v);
|
|
7281
7368
|
// GetLatestMutableCFOptions() is safe here without mutex since the
|
|
7282
7369
|
// cfd is not available to client
|
|
7283
|
-
new_cfd->CreateNewMemtable(
|
|
7284
|
-
LastSequence());
|
|
7370
|
+
new_cfd->CreateNewMemtable(LastSequence());
|
|
7285
7371
|
new_cfd->SetLogNumber(edit->GetLogNumber());
|
|
7286
7372
|
return new_cfd;
|
|
7287
7373
|
}
|
|
@@ -7356,9 +7442,8 @@ Status VersionSet::VerifyFileMetadata(const ReadOptions& read_options,
|
|
|
7356
7442
|
TableCache* table_cache = cfd->table_cache();
|
|
7357
7443
|
assert(table_cache);
|
|
7358
7444
|
|
|
7359
|
-
const
|
|
7360
|
-
|
|
7361
|
-
size_t max_sz_for_l0_meta_pin = MaxFileSizeForL0MetaPin(*cf_opts);
|
|
7445
|
+
const auto& cf_opts = cfd->GetLatestMutableCFOptions();
|
|
7446
|
+
size_t max_sz_for_l0_meta_pin = MaxFileSizeForL0MetaPin(cf_opts);
|
|
7362
7447
|
|
|
7363
7448
|
const FileOptions& file_opts = file_options();
|
|
7364
7449
|
|
|
@@ -7373,7 +7458,7 @@ Status VersionSet::VerifyFileMetadata(const ReadOptions& read_options,
|
|
|
7373
7458
|
TableCache::TypedHandle* handle = nullptr;
|
|
7374
7459
|
FileMetaData meta_copy = meta;
|
|
7375
7460
|
status = table_cache->FindTable(
|
|
7376
|
-
read_options, file_opts, *icmp, meta_copy, &handle,
|
|
7461
|
+
read_options, file_opts, *icmp, meta_copy, &handle, cf_opts,
|
|
7377
7462
|
/*no_io=*/false, internal_stats->GetFileReadHist(level), false, level,
|
|
7378
7463
|
/*prefetch_index_and_filter_in_cache*/ false, max_sz_for_l0_meta_pin,
|
|
7379
7464
|
meta_copy.temperature);
|
|
@@ -7393,7 +7478,7 @@ ReactiveVersionSet::ReactiveVersionSet(
|
|
|
7393
7478
|
write_buffer_manager, write_controller,
|
|
7394
7479
|
/*block_cache_tracer=*/nullptr, io_tracer, /*db_id*/ "",
|
|
7395
7480
|
/*db_session_id*/ "", /*daily_offpeak_time_utc*/ "",
|
|
7396
|
-
/*error_handler=*/nullptr, /*
|
|
7481
|
+
/*error_handler=*/nullptr, /*unchanging=*/false) {}
|
|
7397
7482
|
|
|
7398
7483
|
ReactiveVersionSet::~ReactiveVersionSet() = default;
|
|
7399
7484
|
|