@nxtedition/rocksdb 13.5.7 → 13.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +248 -70
- package/binding.gyp +2 -2
- package/deps/rocksdb/rocksdb/BUCK +12 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
- package/deps/rocksdb/rocksdb/Makefile +28 -23
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
- package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
- package/deps/rocksdb/rocksdb/db/builder.h +5 -4
- package/deps/rocksdb/rocksdb/db/c.cc +556 -15
- package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
- package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
- package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
- package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
- package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
- package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
- package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
- package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
- package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
- package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
- package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
- package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
- package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
- package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
- package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
- package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
- package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
- package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
- package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
- package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
- package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
- package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
- package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
- package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
- package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
- package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
- package/deps/rocksdb/rocksdb/env/env.cc +32 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
- package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
- package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
- package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
- package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
- package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
- package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
- package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
- package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
- package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
- package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
- package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
- package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
- package/deps/rocksdb/rocksdb/options/options.cc +296 -305
- package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
- package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
- package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
- package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
- package/deps/rocksdb/rocksdb/port/lang.h +2 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
- package/deps/rocksdb/rocksdb/src.mk +17 -11
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
- package/deps/rocksdb/rocksdb/table/format.cc +62 -44
- package/deps/rocksdb/rocksdb/table/format.h +35 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
- package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
- package/deps/rocksdb/rocksdb/util/compression.h +348 -232
- package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
- package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
- package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
- package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
- package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
- package/deps/rocksdb/rocksdb.gyp +9 -4
- package/index.js +50 -9
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -11,10 +11,12 @@
|
|
|
11
11
|
#include "port/stack_trace.h"
|
|
12
12
|
#include "rocksdb/advanced_options.h"
|
|
13
13
|
#include "rocksdb/options.h"
|
|
14
|
+
#include "rocksdb/perf_context.h"
|
|
14
15
|
#include "rocksdb/sst_file_writer.h"
|
|
15
16
|
#include "test_util/testharness.h"
|
|
16
17
|
#include "test_util/testutil.h"
|
|
17
18
|
#include "util/defer.h"
|
|
19
|
+
#include "util/file_checksum_helper.h"
|
|
18
20
|
#include "util/random.h"
|
|
19
21
|
#include "utilities/fault_injection_env.h"
|
|
20
22
|
|
|
@@ -259,15 +261,6 @@ TEST_F(ExternalSSTFileBasicTest, Basic) {
|
|
|
259
261
|
s = sst_file_writer.DeleteRange(Key(100), Key(200));
|
|
260
262
|
ASSERT_NOK(s) << s.ToString();
|
|
261
263
|
|
|
262
|
-
DestroyAndReopen(options);
|
|
263
|
-
// Add file using file path
|
|
264
|
-
s = DeprecatedAddFile({file1});
|
|
265
|
-
ASSERT_OK(s) << s.ToString();
|
|
266
|
-
ASSERT_EQ(db_->GetLatestSequenceNumber(), 0U);
|
|
267
|
-
for (int k = 0; k < 100; k++) {
|
|
268
|
-
ASSERT_EQ(Get(Key(k)), Key(k) + "_val");
|
|
269
|
-
}
|
|
270
|
-
|
|
271
264
|
DestroyAndRecreateExternalSSTFilesDir();
|
|
272
265
|
}
|
|
273
266
|
|
|
@@ -354,7 +347,8 @@ class ChecksumVerifyHelper {
|
|
|
354
347
|
|
|
355
348
|
Status GetSingleFileChecksumAndFuncName(
|
|
356
349
|
const std::string& file_path, std::string* file_checksum,
|
|
357
|
-
std::string* file_checksum_func_name
|
|
350
|
+
std::string* file_checksum_func_name,
|
|
351
|
+
const std::string& requested_func_name = {}) {
|
|
358
352
|
Status s;
|
|
359
353
|
EnvOptions soptions;
|
|
360
354
|
std::unique_ptr<SequentialFile> file_reader;
|
|
@@ -372,6 +366,8 @@ class ChecksumVerifyHelper {
|
|
|
372
366
|
return Status::OK();
|
|
373
367
|
} else {
|
|
374
368
|
FileChecksumGenContext gen_context;
|
|
369
|
+
gen_context.file_name = file_path;
|
|
370
|
+
gen_context.requested_checksum_func_name = requested_func_name;
|
|
375
371
|
std::unique_ptr<FileChecksumGenerator> file_checksum_gen =
|
|
376
372
|
file_checksum_gen_factory->CreateFileChecksumGenerator(gen_context);
|
|
377
373
|
*file_checksum_func_name = file_checksum_gen->Name();
|
|
@@ -447,10 +443,50 @@ TEST_F(ExternalSSTFileBasicTest, BasicWithFileChecksumCrc32c) {
|
|
|
447
443
|
DestroyAndRecreateExternalSSTFilesDir();
|
|
448
444
|
}
|
|
449
445
|
|
|
446
|
+
namespace {
|
|
447
|
+
class VariousFileChecksumGenerator : public FileChecksumGenCrc32c {
|
|
448
|
+
public:
|
|
449
|
+
explicit VariousFileChecksumGenerator(const std::string& name)
|
|
450
|
+
: FileChecksumGenCrc32c({}), name_(name) {}
|
|
451
|
+
|
|
452
|
+
const char* Name() const override { return name_.c_str(); }
|
|
453
|
+
|
|
454
|
+
std::string GetChecksum() const override {
|
|
455
|
+
return FileChecksumGenCrc32c::GetChecksum() + "_" + name_;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
private:
|
|
459
|
+
const std::string name_;
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
class VariousFileChecksumGenFactory : public FileChecksumGenFactory {
|
|
463
|
+
public:
|
|
464
|
+
std::unique_ptr<FileChecksumGenerator> CreateFileChecksumGenerator(
|
|
465
|
+
const FileChecksumGenContext& context) override {
|
|
466
|
+
static RelaxedAtomic<int> counter{0};
|
|
467
|
+
if (Slice(context.requested_checksum_func_name).starts_with("Various")) {
|
|
468
|
+
return std::make_unique<VariousFileChecksumGenerator>(
|
|
469
|
+
context.requested_checksum_func_name);
|
|
470
|
+
} else if (context.requested_checksum_func_name.empty()) {
|
|
471
|
+
// Lacking a specific request, use a different function name for each
|
|
472
|
+
// result.
|
|
473
|
+
return std::make_unique<VariousFileChecksumGenerator>(
|
|
474
|
+
"Various" + std::to_string(counter.FetchAddRelaxed(1)));
|
|
475
|
+
} else {
|
|
476
|
+
return nullptr;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
static const char* kClassName() { return "VariousFileChecksumGenFactory"; }
|
|
481
|
+
const char* Name() const override { return kClassName(); }
|
|
482
|
+
};
|
|
483
|
+
} // namespace
|
|
484
|
+
|
|
450
485
|
TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
451
486
|
Options old_options = CurrentOptions();
|
|
452
487
|
Options options = CurrentOptions();
|
|
453
|
-
options.file_checksum_gen_factory =
|
|
488
|
+
options.file_checksum_gen_factory =
|
|
489
|
+
std::make_shared<VariousFileChecksumGenFactory>();
|
|
454
490
|
const ImmutableCFOptions ioptions(options);
|
|
455
491
|
ChecksumVerifyHelper checksum_helper(options);
|
|
456
492
|
|
|
@@ -471,7 +507,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
471
507
|
ASSERT_EQ(file1_info.largest_key, Key(1099));
|
|
472
508
|
std::string file_checksum1, file_checksum_func_name1;
|
|
473
509
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
474
|
-
file1, &file_checksum1, &file_checksum_func_name1
|
|
510
|
+
file1, &file_checksum1, &file_checksum_func_name1,
|
|
511
|
+
file1_info.file_checksum_func_name));
|
|
475
512
|
ASSERT_EQ(file1_info.file_checksum, file_checksum1);
|
|
476
513
|
ASSERT_EQ(file1_info.file_checksum_func_name, file_checksum_func_name1);
|
|
477
514
|
|
|
@@ -490,7 +527,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
490
527
|
ASSERT_EQ(file2_info.largest_key, Key(1299));
|
|
491
528
|
std::string file_checksum2, file_checksum_func_name2;
|
|
492
529
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
493
|
-
file2, &file_checksum2, &file_checksum_func_name2
|
|
530
|
+
file2, &file_checksum2, &file_checksum_func_name2,
|
|
531
|
+
file2_info.file_checksum_func_name));
|
|
494
532
|
ASSERT_EQ(file2_info.file_checksum, file_checksum2);
|
|
495
533
|
ASSERT_EQ(file2_info.file_checksum_func_name, file_checksum_func_name2);
|
|
496
534
|
|
|
@@ -509,7 +547,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
509
547
|
ASSERT_EQ(file3_info.largest_key, Key(1499));
|
|
510
548
|
std::string file_checksum3, file_checksum_func_name3;
|
|
511
549
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
512
|
-
file3, &file_checksum3, &file_checksum_func_name3
|
|
550
|
+
file3, &file_checksum3, &file_checksum_func_name3,
|
|
551
|
+
file3_info.file_checksum_func_name));
|
|
513
552
|
ASSERT_EQ(file3_info.file_checksum, file_checksum3);
|
|
514
553
|
ASSERT_EQ(file3_info.file_checksum_func_name, file_checksum_func_name3);
|
|
515
554
|
|
|
@@ -528,7 +567,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
528
567
|
ASSERT_EQ(file4_info.largest_key, Key(1799));
|
|
529
568
|
std::string file_checksum4, file_checksum_func_name4;
|
|
530
569
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
531
|
-
file4, &file_checksum4, &file_checksum_func_name4
|
|
570
|
+
file4, &file_checksum4, &file_checksum_func_name4,
|
|
571
|
+
file4_info.file_checksum_func_name));
|
|
532
572
|
ASSERT_EQ(file4_info.file_checksum, file_checksum4);
|
|
533
573
|
ASSERT_EQ(file4_info.file_checksum_func_name, file_checksum_func_name4);
|
|
534
574
|
|
|
@@ -547,7 +587,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
547
587
|
ASSERT_EQ(file5_info.largest_key, Key(1999));
|
|
548
588
|
std::string file_checksum5, file_checksum_func_name5;
|
|
549
589
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
550
|
-
file5, &file_checksum5, &file_checksum_func_name5
|
|
590
|
+
file5, &file_checksum5, &file_checksum_func_name5,
|
|
591
|
+
file5_info.file_checksum_func_name));
|
|
551
592
|
ASSERT_EQ(file5_info.file_checksum, file_checksum5);
|
|
552
593
|
ASSERT_EQ(file5_info.file_checksum_func_name, file_checksum_func_name5);
|
|
553
594
|
|
|
@@ -566,7 +607,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
566
607
|
ASSERT_EQ(file6_info.largest_key, Key(2199));
|
|
567
608
|
std::string file_checksum6, file_checksum_func_name6;
|
|
568
609
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
569
|
-
file6, &file_checksum6, &file_checksum_func_name6
|
|
610
|
+
file6, &file_checksum6, &file_checksum_func_name6,
|
|
611
|
+
file6_info.file_checksum_func_name));
|
|
570
612
|
ASSERT_EQ(file6_info.file_checksum, file_checksum6);
|
|
571
613
|
ASSERT_EQ(file6_info.file_checksum_func_name, file_checksum_func_name6);
|
|
572
614
|
|
|
@@ -636,18 +678,23 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
636
678
|
}
|
|
637
679
|
ASSERT_OK(env_->FileExists(file2));
|
|
638
680
|
|
|
639
|
-
// Enable verify_file_checksum option
|
|
640
|
-
//
|
|
641
|
-
|
|
642
|
-
s = AddFileWithFileChecksum({file3},
|
|
643
|
-
false, false);
|
|
681
|
+
// Enable verify_file_checksum option. No checksum information is provided,
|
|
682
|
+
// so it is generated when ingesting. The configured checksum factory will
|
|
683
|
+
// use a different function than before.
|
|
684
|
+
s = AddFileWithFileChecksum({file3}, {}, {}, true, false, false, false);
|
|
644
685
|
ASSERT_OK(s) << s.ToString();
|
|
645
686
|
std::vector<LiveFileMetaData> live_files2;
|
|
646
687
|
dbfull()->GetLiveFilesMetaData(&live_files2);
|
|
647
688
|
for (const auto& f : live_files2) {
|
|
648
689
|
if (set1.find(f.name) == set1.end()) {
|
|
649
|
-
|
|
650
|
-
|
|
690
|
+
// Recomputed checksum, different function
|
|
691
|
+
EXPECT_NE(f.file_checksum_func_name, file_checksum_func_name3);
|
|
692
|
+
std::string cur_checksum3, cur_checksum_func_name3;
|
|
693
|
+
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
694
|
+
dbname_ + f.name, &cur_checksum3, &cur_checksum_func_name3,
|
|
695
|
+
f.file_checksum_func_name));
|
|
696
|
+
EXPECT_EQ(f.file_checksum, cur_checksum3);
|
|
697
|
+
EXPECT_EQ(f.file_checksum_func_name, cur_checksum_func_name3);
|
|
651
698
|
set1.insert(f.name);
|
|
652
699
|
}
|
|
653
700
|
}
|
|
@@ -661,8 +708,9 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
661
708
|
ASSERT_NOK(s) << s.ToString();
|
|
662
709
|
|
|
663
710
|
// Does not enable verify_file_checksum options
|
|
664
|
-
// Checksum function name
|
|
665
|
-
|
|
711
|
+
// Checksum function name is recognized, so store the checksum being ingested.
|
|
712
|
+
std::string file_checksum_func_name4alt = "VariousABCD";
|
|
713
|
+
s = AddFileWithFileChecksum({file4}, {"asd"}, {file_checksum_func_name4alt},
|
|
666
714
|
false, false, false, false);
|
|
667
715
|
ASSERT_OK(s) << s.ToString();
|
|
668
716
|
std::vector<LiveFileMetaData> live_files3;
|
|
@@ -671,7 +719,7 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
671
719
|
if (set1.find(f.name) == set1.end()) {
|
|
672
720
|
ASSERT_FALSE(f.file_checksum == file_checksum4);
|
|
673
721
|
ASSERT_EQ(f.file_checksum, "asd");
|
|
674
|
-
ASSERT_EQ(f.file_checksum_func_name,
|
|
722
|
+
ASSERT_EQ(f.file_checksum_func_name, file_checksum_func_name4alt);
|
|
675
723
|
set1.insert(f.name);
|
|
676
724
|
}
|
|
677
725
|
}
|
|
@@ -680,7 +728,8 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
680
728
|
|
|
681
729
|
// enable verify_file_checksum options, DB enable checksum, and enable
|
|
682
730
|
// write_global_seq. So the checksum stored is different from the one
|
|
683
|
-
// ingested due to the sequence number changes.
|
|
731
|
+
// ingested due to the sequence number changes. The checksum function name
|
|
732
|
+
// may also change since the checksum is recomputed.
|
|
684
733
|
s = AddFileWithFileChecksum({file5}, {file_checksum5},
|
|
685
734
|
{file_checksum_func_name5}, true, false, false,
|
|
686
735
|
true);
|
|
@@ -689,11 +738,14 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
689
738
|
dbfull()->GetLiveFilesMetaData(&live_files4);
|
|
690
739
|
for (const auto& f : live_files4) {
|
|
691
740
|
if (set1.find(f.name) == set1.end()) {
|
|
741
|
+
// Recomputed checksum, different function
|
|
742
|
+
EXPECT_NE(f.file_checksum_func_name, file_checksum_func_name5);
|
|
692
743
|
std::string cur_checksum5, cur_checksum_func_name5;
|
|
693
744
|
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
694
|
-
dbname_ + f.name, &cur_checksum5, &cur_checksum_func_name5
|
|
695
|
-
|
|
696
|
-
|
|
745
|
+
dbname_ + f.name, &cur_checksum5, &cur_checksum_func_name5,
|
|
746
|
+
f.file_checksum_func_name));
|
|
747
|
+
EXPECT_EQ(f.file_checksum, cur_checksum5);
|
|
748
|
+
EXPECT_EQ(f.file_checksum_func_name, cur_checksum_func_name5);
|
|
697
749
|
set1.insert(f.name);
|
|
698
750
|
}
|
|
699
751
|
}
|
|
@@ -701,18 +753,22 @@ TEST_F(ExternalSSTFileBasicTest, IngestFileWithFileChecksum) {
|
|
|
701
753
|
ASSERT_OK(env_->FileExists(file5));
|
|
702
754
|
|
|
703
755
|
// Does not enable verify_file_checksum options and also the ingested file
|
|
704
|
-
// checksum information is empty. DB will generate and store
|
|
705
|
-
// in Manifest.
|
|
706
|
-
|
|
707
|
-
s = AddFileWithFileChecksum({file6}, files_c6, files_name6, false, false,
|
|
708
|
-
false, false);
|
|
756
|
+
// checksum information is empty. DB will generate and store file checksum
|
|
757
|
+
// in Manifest, which could be different from the previous invocation.
|
|
758
|
+
s = AddFileWithFileChecksum({file6}, {}, {}, false, false, false, false);
|
|
709
759
|
ASSERT_OK(s) << s.ToString();
|
|
710
760
|
std::vector<LiveFileMetaData> live_files6;
|
|
711
761
|
dbfull()->GetLiveFilesMetaData(&live_files6);
|
|
712
762
|
for (const auto& f : live_files6) {
|
|
713
763
|
if (set1.find(f.name) == set1.end()) {
|
|
714
|
-
|
|
715
|
-
|
|
764
|
+
// Recomputed checksum, different function
|
|
765
|
+
EXPECT_NE(f.file_checksum_func_name, file_checksum_func_name6);
|
|
766
|
+
std::string cur_checksum6, cur_checksum_func_name6;
|
|
767
|
+
ASSERT_OK(checksum_helper.GetSingleFileChecksumAndFuncName(
|
|
768
|
+
dbname_ + f.name, &cur_checksum6, &cur_checksum_func_name6,
|
|
769
|
+
f.file_checksum_func_name));
|
|
770
|
+
EXPECT_EQ(f.file_checksum, cur_checksum6);
|
|
771
|
+
EXPECT_EQ(f.file_checksum_func_name, cur_checksum_func_name6);
|
|
716
772
|
set1.insert(f.name);
|
|
717
773
|
}
|
|
718
774
|
}
|
|
@@ -1913,21 +1969,44 @@ TEST_F(ExternalSSTFileBasicTest, OverlappingFiles) {
|
|
|
1913
1969
|
SstFileWriter sst_file_writer(EnvOptions(), options);
|
|
1914
1970
|
std::string file3 = sst_files_dir_ + "file3.sst";
|
|
1915
1971
|
ASSERT_OK(sst_file_writer.Open(file3));
|
|
1916
|
-
ASSERT_OK(sst_file_writer.Put("
|
|
1972
|
+
ASSERT_OK(sst_file_writer.Put("k", "k1"));
|
|
1917
1973
|
ASSERT_OK(sst_file_writer.Put("m", "m1"));
|
|
1918
1974
|
ExternalSstFileInfo file3_info;
|
|
1919
1975
|
ASSERT_OK(sst_file_writer.Finish(&file3_info));
|
|
1920
1976
|
files.push_back(std::move(file3));
|
|
1921
1977
|
}
|
|
1922
1978
|
|
|
1979
|
+
// This could be ingested to the same level as file3 and file4, but the
|
|
1980
|
+
// greedy/simple overlap check relegates it to a later level
|
|
1981
|
+
{
|
|
1982
|
+
SstFileWriter sst_file_writer(EnvOptions(), options);
|
|
1983
|
+
std::string file4 = sst_files_dir_ + "file4.sst";
|
|
1984
|
+
ASSERT_OK(sst_file_writer.Open(file4));
|
|
1985
|
+
ASSERT_OK(sst_file_writer.Put("j", "j1"));
|
|
1986
|
+
ExternalSstFileInfo file4_info;
|
|
1987
|
+
ASSERT_OK(sst_file_writer.Finish(&file4_info));
|
|
1988
|
+
files.push_back(std::move(file4));
|
|
1989
|
+
}
|
|
1990
|
+
|
|
1991
|
+
{
|
|
1992
|
+
SstFileWriter sst_file_writer(EnvOptions(), options);
|
|
1993
|
+
std::string file5 = sst_files_dir_ + "file5.sst";
|
|
1994
|
+
ASSERT_OK(sst_file_writer.Open(file5));
|
|
1995
|
+
ASSERT_OK(sst_file_writer.Put("i", "i3"));
|
|
1996
|
+
ExternalSstFileInfo file5_info;
|
|
1997
|
+
ASSERT_OK(sst_file_writer.Finish(&file5_info));
|
|
1998
|
+
files.push_back(std::move(file5));
|
|
1999
|
+
}
|
|
2000
|
+
|
|
1923
2001
|
IngestExternalFileOptions ifo;
|
|
1924
2002
|
ifo.allow_global_seqno = false;
|
|
1925
2003
|
ASSERT_NOK(db_->IngestExternalFile(files, ifo));
|
|
1926
2004
|
ifo.allow_global_seqno = true;
|
|
1927
2005
|
ASSERT_OK(db_->IngestExternalFile(files, ifo));
|
|
1928
2006
|
ASSERT_EQ(Get("a"), "a1");
|
|
1929
|
-
ASSERT_EQ(Get("i"), "
|
|
2007
|
+
ASSERT_EQ(Get("i"), "i3");
|
|
1930
2008
|
ASSERT_EQ(Get("j"), "j1");
|
|
2009
|
+
ASSERT_EQ(Get("k"), "k1");
|
|
1931
2010
|
ASSERT_EQ(Get("m"), "m1");
|
|
1932
2011
|
|
|
1933
2012
|
int total_keys = 0;
|
|
@@ -1938,10 +2017,11 @@ TEST_F(ExternalSSTFileBasicTest, OverlappingFiles) {
|
|
|
1938
2017
|
}
|
|
1939
2018
|
ASSERT_OK(iter->status());
|
|
1940
2019
|
delete iter;
|
|
1941
|
-
ASSERT_EQ(total_keys,
|
|
2020
|
+
ASSERT_EQ(total_keys, 5);
|
|
1942
2021
|
|
|
1943
2022
|
ASSERT_EQ(1, NumTableFilesAtLevel(6));
|
|
1944
2023
|
ASSERT_EQ(2, NumTableFilesAtLevel(5));
|
|
2024
|
+
ASSERT_EQ(2, NumTableFilesAtLevel(4));
|
|
1945
2025
|
}
|
|
1946
2026
|
|
|
1947
2027
|
class CompactionJobStatsCheckerForFilteredFiles : public EventListener {
|
|
@@ -2628,51 +2708,358 @@ TEST_F(ExternalSSTFileBasicTest, IngestWithTemperature) {
|
|
|
2628
2708
|
}
|
|
2629
2709
|
}
|
|
2630
2710
|
|
|
2631
|
-
|
|
2711
|
+
// This tests an internal user's exact usage and expectation of the
|
|
2712
|
+
// IngestExternalFiles APIs to bulk load and replace files.
|
|
2713
|
+
TEST_F(ExternalSSTFileBasicTest,
|
|
2714
|
+
AtomicReplaceColumnFamilyWithIngestedVersionKey) {
|
|
2632
2715
|
Options options = GetDefaultOptions();
|
|
2633
|
-
|
|
2634
|
-
std::string file_path = sst_files_dir_ + std::to_string(1);
|
|
2635
|
-
SstFileWriter sfw(EnvOptions(), options);
|
|
2636
|
-
|
|
2637
|
-
ASSERT_OK(sfw.Open(file_path));
|
|
2638
|
-
ASSERT_OK(sfw.Put("b", "dontcare"));
|
|
2639
|
-
ASSERT_OK(sfw.Finish());
|
|
2640
|
-
|
|
2641
|
-
// Test universal compaction + ingest with snapshot consistency
|
|
2642
2716
|
options.create_if_missing = true;
|
|
2643
2717
|
options.compaction_style = CompactionStyle::kCompactionStyleUniversal;
|
|
2718
|
+
options.num_levels = 7;
|
|
2719
|
+
options.disallow_memtable_writes = false;
|
|
2720
|
+
|
|
2644
2721
|
DestroyAndReopen(options);
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2722
|
+
SstFileWriter sst_file_writer(EnvOptions(), options);
|
|
2723
|
+
std::string data_file_original = sst_files_dir_ + "data_original";
|
|
2724
|
+
ASSERT_OK(sst_file_writer.Open(data_file_original));
|
|
2725
|
+
ASSERT_OK(sst_file_writer.Put("ukey1", "uval1_orig"));
|
|
2726
|
+
ASSERT_OK(sst_file_writer.Put("ukey2", "uval2_orig"));
|
|
2727
|
+
ASSERT_OK(sst_file_writer.Finish());
|
|
2728
|
+
ASSERT_OK(db_->IngestExternalFile(db_->DefaultColumnFamily(),
|
|
2729
|
+
{data_file_original},
|
|
2730
|
+
IngestExternalFileOptions()));
|
|
2731
|
+
|
|
2732
|
+
ASSERT_OK(Put("data_version", "v_original"));
|
|
2733
|
+
ASSERT_OK(Flush());
|
|
2734
|
+
std::string value;
|
|
2735
|
+
ASSERT_OK(db_->Get(ReadOptions(), "data_version", &value));
|
|
2736
|
+
ASSERT_EQ(value, "v_original");
|
|
2737
|
+
ASSERT_OK(db_->Get(ReadOptions(), "ukey1", &value));
|
|
2738
|
+
ASSERT_EQ(value, "uval1_orig");
|
|
2739
|
+
ASSERT_OK(db_->Get(ReadOptions(), "ukey2", &value));
|
|
2740
|
+
ASSERT_EQ(value, "uval2_orig");
|
|
2741
|
+
// Set up a 1) data version key file on L0, and 2) a user data file on L6
|
|
2742
|
+
// to test the initial transitioning to use `atomic_replace_range`.
|
|
2743
|
+
ASSERT_EQ("1,0,0,0,0,0,1", FilesPerLevel());
|
|
2744
|
+
|
|
2745
|
+
// Test multiple cycles of replacing by atomically ingest a data file and a
|
|
2746
|
+
// version key file while replace the whole range in the column family.
|
|
2747
|
+
for (int i = 0; i < 10; i++) {
|
|
2748
|
+
std::string version_file_path =
|
|
2749
|
+
sst_files_dir_ + "version" + std::to_string(i);
|
|
2750
|
+
ASSERT_OK(sst_file_writer.Open(version_file_path));
|
|
2751
|
+
ASSERT_OK(sst_file_writer.Put("data_version", "v" + std::to_string(i)));
|
|
2752
|
+
ASSERT_OK(sst_file_writer.Finish());
|
|
2753
|
+
|
|
2754
|
+
std::string file_path = sst_files_dir_ + std::to_string(i);
|
|
2755
|
+
ASSERT_OK(sst_file_writer.Open(file_path));
|
|
2756
|
+
ASSERT_OK(sst_file_writer.Put("ukey1", "uval1" + std::to_string(i)));
|
|
2757
|
+
ASSERT_OK(sst_file_writer.Put("ukey2", "uval2" + std::to_string(i)));
|
|
2758
|
+
ASSERT_OK(sst_file_writer.Finish());
|
|
2759
|
+
|
|
2760
|
+
IngestExternalFileArg arg;
|
|
2761
|
+
arg.column_family = db_->DefaultColumnFamily();
|
|
2762
|
+
arg.external_files = {version_file_path, file_path};
|
|
2763
|
+
arg.atomic_replace_range = {{nullptr, nullptr}};
|
|
2764
|
+
// Test both fail_if_not_bottomost_level: true and false
|
|
2765
|
+
arg.options.fail_if_not_bottommost_level = i % 2 == 0;
|
|
2766
|
+
arg.options.snapshot_consistency = false;
|
|
2767
|
+
// Ingest 1) a new data version file and 2) a new user data file while erase
|
|
2768
|
+
// the whole column family
|
|
2769
|
+
Status s = db_->IngestExternalFiles({arg});
|
|
2770
|
+
ASSERT_OK(s);
|
|
2771
|
+
|
|
2772
|
+
// Check ingestion result and the expected LSM shape:
|
|
2773
|
+
// Two files on L6, 1) a data version file 2) a user data file.
|
|
2774
|
+
ASSERT_OK(db_->Get(ReadOptions(), "ukey1", &value));
|
|
2775
|
+
ASSERT_EQ(value, "uval1" + std::to_string(i));
|
|
2776
|
+
ASSERT_OK(db_->Get(ReadOptions(), "ukey2", &value));
|
|
2777
|
+
ASSERT_EQ(value, "uval2" + std::to_string(i));
|
|
2778
|
+
ASSERT_OK(db_->Get(ReadOptions(), "data_version", &value));
|
|
2779
|
+
ASSERT_EQ(value, "v" + std::to_string(i));
|
|
2780
|
+
ASSERT_EQ("0,0,0,0,0,0,2", FilesPerLevel());
|
|
2653
2781
|
}
|
|
2654
2782
|
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
options.num_levels = 2;
|
|
2658
|
-
DestroyAndReopen(options);
|
|
2659
|
-
ASSERT_OK(db_->Put(WriteOptions(), "a", "dontcare"));
|
|
2660
|
-
ASSERT_OK(db_->Put(WriteOptions(), "c", "dontcare"));
|
|
2661
|
-
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
2783
|
+
Close();
|
|
2784
|
+
}
|
|
2662
2785
|
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2786
|
+
TEST_F(ExternalSSTFileBasicTest, FailIfNotBottommostLevelAndDisallowMemtable) {
|
|
2787
|
+
for (bool disallow_memtable : {false, true}) {
|
|
2788
|
+
Options options = GetDefaultOptions();
|
|
2666
2789
|
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2790
|
+
// First test with universal compaction
|
|
2791
|
+
options.create_if_missing = true;
|
|
2792
|
+
options.compaction_style = CompactionStyle::kCompactionStyleUniversal;
|
|
2793
|
+
DestroyAndReopen(options);
|
|
2671
2794
|
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2795
|
+
// And a CF potentially disallowing memtable write
|
|
2796
|
+
options.disallow_memtable_writes = disallow_memtable;
|
|
2797
|
+
CreateColumnFamilies({"cf0"}, options);
|
|
2798
|
+
ASSERT_EQ(db_->GetOptions(handles_[0]).disallow_memtable_writes,
|
|
2799
|
+
disallow_memtable);
|
|
2800
|
+
|
|
2801
|
+
// Ingest with snapshot consistency
|
|
2802
|
+
std::string file_path = sst_files_dir_ + std::to_string(1);
|
|
2803
|
+
std::string file_path2 = sst_files_dir_ + std::to_string(2);
|
|
2804
|
+
SstFileWriter sfw(EnvOptions(), options);
|
|
2805
|
+
|
|
2806
|
+
ASSERT_OK(sfw.Open(file_path));
|
|
2807
|
+
ASSERT_OK(sfw.Put("b", "0"));
|
|
2808
|
+
ASSERT_OK(sfw.Finish());
|
|
2809
|
+
|
|
2810
|
+
{
|
|
2811
|
+
const Snapshot* snapshot = db_->GetSnapshot();
|
|
2812
|
+
ManagedSnapshot snapshot_guard(db_, snapshot);
|
|
2813
|
+
IngestExternalFileOptions ifo;
|
|
2814
|
+
ifo.fail_if_not_bottommost_level = true;
|
|
2815
|
+
ifo.snapshot_consistency = true;
|
|
2816
|
+
ASSERT_OK(db_->IngestExternalFile(handles_[0], {file_path}, ifo));
|
|
2817
|
+
}
|
|
2818
|
+
ASSERT_EQ(Get(0, "b"), "0");
|
|
2819
|
+
|
|
2820
|
+
// Test level compaction
|
|
2821
|
+
options.compaction_style = CompactionStyle::kCompactionStyleLevel;
|
|
2822
|
+
options.num_levels = 2;
|
|
2823
|
+
CreateColumnFamilies({"cf1"}, options);
|
|
2824
|
+
ASSERT_EQ(db_->GetOptions(handles_[1]).disallow_memtable_writes,
|
|
2825
|
+
disallow_memtable);
|
|
2826
|
+
|
|
2827
|
+
if (!disallow_memtable) {
|
|
2828
|
+
ASSERT_OK(Put(1, "a", "1"));
|
|
2829
|
+
ASSERT_OK(Put(1, "c", "3"));
|
|
2830
|
+
ASSERT_OK(Flush(1));
|
|
2831
|
+
|
|
2832
|
+
ASSERT_OK(Put(1, "b", "2"));
|
|
2833
|
+
ASSERT_OK(Put(1, "d", "4"));
|
|
2834
|
+
ASSERT_OK(Flush(1));
|
|
2835
|
+
} else {
|
|
2836
|
+
// Memtable write disallowed
|
|
2837
|
+
EXPECT_EQ(Put(1, "a", "1").code(), Status::Code::kInvalidArgument);
|
|
2838
|
+
|
|
2839
|
+
// Use ingestion to get to the same state as above
|
|
2840
|
+
ASSERT_OK(sfw.Open(file_path2));
|
|
2841
|
+
ASSERT_OK(sfw.Put("a", "1"));
|
|
2842
|
+
ASSERT_OK(sfw.Put("c", "3"));
|
|
2843
|
+
ASSERT_OK(sfw.Finish());
|
|
2844
|
+
ASSERT_OK(db_->IngestExternalFile(handles_[1], {file_path2}, {}));
|
|
2845
|
+
|
|
2846
|
+
ASSERT_OK(sfw.Open(file_path2));
|
|
2847
|
+
ASSERT_OK(sfw.Put("b", "2"));
|
|
2848
|
+
ASSERT_OK(sfw.Put("d", "4"));
|
|
2849
|
+
ASSERT_OK(sfw.Finish());
|
|
2850
|
+
ASSERT_OK(db_->IngestExternalFile(handles_[1], {file_path2}, {}));
|
|
2851
|
+
}
|
|
2852
|
+
ASSERT_EQ(Get(1, "a"), "1");
|
|
2853
|
+
ASSERT_EQ(Get(1, "b"), "2");
|
|
2854
|
+
ASSERT_EQ(Get(1, "c"), "3");
|
|
2855
|
+
ASSERT_EQ(Get(1, "d"), "4");
|
|
2856
|
+
|
|
2857
|
+
{
|
|
2858
|
+
// Test fail_if_not_bottommost_level, which fails if there's any overlap
|
|
2859
|
+
// anywhere, even with snapshot_consistency=false
|
|
2860
|
+
IngestExternalFileOptions ifo;
|
|
2861
|
+
ASSERT_FALSE(ifo.fail_if_not_bottommost_level);
|
|
2862
|
+
ifo.fail_if_not_bottommost_level = true;
|
|
2863
|
+
ifo.snapshot_consistency = false;
|
|
2864
|
+
// Fails with overlap on earlier level
|
|
2865
|
+
Status s = db_->IngestExternalFile(handles_[1], {file_path}, ifo);
|
|
2866
|
+
ASSERT_EQ(s.code(), Status::Code::kTryAgain);
|
|
2867
|
+
|
|
2868
|
+
CompactRangeOptions cro;
|
|
2869
|
+
cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
|
|
2870
|
+
ASSERT_OK(db_->CompactRange(cro, handles_[1], nullptr, nullptr));
|
|
2871
|
+
|
|
2872
|
+
// Fails with overlap on last level
|
|
2873
|
+
s = db_->IngestExternalFile(handles_[1], {file_path}, ifo);
|
|
2874
|
+
ASSERT_EQ(s.code(), Status::Code::kTryAgain);
|
|
2875
|
+
|
|
2876
|
+
// No change to data
|
|
2877
|
+
ASSERT_EQ(Get(1, "a"), "1");
|
|
2878
|
+
ASSERT_EQ(Get(1, "b"), "2");
|
|
2879
|
+
ASSERT_EQ(Get(1, "c"), "3");
|
|
2880
|
+
ASSERT_EQ(Get(1, "d"), "4");
|
|
2881
|
+
}
|
|
2882
|
+
|
|
2883
|
+
if (!disallow_memtable) {
|
|
2884
|
+
// Test allow_blocking_flush=false (fail because of memtable overlap)
|
|
2885
|
+
IngestExternalFileOptions ifo;
|
|
2886
|
+
ASSERT_TRUE(ifo.allow_blocking_flush);
|
|
2887
|
+
ifo.allow_blocking_flush = false;
|
|
2888
|
+
ASSERT_OK(Put(1, "b", "42"));
|
|
2889
|
+
Status s = db_->IngestExternalFile(handles_[1], {file_path}, ifo);
|
|
2890
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2891
|
+
|
|
2892
|
+
ASSERT_EQ(Get(1, "a"), "1");
|
|
2893
|
+
ASSERT_EQ(Get(1, "b"), "42");
|
|
2894
|
+
ASSERT_EQ(Get(1, "c"), "3");
|
|
2895
|
+
ASSERT_EQ(Get(1, "d"), "4");
|
|
2896
|
+
|
|
2897
|
+
// Revert state
|
|
2898
|
+
ASSERT_OK(Put(1, "b", "2"));
|
|
2899
|
+
ASSERT_OK(Flush(1));
|
|
2900
|
+
}
|
|
2901
|
+
|
|
2902
|
+
{
|
|
2903
|
+
// Test atomic_replace_range
|
|
2904
|
+
IngestExternalFileArg arg;
|
|
2905
|
+
arg.column_family = handles_[1];
|
|
2906
|
+
arg.external_files = {file_path};
|
|
2907
|
+
arg.atomic_replace_range = {{"a", "zzz"}};
|
|
2908
|
+
|
|
2909
|
+
// start with some failure cases
|
|
2910
|
+
// TODO: support snapshot consistency with tombstone file
|
|
2911
|
+
ASSERT_TRUE(arg.options.snapshot_consistency);
|
|
2912
|
+
Status s = db_->IngestExternalFiles({arg});
|
|
2913
|
+
ASSERT_EQ(s.code(), Status::Code::kNotSupported);
|
|
2914
|
+
|
|
2915
|
+
ASSERT_EQ(Get(1, "a"), "1");
|
|
2916
|
+
ASSERT_EQ(Get(1, "b"), "2");
|
|
2917
|
+
ASSERT_EQ(Get(1, "c"), "3");
|
|
2918
|
+
ASSERT_EQ(Get(1, "d"), "4");
|
|
2919
|
+
|
|
2920
|
+
arg.options.snapshot_consistency = false;
|
|
2921
|
+
// Can usually be used with atomic_replace_range and
|
|
2922
|
+
// snapshot_consistency=false, except it requires no input overlap
|
|
2923
|
+
arg.options.fail_if_not_bottommost_level = true;
|
|
2924
|
+
|
|
2925
|
+
// one-sided ranges not yet supported
|
|
2926
|
+
arg.atomic_replace_range = {{{}, "zzz"}};
|
|
2927
|
+
s = db_->IngestExternalFiles({arg});
|
|
2928
|
+
ASSERT_EQ(s.code(), Status::Code::kNotSupported);
|
|
2929
|
+
|
|
2930
|
+
arg.atomic_replace_range = {{"a", {}}};
|
|
2931
|
+
s = db_->IngestExternalFiles({arg});
|
|
2932
|
+
ASSERT_EQ(s.code(), Status::Code::kNotSupported);
|
|
2933
|
+
|
|
2934
|
+
// rejected because doesn't cover ingested file
|
|
2935
|
+
arg.atomic_replace_range = {{"x", "z"}};
|
|
2936
|
+
s = db_->IngestExternalFiles({arg});
|
|
2937
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2938
|
+
|
|
2939
|
+
// rejected because of partial file overlap
|
|
2940
|
+
arg.atomic_replace_range = {{"a", "c"}};
|
|
2941
|
+
s = db_->IngestExternalFiles({arg});
|
|
2942
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2943
|
+
|
|
2944
|
+
if (!disallow_memtable) {
|
|
2945
|
+
// memtable overlap with replace range
|
|
2946
|
+
ASSERT_OK(Put(1, "e", "5"));
|
|
2947
|
+
arg.options.allow_blocking_flush = false;
|
|
2948
|
+
|
|
2949
|
+
// rejected because of memtable overlap
|
|
2950
|
+
arg.atomic_replace_range = {{"a", "z"}};
|
|
2951
|
+
s = db_->IngestExternalFiles({arg});
|
|
2952
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2953
|
+
|
|
2954
|
+
// rejected because of memtable overlap
|
|
2955
|
+
arg.atomic_replace_range = {{nullptr, nullptr}};
|
|
2956
|
+
s = db_->IngestExternalFiles({arg});
|
|
2957
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2958
|
+
|
|
2959
|
+
// FIXME: upper bound should be exclusive (DeleteRange semantics).
|
|
2960
|
+
// currently rejected because of documented bug
|
|
2961
|
+
arg.atomic_replace_range = {{"a", "e"}};
|
|
2962
|
+
s = db_->IngestExternalFiles({arg});
|
|
2963
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2964
|
+
|
|
2965
|
+
// work-around ensuring no memtable overlap
|
|
2966
|
+
arg.atomic_replace_range = {{"a", "d2"}};
|
|
2967
|
+
ASSERT_OK(db_->IngestExternalFiles({arg}));
|
|
2968
|
+
|
|
2969
|
+
ASSERT_EQ(Get(1, "e"), "5");
|
|
2970
|
+
} else {
|
|
2971
|
+
// rejected because of partial file overlap
|
|
2972
|
+
arg.atomic_replace_range = {{"b", "z"}};
|
|
2973
|
+
s = db_->IngestExternalFiles({arg});
|
|
2974
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
2975
|
+
|
|
2976
|
+
// no memtable complications
|
|
2977
|
+
arg.atomic_replace_range = {{"a", "z"}};
|
|
2978
|
+
ASSERT_OK(db_->IngestExternalFiles({arg}));
|
|
2979
|
+
|
|
2980
|
+
ASSERT_EQ(Get(1, "e"), "NOT_FOUND");
|
|
2981
|
+
}
|
|
2982
|
+
ASSERT_EQ(Get(1, "a"), "NOT_FOUND");
|
|
2983
|
+
ASSERT_EQ(Get(1, "b"), "0");
|
|
2984
|
+
ASSERT_EQ(Get(1, "c"), "NOT_FOUND");
|
|
2985
|
+
ASSERT_EQ(Get(1, "d"), "NOT_FOUND");
|
|
2986
|
+
|
|
2987
|
+
// The single ingested file replaced everything (except perhaps memtable)
|
|
2988
|
+
std::vector<LiveFileMetaData> live_files;
|
|
2989
|
+
db_->GetLiveFilesMetaData(&live_files);
|
|
2990
|
+
// One file in each CF
|
|
2991
|
+
ASSERT_EQ(live_files.size(), 2);
|
|
2992
|
+
|
|
2993
|
+
ASSERT_OK(sfw.Open(file_path));
|
|
2994
|
+
ASSERT_OK(sfw.Put("f", "6"));
|
|
2995
|
+
ASSERT_OK(sfw.Finish());
|
|
2996
|
+
|
|
2997
|
+
// Another file
|
|
2998
|
+
ASSERT_OK(sfw.Open(file_path2));
|
|
2999
|
+
ASSERT_OK(sfw.Put("f", "7"));
|
|
3000
|
+
ASSERT_OK(sfw.Put("g", "8"));
|
|
3001
|
+
ASSERT_OK(sfw.Finish());
|
|
3002
|
+
|
|
3003
|
+
if (!disallow_memtable) {
|
|
3004
|
+
// rejected because of memtable overlap with range
|
|
3005
|
+
arg.atomic_replace_range = {{"e", "z"}};
|
|
3006
|
+
s = db_->IngestExternalFiles({arg});
|
|
3007
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
3008
|
+
|
|
3009
|
+
// allow blocking flush of "e" (which is then replaced), and the file
|
|
3010
|
+
// with just "b" is not replaced
|
|
3011
|
+
arg.options.allow_blocking_flush = true;
|
|
3012
|
+
ASSERT_OK(db_->IngestExternalFiles({arg}));
|
|
3013
|
+
|
|
3014
|
+
ASSERT_EQ(Get(1, "b"), "0");
|
|
3015
|
+
ASSERT_EQ(Get(1, "e"), "NOT_FOUND");
|
|
3016
|
+
ASSERT_EQ(Get(1, "f"), "6");
|
|
3017
|
+
ASSERT_EQ(Get(1, "g"), "NOT_FOUND");
|
|
3018
|
+
|
|
3019
|
+
// memtable overlap with replace range
|
|
3020
|
+
ASSERT_OK(Put(1, "e", "5"));
|
|
3021
|
+
arg.options.allow_blocking_flush = false;
|
|
3022
|
+
arg.external_files = {file_path2};
|
|
3023
|
+
|
|
3024
|
+
// rejected because of memtable overlap
|
|
3025
|
+
arg.atomic_replace_range = {{nullptr, nullptr}};
|
|
3026
|
+
s = db_->IngestExternalFiles({arg});
|
|
3027
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
3028
|
+
|
|
3029
|
+
// Replace everything, including with memtable flush
|
|
3030
|
+
arg.options.allow_blocking_flush = true;
|
|
3031
|
+
ASSERT_OK(db_->IngestExternalFiles({arg}));
|
|
3032
|
+
|
|
3033
|
+
ASSERT_EQ(Get(1, "b"), "NOT_FOUND");
|
|
3034
|
+
ASSERT_EQ(Get(1, "e"), "NOT_FOUND");
|
|
3035
|
+
ASSERT_EQ(Get(1, "f"), "7");
|
|
3036
|
+
ASSERT_EQ(Get(1, "g"), "8");
|
|
3037
|
+
} else {
|
|
3038
|
+
arg.external_files = {file_path2, file_path};
|
|
3039
|
+
|
|
3040
|
+
// rejected because of overlap in files to ingest with fail_if_ = true
|
|
3041
|
+
arg.atomic_replace_range = {{"e", "z"}};
|
|
3042
|
+
s = db_->IngestExternalFiles({arg});
|
|
3043
|
+
ASSERT_EQ(s.code(), Status::Code::kTryAgain);
|
|
3044
|
+
|
|
3045
|
+
arg.options.fail_if_not_bottommost_level = false;
|
|
3046
|
+
|
|
3047
|
+
// rejected because range doesn't cover ingested files
|
|
3048
|
+
// FIXME: upper bound should be exclusive "g" instead
|
|
3049
|
+
arg.atomic_replace_range = {{"e", "f2"}};
|
|
3050
|
+
s = db_->IngestExternalFiles({arg});
|
|
3051
|
+
ASSERT_EQ(s.code(), Status::Code::kInvalidArgument);
|
|
3052
|
+
|
|
3053
|
+
// Loaded into different levels, and the file with just "b" is not
|
|
3054
|
+
// replaced
|
|
3055
|
+
arg.atomic_replace_range = {{"e", "z"}};
|
|
3056
|
+
ASSERT_OK(db_->IngestExternalFiles({arg}));
|
|
3057
|
+
|
|
3058
|
+
ASSERT_EQ(Get(1, "b"), "0");
|
|
3059
|
+
ASSERT_EQ(Get(1, "f"), "6"); // earlier file listed later to ingest
|
|
3060
|
+
ASSERT_EQ(Get(1, "g"), "8");
|
|
3061
|
+
}
|
|
3062
|
+
}
|
|
2676
3063
|
}
|
|
2677
3064
|
}
|
|
2678
3065
|
|
|
@@ -2878,7 +3265,6 @@ INSTANTIATE_TEST_CASE_P(ExternalSSTFileBasicTest, ExternalSSTFileBasicTest,
|
|
|
2878
3265
|
std::make_tuple(false, true),
|
|
2879
3266
|
std::make_tuple(false, false)));
|
|
2880
3267
|
|
|
2881
|
-
|
|
2882
3268
|
} // namespace ROCKSDB_NAMESPACE
|
|
2883
3269
|
|
|
2884
3270
|
int main(int argc, char** argv) {
|