@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,6 +31,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
31
31
|
namespace {
|
|
32
32
|
static std::shared_ptr<ROCKSDB_NAMESPACE::Env> env_guard;
|
|
33
33
|
static std::shared_ptr<ROCKSDB_NAMESPACE::Env> env_wrapper_guard;
|
|
34
|
+
static std::shared_ptr<ROCKSDB_NAMESPACE::Env> legacy_env_wrapper_guard;
|
|
34
35
|
static std::shared_ptr<ROCKSDB_NAMESPACE::CompositeEnvWrapper>
|
|
35
36
|
dbsl_env_wrapper_guard;
|
|
36
37
|
static std::shared_ptr<CompositeEnvWrapper> fault_env_guard;
|
|
@@ -104,7 +105,11 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
104
105
|
// legacy EnvWrapper. This is a workaround to prevent MultiGet and scans
|
|
105
106
|
// from failing when IO uring is disabled. The EnvWrapper
|
|
106
107
|
// has a default implementation of ReadAsync that redirects to Read.
|
|
107
|
-
|
|
108
|
+
legacy_env_wrapper_guard = std::make_shared<EnvWrapper>(raw_env);
|
|
109
|
+
env_wrapper_guard = std::make_shared<CompositeEnvWrapper>(
|
|
110
|
+
legacy_env_wrapper_guard,
|
|
111
|
+
std::make_shared<DbStressFSWrapper>(
|
|
112
|
+
legacy_env_wrapper_guard->GetFileSystem()));
|
|
108
113
|
}
|
|
109
114
|
db_stress_env = env_wrapper_guard.get();
|
|
110
115
|
|
|
@@ -3,88 +3,125 @@
|
|
|
3
3
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
4
|
// (found in the LICENSE.Apache file in the root directory).
|
|
5
5
|
|
|
6
|
+
#include <atomic>
|
|
6
7
|
#ifdef GFLAGS
|
|
7
8
|
|
|
8
|
-
#include "db_stress_tool/expected_state.h"
|
|
9
9
|
|
|
10
10
|
#include "db/wide/wide_column_serialization.h"
|
|
11
11
|
#include "db_stress_tool/db_stress_common.h"
|
|
12
12
|
#include "db_stress_tool/db_stress_shared_state.h"
|
|
13
|
+
#include "db_stress_tool/expected_state.h"
|
|
13
14
|
#include "rocksdb/trace_reader_writer.h"
|
|
14
15
|
#include "rocksdb/trace_record_result.h"
|
|
15
16
|
|
|
16
17
|
namespace ROCKSDB_NAMESPACE {
|
|
17
|
-
|
|
18
18
|
ExpectedState::ExpectedState(size_t max_key, size_t num_column_families)
|
|
19
19
|
: max_key_(max_key),
|
|
20
20
|
num_column_families_(num_column_families),
|
|
21
21
|
values_(nullptr) {}
|
|
22
22
|
|
|
23
23
|
void ExpectedState::ClearColumnFamily(int cf) {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const uint32_t del_mask = ExpectedValue::GetDelMask();
|
|
25
|
+
std::fill(&Value(cf, 0 /* key */), &Value(cf + 1, 0 /* key */), del_mask);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
void ExpectedState::
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
Value(cf, key).store(pending ? SharedState::UNKNOWN_SENTINEL : value_base,
|
|
35
|
-
std::memory_order_relaxed);
|
|
36
|
-
if (pending) {
|
|
37
|
-
// prevent Write from reordering before expected-value update
|
|
38
|
-
std::atomic_thread_fence(std::memory_order_release);
|
|
39
|
-
}
|
|
28
|
+
void ExpectedState::Precommit(int cf, int64_t key, const ExpectedValue& value) {
|
|
29
|
+
Value(cf, key).store(value.Read());
|
|
30
|
+
// To prevent low-level instruction reordering that results
|
|
31
|
+
// in db write happens before setting pending state in expected value
|
|
32
|
+
std::atomic_thread_fence(std::memory_order_release);
|
|
40
33
|
}
|
|
41
34
|
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
PendingExpectedValue ExpectedState::PreparePut(int cf, int64_t key) {
|
|
36
|
+
ExpectedValue expected_value = Load(cf, key);
|
|
37
|
+
const ExpectedValue orig_expected_value = expected_value;
|
|
38
|
+
expected_value.Put(true /* pending */);
|
|
39
|
+
const ExpectedValue pending_expected_value = expected_value;
|
|
40
|
+
expected_value.Put(false /* pending */);
|
|
41
|
+
const ExpectedValue final_expected_value = expected_value;
|
|
42
|
+
Precommit(cf, key, pending_expected_value);
|
|
43
|
+
return PendingExpectedValue(&Value(cf, key), orig_expected_value,
|
|
44
|
+
final_expected_value);
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
ExpectedValue ExpectedState::Get(int cf, int64_t key) { return Load(cf, key); }
|
|
48
|
+
|
|
49
|
+
PendingExpectedValue ExpectedState::PrepareDelete(int cf, int64_t key,
|
|
50
|
+
bool* prepared) {
|
|
51
|
+
ExpectedValue expected_value = Load(cf, key);
|
|
52
|
+
const ExpectedValue orig_expected_value = expected_value;
|
|
53
|
+
bool res = expected_value.Delete(true /* pending */);
|
|
54
|
+
if (prepared) {
|
|
55
|
+
*prepared = res;
|
|
56
|
+
}
|
|
57
|
+
if (!res) {
|
|
58
|
+
return PendingExpectedValue(&Value(cf, key), orig_expected_value,
|
|
59
|
+
orig_expected_value);
|
|
60
|
+
}
|
|
61
|
+
const ExpectedValue pending_expected_value = expected_value;
|
|
62
|
+
expected_value.Delete(false /* pending */);
|
|
63
|
+
const ExpectedValue final_expected_value = expected_value;
|
|
64
|
+
Precommit(cf, key, pending_expected_value);
|
|
65
|
+
return PendingExpectedValue(&Value(cf, key), orig_expected_value,
|
|
66
|
+
final_expected_value);
|
|
52
67
|
}
|
|
53
68
|
|
|
54
|
-
|
|
55
|
-
return
|
|
69
|
+
PendingExpectedValue ExpectedState::PrepareSingleDelete(int cf, int64_t key) {
|
|
70
|
+
return PrepareDelete(cf, key);
|
|
56
71
|
}
|
|
57
72
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
std::vector<PendingExpectedValue> ExpectedState::PrepareDeleteRange(
|
|
74
|
+
int cf, int64_t begin_key, int64_t end_key) {
|
|
75
|
+
std::vector<PendingExpectedValue> pending_expected_values;
|
|
61
76
|
for (int64_t key = begin_key; key < end_key; ++key) {
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
bool prepared = false;
|
|
78
|
+
PendingExpectedValue pending_expected_value =
|
|
79
|
+
PrepareDelete(cf, key, &prepared);
|
|
80
|
+
if (prepared) {
|
|
81
|
+
pending_expected_values.push_back(pending_expected_value);
|
|
64
82
|
}
|
|
65
83
|
}
|
|
66
|
-
return
|
|
84
|
+
return pending_expected_values;
|
|
67
85
|
}
|
|
68
86
|
|
|
69
87
|
bool ExpectedState::Exists(int cf, int64_t key) {
|
|
70
|
-
|
|
71
|
-
// is disallowed can't be accidentally added a second time, in which case
|
|
72
|
-
// SingleDelete wouldn't be able to properly delete the key. It does allow
|
|
73
|
-
// the case where a SingleDelete might be added which covers nothing, but
|
|
74
|
-
// that's not a correctness issue.
|
|
75
|
-
uint32_t expected_value = Value(cf, key).load();
|
|
76
|
-
return expected_value != SharedState::DELETION_SENTINEL;
|
|
88
|
+
return Load(cf, key).Exists();
|
|
77
89
|
}
|
|
78
90
|
|
|
79
91
|
void ExpectedState::Reset() {
|
|
92
|
+
const uint32_t del_mask = ExpectedValue::GetDelMask();
|
|
80
93
|
for (size_t i = 0; i < num_column_families_; ++i) {
|
|
81
94
|
for (size_t j = 0; j < max_key_; ++j) {
|
|
82
|
-
Value(static_cast<int>(i), j)
|
|
83
|
-
.store(SharedState::DELETION_SENTINEL, std::memory_order_relaxed);
|
|
95
|
+
Value(static_cast<int>(i), j).store(del_mask, std::memory_order_relaxed);
|
|
84
96
|
}
|
|
85
97
|
}
|
|
86
98
|
}
|
|
87
99
|
|
|
100
|
+
void ExpectedState::SyncPut(int cf, int64_t key, uint32_t value_base) {
|
|
101
|
+
ExpectedValue expected_value = Load(cf, key);
|
|
102
|
+
expected_value.SyncPut(value_base);
|
|
103
|
+
Value(cf, key).store(expected_value.Read());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
void ExpectedState::SyncPendingPut(int cf, int64_t key) {
|
|
107
|
+
ExpectedValue expected_value = Load(cf, key);
|
|
108
|
+
expected_value.SyncPendingPut();
|
|
109
|
+
Value(cf, key).store(expected_value.Read());
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void ExpectedState::SyncDelete(int cf, int64_t key) {
|
|
113
|
+
ExpectedValue expected_value = Load(cf, key);
|
|
114
|
+
expected_value.SyncDelete();
|
|
115
|
+
Value(cf, key).store(expected_value.Read());
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
void ExpectedState::SyncDeleteRange(int cf, int64_t begin_key,
|
|
119
|
+
int64_t end_key) {
|
|
120
|
+
for (int64_t key = begin_key; key < end_key; ++key) {
|
|
121
|
+
SyncDelete(cf, key);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
88
125
|
FileExpectedState::FileExpectedState(std::string expected_state_file_path,
|
|
89
126
|
size_t max_key, size_t num_column_families)
|
|
90
127
|
: ExpectedState(max_key, num_column_families),
|
|
@@ -385,7 +422,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
|
|
|
385
422
|
if (!GetIntVal(key.ToString(), &key_id)) {
|
|
386
423
|
return Status::Corruption("unable to parse key", key.ToString());
|
|
387
424
|
}
|
|
388
|
-
uint32_t
|
|
425
|
+
uint32_t value_base = GetValueBase(value);
|
|
389
426
|
|
|
390
427
|
bool should_buffer_write = !(buffered_writes_ == nullptr);
|
|
391
428
|
if (should_buffer_write) {
|
|
@@ -393,8 +430,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
|
|
|
393
430
|
key, value);
|
|
394
431
|
}
|
|
395
432
|
|
|
396
|
-
state_->
|
|
397
|
-
false /* pending */);
|
|
433
|
+
state_->SyncPut(column_family_id, static_cast<int64_t>(key_id), value_base);
|
|
398
434
|
++num_write_ops_;
|
|
399
435
|
return Status::OK();
|
|
400
436
|
}
|
|
@@ -431,8 +467,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
|
|
|
431
467
|
|
|
432
468
|
const uint32_t value_base = GetValueBase(columns.front().value());
|
|
433
469
|
|
|
434
|
-
state_->
|
|
435
|
-
false /* pending */);
|
|
470
|
+
state_->SyncPut(column_family_id, static_cast<int64_t>(key_id), value_base);
|
|
436
471
|
|
|
437
472
|
++num_write_ops_;
|
|
438
473
|
|
|
@@ -454,8 +489,7 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
|
|
|
454
489
|
column_family_id, key);
|
|
455
490
|
}
|
|
456
491
|
|
|
457
|
-
state_->
|
|
458
|
-
false /* pending */);
|
|
492
|
+
state_->SyncDelete(column_family_id, static_cast<int64_t>(key_id));
|
|
459
493
|
++num_write_ops_;
|
|
460
494
|
return Status::OK();
|
|
461
495
|
}
|
|
@@ -499,8 +533,9 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
|
|
|
499
533
|
buffered_writes_.get(), column_family_id, begin_key, end_key);
|
|
500
534
|
}
|
|
501
535
|
|
|
502
|
-
state_->
|
|
503
|
-
|
|
536
|
+
state_->SyncDeleteRange(column_family_id,
|
|
537
|
+
static_cast<int64_t>(begin_key_id),
|
|
538
|
+
static_cast<int64_t>(end_key_id));
|
|
504
539
|
++num_write_ops_;
|
|
505
540
|
return Status::OK();
|
|
506
541
|
}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include <memory>
|
|
14
14
|
|
|
15
15
|
#include "db/dbformat.h"
|
|
16
|
+
#include "db_stress_tool/expected_value.h"
|
|
16
17
|
#include "file/file_util.h"
|
|
17
18
|
#include "rocksdb/db.h"
|
|
18
19
|
#include "rocksdb/env.h"
|
|
@@ -22,9 +23,8 @@
|
|
|
22
23
|
#include "util/string_util.h"
|
|
23
24
|
|
|
24
25
|
namespace ROCKSDB_NAMESPACE {
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
// key.
|
|
26
|
+
// `ExpectedState` provides read/write access to expected values stored in
|
|
27
|
+
// `ExpectedState` for every key.
|
|
28
28
|
class ExpectedState {
|
|
29
29
|
public:
|
|
30
30
|
explicit ExpectedState(size_t max_key, size_t num_column_families);
|
|
@@ -38,43 +38,79 @@ class ExpectedState {
|
|
|
38
38
|
// Requires external locking covering all keys in `cf`.
|
|
39
39
|
void ClearColumnFamily(int cf);
|
|
40
40
|
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
41
|
+
// Prepare a Put that will be started but not finished yet
|
|
42
|
+
// This is useful for crash-recovery testing when the process may crash
|
|
43
|
+
// before updating the corresponding expected value
|
|
44
44
|
//
|
|
45
|
-
// Requires external locking covering `key` in `cf
|
|
46
|
-
|
|
45
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
46
|
+
// write or delete to the same `key`.
|
|
47
|
+
PendingExpectedValue PreparePut(int cf, int64_t key);
|
|
47
48
|
|
|
48
|
-
//
|
|
49
|
-
|
|
49
|
+
// Does not requires external locking.
|
|
50
|
+
ExpectedValue Get(int cf, int64_t key);
|
|
50
51
|
|
|
51
|
-
//
|
|
52
|
-
//
|
|
52
|
+
// Prepare a Delete that will be started but not finished yet
|
|
53
|
+
// This is useful for crash-recovery testing when the process may crash
|
|
54
|
+
// before updating the corresponding expected value
|
|
53
55
|
//
|
|
54
|
-
// Requires external locking covering `key` in `cf
|
|
55
|
-
|
|
56
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
57
|
+
// write or delete to the same `key`.
|
|
58
|
+
PendingExpectedValue PrepareDelete(int cf, int64_t key,
|
|
59
|
+
bool* prepared = nullptr);
|
|
60
|
+
|
|
61
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
62
|
+
// write or delete to the same `key`.
|
|
63
|
+
PendingExpectedValue PrepareSingleDelete(int cf, int64_t key);
|
|
64
|
+
|
|
65
|
+
// Requires external locking covering keys in `[begin_key, end_key)` in `cf`
|
|
66
|
+
// to prevent concurrent write or delete to the same `key`.
|
|
67
|
+
std::vector<PendingExpectedValue> PrepareDeleteRange(int cf,
|
|
68
|
+
int64_t begin_key,
|
|
69
|
+
int64_t end_key);
|
|
70
|
+
|
|
71
|
+
// Update the expected value for start of an incomplete write or delete
|
|
72
|
+
// operation on the key assoicated with this expected value
|
|
73
|
+
void Precommit(int cf, int64_t key, const ExpectedValue& value);
|
|
74
|
+
|
|
75
|
+
// Requires external locking covering `key` in `cf` to prevent concurrent
|
|
76
|
+
// delete to the same `key`.
|
|
77
|
+
bool Exists(int cf, int64_t key);
|
|
56
78
|
|
|
57
|
-
//
|
|
58
|
-
// Returns true if the key was not yet deleted.
|
|
79
|
+
// Sync the `value_base` to the corresponding expected value
|
|
59
80
|
//
|
|
60
|
-
// Requires external locking covering `key` in `cf
|
|
61
|
-
|
|
81
|
+
// Requires external locking covering `key` in `cf` or be in single thread
|
|
82
|
+
// to prevent concurrent write or delete to the same `key`
|
|
83
|
+
void SyncPut(int cf, int64_t key, uint32_t value_base);
|
|
62
84
|
|
|
63
|
-
//
|
|
64
|
-
// Returns number of keys deleted by the call.
|
|
85
|
+
// Sync the corresponding expected value to be pending Put
|
|
65
86
|
//
|
|
66
|
-
// Requires external locking covering
|
|
67
|
-
|
|
87
|
+
// Requires external locking covering `key` in `cf` or be in single thread
|
|
88
|
+
// to prevent concurrent write or delete to the same `key`
|
|
89
|
+
void SyncPendingPut(int cf, int64_t key);
|
|
68
90
|
|
|
69
|
-
//
|
|
70
|
-
|
|
91
|
+
// Sync the corresponding expected value to be deleted
|
|
92
|
+
//
|
|
93
|
+
// Requires external locking covering `key` in `cf` or be in single thread
|
|
94
|
+
// to prevent concurrent write or delete to the same `key`
|
|
95
|
+
void SyncDelete(int cf, int64_t key);
|
|
96
|
+
|
|
97
|
+
// Sync the corresponding expected values to be deleted
|
|
98
|
+
//
|
|
99
|
+
// Requires external locking covering keys in `[begin_key, end_key)` in `cf`
|
|
100
|
+
// to prevent concurrent write or delete to the same `key`
|
|
101
|
+
void SyncDeleteRange(int cf, int64_t begin_key, int64_t end_key);
|
|
71
102
|
|
|
72
103
|
private:
|
|
73
|
-
//
|
|
104
|
+
// Does not requires external locking.
|
|
74
105
|
std::atomic<uint32_t>& Value(int cf, int64_t key) const {
|
|
75
106
|
return values_[cf * max_key_ + key];
|
|
76
107
|
}
|
|
77
108
|
|
|
109
|
+
// Does not requires external locking
|
|
110
|
+
ExpectedValue Load(int cf, int64_t key) const {
|
|
111
|
+
return ExpectedValue(Value(cf, key).load());
|
|
112
|
+
}
|
|
113
|
+
|
|
78
114
|
const size_t max_key_;
|
|
79
115
|
const size_t num_column_families_;
|
|
80
116
|
|
|
@@ -160,45 +196,52 @@ class ExpectedStateManager {
|
|
|
160
196
|
// Requires external locking covering all keys in `cf`.
|
|
161
197
|
void ClearColumnFamily(int cf) { return latest_->ClearColumnFamily(cf); }
|
|
162
198
|
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
//
|
|
167
|
-
// Requires external locking covering `key` in `cf`.
|
|
168
|
-
void Put(int cf, int64_t key, uint32_t value_base, bool pending) {
|
|
169
|
-
return latest_->Put(cf, key, value_base, pending);
|
|
199
|
+
// See ExpectedState::PreparePut()
|
|
200
|
+
PendingExpectedValue PreparePut(int cf, int64_t key) {
|
|
201
|
+
return latest_->PreparePut(cf, key);
|
|
170
202
|
}
|
|
171
203
|
|
|
172
|
-
//
|
|
173
|
-
|
|
204
|
+
// See ExpectedState::Get()
|
|
205
|
+
ExpectedValue Get(int cf, int64_t key) { return latest_->Get(cf, key); }
|
|
174
206
|
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
// Requires external locking covering `key` in `cf`.
|
|
179
|
-
bool Delete(int cf, int64_t key, bool pending) {
|
|
180
|
-
return latest_->Delete(cf, key, pending);
|
|
207
|
+
// See ExpectedState::PrepareDelete()
|
|
208
|
+
PendingExpectedValue PrepareDelete(int cf, int64_t key) {
|
|
209
|
+
return latest_->PrepareDelete(cf, key);
|
|
181
210
|
}
|
|
182
211
|
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
// Requires external locking covering `key` in `cf`.
|
|
187
|
-
bool SingleDelete(int cf, int64_t key, bool pending) {
|
|
188
|
-
return latest_->SingleDelete(cf, key, pending);
|
|
212
|
+
// See ExpectedState::PrepareSingleDelete()
|
|
213
|
+
PendingExpectedValue PrepareSingleDelete(int cf, int64_t key) {
|
|
214
|
+
return latest_->PrepareSingleDelete(cf, key);
|
|
189
215
|
}
|
|
190
216
|
|
|
191
|
-
//
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return latest_->DeleteRange(cf, begin_key, end_key, pending);
|
|
217
|
+
// See ExpectedState::PrepareDeleteRange()
|
|
218
|
+
std::vector<PendingExpectedValue> PrepareDeleteRange(int cf,
|
|
219
|
+
int64_t begin_key,
|
|
220
|
+
int64_t end_key) {
|
|
221
|
+
return latest_->PrepareDeleteRange(cf, begin_key, end_key);
|
|
197
222
|
}
|
|
198
223
|
|
|
199
|
-
//
|
|
224
|
+
// See ExpectedState::Exists()
|
|
200
225
|
bool Exists(int cf, int64_t key) { return latest_->Exists(cf, key); }
|
|
201
226
|
|
|
227
|
+
// See ExpectedState::SyncPut()
|
|
228
|
+
void SyncPut(int cf, int64_t key, uint32_t value_base) {
|
|
229
|
+
return latest_->SyncPut(cf, key, value_base);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// See ExpectedState::SyncPendingPut()
|
|
233
|
+
void SyncPendingPut(int cf, int64_t key) {
|
|
234
|
+
return latest_->SyncPendingPut(cf, key);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// See ExpectedState::SyncDelete()
|
|
238
|
+
void SyncDelete(int cf, int64_t key) { return latest_->SyncDelete(cf, key); }
|
|
239
|
+
|
|
240
|
+
// See ExpectedState::SyncDeleteRange()
|
|
241
|
+
void SyncDeleteRange(int cf, int64_t begin_key, int64_t end_key) {
|
|
242
|
+
return latest_->SyncDeleteRange(cf, begin_key, end_key);
|
|
243
|
+
}
|
|
244
|
+
|
|
202
245
|
protected:
|
|
203
246
|
const size_t max_key_;
|
|
204
247
|
const size_t num_column_families_;
|
|
@@ -281,7 +324,6 @@ class AnonExpectedStateManager : public ExpectedStateManager {
|
|
|
281
324
|
// member function.
|
|
282
325
|
Status Open() override;
|
|
283
326
|
};
|
|
284
|
-
|
|
285
327
|
} // namespace ROCKSDB_NAMESPACE
|
|
286
328
|
|
|
287
329
|
#endif // GFLAGS
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Copyright (c) 2021-present, Facebook, Inc. All rights reserved.
|
|
2
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
3
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
4
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
5
|
+
|
|
6
|
+
#ifdef GFLAGS
|
|
7
|
+
|
|
8
|
+
#include "db_stress_tool/expected_value.h"
|
|
9
|
+
|
|
10
|
+
#include <atomic>
|
|
11
|
+
|
|
12
|
+
namespace ROCKSDB_NAMESPACE {
|
|
13
|
+
void ExpectedValue::Put(bool pending) {
|
|
14
|
+
if (pending) {
|
|
15
|
+
SetPendingWrite();
|
|
16
|
+
} else {
|
|
17
|
+
SetValueBase(NextValueBase());
|
|
18
|
+
ClearDeleted();
|
|
19
|
+
ClearPendingWrite();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
bool ExpectedValue::Delete(bool pending) {
|
|
24
|
+
if (!Exists()) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (pending) {
|
|
28
|
+
SetPendingDel();
|
|
29
|
+
} else {
|
|
30
|
+
SetDelCounter(NextDelCounter());
|
|
31
|
+
SetDeleted();
|
|
32
|
+
ClearPendingDel();
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void ExpectedValue::SyncPut(uint32_t value_base) {
|
|
38
|
+
assert(ExpectedValue::IsValueBaseValid(value_base));
|
|
39
|
+
|
|
40
|
+
SetValueBase(value_base);
|
|
41
|
+
ClearDeleted();
|
|
42
|
+
ClearPendingWrite();
|
|
43
|
+
|
|
44
|
+
// This is needed in case crash happens during a pending delete of the key
|
|
45
|
+
// assocated with this expected value
|
|
46
|
+
ClearPendingDel();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void ExpectedValue::SyncPendingPut() { Put(true /* pending */); }
|
|
50
|
+
|
|
51
|
+
void ExpectedValue::SyncDelete() {
|
|
52
|
+
Delete(false /* pending */);
|
|
53
|
+
// This is needed in case crash happens during a pending write of the key
|
|
54
|
+
// assocated with this expected value
|
|
55
|
+
ClearPendingWrite();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
uint32_t ExpectedValue::GetFinalValueBase() const {
|
|
59
|
+
return PendingWrite() ? NextValueBase() : GetValueBase();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
uint32_t ExpectedValue::GetFinalDelCounter() const {
|
|
63
|
+
return PendingDelete() ? NextDelCounter() : GetDelCounter();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
bool ExpectedValueHelper::MustHaveNotExisted(
|
|
67
|
+
ExpectedValue pre_read_expected_value,
|
|
68
|
+
ExpectedValue post_read_expected_value) {
|
|
69
|
+
const bool pre_read_expected_deleted = pre_read_expected_value.IsDeleted();
|
|
70
|
+
|
|
71
|
+
const uint32_t pre_read_expected_value_base =
|
|
72
|
+
pre_read_expected_value.GetValueBase();
|
|
73
|
+
|
|
74
|
+
const uint32_t post_read_expected_final_value_base =
|
|
75
|
+
post_read_expected_value.GetFinalValueBase();
|
|
76
|
+
|
|
77
|
+
const bool during_read_no_write_happened =
|
|
78
|
+
(pre_read_expected_value_base == post_read_expected_final_value_base);
|
|
79
|
+
return pre_read_expected_deleted && during_read_no_write_happened;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
bool ExpectedValueHelper::MustHaveExisted(
|
|
83
|
+
ExpectedValue pre_read_expected_value,
|
|
84
|
+
ExpectedValue post_read_expected_value) {
|
|
85
|
+
const bool pre_read_expected_not_deleted =
|
|
86
|
+
!pre_read_expected_value.IsDeleted();
|
|
87
|
+
|
|
88
|
+
const uint32_t pre_read_expected_del_counter =
|
|
89
|
+
pre_read_expected_value.GetDelCounter();
|
|
90
|
+
const uint32_t post_read_expected_final_del_counter =
|
|
91
|
+
post_read_expected_value.GetFinalDelCounter();
|
|
92
|
+
|
|
93
|
+
const bool during_read_no_delete_happened =
|
|
94
|
+
(pre_read_expected_del_counter == post_read_expected_final_del_counter);
|
|
95
|
+
|
|
96
|
+
return pre_read_expected_not_deleted && during_read_no_delete_happened;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
bool ExpectedValueHelper::InExpectedValueBaseRange(
|
|
100
|
+
uint32_t value_base, ExpectedValue pre_read_expected_value,
|
|
101
|
+
ExpectedValue post_read_expected_value) {
|
|
102
|
+
assert(ExpectedValue::IsValueBaseValid(value_base));
|
|
103
|
+
|
|
104
|
+
const uint32_t pre_read_expected_value_base =
|
|
105
|
+
pre_read_expected_value.GetValueBase();
|
|
106
|
+
const uint32_t post_read_expected_final_value_base =
|
|
107
|
+
post_read_expected_value.GetFinalValueBase();
|
|
108
|
+
|
|
109
|
+
if (pre_read_expected_value_base <= post_read_expected_final_value_base) {
|
|
110
|
+
const uint32_t lower_bound = pre_read_expected_value_base;
|
|
111
|
+
const uint32_t upper_bound = post_read_expected_final_value_base;
|
|
112
|
+
return lower_bound <= value_base && value_base <= upper_bound;
|
|
113
|
+
} else {
|
|
114
|
+
const uint32_t upper_bound_1 = post_read_expected_final_value_base;
|
|
115
|
+
const uint32_t lower_bound_2 = pre_read_expected_value_base;
|
|
116
|
+
const uint32_t upper_bound_2 = ExpectedValue::GetValueBaseMask();
|
|
117
|
+
return (value_base <= upper_bound_1) ||
|
|
118
|
+
(lower_bound_2 <= value_base && value_base <= upper_bound_2);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
122
|
+
#endif // GFLAGS
|