@nxtedition/rocksdb 8.2.0 → 8.2.2
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 +3 -3
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -52
- package/deps/rocksdb/rocksdb/Makefile +10 -5
- package/deps/rocksdb/rocksdb/TARGETS +8 -345
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +92 -0
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +32 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +12 -9
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +6 -43
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +3 -13
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +8 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +21 -47
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +3 -8
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +1 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +44 -7
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +13 -14
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +17 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +40 -21
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +41 -42
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +5 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +5 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +7 -6
- package/deps/rocksdb/rocksdb/db/builder.h +2 -2
- package/deps/rocksdb/rocksdb/db/c.cc +76 -5
- package/deps/rocksdb/rocksdb/db/c_test.c +141 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +32 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +5 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +12 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +21 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +77 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +4 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +55 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +142 -56
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +21 -20
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +260 -220
- package/deps/rocksdb/rocksdb/db/db_clip_test.cc +142 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +333 -27
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +189 -27
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +23 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +134 -90
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +124 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +10 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +7 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +15 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +11 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +7 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +54 -3
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +116 -1
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +142 -63
- package/deps/rocksdb/rocksdb/db/db_test.cc +28 -7
- package/deps/rocksdb/rocksdb/db/db_test2.cc +71 -131
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +18 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +6 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +10 -10
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +25 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +88 -0
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +67 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/experimental.cc +4 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +86 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +15 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -2
- package/deps/rocksdb/rocksdb/db/flush_job.cc +21 -14
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +14 -7
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +31 -8
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +21 -19
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +42 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.h +1 -0
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +92 -6
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/log_format.h +8 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -51
- package/deps/rocksdb/rocksdb/db/log_reader.h +16 -0
- package/deps/rocksdb/rocksdb/db/log_test.cc +125 -4
- package/deps/rocksdb/rocksdb/db/log_writer.cc +32 -2
- package/deps/rocksdb/rocksdb/db/log_writer.h +16 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +17 -46
- package/deps/rocksdb/rocksdb/db/memtable.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +8 -4
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +5 -4
- package/deps/rocksdb/rocksdb/db/repair.cc +38 -11
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/table_cache.cc +68 -51
- package/deps/rocksdb/rocksdb/db/table_cache.h +20 -10
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/version_builder.cc +9 -5
- package/deps/rocksdb/rocksdb/db/version_builder.h +2 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +140 -120
- package/deps/rocksdb/rocksdb/db/version_edit.cc +14 -0
- package/deps/rocksdb/rocksdb/db/version_edit.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +21 -13
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +26 -16
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_set.cc +292 -96
- package/deps/rocksdb/rocksdb/db/version_set.h +53 -28
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +62 -22
- package/deps/rocksdb/rocksdb/db/version_util.h +5 -4
- package/deps/rocksdb/rocksdb/db/write_batch.cc +3 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +119 -27
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +123 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +7 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +43 -33
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +29 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +85 -50
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +96 -54
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +122 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +206 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +9 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +9 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +322 -92
- package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -8
- package/deps/rocksdb/rocksdb/env/env_test.cc +31 -0
- package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +14 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +5 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +3 -3
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +89 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +22 -7
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -2
- package/deps/rocksdb/rocksdb/file/readahead_raf.cc +1 -1
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +154 -74
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +27 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +107 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +137 -152
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +61 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +30 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +33 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +87 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +9 -2
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -0
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +78 -42
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +14 -9
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +4 -9
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +19 -11
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +211 -555
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +36 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +17 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +10 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +19 -18
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +10 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +35 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +5 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/options.cc +12 -53
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +11 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +32 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +89 -5
- package/deps/rocksdb/rocksdb/port/lang.h +27 -0
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +67 -24
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +195 -35
- package/deps/rocksdb/rocksdb/table/block_based/block.h +197 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +71 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +4 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +43 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +36 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +266 -166
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +44 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +63 -56
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +14 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +918 -2
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +10 -9
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -8
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +18 -23
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +8 -8
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -32
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +7 -8
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +4 -5
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +46 -53
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +12 -12
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +7 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +26 -23
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +7 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +5 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +4 -2
- package/deps/rocksdb/rocksdb/table/format.cc +4 -4
- package/deps/rocksdb/rocksdb/table/format.h +1 -1
- package/deps/rocksdb/rocksdb/table/get_context.cc +1 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +33 -22
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +4 -2
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +18 -10
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +10 -7
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +4 -2
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +11 -0
- package/deps/rocksdb/rocksdb/table/table_builder.h +14 -5
- package/deps/rocksdb/rocksdb/table/table_properties.cc +2 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -3
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/table/table_test.cc +291 -34
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +5 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +33 -17
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +1 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +24 -83
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +7 -9
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +4 -1
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +9 -10
- package/deps/rocksdb/rocksdb/util/math.h +12 -7
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +16 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +46 -2
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +6 -6
- package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +12 -7
- package/deps/rocksdb/rocksdb/util/stop_watch.h +31 -13
- package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
- package/deps/rocksdb/rocksdb/util/udt_util.h +77 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +11 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +34 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +15 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +29 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +10 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +6 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +5 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +5 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- /package/deps/rocksdb/rocksdb/memory/{memory_allocator.h → memory_allocator_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/monitoring/{statistics.h → statistics_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/table/block_based/{flush_block_policy.h → flush_block_policy_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/util/{rate_limiter.h → rate_limiter_impl.h} +0 -0
- /package/deps/rocksdb/rocksdb/utilities/agg_merge/{agg_merge.h → agg_merge_impl.h} +0 -0
|
@@ -31,8 +31,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
31
31
|
|
|
32
32
|
const std::string key_body = Key(rand_keys[0]);
|
|
33
33
|
|
|
34
|
-
const uint32_t value_base =
|
|
35
|
-
thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
|
|
34
|
+
const uint32_t value_base = thread->rand.Next();
|
|
36
35
|
const size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
37
36
|
const std::string value_body = Slice(value, sz).ToString();
|
|
38
37
|
|
|
@@ -308,34 +307,10 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
308
307
|
}
|
|
309
308
|
}
|
|
310
309
|
|
|
311
|
-
// Compare columns ignoring the last character of column values
|
|
312
|
-
auto compare = [](const WideColumns& lhs, const WideColumns& rhs) {
|
|
313
|
-
if (lhs.size() != rhs.size()) {
|
|
314
|
-
return false;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
for (size_t i = 0; i < lhs.size(); ++i) {
|
|
318
|
-
if (lhs[i].name() != rhs[i].name()) {
|
|
319
|
-
return false;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
if (lhs[i].value().size() != rhs[i].value().size()) {
|
|
323
|
-
return false;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
if (lhs[i].value().difference_offset(rhs[i].value()) <
|
|
327
|
-
lhs[i].value().size() - 1) {
|
|
328
|
-
return false;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
return true;
|
|
333
|
-
};
|
|
334
|
-
|
|
335
310
|
for (size_t i = 0; i < num_keys; ++i) {
|
|
336
311
|
const WideColumns& columns = results[i].columns();
|
|
337
312
|
|
|
338
|
-
if (!
|
|
313
|
+
if (!CompareColumns(results[0].columns(), columns)) {
|
|
339
314
|
fprintf(stderr,
|
|
340
315
|
"GetEntity error: inconsistent entities for key %s: %s, %s\n",
|
|
341
316
|
StringToHex(key_suffix).c_str(),
|
|
@@ -372,6 +347,99 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
372
347
|
}
|
|
373
348
|
}
|
|
374
349
|
|
|
350
|
+
void TestMultiGetEntity(ThreadState* thread, const ReadOptions& read_opts,
|
|
351
|
+
const std::vector<int>& rand_column_families,
|
|
352
|
+
const std::vector<int64_t>& rand_keys) override {
|
|
353
|
+
assert(thread);
|
|
354
|
+
|
|
355
|
+
assert(!rand_column_families.empty());
|
|
356
|
+
assert(rand_column_families[0] >= 0);
|
|
357
|
+
assert(rand_column_families[0] < static_cast<int>(column_families_.size()));
|
|
358
|
+
|
|
359
|
+
ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
|
|
360
|
+
assert(cfh);
|
|
361
|
+
|
|
362
|
+
assert(!rand_keys.empty());
|
|
363
|
+
|
|
364
|
+
ManagedSnapshot snapshot_guard(db_);
|
|
365
|
+
|
|
366
|
+
ReadOptions read_opts_copy(read_opts);
|
|
367
|
+
read_opts_copy.snapshot = snapshot_guard.snapshot();
|
|
368
|
+
|
|
369
|
+
const size_t num_keys = rand_keys.size();
|
|
370
|
+
|
|
371
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
372
|
+
const std::string key_suffix = Key(rand_keys[i]);
|
|
373
|
+
|
|
374
|
+
constexpr size_t num_prefixes = 10;
|
|
375
|
+
|
|
376
|
+
std::array<std::string, num_prefixes> keys;
|
|
377
|
+
std::array<Slice, num_prefixes> key_slices;
|
|
378
|
+
std::array<PinnableWideColumns, num_prefixes> results;
|
|
379
|
+
std::array<Status, num_prefixes> statuses;
|
|
380
|
+
|
|
381
|
+
for (size_t j = 0; j < num_prefixes; ++j) {
|
|
382
|
+
keys[j] = std::to_string(j) + key_suffix;
|
|
383
|
+
key_slices[j] = keys[j];
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
db_->MultiGetEntity(read_opts_copy, cfh, num_prefixes, key_slices.data(),
|
|
387
|
+
results.data(), statuses.data());
|
|
388
|
+
|
|
389
|
+
for (size_t j = 0; j < num_prefixes; ++j) {
|
|
390
|
+
const Status& s = statuses[j];
|
|
391
|
+
|
|
392
|
+
if (!s.ok() && !s.IsNotFound()) {
|
|
393
|
+
fprintf(stderr, "MultiGetEntity error: %s\n", s.ToString().c_str());
|
|
394
|
+
thread->stats.AddErrors(1);
|
|
395
|
+
} else if (s.IsNotFound()) {
|
|
396
|
+
thread->stats.AddGets(1, 0);
|
|
397
|
+
} else {
|
|
398
|
+
thread->stats.AddGets(1, 1);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
const WideColumns& cmp_columns = results[0].columns();
|
|
402
|
+
const WideColumns& columns = results[j].columns();
|
|
403
|
+
|
|
404
|
+
if (!CompareColumns(cmp_columns, columns)) {
|
|
405
|
+
fprintf(stderr,
|
|
406
|
+
"MultiGetEntity error: inconsistent entities for key %s: %s, "
|
|
407
|
+
"%s\n",
|
|
408
|
+
StringToHex(key_suffix).c_str(),
|
|
409
|
+
WideColumnsToHex(cmp_columns).c_str(),
|
|
410
|
+
WideColumnsToHex(columns).c_str());
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if (!columns.empty()) {
|
|
414
|
+
// The last character of each column value should be 'j' as a decimal
|
|
415
|
+
// digit
|
|
416
|
+
const char expected = static_cast<char>('0' + j);
|
|
417
|
+
|
|
418
|
+
for (const auto& column : columns) {
|
|
419
|
+
const Slice& value = column.value();
|
|
420
|
+
|
|
421
|
+
if (value.empty() || value[value.size() - 1] != expected) {
|
|
422
|
+
fprintf(stderr,
|
|
423
|
+
"MultiGetEntity error: incorrect column value for key "
|
|
424
|
+
"%s, entity %s, column value %s, expected %c\n",
|
|
425
|
+
StringToHex(key_suffix).c_str(),
|
|
426
|
+
WideColumnsToHex(columns).c_str(),
|
|
427
|
+
value.ToString(/* hex */ true).c_str(), expected);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
if (!VerifyWideColumns(columns)) {
|
|
432
|
+
fprintf(stderr,
|
|
433
|
+
"MultiGetEntity error: inconsistent columns for key %s, "
|
|
434
|
+
"entity %s\n",
|
|
435
|
+
StringToHex(key_suffix).c_str(),
|
|
436
|
+
WideColumnsToHex(columns).c_str());
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
375
443
|
// Given a key, this does prefix scans for "0"+P, "1"+P, ..., "9"+P
|
|
376
444
|
// in the same snapshot where P is the first FLAGS_prefix_size - 1 bytes
|
|
377
445
|
// of the key. Each of these 10 scans returns a series of values;
|
|
@@ -493,6 +561,30 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
493
561
|
void VerifyDb(ThreadState* /* thread */) const override {}
|
|
494
562
|
|
|
495
563
|
void ContinuouslyVerifyDb(ThreadState* /* thread */) const override {}
|
|
564
|
+
|
|
565
|
+
// Compare columns ignoring the last character of column values
|
|
566
|
+
bool CompareColumns(const WideColumns& lhs, const WideColumns& rhs) {
|
|
567
|
+
if (lhs.size() != rhs.size()) {
|
|
568
|
+
return false;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
for (size_t i = 0; i < lhs.size(); ++i) {
|
|
572
|
+
if (lhs[i].name() != rhs[i].name()) {
|
|
573
|
+
return false;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
if (lhs[i].value().size() != rhs[i].value().size()) {
|
|
577
|
+
return false;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
if (lhs[i].value().difference_offset(rhs[i].value()) <
|
|
581
|
+
lhs[i].value().size() - 1) {
|
|
582
|
+
return false;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
return true;
|
|
587
|
+
}
|
|
496
588
|
};
|
|
497
589
|
|
|
498
590
|
StressTest* CreateBatchedOpsStressTest() { return new BatchedOpsStressTest(); }
|
|
@@ -391,6 +391,129 @@ class CfConsistencyStressTest : public StressTest {
|
|
|
391
391
|
}
|
|
392
392
|
}
|
|
393
393
|
|
|
394
|
+
void TestMultiGetEntity(ThreadState* thread, const ReadOptions& read_opts,
|
|
395
|
+
const std::vector<int>& rand_column_families,
|
|
396
|
+
const std::vector<int64_t>& rand_keys) override {
|
|
397
|
+
assert(thread);
|
|
398
|
+
assert(thread->shared);
|
|
399
|
+
assert(!rand_column_families.empty());
|
|
400
|
+
assert(!rand_keys.empty());
|
|
401
|
+
|
|
402
|
+
ManagedSnapshot snapshot_guard(db_);
|
|
403
|
+
|
|
404
|
+
ReadOptions read_opts_copy = read_opts;
|
|
405
|
+
read_opts_copy.snapshot = snapshot_guard.snapshot();
|
|
406
|
+
|
|
407
|
+
const size_t num_cfs = rand_column_families.size();
|
|
408
|
+
|
|
409
|
+
std::vector<ColumnFamilyHandle*> cfhs;
|
|
410
|
+
cfhs.reserve(num_cfs);
|
|
411
|
+
|
|
412
|
+
for (size_t j = 0; j < num_cfs; ++j) {
|
|
413
|
+
assert(rand_column_families[j] >= 0);
|
|
414
|
+
assert(rand_column_families[j] <
|
|
415
|
+
static_cast<int>(column_families_.size()));
|
|
416
|
+
|
|
417
|
+
ColumnFamilyHandle* const cfh = column_families_[rand_column_families[j]];
|
|
418
|
+
assert(cfh);
|
|
419
|
+
|
|
420
|
+
cfhs.emplace_back(cfh);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const size_t num_keys = rand_keys.size();
|
|
424
|
+
|
|
425
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
426
|
+
const std::string key = Key(rand_keys[i]);
|
|
427
|
+
|
|
428
|
+
std::vector<Slice> key_slices(num_cfs, key);
|
|
429
|
+
std::vector<PinnableWideColumns> results(num_cfs);
|
|
430
|
+
std::vector<Status> statuses(num_cfs);
|
|
431
|
+
|
|
432
|
+
db_->MultiGetEntity(read_opts_copy, num_cfs, cfhs.data(),
|
|
433
|
+
key_slices.data(), results.data(), statuses.data());
|
|
434
|
+
|
|
435
|
+
bool is_consistent = true;
|
|
436
|
+
|
|
437
|
+
for (size_t j = 0; j < num_cfs; ++j) {
|
|
438
|
+
const Status& s = statuses[j];
|
|
439
|
+
const Status& cmp_s = statuses[0];
|
|
440
|
+
const WideColumns& columns = results[j].columns();
|
|
441
|
+
const WideColumns& cmp_columns = results[0].columns();
|
|
442
|
+
|
|
443
|
+
if (!s.ok() && !s.IsNotFound()) {
|
|
444
|
+
fprintf(stderr, "TestMultiGetEntity error: %s\n",
|
|
445
|
+
s.ToString().c_str());
|
|
446
|
+
thread->stats.AddErrors(1);
|
|
447
|
+
break;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
assert(cmp_s.ok() || cmp_s.IsNotFound());
|
|
451
|
+
|
|
452
|
+
if (s.IsNotFound()) {
|
|
453
|
+
if (cmp_s.ok()) {
|
|
454
|
+
fprintf(
|
|
455
|
+
stderr,
|
|
456
|
+
"MultiGetEntity returns different results for key %s: CF %s "
|
|
457
|
+
"returns entity %s, CF %s returns not found\n",
|
|
458
|
+
StringToHex(key).c_str(), column_family_names_[0].c_str(),
|
|
459
|
+
WideColumnsToHex(cmp_columns).c_str(),
|
|
460
|
+
column_family_names_[j].c_str());
|
|
461
|
+
is_consistent = false;
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
continue;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
assert(s.ok());
|
|
469
|
+
if (cmp_s.IsNotFound()) {
|
|
470
|
+
fprintf(stderr,
|
|
471
|
+
"MultiGetEntity returns different results for key %s: CF %s "
|
|
472
|
+
"returns not found, CF %s returns entity %s\n",
|
|
473
|
+
StringToHex(key).c_str(), column_family_names_[0].c_str(),
|
|
474
|
+
column_family_names_[j].c_str(),
|
|
475
|
+
WideColumnsToHex(columns).c_str());
|
|
476
|
+
is_consistent = false;
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
if (columns != cmp_columns) {
|
|
481
|
+
fprintf(stderr,
|
|
482
|
+
"MultiGetEntity returns different results for key %s: CF %s "
|
|
483
|
+
"returns entity %s, CF %s returns entity %s\n",
|
|
484
|
+
StringToHex(key).c_str(), column_family_names_[0].c_str(),
|
|
485
|
+
WideColumnsToHex(cmp_columns).c_str(),
|
|
486
|
+
column_family_names_[j].c_str(),
|
|
487
|
+
WideColumnsToHex(columns).c_str());
|
|
488
|
+
is_consistent = false;
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
if (!VerifyWideColumns(columns)) {
|
|
493
|
+
fprintf(stderr,
|
|
494
|
+
"MultiGetEntity error: inconsistent columns for key %s, "
|
|
495
|
+
"entity %s\n",
|
|
496
|
+
StringToHex(key).c_str(), WideColumnsToHex(columns).c_str());
|
|
497
|
+
is_consistent = false;
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
if (!is_consistent) {
|
|
503
|
+
fprintf(stderr,
|
|
504
|
+
"TestMultiGetEntity error: results are not consistent\n");
|
|
505
|
+
thread->stats.AddErrors(1);
|
|
506
|
+
// Fail fast to preserve the DB state.
|
|
507
|
+
thread->shared->SetVerificationFailure();
|
|
508
|
+
break;
|
|
509
|
+
} else if (statuses[0].ok()) {
|
|
510
|
+
thread->stats.AddGets(1, 1);
|
|
511
|
+
} else if (statuses[0].IsNotFound()) {
|
|
512
|
+
thread->stats.AddGets(1, 0);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
394
517
|
Status TestPrefixScan(ThreadState* thread, const ReadOptions& readoptions,
|
|
395
518
|
const std::vector<int>& rand_column_families,
|
|
396
519
|
const std::vector<int64_t>& rand_keys) override {
|
|
@@ -214,6 +214,7 @@ DECLARE_uint64(snapshot_hold_ops);
|
|
|
214
214
|
DECLARE_bool(long_running_snapshots);
|
|
215
215
|
DECLARE_bool(use_multiget);
|
|
216
216
|
DECLARE_bool(use_get_entity);
|
|
217
|
+
DECLARE_bool(use_multi_get_entity);
|
|
217
218
|
DECLARE_int32(readpercent);
|
|
218
219
|
DECLARE_int32(prefixpercent);
|
|
219
220
|
DECLARE_int32(writepercent);
|
|
@@ -289,6 +290,7 @@ DECLARE_bool(paranoid_file_checks);
|
|
|
289
290
|
DECLARE_bool(fail_if_options_file_error);
|
|
290
291
|
DECLARE_uint64(batch_protection_bytes_per_key);
|
|
291
292
|
DECLARE_uint32(memtable_protection_bytes_per_key);
|
|
293
|
+
DECLARE_uint32(block_protection_bytes_per_key);
|
|
292
294
|
|
|
293
295
|
DECLARE_uint64(user_timestamp_size);
|
|
294
296
|
DECLARE_string(secondary_cache_uri);
|
|
@@ -310,6 +312,8 @@ DECLARE_int32(create_timestamped_snapshot_one_in);
|
|
|
310
312
|
|
|
311
313
|
DECLARE_bool(allow_data_in_errors);
|
|
312
314
|
|
|
315
|
+
DECLARE_bool(enable_thread_tracking);
|
|
316
|
+
|
|
313
317
|
// Tiered storage
|
|
314
318
|
DECLARE_bool(enable_tiered_storage); // set last_level_temperature
|
|
315
319
|
DECLARE_int64(preclude_last_level_data_seconds);
|
|
@@ -55,8 +55,7 @@ void ThreadBody(void* v) {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
bool RunStressTest(SharedState* shared) {
|
|
58
|
+
bool RunStressTestImpl(SharedState* shared) {
|
|
60
59
|
SystemClock* clock = db_stress_env->GetSystemClock().get();
|
|
61
60
|
StressTest* stress = shared->GetStressTest();
|
|
62
61
|
|
|
@@ -207,5 +206,11 @@ bool RunStressTest(SharedState* shared) {
|
|
|
207
206
|
}
|
|
208
207
|
return true;
|
|
209
208
|
}
|
|
209
|
+
bool RunStressTest(SharedState* shared) {
|
|
210
|
+
ThreadStatusUtil::RegisterThread(db_stress_env, ThreadStatus::USER);
|
|
211
|
+
bool result = RunStressTestImpl(shared);
|
|
212
|
+
ThreadStatusUtil::UnregisterThread();
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
210
215
|
} // namespace ROCKSDB_NAMESPACE
|
|
211
216
|
#endif // GFLAGS
|
|
@@ -10,8 +10,30 @@
|
|
|
10
10
|
#ifdef GFLAGS
|
|
11
11
|
#pragma once
|
|
12
12
|
#include "db_stress_tool/db_stress_common.h"
|
|
13
|
+
#include "monitoring/thread_status_util.h"
|
|
13
14
|
|
|
14
15
|
namespace ROCKSDB_NAMESPACE {
|
|
16
|
+
class DbStressRandomAccessFileWrapper : public FSRandomAccessFileOwnerWrapper {
|
|
17
|
+
public:
|
|
18
|
+
explicit DbStressRandomAccessFileWrapper(
|
|
19
|
+
std::unique_ptr<FSRandomAccessFile>&& target)
|
|
20
|
+
: FSRandomAccessFileOwnerWrapper(std::move(target)) {}
|
|
21
|
+
|
|
22
|
+
IOStatus Read(uint64_t offset, size_t n, const IOOptions& options,
|
|
23
|
+
Slice* result, char* scratch,
|
|
24
|
+
IODebugContext* dbg) const override {
|
|
25
|
+
#ifndef NDEBUG
|
|
26
|
+
const ThreadStatus::OperationType thread_op =
|
|
27
|
+
ThreadStatusUtil::GetThreadOperation();
|
|
28
|
+
Env::IOActivity io_activity =
|
|
29
|
+
ThreadStatusUtil::TEST_GetExpectedIOActivity(thread_op);
|
|
30
|
+
assert(io_activity == Env::IOActivity::kUnknown ||
|
|
31
|
+
io_activity == options.io_activity);
|
|
32
|
+
#endif
|
|
33
|
+
return target()->Read(offset, n, options, result, scratch, dbg);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
15
37
|
class DbStressFSWrapper : public FileSystemWrapper {
|
|
16
38
|
public:
|
|
17
39
|
explicit DbStressFSWrapper(const std::shared_ptr<FileSystem>& t)
|
|
@@ -19,6 +41,18 @@ class DbStressFSWrapper : public FileSystemWrapper {
|
|
|
19
41
|
static const char* kClassName() { return "DbStressFS"; }
|
|
20
42
|
const char* Name() const override { return kClassName(); }
|
|
21
43
|
|
|
44
|
+
IOStatus NewRandomAccessFile(const std::string& f,
|
|
45
|
+
const FileOptions& file_opts,
|
|
46
|
+
std::unique_ptr<FSRandomAccessFile>* r,
|
|
47
|
+
IODebugContext* dbg) override {
|
|
48
|
+
std::unique_ptr<FSRandomAccessFile> file;
|
|
49
|
+
IOStatus s = target()->NewRandomAccessFile(f, file_opts, &file, dbg);
|
|
50
|
+
if (s.ok()) {
|
|
51
|
+
r->reset(new DbStressRandomAccessFileWrapper(std::move(file)));
|
|
52
|
+
}
|
|
53
|
+
return s;
|
|
54
|
+
}
|
|
55
|
+
|
|
22
56
|
IOStatus DeleteFile(const std::string& f, const IOOptions& opts,
|
|
23
57
|
IODebugContext* dbg) override {
|
|
24
58
|
// We determine whether it is a manifest file by searching a strong,
|
|
@@ -749,6 +749,9 @@ DEFINE_bool(use_multiget, false,
|
|
|
749
749
|
|
|
750
750
|
DEFINE_bool(use_get_entity, false, "If set, use the GetEntity API for reads");
|
|
751
751
|
|
|
752
|
+
DEFINE_bool(use_multi_get_entity, false,
|
|
753
|
+
"If set, use the MultiGetEntity API for reads");
|
|
754
|
+
|
|
752
755
|
static bool ValidateInt32Percent(const char* flagname, int32_t value) {
|
|
753
756
|
if (value < 0 || value > 100) {
|
|
754
757
|
fprintf(stderr, "Invalid value for --%s: %d, 0<= pct <=100 \n", flagname,
|
|
@@ -972,6 +975,11 @@ DEFINE_uint32(
|
|
|
972
975
|
"specified number of bytes per key. Currently the supported "
|
|
973
976
|
"nonzero values are 1, 2, 4 and 8.");
|
|
974
977
|
|
|
978
|
+
DEFINE_uint32(block_protection_bytes_per_key, 0,
|
|
979
|
+
"If nonzero, enables integrity protection in blocks at the "
|
|
980
|
+
"specified number of bytes per key. Currently the supported "
|
|
981
|
+
"nonzero values are 1, 2, 4 and 8.");
|
|
982
|
+
|
|
975
983
|
DEFINE_string(file_checksum_impl, "none",
|
|
976
984
|
"Name of an implementation for file_checksum_gen_factory, or "
|
|
977
985
|
"\"none\" for null.");
|
|
@@ -1048,6 +1056,11 @@ DEFINE_bool(allow_data_in_errors,
|
|
|
1048
1056
|
ROCKSDB_NAMESPACE::Options().allow_data_in_errors,
|
|
1049
1057
|
"If true, allow logging data, e.g. key, value in LOG files.");
|
|
1050
1058
|
|
|
1059
|
+
DEFINE_bool(enable_thread_tracking,
|
|
1060
|
+
ROCKSDB_NAMESPACE::Options().enable_thread_tracking,
|
|
1061
|
+
"If true, the status of the threads involved in this DB will be "
|
|
1062
|
+
"tracked and available via GetThreadList() API.");
|
|
1063
|
+
|
|
1051
1064
|
DEFINE_int32(verify_iterator_with_expected_state_one_in, 0,
|
|
1052
1065
|
"If non-zero, when TestIterate() is to be called, there is a "
|
|
1053
1066
|
"1/verify_iterator_with_expected_state_one_in "
|
|
@@ -43,12 +43,6 @@ class StressTest;
|
|
|
43
43
|
// State shared by all concurrent executions of the same benchmark.
|
|
44
44
|
class SharedState {
|
|
45
45
|
public:
|
|
46
|
-
// indicates a key may have any value (or not be present) as an operation on
|
|
47
|
-
// it is incomplete.
|
|
48
|
-
static constexpr uint32_t UNKNOWN_SENTINEL = 0xfffffffe;
|
|
49
|
-
// indicates a key should definitely be deleted
|
|
50
|
-
static constexpr uint32_t DELETION_SENTINEL = 0xffffffff;
|
|
51
|
-
|
|
52
46
|
// Errors when reading filter blocks are ignored, so we use a thread
|
|
53
47
|
// local variable updated via sync points to keep track of errors injected
|
|
54
48
|
// while reading filter blocks in order to ignore the Get/MultiGet result
|
|
@@ -254,54 +248,70 @@ class SharedState {
|
|
|
254
248
|
return expected_state_manager_->ClearColumnFamily(cf);
|
|
255
249
|
}
|
|
256
250
|
|
|
257
|
-
//
|
|
258
|
-
//
|
|
259
|
-
//
|
|
251
|
+
// Prepare a Put that will be started but not finish yet
|
|
252
|
+
// This is useful for crash-recovery testing when the process may crash
|
|
253
|
+
// before updating the corresponding expected value
|
|
260
254
|
//
|
|
261
|
-
// Requires external locking covering `key` in `cf
|
|
262
|
-
|
|
263
|
-
|
|
255
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
256
|
+
// write or delete to the same `key`.
|
|
257
|
+
PendingExpectedValue PreparePut(int cf, int64_t key) {
|
|
258
|
+
return expected_state_manager_->PreparePut(cf, key);
|
|
264
259
|
}
|
|
265
260
|
|
|
266
|
-
//
|
|
267
|
-
|
|
261
|
+
// Does not requires external locking.
|
|
262
|
+
ExpectedValue Get(int cf, int64_t key) {
|
|
268
263
|
return expected_state_manager_->Get(cf, key);
|
|
269
264
|
}
|
|
270
265
|
|
|
271
|
-
//
|
|
272
|
-
//
|
|
266
|
+
// Prepare a Delete that will be started but not finish yet
|
|
267
|
+
// This is useful for crash-recovery testing when the process may crash
|
|
268
|
+
// before updating the corresponding expected value
|
|
273
269
|
//
|
|
274
|
-
// Requires external locking covering `key` in `cf
|
|
275
|
-
|
|
276
|
-
|
|
270
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
271
|
+
// write or delete to the same `key`.
|
|
272
|
+
PendingExpectedValue PrepareDelete(int cf, int64_t key) {
|
|
273
|
+
return expected_state_manager_->PrepareDelete(cf, key);
|
|
277
274
|
}
|
|
278
275
|
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
bool SingleDelete(int cf, int64_t key, bool pending) {
|
|
284
|
-
return expected_state_manager_->Delete(cf, key, pending);
|
|
276
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
277
|
+
// write or delete to the same `key`.
|
|
278
|
+
PendingExpectedValue PrepareSingleDelete(int cf, int64_t key) {
|
|
279
|
+
return expected_state_manager_->PrepareSingleDelete(cf, key);
|
|
285
280
|
}
|
|
286
281
|
|
|
287
|
-
//
|
|
288
|
-
//
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
return expected_state_manager_->
|
|
293
|
-
pending);
|
|
282
|
+
// Requires external locking covering keys in `[begin_key, end_key)` in `cf`
|
|
283
|
+
// to prevent concurrent write or delete to the same `key`.
|
|
284
|
+
std::vector<PendingExpectedValue> PrepareDeleteRange(int cf,
|
|
285
|
+
int64_t begin_key,
|
|
286
|
+
int64_t end_key) {
|
|
287
|
+
return expected_state_manager_->PrepareDeleteRange(cf, begin_key, end_key);
|
|
294
288
|
}
|
|
295
289
|
|
|
296
290
|
bool AllowsOverwrite(int64_t key) const {
|
|
297
291
|
return no_overwrite_ids_.find(key) == no_overwrite_ids_.end();
|
|
298
292
|
}
|
|
299
293
|
|
|
300
|
-
// Requires external locking covering `key` in `cf
|
|
294
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
295
|
+
// delete to the same `key`.
|
|
301
296
|
bool Exists(int cf, int64_t key) {
|
|
302
297
|
return expected_state_manager_->Exists(cf, key);
|
|
303
298
|
}
|
|
304
299
|
|
|
300
|
+
// Sync the `value_base` to the corresponding expected value
|
|
301
|
+
void SyncPut(int cf, int64_t key, uint32_t value_base) {
|
|
302
|
+
return expected_state_manager_->SyncPut(cf, key, value_base);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// Sync the corresponding expected value to be pending Put
|
|
306
|
+
void SyncPendingPut(int cf, int64_t key) {
|
|
307
|
+
return expected_state_manager_->SyncPendingPut(cf, key);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Sync the corresponding expected value to be deleted
|
|
311
|
+
void SyncDelete(int cf, int64_t key) {
|
|
312
|
+
return expected_state_manager_->SyncDelete(cf, key);
|
|
313
|
+
}
|
|
314
|
+
|
|
305
315
|
uint32_t GetSeed() const { return seed_; }
|
|
306
316
|
|
|
307
317
|
void SetShouldStopBgThread() { should_stop_bg_thread_ = true; }
|
|
@@ -483,12 +483,13 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
483
483
|
for (int64_t k = 0; k != number_of_keys; ++k) {
|
|
484
484
|
const std::string key = Key(k);
|
|
485
485
|
|
|
486
|
-
|
|
486
|
+
PendingExpectedValue pending_expected_value =
|
|
487
|
+
shared->PreparePut(cf_idx, k);
|
|
488
|
+
const uint32_t value_base = pending_expected_value.GetFinalValueBase();
|
|
487
489
|
const size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
488
490
|
|
|
489
491
|
const Slice v(value, sz);
|
|
490
492
|
|
|
491
|
-
shared->Put(cf_idx, k, value_base, true /* pending */);
|
|
492
493
|
|
|
493
494
|
std::string ts;
|
|
494
495
|
if (FLAGS_user_timestamp_size > 0) {
|
|
@@ -534,7 +535,7 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
534
535
|
}
|
|
535
536
|
}
|
|
536
537
|
|
|
537
|
-
|
|
538
|
+
pending_expected_value.Commit();
|
|
538
539
|
if (!s.ok()) {
|
|
539
540
|
break;
|
|
540
541
|
}
|
|
@@ -614,8 +615,7 @@ void StressTest::ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
|
|
|
614
615
|
for (wbwi_iter->SeekToFirst(); wbwi_iter->Valid(); wbwi_iter->Next()) {
|
|
615
616
|
uint64_t key_val;
|
|
616
617
|
if (GetIntVal(wbwi_iter->Entry().key.ToString(), &key_val)) {
|
|
617
|
-
shared->
|
|
618
|
-
0 /* value_base */, true /* pending */);
|
|
618
|
+
shared->SyncPendingPut(static_cast<int>(i) /* cf_idx */, key_val);
|
|
619
619
|
}
|
|
620
620
|
}
|
|
621
621
|
}
|
|
@@ -985,7 +985,22 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
985
985
|
if (prob_op >= 0 && prob_op < static_cast<int>(FLAGS_readpercent)) {
|
|
986
986
|
assert(0 <= prob_op);
|
|
987
987
|
// OPERATION read
|
|
988
|
-
if (
|
|
988
|
+
if (FLAGS_use_multi_get_entity) {
|
|
989
|
+
constexpr uint64_t max_batch_size = 64;
|
|
990
|
+
const uint64_t batch_size = std::min(
|
|
991
|
+
static_cast<uint64_t>(thread->rand.Uniform(max_batch_size)) + 1,
|
|
992
|
+
ops_per_open - i);
|
|
993
|
+
assert(batch_size >= 1);
|
|
994
|
+
assert(batch_size <= max_batch_size);
|
|
995
|
+
assert(i + batch_size <= ops_per_open);
|
|
996
|
+
|
|
997
|
+
rand_keys = GenerateNKeys(thread, static_cast<int>(batch_size), i);
|
|
998
|
+
|
|
999
|
+
TestMultiGetEntity(thread, read_opts, rand_column_families,
|
|
1000
|
+
rand_keys);
|
|
1001
|
+
|
|
1002
|
+
i += batch_size - 1;
|
|
1003
|
+
} else if (FLAGS_use_get_entity) {
|
|
989
1004
|
TestGetEntity(thread, read_opts, rand_column_families, rand_keys);
|
|
990
1005
|
} else if (FLAGS_use_multiget) {
|
|
991
1006
|
// Leave room for one more iteration of the loop with a single key
|
|
@@ -1820,19 +1835,11 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
|
1820
1835
|
Options tmp_opts(options_);
|
|
1821
1836
|
tmp_opts.listeners.clear();
|
|
1822
1837
|
tmp_opts.env = db_stress_env;
|
|
1838
|
+
// Avoid delayed deletion so whole directory can be deleted
|
|
1839
|
+
tmp_opts.sst_file_manager.reset();
|
|
1823
1840
|
|
|
1824
1841
|
DestroyDB(checkpoint_dir, tmp_opts);
|
|
1825
1842
|
|
|
1826
|
-
if (db_stress_env->FileExists(checkpoint_dir).ok()) {
|
|
1827
|
-
// If the directory might still exist, try to delete the files one by one.
|
|
1828
|
-
// Likely a trash file is still there.
|
|
1829
|
-
Status my_s = DestroyDir(db_stress_env, checkpoint_dir);
|
|
1830
|
-
if (!my_s.ok()) {
|
|
1831
|
-
fprintf(stderr, "Fail to destory directory before checkpoint: %s",
|
|
1832
|
-
my_s.ToString().c_str());
|
|
1833
|
-
}
|
|
1834
|
-
}
|
|
1835
|
-
|
|
1836
1843
|
Checkpoint* checkpoint = nullptr;
|
|
1837
1844
|
Status s = Checkpoint::Create(db_, &checkpoint);
|
|
1838
1845
|
if (s.ok()) {
|
|
@@ -2387,6 +2394,8 @@ void StressTest::PrintEnv() const {
|
|
|
2387
2394
|
FLAGS_use_multiget ? "true" : "false");
|
|
2388
2395
|
fprintf(stdout, "Use GetEntity : %s\n",
|
|
2389
2396
|
FLAGS_use_get_entity ? "true" : "false");
|
|
2397
|
+
fprintf(stdout, "Use MultiGetEntity : %s\n",
|
|
2398
|
+
FLAGS_use_multi_get_entity ? "true" : "false");
|
|
2390
2399
|
|
|
2391
2400
|
const char* memtablerep = "";
|
|
2392
2401
|
switch (FLAGS_rep_factory) {
|
|
@@ -2662,7 +2671,7 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2662
2671
|
// wait for all compactions to finish to make sure DB is in
|
|
2663
2672
|
// clean state before executing queries.
|
|
2664
2673
|
s = static_cast_with_check<DBImpl>(db_->GetRootDB())
|
|
2665
|
-
->WaitForCompact(
|
|
2674
|
+
->WaitForCompact();
|
|
2666
2675
|
if (!s.ok()) {
|
|
2667
2676
|
for (auto cf : column_families_) {
|
|
2668
2677
|
delete cf;
|
|
@@ -3113,6 +3122,7 @@ void InitializeOptionsFromFlags(
|
|
|
3113
3122
|
FLAGS_verify_sst_unique_id_in_manifest;
|
|
3114
3123
|
options.memtable_protection_bytes_per_key =
|
|
3115
3124
|
FLAGS_memtable_protection_bytes_per_key;
|
|
3125
|
+
options.block_protection_bytes_per_key = FLAGS_block_protection_bytes_per_key;
|
|
3116
3126
|
|
|
3117
3127
|
// Integrated BlobDB
|
|
3118
3128
|
options.enable_blob_files = FLAGS_enable_blob_files;
|
|
@@ -3198,6 +3208,8 @@ void InitializeOptionsFromFlags(
|
|
|
3198
3208
|
}
|
|
3199
3209
|
|
|
3200
3210
|
options.allow_data_in_errors = FLAGS_allow_data_in_errors;
|
|
3211
|
+
|
|
3212
|
+
options.enable_thread_tracking = FLAGS_enable_thread_tracking;
|
|
3201
3213
|
}
|
|
3202
3214
|
|
|
3203
3215
|
void InitializeOptionsGeneral(
|
|
@@ -98,6 +98,11 @@ class StressTest {
|
|
|
98
98
|
const std::vector<int>& rand_column_families,
|
|
99
99
|
const std::vector<int64_t>& rand_keys) = 0;
|
|
100
100
|
|
|
101
|
+
virtual void TestMultiGetEntity(ThreadState* thread,
|
|
102
|
+
const ReadOptions& read_opts,
|
|
103
|
+
const std::vector<int>& rand_column_families,
|
|
104
|
+
const std::vector<int64_t>& rand_keys) = 0;
|
|
105
|
+
|
|
101
106
|
virtual Status TestPrefixScan(ThreadState* thread,
|
|
102
107
|
const ReadOptions& read_opts,
|
|
103
108
|
const std::vector<int>& rand_column_families,
|