@nxtedition/rocksdb 13.5.8 → 13.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +209 -2
- package/deps/rocksdb/rocksdb/BUCK +12 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
- package/deps/rocksdb/rocksdb/Makefile +28 -23
- package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
- package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
- package/deps/rocksdb/rocksdb/db/builder.h +5 -4
- package/deps/rocksdb/rocksdb/db/c.cc +556 -15
- package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
- package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
- package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
- package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
- package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
- package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
- package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
- package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
- package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
- package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
- package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
- package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
- package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
- package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
- package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
- package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
- package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
- package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
- package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
- package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
- package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
- package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
- package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
- package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
- package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
- package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
- package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
- package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
- package/deps/rocksdb/rocksdb/env/env.cc +32 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
- package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
- package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
- package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
- package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
- package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
- package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
- package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
- package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
- package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
- package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
- package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
- package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
- package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
- package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
- package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
- package/deps/rocksdb/rocksdb/options/options.cc +296 -305
- package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
- package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
- package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
- package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
- package/deps/rocksdb/rocksdb/port/lang.h +2 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
- package/deps/rocksdb/rocksdb/src.mk +17 -11
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
- package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
- package/deps/rocksdb/rocksdb/table/format.cc +62 -44
- package/deps/rocksdb/rocksdb/table/format.h +35 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
- package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
- package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
- package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
- package/deps/rocksdb/rocksdb/util/compression.h +348 -232
- package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
- package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
- package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
- package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
- package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
- package/deps/rocksdb/rocksdb.gyp +5 -0
- package/index.js +47 -2
- package/package.json +8 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -2544,6 +2544,145 @@ TEST_P(DBIteratorTest, RefreshWithSnapshot) {
|
|
|
2544
2544
|
ASSERT_OK(db_->Close());
|
|
2545
2545
|
}
|
|
2546
2546
|
|
|
2547
|
+
TEST_P(DBIteratorTest, AutoRefreshIterator) {
|
|
2548
|
+
constexpr int kNumKeys = 1000;
|
|
2549
|
+
Options options = CurrentOptions();
|
|
2550
|
+
options.disable_auto_compactions = true;
|
|
2551
|
+
for (const DBIter::Direction direction :
|
|
2552
|
+
{DBIter::kForward, DBIter::kReverse}) {
|
|
2553
|
+
for (const bool auto_refresh_enabled : {false, true}) {
|
|
2554
|
+
for (const bool explicit_snapshot : {false, true}) {
|
|
2555
|
+
DestroyAndReopen(options);
|
|
2556
|
+
// Multi dimensional iterator:
|
|
2557
|
+
//
|
|
2558
|
+
// L0 (level iterator): [key000000]
|
|
2559
|
+
// L1 (table iterator): [key000001]
|
|
2560
|
+
// Memtable : [key000000, key000999]
|
|
2561
|
+
for (int i = 0; i < kNumKeys + 2; i++) {
|
|
2562
|
+
ASSERT_OK(Put(Key(i % kNumKeys), "val" + std::to_string(i)));
|
|
2563
|
+
if (i <= 1) {
|
|
2564
|
+
ASSERT_OK(Flush());
|
|
2565
|
+
}
|
|
2566
|
+
if (i == 0) {
|
|
2567
|
+
MoveFilesToLevel(1);
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
|
|
2571
|
+
ReadOptions read_options;
|
|
2572
|
+
std::unique_ptr<ManagedSnapshot> snapshot = nullptr;
|
|
2573
|
+
if (explicit_snapshot) {
|
|
2574
|
+
snapshot = std::make_unique<ManagedSnapshot>(db_);
|
|
2575
|
+
}
|
|
2576
|
+
read_options.snapshot =
|
|
2577
|
+
explicit_snapshot ? snapshot->snapshot() : nullptr;
|
|
2578
|
+
read_options.auto_refresh_iterator_with_snapshot = auto_refresh_enabled;
|
|
2579
|
+
std::unique_ptr<Iterator> iter(NewIterator(read_options));
|
|
2580
|
+
|
|
2581
|
+
int trigger_compact_on_it = kNumKeys / 2;
|
|
2582
|
+
|
|
2583
|
+
// This update should NOT be visible from the iterator.
|
|
2584
|
+
ASSERT_OK(Put(Key(trigger_compact_on_it + 1), "new val"));
|
|
2585
|
+
|
|
2586
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(1));
|
|
2587
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
2588
|
+
|
|
2589
|
+
uint64_t all_memtables_size_before_refresh;
|
|
2590
|
+
uint64_t all_memtables_size_after_refresh;
|
|
2591
|
+
|
|
2592
|
+
std::string prop_value;
|
|
2593
|
+
ASSERT_OK(iter->GetProperty("rocksdb.iterator.super-version-number",
|
|
2594
|
+
&prop_value));
|
|
2595
|
+
int superversion_number = std::stoi(prop_value);
|
|
2596
|
+
|
|
2597
|
+
std::vector<LiveFileMetaData> old_files;
|
|
2598
|
+
db_->GetLiveFilesMetaData(&old_files);
|
|
2599
|
+
|
|
2600
|
+
int expected_next_key_int;
|
|
2601
|
+
if (direction == DBIter::kForward) {
|
|
2602
|
+
expected_next_key_int = 0;
|
|
2603
|
+
iter->SeekToFirst();
|
|
2604
|
+
} else { // DBIter::kReverse
|
|
2605
|
+
expected_next_key_int = kNumKeys - 1;
|
|
2606
|
+
iter->SeekToLast();
|
|
2607
|
+
}
|
|
2608
|
+
|
|
2609
|
+
int it_num = 0;
|
|
2610
|
+
std::unordered_map<std::string, std::string> kvs;
|
|
2611
|
+
while (iter->Valid()) {
|
|
2612
|
+
ASSERT_OK(iter->status());
|
|
2613
|
+
it_num++;
|
|
2614
|
+
if (it_num == trigger_compact_on_it) {
|
|
2615
|
+
// Bump the superversion by manually scheduling flush + compaction.
|
|
2616
|
+
ASSERT_OK(Flush());
|
|
2617
|
+
ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr,
|
|
2618
|
+
nullptr));
|
|
2619
|
+
ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
|
|
2620
|
+
|
|
2621
|
+
// For accuracy, capture the memtables size right before consecutive
|
|
2622
|
+
// iterator call to Next() will update its' stale superversion ref.
|
|
2623
|
+
dbfull()->GetIntProperty("rocksdb.size-all-mem-tables",
|
|
2624
|
+
&all_memtables_size_before_refresh);
|
|
2625
|
+
}
|
|
2626
|
+
|
|
2627
|
+
if (it_num == trigger_compact_on_it + 1) {
|
|
2628
|
+
dbfull()->GetIntProperty("rocksdb.size-all-mem-tables",
|
|
2629
|
+
&all_memtables_size_after_refresh);
|
|
2630
|
+
ASSERT_OK(iter->GetProperty("rocksdb.iterator.super-version-number",
|
|
2631
|
+
&prop_value));
|
|
2632
|
+
uint64_t new_superversion_number = std::stoi(prop_value);
|
|
2633
|
+
Status expected_status_for_preexisting_files;
|
|
2634
|
+
if (auto_refresh_enabled && explicit_snapshot) {
|
|
2635
|
+
// Iterator is expected to detect its' superversion staleness.
|
|
2636
|
+
ASSERT_LT(superversion_number, new_superversion_number);
|
|
2637
|
+
// ... and since our iterator was the only reference to that very
|
|
2638
|
+
// superversion, we expect most of the active memory to be
|
|
2639
|
+
// returned upon automatical iterator refresh.
|
|
2640
|
+
ASSERT_GT(all_memtables_size_before_refresh,
|
|
2641
|
+
all_memtables_size_after_refresh);
|
|
2642
|
+
expected_status_for_preexisting_files = Status::NotFound();
|
|
2643
|
+
} else {
|
|
2644
|
+
ASSERT_EQ(superversion_number, new_superversion_number);
|
|
2645
|
+
ASSERT_EQ(all_memtables_size_after_refresh,
|
|
2646
|
+
all_memtables_size_before_refresh);
|
|
2647
|
+
expected_status_for_preexisting_files = Status::OK();
|
|
2648
|
+
}
|
|
2649
|
+
|
|
2650
|
+
for (const auto& file : old_files) {
|
|
2651
|
+
ASSERT_EQ(env_->FileExists(file.db_path + "/" + file.name),
|
|
2652
|
+
expected_status_for_preexisting_files);
|
|
2653
|
+
}
|
|
2654
|
+
}
|
|
2655
|
+
|
|
2656
|
+
// Ensure we're visiting the keys in desired order and at most once!
|
|
2657
|
+
ASSERT_EQ(IdFromKey(iter->key().ToString()), expected_next_key_int);
|
|
2658
|
+
kvs[iter->key().ToString()] = iter->value().ToString();
|
|
2659
|
+
|
|
2660
|
+
if (direction == DBIter::kForward) {
|
|
2661
|
+
iter->Next();
|
|
2662
|
+
expected_next_key_int++;
|
|
2663
|
+
} else {
|
|
2664
|
+
iter->Prev();
|
|
2665
|
+
expected_next_key_int--;
|
|
2666
|
+
}
|
|
2667
|
+
}
|
|
2668
|
+
ASSERT_OK(iter->status());
|
|
2669
|
+
|
|
2670
|
+
// Data validation.
|
|
2671
|
+
ASSERT_EQ(kvs.size(), kNumKeys);
|
|
2672
|
+
for (int i = 0; i < kNumKeys; i++) {
|
|
2673
|
+
auto kv = kvs.find(Key(i));
|
|
2674
|
+
ASSERT_TRUE(kv != kvs.end());
|
|
2675
|
+
int val = i;
|
|
2676
|
+
if (i <= 1) {
|
|
2677
|
+
val += kNumKeys;
|
|
2678
|
+
}
|
|
2679
|
+
ASSERT_EQ(kv->second, "val" + std::to_string(val));
|
|
2680
|
+
}
|
|
2681
|
+
}
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2685
|
+
|
|
2547
2686
|
TEST_P(DBIteratorTest, CreationFailure) {
|
|
2548
2687
|
SyncPoint::GetInstance()->SetCallBack(
|
|
2549
2688
|
"DBImpl::NewInternalIterator:StatusCallback", [](void* arg) {
|
|
@@ -3685,6 +3824,321 @@ TEST_F(DBIteratorTest, IteratorsConsistentViewExplicitSnapshot) {
|
|
|
3685
3824
|
}
|
|
3686
3825
|
}
|
|
3687
3826
|
|
|
3827
|
+
TEST_P(DBIteratorTest, MemtableOpsScanFlushTriggerWithSeek) {
|
|
3828
|
+
// Tests that option memtable_op_scan_flush_trigger works when the limit
|
|
3829
|
+
// is reached during a Seek() operation.
|
|
3830
|
+
const int kTrigger = 10;
|
|
3831
|
+
Random* r = Random::GetTLSInstance();
|
|
3832
|
+
|
|
3833
|
+
for (int trigger : {kTrigger, kTrigger + 1}) {
|
|
3834
|
+
for (bool delete_only : {false, true}) {
|
|
3835
|
+
Options options;
|
|
3836
|
+
options.create_if_missing = true;
|
|
3837
|
+
options.memtable_op_scan_flush_trigger = trigger;
|
|
3838
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
3839
|
+
DestroyAndReopen(options);
|
|
3840
|
+
|
|
3841
|
+
// Base data that will be covered by a consecutive sequence of tombstones.
|
|
3842
|
+
int kNumKeys = delete_only ? kTrigger : kTrigger / 2;
|
|
3843
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
3844
|
+
ASSERT_OK(Put(Key(i), r->RandomString(100)));
|
|
3845
|
+
}
|
|
3846
|
+
ASSERT_OK(Flush());
|
|
3847
|
+
ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
|
|
3848
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(6));
|
|
3849
|
+
|
|
3850
|
+
if (delete_only) {
|
|
3851
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
3852
|
+
ASSERT_OK(SingleDelete(Key(i)));
|
|
3853
|
+
}
|
|
3854
|
+
} else {
|
|
3855
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
3856
|
+
ASSERT_OK(Put(Key(i), r->RandomString(100)));
|
|
3857
|
+
}
|
|
3858
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
3859
|
+
ASSERT_OK(Delete(Key(i)));
|
|
3860
|
+
}
|
|
3861
|
+
}
|
|
3862
|
+
|
|
3863
|
+
SetPerfLevel(PerfLevel::kEnableCount);
|
|
3864
|
+
get_perf_context()->Reset();
|
|
3865
|
+
ReadOptions ro;
|
|
3866
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(ro));
|
|
3867
|
+
|
|
3868
|
+
// Seek to the first key, this will scan through all the tombstones and
|
|
3869
|
+
// hidden puts
|
|
3870
|
+
iter->Seek(Key(0));
|
|
3871
|
+
ASSERT_FALSE(
|
|
3872
|
+
iter->Valid()); // All keys are deleted, so iterator is not valid
|
|
3873
|
+
ASSERT_OK(iter->status());
|
|
3874
|
+
ASSERT_EQ(get_perf_context()->next_on_memtable_count, kTrigger);
|
|
3875
|
+
|
|
3876
|
+
// Skipping kNumTrigger memtable entries in a single iterator operation
|
|
3877
|
+
// should mark the memtable for flush.
|
|
3878
|
+
//
|
|
3879
|
+
// At the end of a write, we check and update memtable to request a flush
|
|
3880
|
+
ASSERT_OK(Put(Key(11), "val"));
|
|
3881
|
+
// Before a write, we schedule memtables for flush if requested.
|
|
3882
|
+
ASSERT_OK(Put(Key(12), "val"));
|
|
3883
|
+
ASSERT_OK(db_->WaitForCompact({}));
|
|
3884
|
+
|
|
3885
|
+
if (trigger <= kTrigger) {
|
|
3886
|
+
// Check if memtable was flushed due to scan trigger
|
|
3887
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
3888
|
+
uint64_t val = 0;
|
|
3889
|
+
ASSERT_TRUE(
|
|
3890
|
+
db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
|
|
3891
|
+
ASSERT_EQ(0, val);
|
|
3892
|
+
} else {
|
|
3893
|
+
ASSERT_EQ(0, NumTableFilesAtLevel(0));
|
|
3894
|
+
uint64_t val = 0;
|
|
3895
|
+
ASSERT_TRUE(
|
|
3896
|
+
db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
|
|
3897
|
+
ASSERT_EQ(kNumKeys, val);
|
|
3898
|
+
}
|
|
3899
|
+
}
|
|
3900
|
+
}
|
|
3901
|
+
}
|
|
3902
|
+
|
|
3903
|
+
TEST_P(DBIteratorTest, MemtableOpsScanFlushTriggerWithNext) {
|
|
3904
|
+
// Tests that option memtable_op_scan_flush_trigger works when the limit
|
|
3905
|
+
// is reached during a Next() operation, and not trigger a flush when
|
|
3906
|
+
// the limit is reached across multiple Next() operations.
|
|
3907
|
+
const int kTrigger = 10;
|
|
3908
|
+
Random* r = Random::GetTLSInstance();
|
|
3909
|
+
|
|
3910
|
+
for (int trigger : {kTrigger, kTrigger + 1}) {
|
|
3911
|
+
for (bool delete_only : {false, true}) {
|
|
3912
|
+
Options options;
|
|
3913
|
+
options.create_if_missing = true;
|
|
3914
|
+
options.memtable_op_scan_flush_trigger = trigger;
|
|
3915
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
3916
|
+
DestroyAndReopen(options);
|
|
3917
|
+
|
|
3918
|
+
// Base data that will be covered by a consecutive sequence of tombstones.
|
|
3919
|
+
int kNumKeys = delete_only ? kTrigger : kTrigger / 2;
|
|
3920
|
+
for (int i = 0; i <= kNumKeys; ++i) {
|
|
3921
|
+
ASSERT_OK(Put(Key(i), r->RandomString(100)));
|
|
3922
|
+
}
|
|
3923
|
+
ASSERT_OK(Flush());
|
|
3924
|
+
ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
|
|
3925
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(6));
|
|
3926
|
+
|
|
3927
|
+
ASSERT_OK(Put(Key(0), "val"));
|
|
3928
|
+
if (delete_only) {
|
|
3929
|
+
for (int i = 1; i <= kNumKeys; ++i) {
|
|
3930
|
+
ASSERT_OK(SingleDelete(Key(i)));
|
|
3931
|
+
}
|
|
3932
|
+
} else {
|
|
3933
|
+
for (int i = 1; i <= kNumKeys; ++i) {
|
|
3934
|
+
ASSERT_OK(Put(Key(i), r->RandomString(100)));
|
|
3935
|
+
}
|
|
3936
|
+
for (int i = 1; i <= kNumKeys; ++i) {
|
|
3937
|
+
ASSERT_OK(Delete(Key(i)));
|
|
3938
|
+
}
|
|
3939
|
+
}
|
|
3940
|
+
|
|
3941
|
+
// Total number of tombstones and hidden puts scanned across multiple
|
|
3942
|
+
// Next() operations below will be kTrigger, and it should not trigger a
|
|
3943
|
+
// flush when the limit is kTrigger + 1.
|
|
3944
|
+
ASSERT_OK(Put(Key(kNumKeys + 1), "v1"));
|
|
3945
|
+
ASSERT_OK(Delete(Key(kNumKeys + 2)));
|
|
3946
|
+
ASSERT_OK(Put(Key(kNumKeys + 3), "v3"));
|
|
3947
|
+
|
|
3948
|
+
SetPerfLevel(PerfLevel::kEnableCount);
|
|
3949
|
+
get_perf_context()->Reset();
|
|
3950
|
+
ReadOptions ro;
|
|
3951
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(ro));
|
|
3952
|
+
iter->Seek(Key(0));
|
|
3953
|
+
ASSERT_TRUE(iter->Valid());
|
|
3954
|
+
ASSERT_EQ(iter->value(), "val");
|
|
3955
|
+
ASSERT_OK(iter->status());
|
|
3956
|
+
ASSERT_EQ(get_perf_context()->next_on_memtable_count, 0);
|
|
3957
|
+
iter->Next();
|
|
3958
|
+
// kTrigger tombstones and invisible puts and 1 for the visible put
|
|
3959
|
+
ASSERT_EQ(get_perf_context()->next_on_memtable_count, kTrigger + 1);
|
|
3960
|
+
iter->Next();
|
|
3961
|
+
ASSERT_EQ(get_perf_context()->next_on_memtable_count, kTrigger + 3);
|
|
3962
|
+
|
|
3963
|
+
// Skipping kNumTrigger memtable entries in a single iterator operation
|
|
3964
|
+
// should mark the memtable for flush.
|
|
3965
|
+
//
|
|
3966
|
+
// At the end of a write, we check and update memtable to request a flush
|
|
3967
|
+
ASSERT_OK(Put(Key(11), "val"));
|
|
3968
|
+
// Before a write, we schedule memtables for flush if requested.
|
|
3969
|
+
ASSERT_OK(Put(Key(12), "val"));
|
|
3970
|
+
ASSERT_OK(db_->WaitForCompact({}));
|
|
3971
|
+
|
|
3972
|
+
if (trigger <= kTrigger) {
|
|
3973
|
+
// Check if memtable was flushed due to scan trigger
|
|
3974
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
3975
|
+
uint64_t val = 0;
|
|
3976
|
+
ASSERT_TRUE(
|
|
3977
|
+
db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
|
|
3978
|
+
ASSERT_EQ(0, val);
|
|
3979
|
+
} else {
|
|
3980
|
+
uint64_t val = 0;
|
|
3981
|
+
ASSERT_TRUE(
|
|
3982
|
+
db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
|
|
3983
|
+
ASSERT_EQ(kNumKeys + 1, val);
|
|
3984
|
+
}
|
|
3985
|
+
}
|
|
3986
|
+
}
|
|
3987
|
+
}
|
|
3988
|
+
|
|
3989
|
+
TEST_P(DBIteratorTest, AverageMemtableOpsScanFlushTrigger) {
|
|
3990
|
+
// Tests option memtable_avg_op_scan_flush_trigger with
|
|
3991
|
+
// long tombstone sequences.
|
|
3992
|
+
Random* r = Random::GetTLSInstance();
|
|
3993
|
+
|
|
3994
|
+
const int kAvgTrigger = 10;
|
|
3995
|
+
const int kMaxTrigger = 500;
|
|
3996
|
+
Options options;
|
|
3997
|
+
options.create_if_missing = true;
|
|
3998
|
+
options.memtable_op_scan_flush_trigger = kMaxTrigger;
|
|
3999
|
+
options.memtable_avg_op_scan_flush_trigger = kAvgTrigger;
|
|
4000
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
4001
|
+
DestroyAndReopen(options);
|
|
4002
|
+
|
|
4003
|
+
const int kNumKeys = 1000;
|
|
4004
|
+
// Base data that will be covered by a consecutive sequence of tombstones.
|
|
4005
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
4006
|
+
ASSERT_OK(Put(Key(i), r->RandomString(50)));
|
|
4007
|
+
}
|
|
4008
|
+
ASSERT_OK(Flush());
|
|
4009
|
+
ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
|
|
4010
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(6));
|
|
4011
|
+
|
|
4012
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
4013
|
+
// We issue slightly more deletions than kAvgTrigger between visible keys
|
|
4014
|
+
// to ensure avg skipped entries exceed kAvgTrigger.
|
|
4015
|
+
if (i % (kAvgTrigger + 2) != 0) {
|
|
4016
|
+
ASSERT_OK(SingleDelete(Key(i)));
|
|
4017
|
+
}
|
|
4018
|
+
}
|
|
4019
|
+
|
|
4020
|
+
// Each operation, except the first Seek, is expected to see kAvgTrigger + 1
|
|
4021
|
+
// tombstones (from the active memtable) before it finds the next visible key.
|
|
4022
|
+
SetPerfLevel(PerfLevel::kEnableCount);
|
|
4023
|
+
get_perf_context()->Reset();
|
|
4024
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(ReadOptions()));
|
|
4025
|
+
iter->Seek(Key(1));
|
|
4026
|
+
ASSERT_EQ(get_perf_context()->next_on_memtable_count, kAvgTrigger + 1);
|
|
4027
|
+
iter.reset();
|
|
4028
|
+
// Should not flush since total entries skipped is below
|
|
4029
|
+
// memtable_op_scan_flush_trigger
|
|
4030
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4031
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4032
|
+
ASSERT_OK(db_->WaitForCompact({}));
|
|
4033
|
+
ASSERT_EQ(0, NumTableFilesAtLevel(0));
|
|
4034
|
+
|
|
4035
|
+
get_perf_context()->Reset();
|
|
4036
|
+
iter.reset(db_->NewIterator(ReadOptions()));
|
|
4037
|
+
int num_ops = 1;
|
|
4038
|
+
uint64_t num_skipped = 0;
|
|
4039
|
+
iter->Seek(Key(0));
|
|
4040
|
+
ASSERT_EQ(iter->key(), Key(0));
|
|
4041
|
+
uint64_t last_memtable_next_count =
|
|
4042
|
+
get_perf_context()->next_on_memtable_count;
|
|
4043
|
+
iter->Next();
|
|
4044
|
+
num_ops++;
|
|
4045
|
+
while (iter->Valid()) {
|
|
4046
|
+
ASSERT_OK(iter->status());
|
|
4047
|
+
uint64_t num_skipped_in_op =
|
|
4048
|
+
get_perf_context()->next_on_memtable_count - last_memtable_next_count;
|
|
4049
|
+
ASSERT_GE(num_skipped_in_op, kAvgTrigger + 1);
|
|
4050
|
+
last_memtable_next_count = get_perf_context()->next_on_memtable_count;
|
|
4051
|
+
num_skipped += num_skipped_in_op;
|
|
4052
|
+
iter->Next();
|
|
4053
|
+
num_ops++;
|
|
4054
|
+
}
|
|
4055
|
+
// During iterator destruction we mark memtable for flush
|
|
4056
|
+
iter.reset();
|
|
4057
|
+
|
|
4058
|
+
// avg trigger
|
|
4059
|
+
ASSERT_GE(num_skipped, kAvgTrigger * num_ops);
|
|
4060
|
+
// memtable_op_scan_flush_trigger
|
|
4061
|
+
ASSERT_GE(num_skipped, kMaxTrigger);
|
|
4062
|
+
// Average hidden entries scanned from memtable per operation is more than
|
|
4063
|
+
// kAvgTrigger and the total skipped is more than
|
|
4064
|
+
// memtable_op_scan_flush_trigger, the current memtable should be marked for
|
|
4065
|
+
// flush. The following two writes will trigger the flush.
|
|
4066
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4067
|
+
// Before a write, we schedule memtables for flush if requested.
|
|
4068
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4069
|
+
ASSERT_OK(db_->WaitForCompact({}));
|
|
4070
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
4071
|
+
}
|
|
4072
|
+
|
|
4073
|
+
TEST_P(DBIteratorTest, AverageMemtableOpsScanFlushTriggerByOverwrites) {
|
|
4074
|
+
// Tests option memtable_avg_op_scan_flush_trigger with overwrites to keys.
|
|
4075
|
+
Random* r = Random::GetTLSInstance();
|
|
4076
|
+
|
|
4077
|
+
const int kAvgTrigger = 25;
|
|
4078
|
+
Options options;
|
|
4079
|
+
options.create_if_missing = true;
|
|
4080
|
+
options.memtable_op_scan_flush_trigger = 250;
|
|
4081
|
+
options.memtable_avg_op_scan_flush_trigger = kAvgTrigger;
|
|
4082
|
+
options.level_compaction_dynamic_level_bytes = true;
|
|
4083
|
+
DestroyAndReopen(options);
|
|
4084
|
+
|
|
4085
|
+
const int kNumKeys = 100;
|
|
4086
|
+
// Base data that will be covered by a consecutive sequence of tombstones.
|
|
4087
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
4088
|
+
ASSERT_OK(Put(Key(i), r->RandomString(50)));
|
|
4089
|
+
}
|
|
4090
|
+
ASSERT_OK(Flush());
|
|
4091
|
+
ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
|
|
4092
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(6));
|
|
4093
|
+
|
|
4094
|
+
// One visible key every 10 keys.
|
|
4095
|
+
// Each non-visible user key has 3 non-visible entries in the active memtable.
|
|
4096
|
+
for (int i = 0; i < kNumKeys; ++i) {
|
|
4097
|
+
if (i % 10 != 0) {
|
|
4098
|
+
ASSERT_OK(Put(Key(i), r->RandomString(50)));
|
|
4099
|
+
ASSERT_OK(Put(Key(i), r->RandomString(50)));
|
|
4100
|
+
ASSERT_OK(Delete(Key(i)));
|
|
4101
|
+
}
|
|
4102
|
+
}
|
|
4103
|
+
|
|
4104
|
+
SetPerfLevel(PerfLevel::kEnableCount);
|
|
4105
|
+
get_perf_context()->Reset();
|
|
4106
|
+
ReadOptions ro;
|
|
4107
|
+
std::unique_ptr<Iterator> iter(db_->NewIterator(ro));
|
|
4108
|
+
iter->Seek(Key(1));
|
|
4109
|
+
ASSERT_GT(get_perf_context()->next_on_memtable_count, kAvgTrigger);
|
|
4110
|
+
// Re-seek to trigger check for flush trigger
|
|
4111
|
+
iter->Seek(Key(1));
|
|
4112
|
+
// Should not flush since total entries skipped is below
|
|
4113
|
+
// memtable_op_scan_flush_trigger
|
|
4114
|
+
ASSERT_FALSE(static_cast<ColumnFamilyHandleImpl*>(db_->DefaultColumnFamily())
|
|
4115
|
+
->cfd()
|
|
4116
|
+
->mem()
|
|
4117
|
+
->IsMarkedForFlush());
|
|
4118
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4119
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4120
|
+
ASSERT_OK(db_->WaitForCompact({}));
|
|
4121
|
+
ASSERT_EQ(0, NumTableFilesAtLevel(0));
|
|
4122
|
+
get_perf_context()->Reset();
|
|
4123
|
+
|
|
4124
|
+
int num_ops = 1;
|
|
4125
|
+
iter->Seek(Key(1));
|
|
4126
|
+
while (iter->Valid()) {
|
|
4127
|
+
num_ops++;
|
|
4128
|
+
iter->Next();
|
|
4129
|
+
}
|
|
4130
|
+
ASSERT_GT(get_perf_context()->next_on_memtable_count, num_ops * kAvgTrigger);
|
|
4131
|
+
|
|
4132
|
+
// Re-seek should check conditions for marking memtable for flush
|
|
4133
|
+
iter->Seek(Key(80));
|
|
4134
|
+
|
|
4135
|
+
// Average hidden entries scanned from memtable per operation is 2.
|
|
4136
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4137
|
+
// Before a write, we schedule memtables for flush if requested.
|
|
4138
|
+
ASSERT_OK(Put(Key(0), "dummy write"));
|
|
4139
|
+
ASSERT_OK(db_->WaitForCompact({}));
|
|
4140
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
4141
|
+
}
|
|
3688
4142
|
} // namespace ROCKSDB_NAMESPACE
|
|
3689
4143
|
|
|
3690
4144
|
int main(int argc, char** argv) {
|
|
@@ -312,12 +312,12 @@ TEST_P(DbKvChecksumTest, WriteToWALCorrupted) {
|
|
|
312
312
|
// Corrupted write batch leads to read-only mode, so we have to
|
|
313
313
|
// reopen for every attempt.
|
|
314
314
|
Reopen(options);
|
|
315
|
-
auto log_size_pre_write = dbfull()->
|
|
315
|
+
auto log_size_pre_write = dbfull()->TEST_wals_total_size();
|
|
316
316
|
|
|
317
317
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
318
318
|
ASSERT_TRUE(ExecuteWrite(nullptr /* cf_handle */).IsCorruption());
|
|
319
319
|
// Confirm that nothing was written to WAL
|
|
320
|
-
ASSERT_EQ(log_size_pre_write, dbfull()->
|
|
320
|
+
ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
|
|
321
321
|
ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
|
|
322
322
|
SyncPoint::GetInstance()->DisableProcessing();
|
|
323
323
|
|
|
@@ -350,12 +350,12 @@ TEST_P(DbKvChecksumTest, WriteToWALWithColumnFamilyCorrupted) {
|
|
|
350
350
|
// Corrupted write batch leads to read-only mode, so we have to
|
|
351
351
|
// reopen for every attempt.
|
|
352
352
|
ReopenWithColumnFamilies({kDefaultColumnFamilyName, "pikachu"}, options);
|
|
353
|
-
auto log_size_pre_write = dbfull()->
|
|
353
|
+
auto log_size_pre_write = dbfull()->TEST_wals_total_size();
|
|
354
354
|
|
|
355
355
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
356
356
|
ASSERT_TRUE(ExecuteWrite(nullptr /* cf_handle */).IsCorruption());
|
|
357
357
|
// Confirm that nothing was written to WAL
|
|
358
|
-
ASSERT_EQ(log_size_pre_write, dbfull()->
|
|
358
|
+
ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
|
|
359
359
|
ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
|
|
360
360
|
SyncPoint::GetInstance()->DisableProcessing();
|
|
361
361
|
|
|
@@ -487,7 +487,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALCorrupted) {
|
|
|
487
487
|
// Reopen DB since it failed WAL write which lead to read-only mode
|
|
488
488
|
Reopen(options);
|
|
489
489
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
490
|
-
auto log_size_pre_write = dbfull()->
|
|
490
|
+
auto log_size_pre_write = dbfull()->TEST_wals_total_size();
|
|
491
491
|
leader_batch_and_status =
|
|
492
492
|
GetWriteBatch(GetCFHandleToUse(nullptr, op_type1_),
|
|
493
493
|
8 /* protection_bytes_per_key */, op_type1_);
|
|
@@ -499,7 +499,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALCorrupted) {
|
|
|
499
499
|
SyncPoint::GetInstance()->ClearCallBack("WriteThread::JoinBatchGroup:Wait");
|
|
500
500
|
ASSERT_EQ(1, leader_count);
|
|
501
501
|
// Nothing should have been written to WAL
|
|
502
|
-
ASSERT_EQ(log_size_pre_write, dbfull()->
|
|
502
|
+
ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
|
|
503
503
|
ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
|
|
504
504
|
|
|
505
505
|
corrupt_byte_offset++;
|
|
@@ -599,7 +599,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALWithColumnFamilyCorrupted) {
|
|
|
599
599
|
// Reopen DB since it failed WAL write which lead to read-only mode
|
|
600
600
|
ReopenWithColumnFamilies({kDefaultColumnFamilyName, "ramen"}, options);
|
|
601
601
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
602
|
-
auto log_size_pre_write = dbfull()->
|
|
602
|
+
auto log_size_pre_write = dbfull()->TEST_wals_total_size();
|
|
603
603
|
leader_batch_and_status =
|
|
604
604
|
GetWriteBatch(GetCFHandleToUse(handles_[1], op_type1_),
|
|
605
605
|
8 /* protection_bytes_per_key */, op_type1_);
|
|
@@ -612,7 +612,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALWithColumnFamilyCorrupted) {
|
|
|
612
612
|
|
|
613
613
|
ASSERT_EQ(1, leader_count);
|
|
614
614
|
// Nothing should have been written to WAL
|
|
615
|
-
ASSERT_EQ(log_size_pre_write, dbfull()->
|
|
615
|
+
ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
|
|
616
616
|
ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
|
|
617
617
|
|
|
618
618
|
corrupt_byte_offset++;
|
|
@@ -424,6 +424,96 @@ TEST_F(DBMemTableTest, IntegrityChecks) {
|
|
|
424
424
|
ASSERT_FALSE(iter->Valid());
|
|
425
425
|
}
|
|
426
426
|
}
|
|
427
|
+
|
|
428
|
+
TEST_F(DBMemTableTest, VectorConcurrentInsert) {
|
|
429
|
+
Options options;
|
|
430
|
+
options.create_if_missing = true;
|
|
431
|
+
options.create_missing_column_families = true;
|
|
432
|
+
options.allow_concurrent_memtable_write = true;
|
|
433
|
+
options.memtable_factory.reset(new VectorRepFactory());
|
|
434
|
+
DestroyAndReopen(options);
|
|
435
|
+
CreateAndReopenWithCF({"cf1"}, options);
|
|
436
|
+
|
|
437
|
+
// Multi-threaded writes
|
|
438
|
+
{
|
|
439
|
+
WriteOptions write_options;
|
|
440
|
+
std::vector<port::Thread> threads;
|
|
441
|
+
for (int i = 0; i < 10; ++i) {
|
|
442
|
+
threads.emplace_back([&, i]() {
|
|
443
|
+
int start = i * 100;
|
|
444
|
+
int end = start + 100;
|
|
445
|
+
WriteBatch batch;
|
|
446
|
+
for (int j = start; j < end; ++j) {
|
|
447
|
+
ASSERT_OK(
|
|
448
|
+
batch.Put(handles_[0], Key(j), "value" + std::to_string(j)));
|
|
449
|
+
}
|
|
450
|
+
ASSERT_OK(db_->Write(write_options, &batch));
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
for (auto& t : threads) {
|
|
454
|
+
t.join();
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
std::unique_ptr<Iterator> iter(
|
|
458
|
+
db_->NewIterator(ReadOptions(), handles_[0]));
|
|
459
|
+
iter->SeekToFirst();
|
|
460
|
+
for (int i = 0; i < 1000; ++i) {
|
|
461
|
+
ASSERT_TRUE(iter->Valid());
|
|
462
|
+
ASSERT_EQ(iter->key().ToString(), Key(i));
|
|
463
|
+
ASSERT_EQ(iter->value().ToString(), "value" + std::to_string(i));
|
|
464
|
+
iter->Next();
|
|
465
|
+
}
|
|
466
|
+
ASSERT_FALSE(iter->Valid());
|
|
467
|
+
ASSERT_OK(iter->status());
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Multi-threaded writes, multi CF
|
|
471
|
+
{
|
|
472
|
+
WriteOptions write_options;
|
|
473
|
+
std::vector<port::Thread> threads;
|
|
474
|
+
for (int i = 0; i < 10; ++i) {
|
|
475
|
+
threads.emplace_back([&, i]() {
|
|
476
|
+
int start = i * 100;
|
|
477
|
+
int end = start + 100;
|
|
478
|
+
WriteBatch batch;
|
|
479
|
+
for (int j = start; j < end; ++j) {
|
|
480
|
+
ASSERT_OK(batch.Put(handles_[0], Key(j), "CF0" + std::to_string(j)));
|
|
481
|
+
ASSERT_OK(batch.Put(handles_[1], Key(j), "CF1" + std::to_string(j)));
|
|
482
|
+
}
|
|
483
|
+
ASSERT_OK(db_->Write(write_options, &batch));
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
for (auto& t : threads) {
|
|
488
|
+
t.join();
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
std::unique_ptr<Iterator> iter0(
|
|
492
|
+
db_->NewIterator(ReadOptions(), handles_[0]));
|
|
493
|
+
std::unique_ptr<Iterator> iter1(
|
|
494
|
+
db_->NewIterator(ReadOptions(), handles_[1]));
|
|
495
|
+
iter0->SeekToFirst();
|
|
496
|
+
iter1->SeekToFirst();
|
|
497
|
+
for (int i = 0; i < 1000; ++i) {
|
|
498
|
+
ASSERT_TRUE(iter0->Valid());
|
|
499
|
+
ASSERT_EQ(iter0->key().ToString(), Key(i));
|
|
500
|
+
ASSERT_EQ(iter0->value().ToString(), "CF0" + std::to_string(i));
|
|
501
|
+
iter0->Next();
|
|
502
|
+
|
|
503
|
+
ASSERT_TRUE(iter1->Valid());
|
|
504
|
+
ASSERT_EQ(iter1->key().ToString(), Key(i));
|
|
505
|
+
ASSERT_EQ(iter1->value().ToString(), "CF1" + std::to_string(i));
|
|
506
|
+
iter1->Next();
|
|
507
|
+
}
|
|
508
|
+
ASSERT_FALSE(iter0->Valid());
|
|
509
|
+
ASSERT_OK(iter0->status());
|
|
510
|
+
ASSERT_FALSE(iter1->Valid());
|
|
511
|
+
ASSERT_OK(iter1->status());
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
ASSERT_OK(Flush(0));
|
|
515
|
+
ASSERT_OK(Flush(1));
|
|
516
|
+
}
|
|
427
517
|
} // namespace ROCKSDB_NAMESPACE
|
|
428
518
|
|
|
429
519
|
int main(int argc, char** argv) {
|