@nxtedition/rocksdb 8.2.8 → 9.0.0
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/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
- package/deps/rocksdb/rocksdb/Makefile +22 -19
- package/deps/rocksdb/rocksdb/TARGETS +8 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
- package/deps/rocksdb/rocksdb/db/c.cc +169 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
- package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
- package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
- package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
- package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
- package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
- package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
- package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
- package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
- package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
- package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
- package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
- package/deps/rocksdb/rocksdb/env/env.cc +1 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
- package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
- package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
- package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/src.mk +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
- package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/format.cc +175 -33
- package/deps/rocksdb/rocksdb/table/format.h +63 -10
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
- package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
- package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +110 -32
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
- package/deps/rocksdb/rocksdb/util/hash.h +7 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
- package/deps/rocksdb/rocksdb/util/math.h +58 -6
- package/deps/rocksdb/rocksdb/util/math128.h +29 -7
- package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +2 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -29,79 +29,132 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
29
29
|
Status ImportColumnFamilyJob::Prepare(uint64_t next_file_number,
|
|
30
30
|
SuperVersion* sv) {
|
|
31
31
|
Status status;
|
|
32
|
+
std::vector<ColumnFamilyIngestFileInfo> cf_ingest_infos;
|
|
33
|
+
for (const auto& metadata_per_cf : metadatas_) {
|
|
34
|
+
// Read the information of files we are importing
|
|
35
|
+
ColumnFamilyIngestFileInfo cf_file_info;
|
|
36
|
+
InternalKey smallest, largest;
|
|
37
|
+
int num_files = 0;
|
|
38
|
+
std::vector<IngestedFileInfo> files_to_import_per_cf;
|
|
39
|
+
for (size_t i = 0; i < metadata_per_cf.size(); i++) {
|
|
40
|
+
auto file_metadata = *metadata_per_cf[i];
|
|
41
|
+
const auto file_path = file_metadata.db_path + "/" + file_metadata.name;
|
|
42
|
+
IngestedFileInfo file_to_import;
|
|
43
|
+
status = GetIngestedFileInfo(file_path, next_file_number++, sv,
|
|
44
|
+
file_metadata, &file_to_import);
|
|
45
|
+
if (!status.ok()) {
|
|
46
|
+
return status;
|
|
47
|
+
}
|
|
32
48
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
status = GetIngestedFileInfo(file_path, next_file_number++, sv,
|
|
38
|
-
file_metadata, &file_to_import);
|
|
39
|
-
if (!status.ok()) {
|
|
40
|
-
return status;
|
|
41
|
-
}
|
|
42
|
-
files_to_import_.push_back(file_to_import);
|
|
43
|
-
}
|
|
49
|
+
if (file_to_import.num_entries == 0) {
|
|
50
|
+
status = Status::InvalidArgument("File contain no entries");
|
|
51
|
+
return status;
|
|
52
|
+
}
|
|
44
53
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
if (!file_to_import.smallest_internal_key.Valid() ||
|
|
55
|
+
!file_to_import.largest_internal_key.Valid()) {
|
|
56
|
+
status = Status::Corruption("File has corrupted keys");
|
|
57
|
+
return status;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
files_to_import_per_cf.push_back(file_to_import);
|
|
61
|
+
num_files++;
|
|
62
|
+
|
|
63
|
+
// Calculate the smallest and largest keys of all files in this CF
|
|
64
|
+
if (i == 0) {
|
|
65
|
+
smallest = file_to_import.smallest_internal_key;
|
|
66
|
+
largest = file_to_import.largest_internal_key;
|
|
67
|
+
} else {
|
|
68
|
+
if (cfd_->internal_comparator().Compare(
|
|
69
|
+
smallest, file_to_import.smallest_internal_key) < 0) {
|
|
70
|
+
smallest = file_to_import.smallest_internal_key;
|
|
71
|
+
}
|
|
72
|
+
if (cfd_->internal_comparator().Compare(
|
|
73
|
+
largest, file_to_import.largest_internal_key) > 0) {
|
|
74
|
+
largest = file_to_import.largest_internal_key;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
50
78
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
status = Status::InvalidArgument("File contain no entries");
|
|
79
|
+
if (num_files == 0) {
|
|
80
|
+
status = Status::InvalidArgument("The list of files is empty");
|
|
54
81
|
return status;
|
|
55
82
|
}
|
|
83
|
+
files_to_import_.push_back(files_to_import_per_cf);
|
|
84
|
+
cf_file_info.smallest_internal_key = smallest;
|
|
85
|
+
cf_file_info.largest_internal_key = largest;
|
|
86
|
+
cf_ingest_infos.push_back(cf_file_info);
|
|
87
|
+
}
|
|
56
88
|
|
|
57
|
-
|
|
58
|
-
|
|
89
|
+
std::sort(cf_ingest_infos.begin(), cf_ingest_infos.end(),
|
|
90
|
+
[this](const ColumnFamilyIngestFileInfo& info1,
|
|
91
|
+
const ColumnFamilyIngestFileInfo& info2) {
|
|
92
|
+
return cfd_->user_comparator()->Compare(
|
|
93
|
+
info1.smallest_internal_key.user_key(),
|
|
94
|
+
info2.smallest_internal_key.user_key()) < 0;
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
for (size_t i = 0; i + 1 < cf_ingest_infos.size(); i++) {
|
|
98
|
+
if (cfd_->user_comparator()->Compare(
|
|
99
|
+
cf_ingest_infos[i].largest_internal_key.user_key(),
|
|
100
|
+
cf_ingest_infos[i + 1].smallest_internal_key.user_key()) >= 0) {
|
|
101
|
+
status = Status::InvalidArgument("CFs have overlapping ranges");
|
|
59
102
|
return status;
|
|
60
103
|
}
|
|
61
104
|
}
|
|
62
105
|
|
|
63
106
|
// Copy/Move external files into DB
|
|
64
107
|
auto hardlink_files = import_options_.move_files;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
108
|
+
|
|
109
|
+
for (auto& files_to_import_per_cf : files_to_import_) {
|
|
110
|
+
for (auto& f : files_to_import_per_cf) {
|
|
111
|
+
const auto path_outside_db = f.external_file_path;
|
|
112
|
+
const auto path_inside_db = TableFileName(
|
|
113
|
+
cfd_->ioptions()->cf_paths, f.fd.GetNumber(), f.fd.GetPathId());
|
|
114
|
+
|
|
115
|
+
if (hardlink_files) {
|
|
116
|
+
status = fs_->LinkFile(path_outside_db, path_inside_db, IOOptions(),
|
|
117
|
+
nullptr);
|
|
118
|
+
if (status.IsNotSupported()) {
|
|
119
|
+
// Original file is on a different FS, use copy instead of hard
|
|
120
|
+
// linking
|
|
121
|
+
hardlink_files = false;
|
|
122
|
+
ROCKS_LOG_INFO(db_options_.info_log,
|
|
123
|
+
"Try to link file %s but it's not supported : %s",
|
|
124
|
+
f.internal_file_path.c_str(),
|
|
125
|
+
status.ToString().c_str());
|
|
126
|
+
}
|
|
79
127
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
128
|
+
if (!hardlink_files) {
|
|
129
|
+
status =
|
|
130
|
+
CopyFile(fs_.get(), path_outside_db, path_inside_db, 0,
|
|
131
|
+
db_options_.use_fsync, io_tracer_, Temperature::kUnknown);
|
|
132
|
+
}
|
|
133
|
+
if (!status.ok()) {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
f.copy_file = !hardlink_files;
|
|
137
|
+
f.internal_file_path = path_inside_db;
|
|
85
138
|
}
|
|
86
139
|
if (!status.ok()) {
|
|
87
140
|
break;
|
|
88
141
|
}
|
|
89
|
-
f.copy_file = !hardlink_files;
|
|
90
|
-
f.internal_file_path = path_inside_db;
|
|
91
142
|
}
|
|
92
143
|
|
|
93
144
|
if (!status.ok()) {
|
|
94
145
|
// We failed, remove all files that we copied into the db
|
|
95
|
-
for (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
146
|
+
for (auto& files_to_import_per_cf : files_to_import_) {
|
|
147
|
+
for (auto& f : files_to_import_per_cf) {
|
|
148
|
+
if (f.internal_file_path.empty()) {
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
const auto s =
|
|
152
|
+
fs_->DeleteFile(f.internal_file_path, IOOptions(), nullptr);
|
|
153
|
+
if (!s.ok()) {
|
|
154
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
155
|
+
"AddFile() clean up for file %s failed : %s",
|
|
156
|
+
f.internal_file_path.c_str(), s.ToString().c_str());
|
|
157
|
+
}
|
|
105
158
|
}
|
|
106
159
|
}
|
|
107
160
|
}
|
|
@@ -132,32 +185,40 @@ Status ImportColumnFamilyJob::Run() {
|
|
|
132
185
|
&cfd_->internal_comparator(), cfd_->user_comparator(),
|
|
133
186
|
cfd_->NumberLevels(), cfd_->ioptions()->compaction_style,
|
|
134
187
|
nullptr /* src_vstorage */, cfd_->ioptions()->force_consistency_checks,
|
|
135
|
-
EpochNumberRequirement::kMightMissing)
|
|
188
|
+
EpochNumberRequirement::kMightMissing, cfd_->ioptions()->clock,
|
|
189
|
+
cfd_->GetLatestMutableCFOptions()->bottommost_file_compaction_delay);
|
|
136
190
|
Status s;
|
|
191
|
+
|
|
137
192
|
for (size_t i = 0; s.ok() && i < files_to_import_.size(); ++i) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
193
|
+
for (size_t j = 0; s.ok() && j < files_to_import_[i].size(); ++j) {
|
|
194
|
+
const auto& f = files_to_import_[i][j];
|
|
195
|
+
const auto& file_metadata = *metadatas_[i][j];
|
|
196
|
+
|
|
197
|
+
uint64_t tail_size = 0;
|
|
198
|
+
bool contain_no_data_blocks = f.table_properties.num_entries > 0 &&
|
|
199
|
+
(f.table_properties.num_entries ==
|
|
200
|
+
f.table_properties.num_range_deletions);
|
|
201
|
+
if (f.table_properties.tail_start_offset > 0 || contain_no_data_blocks) {
|
|
202
|
+
uint64_t file_size = f.fd.GetFileSize();
|
|
203
|
+
assert(f.table_properties.tail_start_offset <= file_size);
|
|
204
|
+
tail_size = file_size - f.table_properties.tail_start_offset;
|
|
205
|
+
}
|
|
150
206
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
207
|
+
VersionEdit dummy_version_edit;
|
|
208
|
+
dummy_version_edit.AddFile(
|
|
209
|
+
file_metadata.level, f.fd.GetNumber(), f.fd.GetPathId(),
|
|
210
|
+
f.fd.GetFileSize(), f.smallest_internal_key, f.largest_internal_key,
|
|
211
|
+
file_metadata.smallest_seqno, file_metadata.largest_seqno, false,
|
|
212
|
+
file_metadata.temperature, kInvalidBlobFileNumber,
|
|
213
|
+
oldest_ancester_time, current_time, file_metadata.epoch_number,
|
|
214
|
+
kUnknownFileChecksum, kUnknownFileChecksumFuncName, f.unique_id, 0,
|
|
215
|
+
tail_size,
|
|
216
|
+
static_cast<bool>(
|
|
217
|
+
f.table_properties.user_defined_timestamps_persisted));
|
|
218
|
+
s = dummy_version_builder.Apply(&dummy_version_edit);
|
|
219
|
+
}
|
|
160
220
|
}
|
|
221
|
+
|
|
161
222
|
if (s.ok()) {
|
|
162
223
|
s = dummy_version_builder.SaveTo(&dummy_vstorage);
|
|
163
224
|
}
|
|
@@ -198,26 +259,30 @@ Status ImportColumnFamilyJob::Run() {
|
|
|
198
259
|
void ImportColumnFamilyJob::Cleanup(const Status& status) {
|
|
199
260
|
if (!status.ok()) {
|
|
200
261
|
// We failed to add files to the database remove all the files we copied.
|
|
201
|
-
for (
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
262
|
+
for (auto& files_to_import_per_cf : files_to_import_) {
|
|
263
|
+
for (auto& f : files_to_import_per_cf) {
|
|
264
|
+
const auto s =
|
|
265
|
+
fs_->DeleteFile(f.internal_file_path, IOOptions(), nullptr);
|
|
266
|
+
if (!s.ok()) {
|
|
267
|
+
ROCKS_LOG_WARN(db_options_.info_log,
|
|
268
|
+
"AddFile() clean up for file %s failed : %s",
|
|
269
|
+
f.internal_file_path.c_str(), s.ToString().c_str());
|
|
270
|
+
}
|
|
208
271
|
}
|
|
209
272
|
}
|
|
210
273
|
} else if (status.ok() && import_options_.move_files) {
|
|
211
274
|
// The files were moved and added successfully, remove original file links
|
|
212
|
-
for (
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
275
|
+
for (auto& files_to_import_per_cf : files_to_import_) {
|
|
276
|
+
for (auto& f : files_to_import_per_cf) {
|
|
277
|
+
const auto s =
|
|
278
|
+
fs_->DeleteFile(f.external_file_path, IOOptions(), nullptr);
|
|
279
|
+
if (!s.ok()) {
|
|
280
|
+
ROCKS_LOG_WARN(
|
|
281
|
+
db_options_.info_log,
|
|
282
|
+
"%s was added to DB successfully but failed to remove original "
|
|
283
|
+
"file link : %s",
|
|
284
|
+
f.external_file_path.c_str(), s.ToString().c_str());
|
|
285
|
+
}
|
|
221
286
|
}
|
|
222
287
|
}
|
|
223
288
|
}
|
|
@@ -256,6 +321,9 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
|
|
|
256
321
|
sst_file_reader.reset(new RandomAccessFileReader(
|
|
257
322
|
std::move(sst_file), external_file, nullptr /*Env*/, io_tracer_));
|
|
258
323
|
|
|
324
|
+
// TODO(yuzhangyu): User-defined timestamps doesn't support importing column
|
|
325
|
+
// family. Pass in the correct `user_defined_timestamps_persisted` flag for
|
|
326
|
+
// creating `TableReaderOptions` when the support is there.
|
|
259
327
|
status = cfd_->ioptions()->table_factory->NewTableReader(
|
|
260
328
|
TableReaderOptions(
|
|
261
329
|
*cfd_->ioptions(), sv->mutable_cf_options.prefix_extractor,
|
|
@@ -361,4 +429,4 @@ Status ImportColumnFamilyJob::GetIngestedFileInfo(
|
|
|
361
429
|
|
|
362
430
|
return status;
|
|
363
431
|
}
|
|
364
|
-
} // namespace ROCKSDB_NAMESPACE
|
|
432
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -25,13 +25,22 @@ class SystemClock;
|
|
|
25
25
|
// Imports a set of sst files as is into a new column family. Logic is similar
|
|
26
26
|
// to ExternalSstFileIngestionJob.
|
|
27
27
|
class ImportColumnFamilyJob {
|
|
28
|
+
// All file information of an imported CF, mainly used to
|
|
29
|
+
// calculate whether there is overlap between CFs
|
|
30
|
+
struct ColumnFamilyIngestFileInfo {
|
|
31
|
+
// Smallest internal key in cf
|
|
32
|
+
InternalKey smallest_internal_key;
|
|
33
|
+
// Largest internal key in cf
|
|
34
|
+
InternalKey largest_internal_key;
|
|
35
|
+
};
|
|
36
|
+
|
|
28
37
|
public:
|
|
29
|
-
ImportColumnFamilyJob(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
ImportColumnFamilyJob(
|
|
39
|
+
VersionSet* versions, ColumnFamilyData* cfd,
|
|
40
|
+
const ImmutableDBOptions& db_options, const EnvOptions& env_options,
|
|
41
|
+
const ImportColumnFamilyOptions& import_options,
|
|
42
|
+
const std::vector<std::vector<LiveFileMetaData*>>& metadatas,
|
|
43
|
+
const std::shared_ptr<IOTracer>& io_tracer)
|
|
35
44
|
: clock_(db_options.clock),
|
|
36
45
|
versions_(versions),
|
|
37
46
|
cfd_(cfd),
|
|
@@ -39,7 +48,7 @@ class ImportColumnFamilyJob {
|
|
|
39
48
|
fs_(db_options_.fs, io_tracer),
|
|
40
49
|
env_options_(env_options),
|
|
41
50
|
import_options_(import_options),
|
|
42
|
-
|
|
51
|
+
metadatas_(metadatas),
|
|
43
52
|
io_tracer_(io_tracer) {}
|
|
44
53
|
|
|
45
54
|
// Prepare the job by copying external files into the DB.
|
|
@@ -54,7 +63,7 @@ class ImportColumnFamilyJob {
|
|
|
54
63
|
|
|
55
64
|
VersionEdit* edit() { return &edit_; }
|
|
56
65
|
|
|
57
|
-
const
|
|
66
|
+
const std::vector<std::vector<IngestedFileInfo>>& files_to_import() const {
|
|
58
67
|
return files_to_import_;
|
|
59
68
|
}
|
|
60
69
|
|
|
@@ -72,10 +81,10 @@ class ImportColumnFamilyJob {
|
|
|
72
81
|
const ImmutableDBOptions& db_options_;
|
|
73
82
|
const FileSystemPtr fs_;
|
|
74
83
|
const EnvOptions& env_options_;
|
|
75
|
-
|
|
84
|
+
std::vector<std::vector<IngestedFileInfo>> files_to_import_;
|
|
76
85
|
VersionEdit edit_;
|
|
77
86
|
const ImportColumnFamilyOptions& import_options_;
|
|
78
|
-
std::vector<LiveFileMetaData
|
|
87
|
+
const std::vector<std::vector<LiveFileMetaData*>> metadatas_;
|
|
79
88
|
const std::shared_ptr<IOTracer> io_tracer_;
|
|
80
89
|
};
|
|
81
90
|
|
|
@@ -22,10 +22,13 @@ class ImportColumnFamilyTest : public DBTestBase {
|
|
|
22
22
|
: DBTestBase("import_column_family_test", /*env_do_fsync=*/true) {
|
|
23
23
|
sst_files_dir_ = dbname_ + "/sst_files/";
|
|
24
24
|
export_files_dir_ = test::PerThreadDBPath(env_, "export");
|
|
25
|
+
export_files_dir2_ = test::PerThreadDBPath(env_, "export2");
|
|
26
|
+
|
|
25
27
|
DestroyAndRecreateExternalSSTFilesDir();
|
|
26
28
|
import_cfh_ = nullptr;
|
|
27
29
|
import_cfh2_ = nullptr;
|
|
28
30
|
metadata_ptr_ = nullptr;
|
|
31
|
+
metadata_ptr2_ = nullptr;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
~ImportColumnFamilyTest() {
|
|
@@ -43,14 +46,21 @@ class ImportColumnFamilyTest : public DBTestBase {
|
|
|
43
46
|
delete metadata_ptr_;
|
|
44
47
|
metadata_ptr_ = nullptr;
|
|
45
48
|
}
|
|
49
|
+
|
|
50
|
+
if (metadata_ptr2_) {
|
|
51
|
+
delete metadata_ptr2_;
|
|
52
|
+
metadata_ptr2_ = nullptr;
|
|
53
|
+
}
|
|
46
54
|
EXPECT_OK(DestroyDir(env_, sst_files_dir_));
|
|
47
55
|
EXPECT_OK(DestroyDir(env_, export_files_dir_));
|
|
56
|
+
EXPECT_OK(DestroyDir(env_, export_files_dir2_));
|
|
48
57
|
}
|
|
49
58
|
|
|
50
59
|
void DestroyAndRecreateExternalSSTFilesDir() {
|
|
51
60
|
EXPECT_OK(DestroyDir(env_, sst_files_dir_));
|
|
52
61
|
EXPECT_OK(env_->CreateDir(sst_files_dir_));
|
|
53
62
|
EXPECT_OK(DestroyDir(env_, export_files_dir_));
|
|
63
|
+
EXPECT_OK(DestroyDir(env_, export_files_dir2_));
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
LiveFileMetaData LiveFileMetaDataInit(std::string name, std::string path,
|
|
@@ -69,9 +79,11 @@ class ImportColumnFamilyTest : public DBTestBase {
|
|
|
69
79
|
protected:
|
|
70
80
|
std::string sst_files_dir_;
|
|
71
81
|
std::string export_files_dir_;
|
|
82
|
+
std::string export_files_dir2_;
|
|
72
83
|
ColumnFamilyHandle* import_cfh_;
|
|
73
84
|
ColumnFamilyHandle* import_cfh2_;
|
|
74
85
|
ExportImportFilesMetaData* metadata_ptr_;
|
|
86
|
+
ExportImportFilesMetaData* metadata_ptr2_;
|
|
75
87
|
};
|
|
76
88
|
|
|
77
89
|
TEST_F(ImportColumnFamilyTest, ImportSSTFileWriterFiles) {
|
|
@@ -738,6 +750,137 @@ TEST_F(ImportColumnFamilyTest, ImportColumnFamilyNegativeTest) {
|
|
|
738
750
|
}
|
|
739
751
|
}
|
|
740
752
|
|
|
753
|
+
TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyTest) {
|
|
754
|
+
Options options = CurrentOptions();
|
|
755
|
+
CreateAndReopenWithCF({"koko"}, options);
|
|
756
|
+
|
|
757
|
+
for (int i = 0; i < 100; ++i) {
|
|
758
|
+
ASSERT_OK(Put(1, Key(i), Key(i) + "_val"));
|
|
759
|
+
}
|
|
760
|
+
ASSERT_OK(Flush(1));
|
|
761
|
+
|
|
762
|
+
ASSERT_OK(
|
|
763
|
+
db_->CompactRange(CompactRangeOptions(), handles_[1], nullptr, nullptr));
|
|
764
|
+
|
|
765
|
+
// Overwrite the value in the same set of keys.
|
|
766
|
+
for (int i = 0; i < 100; ++i) {
|
|
767
|
+
ASSERT_OK(Put(1, Key(i), Key(i) + "_overwrite"));
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
// Flush again to create another L0 file. It should have higher sequencer.
|
|
771
|
+
ASSERT_OK(Flush(1));
|
|
772
|
+
|
|
773
|
+
Checkpoint* checkpoint1;
|
|
774
|
+
Checkpoint* checkpoint2;
|
|
775
|
+
ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
|
|
776
|
+
ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
|
|
777
|
+
&metadata_ptr_));
|
|
778
|
+
|
|
779
|
+
// Create a new db and import the files.
|
|
780
|
+
DB* db_copy;
|
|
781
|
+
ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
|
|
782
|
+
ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
|
|
783
|
+
ColumnFamilyHandle* copy_cfh = nullptr;
|
|
784
|
+
ASSERT_OK(db_copy->CreateColumnFamily(options, "koko", ©_cfh));
|
|
785
|
+
WriteOptions wo;
|
|
786
|
+
for (int i = 100; i < 200; ++i) {
|
|
787
|
+
ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_val"));
|
|
788
|
+
}
|
|
789
|
+
ASSERT_OK(db_copy->Flush(FlushOptions()));
|
|
790
|
+
for (int i = 100; i < 200; ++i) {
|
|
791
|
+
ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_overwrite"));
|
|
792
|
+
}
|
|
793
|
+
ASSERT_OK(db_copy->Flush(FlushOptions()));
|
|
794
|
+
for (int i = 100; i < 200; ++i) {
|
|
795
|
+
ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_overwrite2"));
|
|
796
|
+
}
|
|
797
|
+
ASSERT_OK(db_copy->Flush(FlushOptions()));
|
|
798
|
+
|
|
799
|
+
// Flush again to create another L0 file. It should have higher sequencer.
|
|
800
|
+
ASSERT_OK(Checkpoint::Create(db_copy, &checkpoint2));
|
|
801
|
+
ASSERT_OK(checkpoint2->ExportColumnFamily(copy_cfh, export_files_dir2_,
|
|
802
|
+
&metadata_ptr2_));
|
|
803
|
+
|
|
804
|
+
ASSERT_NE(metadata_ptr_, nullptr);
|
|
805
|
+
ASSERT_NE(metadata_ptr2_, nullptr);
|
|
806
|
+
delete checkpoint1;
|
|
807
|
+
delete checkpoint2;
|
|
808
|
+
ImportColumnFamilyOptions import_options;
|
|
809
|
+
import_options.move_files = false;
|
|
810
|
+
|
|
811
|
+
std::vector<const ExportImportFilesMetaData*> metadatas = {metadata_ptr_,
|
|
812
|
+
metadata_ptr2_};
|
|
813
|
+
ASSERT_OK(db_->CreateColumnFamilyWithImport(options, "toto", import_options,
|
|
814
|
+
metadatas, &import_cfh_));
|
|
815
|
+
|
|
816
|
+
std::string value1, value2;
|
|
817
|
+
for (int i = 0; i < 100; ++i) {
|
|
818
|
+
ASSERT_OK(db_->Get(ReadOptions(), import_cfh_, Key(i), &value1));
|
|
819
|
+
ASSERT_EQ(Get(1, Key(i)), value1);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
for (int i = 100; i < 200; ++i) {
|
|
823
|
+
ASSERT_OK(db_->Get(ReadOptions(), import_cfh_, Key(i), &value1));
|
|
824
|
+
ASSERT_OK(db_copy->Get(ReadOptions(), copy_cfh, Key(i), &value2));
|
|
825
|
+
ASSERT_EQ(value1, value2);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
ASSERT_OK(db_copy->DropColumnFamily(copy_cfh));
|
|
829
|
+
ASSERT_OK(db_copy->DestroyColumnFamilyHandle(copy_cfh));
|
|
830
|
+
delete db_copy;
|
|
831
|
+
ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
TEST_F(ImportColumnFamilyTest, ImportMultiColumnFamilyWithOverlap) {
|
|
835
|
+
Options options = CurrentOptions();
|
|
836
|
+
CreateAndReopenWithCF({"koko"}, options);
|
|
837
|
+
|
|
838
|
+
for (int i = 0; i < 100; ++i) {
|
|
839
|
+
ASSERT_OK(Put(1, Key(i), Key(i) + "_val"));
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
Checkpoint* checkpoint1;
|
|
843
|
+
Checkpoint* checkpoint2;
|
|
844
|
+
ASSERT_OK(Checkpoint::Create(db_, &checkpoint1));
|
|
845
|
+
ASSERT_OK(checkpoint1->ExportColumnFamily(handles_[1], export_files_dir_,
|
|
846
|
+
&metadata_ptr_));
|
|
847
|
+
|
|
848
|
+
// Create a new db and import the files.
|
|
849
|
+
DB* db_copy;
|
|
850
|
+
ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
|
|
851
|
+
ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy));
|
|
852
|
+
ColumnFamilyHandle* copy_cfh = nullptr;
|
|
853
|
+
ASSERT_OK(db_copy->CreateColumnFamily(options, "koko", ©_cfh));
|
|
854
|
+
WriteOptions wo;
|
|
855
|
+
for (int i = 50; i < 150; ++i) {
|
|
856
|
+
ASSERT_OK(db_copy->Put(wo, copy_cfh, Key(i), Key(i) + "_val"));
|
|
857
|
+
}
|
|
858
|
+
ASSERT_OK(db_copy->Flush(FlushOptions()));
|
|
859
|
+
|
|
860
|
+
// Flush again to create another L0 file. It should have higher sequencer.
|
|
861
|
+
ASSERT_OK(Checkpoint::Create(db_copy, &checkpoint2));
|
|
862
|
+
ASSERT_OK(checkpoint2->ExportColumnFamily(copy_cfh, export_files_dir2_,
|
|
863
|
+
&metadata_ptr2_));
|
|
864
|
+
|
|
865
|
+
ASSERT_NE(metadata_ptr_, nullptr);
|
|
866
|
+
ASSERT_NE(metadata_ptr2_, nullptr);
|
|
867
|
+
delete checkpoint1;
|
|
868
|
+
delete checkpoint2;
|
|
869
|
+
ImportColumnFamilyOptions import_options;
|
|
870
|
+
import_options.move_files = false;
|
|
871
|
+
|
|
872
|
+
std::vector<const ExportImportFilesMetaData*> metadatas = {metadata_ptr_,
|
|
873
|
+
metadata_ptr2_};
|
|
874
|
+
|
|
875
|
+
ASSERT_EQ(db_->CreateColumnFamilyWithImport(options, "toto", import_options,
|
|
876
|
+
metadatas, &import_cfh_),
|
|
877
|
+
Status::InvalidArgument("CFs have overlapping ranges"));
|
|
878
|
+
|
|
879
|
+
ASSERT_OK(db_copy->DropColumnFamily(copy_cfh));
|
|
880
|
+
ASSERT_OK(db_copy->DestroyColumnFamilyHandle(copy_cfh));
|
|
881
|
+
delete db_copy;
|
|
882
|
+
ASSERT_OK(DestroyDir(env_, dbname_ + "/db_copy"));
|
|
883
|
+
}
|
|
741
884
|
} // namespace ROCKSDB_NAMESPACE
|
|
742
885
|
|
|
743
886
|
int main(int argc, char** argv) {
|
|
@@ -291,6 +291,7 @@ static const std::string min_obsolete_sst_number_to_keep_str =
|
|
|
291
291
|
static const std::string base_level_str = "base-level";
|
|
292
292
|
static const std::string total_sst_files_size = "total-sst-files-size";
|
|
293
293
|
static const std::string live_sst_files_size = "live-sst-files-size";
|
|
294
|
+
static const std::string obsolete_sst_files_size = "obsolete-sst-files-size";
|
|
294
295
|
static const std::string live_sst_files_size_at_temperature =
|
|
295
296
|
"live-sst-files-size-at-temperature";
|
|
296
297
|
static const std::string estimate_pending_comp_bytes =
|
|
@@ -394,6 +395,8 @@ const std::string DB::Properties::kTotalSstFilesSize =
|
|
|
394
395
|
rocksdb_prefix + total_sst_files_size;
|
|
395
396
|
const std::string DB::Properties::kLiveSstFilesSize =
|
|
396
397
|
rocksdb_prefix + live_sst_files_size;
|
|
398
|
+
const std::string DB::Properties::kObsoleteSstFilesSize =
|
|
399
|
+
rocksdb_prefix + obsolete_sst_files_size;
|
|
397
400
|
const std::string DB::Properties::kBaseLevel = rocksdb_prefix + base_level_str;
|
|
398
401
|
const std::string DB::Properties::kEstimatePendingCompactionBytes =
|
|
399
402
|
rocksdb_prefix + estimate_pending_comp_bytes;
|
|
@@ -565,6 +568,9 @@ const UnorderedMap<std::string, DBPropertyInfo>
|
|
|
565
568
|
{DB::Properties::kLiveSstFilesSizeAtTemperature,
|
|
566
569
|
{false, &InternalStats::HandleLiveSstFilesSizeAtTemperature, nullptr,
|
|
567
570
|
nullptr, nullptr}},
|
|
571
|
+
{DB::Properties::kObsoleteSstFilesSize,
|
|
572
|
+
{false, nullptr, &InternalStats::HandleObsoleteSstFilesSize, nullptr,
|
|
573
|
+
nullptr}},
|
|
568
574
|
{DB::Properties::kEstimatePendingCompactionBytes,
|
|
569
575
|
{false, nullptr, &InternalStats::HandleEstimatePendingCompactionBytes,
|
|
570
576
|
nullptr, nullptr}},
|
|
@@ -1395,6 +1401,12 @@ bool InternalStats::HandleLiveSstFilesSize(uint64_t* value, DBImpl* /*db*/,
|
|
|
1395
1401
|
return true;
|
|
1396
1402
|
}
|
|
1397
1403
|
|
|
1404
|
+
bool InternalStats::HandleObsoleteSstFilesSize(uint64_t* value, DBImpl* db,
|
|
1405
|
+
Version* /*version*/) {
|
|
1406
|
+
*value = db->GetObsoleteSstFilesSize();
|
|
1407
|
+
return true;
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1398
1410
|
bool InternalStats::HandleEstimatePendingCompactionBytes(uint64_t* value,
|
|
1399
1411
|
DBImpl* /*db*/,
|
|
1400
1412
|
Version* /*version*/) {
|
|
@@ -1738,7 +1750,7 @@ void InternalStats::DumpCFMapStats(
|
|
|
1738
1750
|
assert(vstorage);
|
|
1739
1751
|
|
|
1740
1752
|
int num_levels_to_check =
|
|
1741
|
-
(cfd_->ioptions()->compaction_style
|
|
1753
|
+
(cfd_->ioptions()->compaction_style == kCompactionStyleLevel)
|
|
1742
1754
|
? vstorage->num_levels() - 1
|
|
1743
1755
|
: 1;
|
|
1744
1756
|
|
|
@@ -819,6 +819,8 @@ class InternalStats {
|
|
|
819
819
|
bool HandleBaseLevel(uint64_t* value, DBImpl* db, Version* version);
|
|
820
820
|
bool HandleTotalSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
|
|
821
821
|
bool HandleLiveSstFilesSize(uint64_t* value, DBImpl* db, Version* version);
|
|
822
|
+
bool HandleObsoleteSstFilesSize(uint64_t* value, DBImpl* db,
|
|
823
|
+
Version* version);
|
|
822
824
|
bool HandleEstimatePendingCompactionBytes(uint64_t* value, DBImpl* db,
|
|
823
825
|
Version* version);
|
|
824
826
|
bool HandleEstimateTableReadersMem(uint64_t* value, DBImpl* db,
|
|
@@ -551,6 +551,7 @@ class TestCompactionReasonListener : public EventListener {
|
|
|
551
551
|
|
|
552
552
|
TEST_F(EventListenerTest, CompactionReasonLevel) {
|
|
553
553
|
Options options;
|
|
554
|
+
options.level_compaction_dynamic_level_bytes = false;
|
|
554
555
|
options.env = CurrentOptions().env;
|
|
555
556
|
options.create_if_missing = true;
|
|
556
557
|
options.memtable_factory.reset(test::NewSpecialSkipListFactory(
|
|
@@ -581,7 +582,7 @@ TEST_F(EventListenerTest, CompactionReasonLevel) {
|
|
|
581
582
|
for (int k = 1; k <= 30; k++) {
|
|
582
583
|
ASSERT_OK(Put(Key(k), Key(k)));
|
|
583
584
|
if (k % 10 == 0) {
|
|
584
|
-
Flush();
|
|
585
|
+
ASSERT_OK(Flush());
|
|
585
586
|
}
|
|
586
587
|
}
|
|
587
588
|
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "rocksdb/slice.h"
|
|
21
21
|
#include "rocksdb/status.h"
|
|
22
22
|
#include "util/compression.h"
|
|
23
|
+
#include "util/hash_containers.h"
|
|
23
24
|
#include "util/udt_util.h"
|
|
24
25
|
#include "util/xxhash.h"
|
|
25
26
|
|
|
@@ -79,7 +80,7 @@ class Reader {
|
|
|
79
80
|
|
|
80
81
|
// Return the recorded user-defined timestamp size that have been read so
|
|
81
82
|
// far. This only applies to WAL logs.
|
|
82
|
-
const
|
|
83
|
+
const UnorderedMap<uint32_t, size_t>& GetRecordedTimestampSize() const {
|
|
83
84
|
return recorded_cf_to_ts_sz_;
|
|
84
85
|
}
|
|
85
86
|
|
|
@@ -165,7 +166,7 @@ class Reader {
|
|
|
165
166
|
|
|
166
167
|
// The recorded user-defined timestamp sizes that have been read so far. This
|
|
167
168
|
// is only for WAL logs.
|
|
168
|
-
|
|
169
|
+
UnorderedMap<uint32_t, size_t> recorded_cf_to_ts_sz_;
|
|
169
170
|
|
|
170
171
|
// Extend record types with the following special values
|
|
171
172
|
enum {
|