@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
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// Use of this source code is governed by a BSD-style license that can be
|
|
8
8
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
9
9
|
|
|
10
|
+
#include "db_stress_tool/expected_state.h"
|
|
10
11
|
#ifdef GFLAGS
|
|
11
12
|
#include "db_stress_tool/db_stress_common.h"
|
|
12
13
|
#include "rocksdb/utilities/transaction_db.h"
|
|
@@ -121,8 +122,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
|
|
124
|
-
/* msg_prefix */ "Iterator verification", s
|
|
125
|
-
/* strict */ true);
|
|
125
|
+
/* msg_prefix */ "Iterator verification", s);
|
|
126
126
|
|
|
127
127
|
if (!from_db.empty()) {
|
|
128
128
|
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
|
|
@@ -141,8 +141,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
141
141
|
Status s = db_->Get(options, column_families_[cf], key, &from_db);
|
|
142
142
|
|
|
143
143
|
VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
|
|
144
|
-
/* msg_prefix */ "Get verification", s
|
|
145
|
-
/* strict */ true);
|
|
144
|
+
/* msg_prefix */ "Get verification", s);
|
|
146
145
|
|
|
147
146
|
if (!from_db.empty()) {
|
|
148
147
|
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
|
|
@@ -178,8 +177,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
|
|
181
|
-
/* msg_prefix */ "GetEntity verification", s
|
|
182
|
-
/* strict */ true);
|
|
180
|
+
/* msg_prefix */ "GetEntity verification", s);
|
|
183
181
|
|
|
184
182
|
if (!from_db.empty()) {
|
|
185
183
|
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
|
|
@@ -214,7 +212,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
214
212
|
|
|
215
213
|
VerifyOrSyncValue(static_cast<int>(cf), i + j, options, shared,
|
|
216
214
|
from_db, /* msg_prefix */ "MultiGet verification",
|
|
217
|
-
statuses[j]
|
|
215
|
+
statuses[j]);
|
|
218
216
|
|
|
219
217
|
if (!from_db.empty()) {
|
|
220
218
|
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i + j),
|
|
@@ -264,10 +262,9 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
264
262
|
}
|
|
265
263
|
}
|
|
266
264
|
|
|
267
|
-
VerifyOrSyncValue(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
statuses[j], /* strict */ true);
|
|
265
|
+
VerifyOrSyncValue(
|
|
266
|
+
static_cast<int>(cf), i + j, options, shared, from_db,
|
|
267
|
+
/* msg_prefix */ "MultiGetEntity verification", statuses[j]);
|
|
271
268
|
|
|
272
269
|
if (!from_db.empty()) {
|
|
273
270
|
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i + j),
|
|
@@ -319,8 +316,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
319
316
|
}
|
|
320
317
|
|
|
321
318
|
VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
|
|
322
|
-
/* msg_prefix */ "GetMergeOperands verification",
|
|
323
|
-
|
|
319
|
+
/* msg_prefix */ "GetMergeOperands verification",
|
|
320
|
+
s);
|
|
324
321
|
|
|
325
322
|
if (!from_db.empty()) {
|
|
326
323
|
PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
|
|
@@ -479,9 +476,6 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
479
476
|
SharedState::ignore_read_error = false;
|
|
480
477
|
}
|
|
481
478
|
|
|
482
|
-
std::unique_ptr<MutexLock> lock(new MutexLock(
|
|
483
|
-
thread->shared->GetMutexForKey(rand_column_families[0], rand_keys[0])));
|
|
484
|
-
|
|
485
479
|
ReadOptions read_opts_copy = read_opts;
|
|
486
480
|
std::string read_ts_str;
|
|
487
481
|
Slice read_ts_slice;
|
|
@@ -493,7 +487,11 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
493
487
|
bool read_older_ts = MaybeUseOlderTimestampForPointLookup(
|
|
494
488
|
thread, read_ts_str, read_ts_slice, read_opts_copy);
|
|
495
489
|
|
|
490
|
+
const ExpectedValue pre_read_expected_value =
|
|
491
|
+
thread->shared->Get(rand_column_families[0], rand_keys[0]);
|
|
496
492
|
Status s = db_->Get(read_opts_copy, cfh, key, &from_db);
|
|
493
|
+
const ExpectedValue post_read_expected_value =
|
|
494
|
+
thread->shared->Get(rand_column_families[0], rand_keys[0]);
|
|
497
495
|
if (fault_fs_guard) {
|
|
498
496
|
error_count = fault_fs_guard->GetAndResetErrorCount();
|
|
499
497
|
}
|
|
@@ -512,23 +510,35 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
512
510
|
// found case
|
|
513
511
|
thread->stats.AddGets(1, 1);
|
|
514
512
|
// we only have the latest expected state
|
|
515
|
-
if (!FLAGS_skip_verifydb && !read_older_ts
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
513
|
+
if (!FLAGS_skip_verifydb && !read_older_ts) {
|
|
514
|
+
if (ExpectedValueHelper::MustHaveNotExisted(pre_read_expected_value,
|
|
515
|
+
post_read_expected_value)) {
|
|
516
|
+
thread->shared->SetVerificationFailure();
|
|
517
|
+
fprintf(stderr,
|
|
518
|
+
"error : inconsistent values for key %s: Get returns %s, "
|
|
519
|
+
"but expected state is \"deleted\".\n",
|
|
520
|
+
key.ToString(true).c_str(), StringToHex(from_db).c_str());
|
|
521
|
+
}
|
|
522
|
+
Slice from_db_slice(from_db);
|
|
523
|
+
uint32_t value_base_from_db = GetValueBase(from_db_slice);
|
|
524
|
+
if (!ExpectedValueHelper::InExpectedValueBaseRange(
|
|
525
|
+
value_base_from_db, pre_read_expected_value,
|
|
526
|
+
post_read_expected_value)) {
|
|
527
|
+
thread->shared->SetVerificationFailure();
|
|
528
|
+
fprintf(stderr,
|
|
529
|
+
"error : inconsistent values for key %s: Get returns %s with "
|
|
530
|
+
"value base %d that falls out of expected state's value base "
|
|
531
|
+
"range.\n",
|
|
532
|
+
key.ToString(true).c_str(), StringToHex(from_db).c_str(),
|
|
533
|
+
value_base_from_db);
|
|
534
|
+
}
|
|
523
535
|
}
|
|
524
536
|
} else if (s.IsNotFound()) {
|
|
525
537
|
// not found case
|
|
526
538
|
thread->stats.AddGets(1, 0);
|
|
527
539
|
if (!FLAGS_skip_verifydb && !read_older_ts) {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
if (expected != SharedState::DELETION_SENTINEL &&
|
|
531
|
-
expected != SharedState::UNKNOWN_SENTINEL) {
|
|
540
|
+
if (ExpectedValueHelper::MustHaveExisted(pre_read_expected_value,
|
|
541
|
+
post_read_expected_value)) {
|
|
532
542
|
thread->shared->SetVerificationFailure();
|
|
533
543
|
fprintf(stderr,
|
|
534
544
|
"error : inconsistent values for key %s: expected state has "
|
|
@@ -611,8 +621,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
611
621
|
switch (op) {
|
|
612
622
|
case 0:
|
|
613
623
|
case 1: {
|
|
614
|
-
uint32_t value_base =
|
|
615
|
-
thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
|
|
624
|
+
const uint32_t value_base = 0;
|
|
616
625
|
char value[100];
|
|
617
626
|
size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
618
627
|
Slice v(value, sz);
|
|
@@ -803,15 +812,16 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
803
812
|
|
|
804
813
|
if (!FLAGS_skip_verifydb) {
|
|
805
814
|
const WideColumns& columns = from_db.columns();
|
|
806
|
-
|
|
815
|
+
ExpectedValue expected =
|
|
816
|
+
shared->Get(rand_column_families[0], rand_keys[0]);
|
|
807
817
|
if (!VerifyWideColumns(columns)) {
|
|
808
818
|
shared->SetVerificationFailure();
|
|
809
819
|
fprintf(stderr,
|
|
810
820
|
"error : inconsistent columns returned by GetEntity for key "
|
|
811
821
|
"%s: %s\n",
|
|
812
822
|
StringToHex(key).c_str(), WideColumnsToHex(columns).c_str());
|
|
813
|
-
} else if (
|
|
814
|
-
|
|
823
|
+
} else if (ExpectedValueHelper::MustHaveNotExisted(expected,
|
|
824
|
+
expected)) {
|
|
815
825
|
shared->SetVerificationFailure();
|
|
816
826
|
fprintf(
|
|
817
827
|
stderr,
|
|
@@ -824,9 +834,9 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
824
834
|
thread->stats.AddGets(1, 0);
|
|
825
835
|
|
|
826
836
|
if (!FLAGS_skip_verifydb) {
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
837
|
+
ExpectedValue expected =
|
|
838
|
+
shared->Get(rand_column_families[0], rand_keys[0]);
|
|
839
|
+
if (ExpectedValueHelper::MustHaveExisted(expected, expected)) {
|
|
830
840
|
shared->SetVerificationFailure();
|
|
831
841
|
fprintf(stderr,
|
|
832
842
|
"error : inconsistent values for key %s: expected state has "
|
|
@@ -847,6 +857,157 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
847
857
|
}
|
|
848
858
|
}
|
|
849
859
|
|
|
860
|
+
void TestMultiGetEntity(ThreadState* thread, const ReadOptions& read_opts,
|
|
861
|
+
const std::vector<int>& rand_column_families,
|
|
862
|
+
const std::vector<int64_t>& rand_keys) override {
|
|
863
|
+
assert(thread);
|
|
864
|
+
|
|
865
|
+
ManagedSnapshot snapshot_guard(db_);
|
|
866
|
+
|
|
867
|
+
ReadOptions read_opts_copy(read_opts);
|
|
868
|
+
read_opts_copy.snapshot = snapshot_guard.snapshot();
|
|
869
|
+
|
|
870
|
+
assert(!rand_column_families.empty());
|
|
871
|
+
assert(rand_column_families[0] >= 0);
|
|
872
|
+
assert(rand_column_families[0] < static_cast<int>(column_families_.size()));
|
|
873
|
+
|
|
874
|
+
ColumnFamilyHandle* const cfh = column_families_[rand_column_families[0]];
|
|
875
|
+
assert(cfh);
|
|
876
|
+
|
|
877
|
+
assert(!rand_keys.empty());
|
|
878
|
+
|
|
879
|
+
const size_t num_keys = rand_keys.size();
|
|
880
|
+
|
|
881
|
+
std::vector<std::string> keys(num_keys);
|
|
882
|
+
std::vector<Slice> key_slices(num_keys);
|
|
883
|
+
|
|
884
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
885
|
+
keys[i] = Key(rand_keys[i]);
|
|
886
|
+
key_slices[i] = keys[i];
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
std::vector<PinnableWideColumns> results(num_keys);
|
|
890
|
+
std::vector<Status> statuses(num_keys);
|
|
891
|
+
|
|
892
|
+
if (fault_fs_guard) {
|
|
893
|
+
fault_fs_guard->EnableErrorInjection();
|
|
894
|
+
SharedState::ignore_read_error = false;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
db_->MultiGetEntity(read_opts_copy, cfh, num_keys, key_slices.data(),
|
|
898
|
+
results.data(), statuses.data());
|
|
899
|
+
|
|
900
|
+
int error_count = 0;
|
|
901
|
+
|
|
902
|
+
if (fault_fs_guard) {
|
|
903
|
+
error_count = fault_fs_guard->GetAndResetErrorCount();
|
|
904
|
+
|
|
905
|
+
if (error_count && !SharedState::ignore_read_error) {
|
|
906
|
+
int stat_nok = 0;
|
|
907
|
+
for (const auto& s : statuses) {
|
|
908
|
+
if (!s.ok() && !s.IsNotFound()) {
|
|
909
|
+
stat_nok++;
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
if (stat_nok < error_count) {
|
|
914
|
+
// Grab mutex so multiple threads don't try to print the
|
|
915
|
+
// stack trace at the same time
|
|
916
|
+
assert(thread->shared);
|
|
917
|
+
MutexLock l(thread->shared->GetMutex());
|
|
918
|
+
|
|
919
|
+
fprintf(stderr, "Didn't get expected error from MultiGetEntity\n");
|
|
920
|
+
fprintf(stderr, "num_keys %zu Expected %d errors, seen %d\n",
|
|
921
|
+
num_keys, error_count, stat_nok);
|
|
922
|
+
fprintf(stderr, "Call stack that injected the fault\n");
|
|
923
|
+
fault_fs_guard->PrintFaultBacktrace();
|
|
924
|
+
std::terminate();
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
fault_fs_guard->DisableErrorInjection();
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
const bool check_get_entity = !error_count && thread->rand.OneIn(4);
|
|
932
|
+
|
|
933
|
+
for (size_t i = 0; i < num_keys; ++i) {
|
|
934
|
+
const Status& s = statuses[i];
|
|
935
|
+
|
|
936
|
+
bool is_consistent = true;
|
|
937
|
+
|
|
938
|
+
if (s.ok() && !VerifyWideColumns(results[i].columns())) {
|
|
939
|
+
fprintf(
|
|
940
|
+
stderr,
|
|
941
|
+
"error : inconsistent columns returned by MultiGetEntity for key "
|
|
942
|
+
"%s: %s\n",
|
|
943
|
+
StringToHex(keys[i]).c_str(),
|
|
944
|
+
WideColumnsToHex(results[i].columns()).c_str());
|
|
945
|
+
is_consistent = false;
|
|
946
|
+
} else if (check_get_entity && (s.ok() || s.IsNotFound())) {
|
|
947
|
+
PinnableWideColumns cmp_result;
|
|
948
|
+
|
|
949
|
+
const Status cmp_s =
|
|
950
|
+
db_->GetEntity(read_opts_copy, cfh, key_slices[i], &cmp_result);
|
|
951
|
+
|
|
952
|
+
if (!cmp_s.ok() && !cmp_s.IsNotFound()) {
|
|
953
|
+
fprintf(stderr, "GetEntity error: %s\n", cmp_s.ToString().c_str());
|
|
954
|
+
is_consistent = false;
|
|
955
|
+
} else if (cmp_s.IsNotFound()) {
|
|
956
|
+
if (s.ok()) {
|
|
957
|
+
fprintf(stderr,
|
|
958
|
+
"Inconsistent results for key %s: MultiGetEntity returned "
|
|
959
|
+
"ok, GetEntity returned not found\n",
|
|
960
|
+
StringToHex(keys[i]).c_str());
|
|
961
|
+
is_consistent = false;
|
|
962
|
+
}
|
|
963
|
+
} else {
|
|
964
|
+
assert(cmp_s.ok());
|
|
965
|
+
|
|
966
|
+
if (s.IsNotFound()) {
|
|
967
|
+
fprintf(stderr,
|
|
968
|
+
"Inconsistent results for key %s: MultiGetEntity returned "
|
|
969
|
+
"not found, GetEntity returned ok\n",
|
|
970
|
+
StringToHex(keys[i]).c_str());
|
|
971
|
+
is_consistent = false;
|
|
972
|
+
} else {
|
|
973
|
+
assert(s.ok());
|
|
974
|
+
|
|
975
|
+
if (results[i] != cmp_result) {
|
|
976
|
+
fprintf(
|
|
977
|
+
stderr,
|
|
978
|
+
"Inconsistent results for key %s: MultiGetEntity returned "
|
|
979
|
+
"%s, GetEntity returned %s\n",
|
|
980
|
+
StringToHex(keys[i]).c_str(),
|
|
981
|
+
WideColumnsToHex(results[i].columns()).c_str(),
|
|
982
|
+
WideColumnsToHex(cmp_result.columns()).c_str());
|
|
983
|
+
is_consistent = false;
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
if (!is_consistent) {
|
|
990
|
+
fprintf(stderr,
|
|
991
|
+
"TestMultiGetEntity error: results are not consistent\n");
|
|
992
|
+
thread->stats.AddErrors(1);
|
|
993
|
+
// Fail fast to preserve the DB state
|
|
994
|
+
thread->shared->SetVerificationFailure();
|
|
995
|
+
break;
|
|
996
|
+
} else if (s.ok()) {
|
|
997
|
+
thread->stats.AddGets(1, 1);
|
|
998
|
+
} else if (s.IsNotFound()) {
|
|
999
|
+
thread->stats.AddGets(1, 0);
|
|
1000
|
+
} else {
|
|
1001
|
+
if (error_count == 0) {
|
|
1002
|
+
fprintf(stderr, "MultiGetEntity error: %s\n", s.ToString().c_str());
|
|
1003
|
+
thread->stats.AddErrors(1);
|
|
1004
|
+
} else {
|
|
1005
|
+
thread->stats.AddVerifiedErrors(1);
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
|
|
850
1011
|
Status TestPrefixScan(ThreadState* thread, const ReadOptions& read_opts,
|
|
851
1012
|
const std::vector<int>& rand_column_families,
|
|
852
1013
|
const std::vector<int64_t>& rand_keys) override {
|
|
@@ -982,16 +1143,17 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
982
1143
|
Status s = db_->Get(read_opts, cfh, k, &from_db);
|
|
983
1144
|
if (!VerifyOrSyncValue(rand_column_family, rand_key, read_opts, shared,
|
|
984
1145
|
/* msg_prefix */ "Pre-Put Get verification",
|
|
985
|
-
from_db, s
|
|
1146
|
+
from_db, s)) {
|
|
986
1147
|
return s;
|
|
987
1148
|
}
|
|
988
1149
|
}
|
|
989
1150
|
|
|
990
|
-
|
|
1151
|
+
PendingExpectedValue pending_expected_value =
|
|
1152
|
+
shared->PreparePut(rand_column_family, rand_key);
|
|
1153
|
+
const uint32_t value_base = pending_expected_value.GetFinalValueBase();
|
|
991
1154
|
const size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
992
1155
|
const Slice v(value, sz);
|
|
993
1156
|
|
|
994
|
-
shared->Put(rand_column_family, rand_key, value_base, true /* pending */);
|
|
995
1157
|
|
|
996
1158
|
Status s;
|
|
997
1159
|
|
|
@@ -1035,7 +1197,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1035
1197
|
}
|
|
1036
1198
|
}
|
|
1037
1199
|
|
|
1038
|
-
|
|
1200
|
+
pending_expected_value.Commit();
|
|
1039
1201
|
|
|
1040
1202
|
if (!s.ok()) {
|
|
1041
1203
|
if (FLAGS_injest_error_severity >= 2) {
|
|
@@ -1080,7 +1242,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1080
1242
|
// otherwise.
|
|
1081
1243
|
Status s;
|
|
1082
1244
|
if (shared->AllowsOverwrite(rand_key)) {
|
|
1083
|
-
|
|
1245
|
+
PendingExpectedValue pending_expected_value =
|
|
1246
|
+
shared->PrepareDelete(rand_column_family, rand_key);
|
|
1084
1247
|
if (!FLAGS_use_txn) {
|
|
1085
1248
|
if (FLAGS_user_timestamp_size == 0) {
|
|
1086
1249
|
s = db_->Delete(write_opts, cfh, key);
|
|
@@ -1097,7 +1260,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1097
1260
|
}
|
|
1098
1261
|
}
|
|
1099
1262
|
}
|
|
1100
|
-
|
|
1263
|
+
pending_expected_value.Commit();
|
|
1264
|
+
|
|
1101
1265
|
thread->stats.AddDeletes(1);
|
|
1102
1266
|
if (!s.ok()) {
|
|
1103
1267
|
if (FLAGS_injest_error_severity >= 2) {
|
|
@@ -1115,7 +1279,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1115
1279
|
}
|
|
1116
1280
|
}
|
|
1117
1281
|
} else {
|
|
1118
|
-
|
|
1282
|
+
PendingExpectedValue pending_expected_value =
|
|
1283
|
+
shared->PrepareSingleDelete(rand_column_family, rand_key);
|
|
1119
1284
|
if (!FLAGS_use_txn) {
|
|
1120
1285
|
if (FLAGS_user_timestamp_size == 0) {
|
|
1121
1286
|
s = db_->SingleDelete(write_opts, cfh, key);
|
|
@@ -1132,7 +1297,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1132
1297
|
}
|
|
1133
1298
|
}
|
|
1134
1299
|
}
|
|
1135
|
-
|
|
1300
|
+
pending_expected_value.Commit();
|
|
1136
1301
|
thread->stats.AddSingleDeletes(1);
|
|
1137
1302
|
if (!s.ok()) {
|
|
1138
1303
|
if (FLAGS_injest_error_severity >= 2) {
|
|
@@ -1177,10 +1342,10 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1177
1342
|
shared->GetMutexForKey(rand_column_family, rand_key + j)));
|
|
1178
1343
|
}
|
|
1179
1344
|
}
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1345
|
+
std::vector<PendingExpectedValue> pending_expected_values =
|
|
1346
|
+
shared->PrepareDeleteRange(rand_column_family, rand_key,
|
|
1347
|
+
rand_key + FLAGS_range_deletion_width);
|
|
1348
|
+
const int covered = static_cast<int>(pending_expected_values.size());
|
|
1184
1349
|
std::string keystr = Key(rand_key);
|
|
1185
1350
|
Slice key = keystr;
|
|
1186
1351
|
auto cfh = column_families_[rand_column_family];
|
|
@@ -1210,9 +1375,10 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1210
1375
|
std::terminate();
|
|
1211
1376
|
}
|
|
1212
1377
|
}
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1378
|
+
for (PendingExpectedValue& pending_expected_value :
|
|
1379
|
+
pending_expected_values) {
|
|
1380
|
+
pending_expected_value.Commit();
|
|
1381
|
+
}
|
|
1216
1382
|
thread->stats.AddRangeDeletions(1);
|
|
1217
1383
|
thread->stats.AddCoveredByRangeDeletions(covered);
|
|
1218
1384
|
return s;
|
|
@@ -1242,6 +1408,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1242
1408
|
keys.reserve(FLAGS_ingest_external_file_width);
|
|
1243
1409
|
std::vector<uint32_t> values;
|
|
1244
1410
|
values.reserve(FLAGS_ingest_external_file_width);
|
|
1411
|
+
std::vector<PendingExpectedValue> pending_expected_values;
|
|
1412
|
+
pending_expected_values.reserve(FLAGS_ingest_external_file_width);
|
|
1245
1413
|
SharedState* shared = thread->shared;
|
|
1246
1414
|
|
|
1247
1415
|
assert(FLAGS_nooverwritepercent < 100);
|
|
@@ -1256,15 +1424,16 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1256
1424
|
new MutexLock(shared->GetMutexForKey(column_family, key)));
|
|
1257
1425
|
}
|
|
1258
1426
|
if (!shared->AllowsOverwrite(key)) {
|
|
1259
|
-
// We could alternatively include `key`
|
|
1260
|
-
// value is `DELETION_SENTINEL`.
|
|
1427
|
+
// We could alternatively include `key` that is deleted.
|
|
1261
1428
|
continue;
|
|
1262
1429
|
}
|
|
1263
1430
|
keys.push_back(key);
|
|
1264
1431
|
|
|
1265
|
-
|
|
1432
|
+
PendingExpectedValue pending_expected_value =
|
|
1433
|
+
shared->PreparePut(column_family, key);
|
|
1434
|
+
const uint32_t value_base = pending_expected_value.GetFinalValueBase();
|
|
1266
1435
|
values.push_back(value_base);
|
|
1267
|
-
|
|
1436
|
+
pending_expected_values.push_back(pending_expected_value);
|
|
1268
1437
|
|
|
1269
1438
|
char value[100];
|
|
1270
1439
|
size_t value_len = GenerateValue(value_base, value, sizeof(value));
|
|
@@ -1287,8 +1456,9 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1287
1456
|
fprintf(stderr, "file ingestion error: %s\n", s.ToString().c_str());
|
|
1288
1457
|
std::terminate();
|
|
1289
1458
|
}
|
|
1290
|
-
|
|
1291
|
-
|
|
1459
|
+
|
|
1460
|
+
for (size_t i = 0; i < pending_expected_values.size(); ++i) {
|
|
1461
|
+
pending_expected_values[i].Commit();
|
|
1292
1462
|
}
|
|
1293
1463
|
}
|
|
1294
1464
|
|
|
@@ -1320,8 +1490,13 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1320
1490
|
// Lock the whole range over which we might iterate to ensure it doesn't
|
|
1321
1491
|
// change under us.
|
|
1322
1492
|
const int rand_column_family = rand_column_families[0];
|
|
1323
|
-
|
|
1324
|
-
|
|
1493
|
+
|
|
1494
|
+
// Testing parallel read and write to the same key with user timestamp
|
|
1495
|
+
// is not currently supported
|
|
1496
|
+
std::vector<std::unique_ptr<MutexLock>> range_locks;
|
|
1497
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
1498
|
+
range_locks = shared->GetLocksForKeyRange(rand_column_family, lb, ub);
|
|
1499
|
+
}
|
|
1325
1500
|
|
|
1326
1501
|
ReadOptions ro(read_opts);
|
|
1327
1502
|
ro.total_order_seek = true;
|
|
@@ -1348,7 +1523,22 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1348
1523
|
ColumnFamilyHandle* const cfh = column_families_[rand_column_family];
|
|
1349
1524
|
assert(cfh);
|
|
1350
1525
|
|
|
1526
|
+
const std::size_t expected_values_size = static_cast<std::size_t>(ub - lb);
|
|
1527
|
+
std::vector<ExpectedValue> pre_read_expected_values;
|
|
1528
|
+
std::vector<ExpectedValue> post_read_expected_values;
|
|
1529
|
+
|
|
1530
|
+
for (int64_t i = 0; i < static_cast<int64_t>(expected_values_size); ++i) {
|
|
1531
|
+
pre_read_expected_values.push_back(
|
|
1532
|
+
shared->Get(rand_column_family, i + lb));
|
|
1533
|
+
}
|
|
1351
1534
|
std::unique_ptr<Iterator> iter(db_->NewIterator(ro, cfh));
|
|
1535
|
+
for (int64_t i = 0; i < static_cast<int64_t>(expected_values_size); ++i) {
|
|
1536
|
+
post_read_expected_values.push_back(
|
|
1537
|
+
shared->Get(rand_column_family, i + lb));
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
assert(pre_read_expected_values.size() == expected_values_size &&
|
|
1541
|
+
pre_read_expected_values.size() == post_read_expected_values.size());
|
|
1352
1542
|
|
|
1353
1543
|
std::string op_logs;
|
|
1354
1544
|
|
|
@@ -1378,10 +1568,15 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1378
1568
|
|
|
1379
1569
|
auto check_no_key_in_range = [&](int64_t start, int64_t end) {
|
|
1380
1570
|
for (auto j = std::max(start, lb); j < std::min(end, ub); ++j) {
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1571
|
+
std::size_t index = static_cast<std::size_t>(j - lb);
|
|
1572
|
+
assert(index < pre_read_expected_values.size() &&
|
|
1573
|
+
index < post_read_expected_values.size());
|
|
1574
|
+
const ExpectedValue pre_read_expected_value =
|
|
1575
|
+
pre_read_expected_values[index];
|
|
1576
|
+
const ExpectedValue post_read_expected_value =
|
|
1577
|
+
post_read_expected_values[index];
|
|
1578
|
+
if (ExpectedValueHelper::MustHaveExisted(pre_read_expected_value,
|
|
1579
|
+
post_read_expected_value)) {
|
|
1385
1580
|
// Fail fast to preserve the DB state.
|
|
1386
1581
|
thread->shared->SetVerificationFailure();
|
|
1387
1582
|
if (iter->Valid()) {
|
|
@@ -1495,9 +1690,23 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1495
1690
|
}
|
|
1496
1691
|
|
|
1497
1692
|
if (thread->rand.OneIn(2)) {
|
|
1693
|
+
pre_read_expected_values.clear();
|
|
1694
|
+
post_read_expected_values.clear();
|
|
1498
1695
|
// Refresh after forward/backward scan to allow higher chance of SV
|
|
1499
|
-
// change.
|
|
1696
|
+
// change.
|
|
1697
|
+
for (int64_t i = 0; i < static_cast<int64_t>(expected_values_size); ++i) {
|
|
1698
|
+
pre_read_expected_values.push_back(
|
|
1699
|
+
shared->Get(rand_column_family, i + lb));
|
|
1700
|
+
}
|
|
1500
1701
|
iter->Refresh();
|
|
1702
|
+
for (int64_t i = 0; i < static_cast<int64_t>(expected_values_size); ++i) {
|
|
1703
|
+
post_read_expected_values.push_back(
|
|
1704
|
+
shared->Get(rand_column_family, i + lb));
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
assert(pre_read_expected_values.size() == expected_values_size &&
|
|
1708
|
+
pre_read_expected_values.size() ==
|
|
1709
|
+
post_read_expected_values.size());
|
|
1501
1710
|
}
|
|
1502
1711
|
|
|
1503
1712
|
// start from middle of [lb, ub) otherwise it is easy to iterate out of
|
|
@@ -1539,9 +1748,19 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1539
1748
|
iter->Prev();
|
|
1540
1749
|
op_logs += "P";
|
|
1541
1750
|
} else {
|
|
1542
|
-
const uint32_t
|
|
1543
|
-
|
|
1544
|
-
|
|
1751
|
+
const uint32_t value_base_from_db = GetValueBase(iter->value());
|
|
1752
|
+
std::size_t index = static_cast<std::size_t>(curr - lb);
|
|
1753
|
+
assert(index < pre_read_expected_values.size() &&
|
|
1754
|
+
index < post_read_expected_values.size());
|
|
1755
|
+
const ExpectedValue pre_read_expected_value =
|
|
1756
|
+
pre_read_expected_values[index];
|
|
1757
|
+
const ExpectedValue post_read_expected_value =
|
|
1758
|
+
post_read_expected_values[index];
|
|
1759
|
+
if (ExpectedValueHelper::MustHaveNotExisted(pre_read_expected_value,
|
|
1760
|
+
post_read_expected_value) ||
|
|
1761
|
+
!ExpectedValueHelper::InExpectedValueBaseRange(
|
|
1762
|
+
value_base_from_db, pre_read_expected_value,
|
|
1763
|
+
post_read_expected_value)) {
|
|
1545
1764
|
// Fail fast to preserve the DB state.
|
|
1546
1765
|
thread->shared->SetVerificationFailure();
|
|
1547
1766
|
fprintf(stderr, "Iterator has key %s, but expected state does not.\n",
|
|
@@ -1597,59 +1816,70 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1597
1816
|
|
|
1598
1817
|
bool VerifyOrSyncValue(int cf, int64_t key, const ReadOptions& /*opts*/,
|
|
1599
1818
|
SharedState* shared, const std::string& value_from_db,
|
|
1600
|
-
std::string msg_prefix, const Status& s
|
|
1601
|
-
bool strict = false) const {
|
|
1819
|
+
std::string msg_prefix, const Status& s) const {
|
|
1602
1820
|
if (shared->HasVerificationFailedYet()) {
|
|
1603
1821
|
return false;
|
|
1604
1822
|
}
|
|
1823
|
+
const ExpectedValue expected_value = shared->Get(cf, key);
|
|
1605
1824
|
|
|
1606
|
-
|
|
1607
|
-
uint32_t value_base = shared->Get(cf, key);
|
|
1608
|
-
if (value_base == SharedState::UNKNOWN_SENTINEL) {
|
|
1825
|
+
if (expected_value.PendingWrite() || expected_value.PendingDelete()) {
|
|
1609
1826
|
if (s.ok()) {
|
|
1610
1827
|
// Value exists in db, update state to reflect that
|
|
1611
1828
|
Slice slice(value_from_db);
|
|
1612
|
-
value_base = GetValueBase(slice);
|
|
1613
|
-
shared->
|
|
1829
|
+
uint32_t value_base = GetValueBase(slice);
|
|
1830
|
+
shared->SyncPut(cf, key, value_base);
|
|
1614
1831
|
} else if (s.IsNotFound()) {
|
|
1615
1832
|
// Value doesn't exist in db, update state to reflect that
|
|
1616
|
-
shared->
|
|
1833
|
+
shared->SyncDelete(cf, key);
|
|
1617
1834
|
}
|
|
1618
1835
|
return true;
|
|
1619
1836
|
}
|
|
1620
|
-
if (value_base == SharedState::DELETION_SENTINEL && !strict) {
|
|
1621
|
-
return true;
|
|
1622
|
-
}
|
|
1623
1837
|
|
|
1838
|
+
// compare value_from_db with the value in the shared state
|
|
1624
1839
|
if (s.ok()) {
|
|
1625
|
-
|
|
1626
|
-
|
|
1840
|
+
const Slice slice(value_from_db);
|
|
1841
|
+
const uint32_t value_base_from_db = GetValueBase(slice);
|
|
1842
|
+
if (ExpectedValueHelper::MustHaveNotExisted(expected_value,
|
|
1843
|
+
expected_value) ||
|
|
1844
|
+
!ExpectedValueHelper::InExpectedValueBaseRange(
|
|
1845
|
+
value_base_from_db, expected_value, expected_value)) {
|
|
1627
1846
|
VerificationAbort(shared, msg_prefix + ": Unexpected value found", cf,
|
|
1628
1847
|
key, value_from_db, "");
|
|
1629
1848
|
return false;
|
|
1630
1849
|
}
|
|
1631
|
-
|
|
1632
|
-
|
|
1850
|
+
char expected_value_data[kValueMaxLen];
|
|
1851
|
+
size_t expected_value_data_size =
|
|
1852
|
+
GenerateValue(expected_value.GetValueBase(), expected_value_data,
|
|
1853
|
+
sizeof(expected_value_data));
|
|
1854
|
+
if (value_from_db.length() != expected_value_data_size) {
|
|
1633
1855
|
VerificationAbort(shared,
|
|
1634
1856
|
msg_prefix + ": Length of value read is not equal",
|
|
1635
|
-
cf, key, value_from_db,
|
|
1857
|
+
cf, key, value_from_db,
|
|
1858
|
+
Slice(expected_value_data, expected_value_data_size));
|
|
1636
1859
|
return false;
|
|
1637
1860
|
}
|
|
1638
|
-
if (memcmp(value_from_db.data(),
|
|
1861
|
+
if (memcmp(value_from_db.data(), expected_value_data,
|
|
1862
|
+
expected_value_data_size) != 0) {
|
|
1639
1863
|
VerificationAbort(shared,
|
|
1640
1864
|
msg_prefix + ": Contents of value read don't match",
|
|
1641
|
-
cf, key, value_from_db,
|
|
1865
|
+
cf, key, value_from_db,
|
|
1866
|
+
Slice(expected_value_data, expected_value_data_size));
|
|
1642
1867
|
return false;
|
|
1643
1868
|
}
|
|
1644
|
-
} else {
|
|
1645
|
-
if (
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1869
|
+
} else if (s.IsNotFound()) {
|
|
1870
|
+
if (ExpectedValueHelper::MustHaveExisted(expected_value,
|
|
1871
|
+
expected_value)) {
|
|
1872
|
+
char expected_value_data[kValueMaxLen];
|
|
1873
|
+
size_t expected_value_data_size =
|
|
1874
|
+
GenerateValue(expected_value.GetValueBase(), expected_value_data,
|
|
1875
|
+
sizeof(expected_value_data));
|
|
1876
|
+
VerificationAbort(
|
|
1877
|
+
shared, msg_prefix + ": Value not found: " + s.ToString(), cf, key,
|
|
1878
|
+
"", Slice(expected_value_data, expected_value_data_size));
|
|
1651
1879
|
return false;
|
|
1652
1880
|
}
|
|
1881
|
+
} else {
|
|
1882
|
+
assert(false);
|
|
1653
1883
|
}
|
|
1654
1884
|
return true;
|
|
1655
1885
|
}
|