@nxtedition/rocksdb 9.0.0 → 9.0.1
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 +0 -21
- package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -9
- package/deps/rocksdb/rocksdb/Makefile +15 -6
- package/deps/rocksdb/rocksdb/README.md +29 -0
- package/deps/rocksdb/rocksdb/TARGETS +17 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +16 -4
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2024 -14
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +182 -7
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +293 -17
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +21 -5
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -3
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +25 -11
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +3 -3
- package/deps/rocksdb/rocksdb/db/c.cc +64 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
- package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
- package/deps/rocksdb/rocksdb/db/db_iter.h +10 -2
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +187 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
- package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
- package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
- package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
- package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
- package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
- package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
- package/deps/rocksdb/rocksdb/db/table_cache.cc +32 -19
- package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
- package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
- package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
- package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +44 -20
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +15 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +14 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
- package/deps/rocksdb/rocksdb/env/env.cc +5 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +79 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +14 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +0 -2
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
- package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
- package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/README +10 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -0
- package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
- package/deps/rocksdb/rocksdb/src.mk +7 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +14 -9
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
- package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
- package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +12 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
- package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
- package/deps/rocksdb/rocksdb/util/compression.h +9 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
- package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/util/overload.h +23 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -0
- package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
- package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +9 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +105 -8
- package/deps/rocksdb/rocksdb.gyp +4 -2
- package/index.js +0 -8
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
|
@@ -88,11 +88,11 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
88
88
|
FaultInjectionTestFS* fs =
|
|
89
89
|
new FaultInjectionTestFS(raw_env->GetFileSystem());
|
|
90
90
|
fault_fs_guard.reset(fs);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
// Set it to direct writable here to not lose files created during DB open
|
|
92
|
+
// when no open fault injection is not enabled.
|
|
93
|
+
// This will be overwritten in StressTest::Open() for open fault injection
|
|
94
|
+
// and in RunStressTestImpl() for proper write fault injection setup.
|
|
95
|
+
fault_fs_guard->SetFilesystemDirectWritable(true);
|
|
96
96
|
fault_env_guard =
|
|
97
97
|
std::make_shared<CompositeEnvWrapper>(raw_env, fault_fs_guard);
|
|
98
98
|
raw_env = fault_env_guard.get();
|
|
@@ -240,10 +240,10 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
240
240
|
FLAGS_secondaries_base = default_secondaries_path;
|
|
241
241
|
}
|
|
242
242
|
|
|
243
|
-
if (FLAGS_best_efforts_recovery &&
|
|
244
|
-
!FLAGS_disable_wal) {
|
|
243
|
+
if (FLAGS_best_efforts_recovery &&
|
|
244
|
+
!(FLAGS_skip_verifydb && FLAGS_disable_wal)) {
|
|
245
245
|
fprintf(stderr,
|
|
246
|
-
"With best-efforts recovery,
|
|
246
|
+
"With best-efforts recovery, skip_verifydb and disable_wal "
|
|
247
247
|
"should be set to true.\n");
|
|
248
248
|
exit(1);
|
|
249
249
|
}
|
|
@@ -308,11 +308,11 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
if (FLAGS_use_put_entity_one_in > 0 &&
|
|
311
|
-
(
|
|
312
|
-
|
|
311
|
+
(FLAGS_use_full_merge_v1 || FLAGS_use_txn || FLAGS_test_multi_ops_txns ||
|
|
312
|
+
FLAGS_user_timestamp_size > 0)) {
|
|
313
313
|
fprintf(stderr,
|
|
314
|
-
"
|
|
315
|
-
"
|
|
314
|
+
"Wide columns are incompatible with V1 Merge, transactions, and "
|
|
315
|
+
"user-defined timestamps\n");
|
|
316
316
|
exit(1);
|
|
317
317
|
}
|
|
318
318
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
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/db_stress_wide_merge_operator.h"
|
|
9
|
+
|
|
10
|
+
#include "db_stress_tool/db_stress_common.h"
|
|
11
|
+
|
|
12
|
+
namespace ROCKSDB_NAMESPACE {
|
|
13
|
+
|
|
14
|
+
bool DBStressWideMergeOperator::FullMergeV3(
|
|
15
|
+
const MergeOperationInputV3& merge_in,
|
|
16
|
+
MergeOperationOutputV3* merge_out) const {
|
|
17
|
+
assert(!merge_in.operand_list.empty());
|
|
18
|
+
assert(merge_out);
|
|
19
|
+
|
|
20
|
+
const Slice& latest = merge_in.operand_list.back();
|
|
21
|
+
|
|
22
|
+
if (latest.size() < sizeof(uint32_t)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const uint32_t value_base = GetValueBase(latest);
|
|
27
|
+
|
|
28
|
+
if (FLAGS_use_put_entity_one_in == 0 ||
|
|
29
|
+
(value_base % FLAGS_use_put_entity_one_in) != 0) {
|
|
30
|
+
merge_out->new_value = latest;
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const auto columns = GenerateWideColumns(value_base, latest);
|
|
35
|
+
|
|
36
|
+
merge_out->new_value = MergeOperationOutputV3::NewColumns();
|
|
37
|
+
auto& new_columns =
|
|
38
|
+
std::get<MergeOperationOutputV3::NewColumns>(merge_out->new_value);
|
|
39
|
+
new_columns.reserve(columns.size());
|
|
40
|
+
|
|
41
|
+
for (const auto& column : columns) {
|
|
42
|
+
new_columns.emplace_back(column.name().ToString(),
|
|
43
|
+
column.value().ToString());
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
50
|
+
|
|
51
|
+
#endif // GFLAGS
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
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
|
+
#pragma once
|
|
7
|
+
|
|
8
|
+
#include "rocksdb/merge_operator.h"
|
|
9
|
+
|
|
10
|
+
namespace ROCKSDB_NAMESPACE {
|
|
11
|
+
|
|
12
|
+
// A test merge operator that implements the wide-column aware FullMergeV3
|
|
13
|
+
// interface. Similarly to the simple "put" type merge operators, the merge
|
|
14
|
+
// result is based on the last merge operand; however, the merge result can
|
|
15
|
+
// potentially be a wide-column entity, depending on the value base encoded into
|
|
16
|
+
// the merge operand and the value of the "use_put_entity_one_in" stress test
|
|
17
|
+
// option. Following the same rule as for writes ensures that the queries
|
|
18
|
+
// issued by the validation logic receive the expected results.
|
|
19
|
+
class DBStressWideMergeOperator : public MergeOperator {
|
|
20
|
+
public:
|
|
21
|
+
bool FullMergeV3(const MergeOperationInputV3& merge_in,
|
|
22
|
+
MergeOperationOutputV3* merge_out) const override;
|
|
23
|
+
|
|
24
|
+
const char* Name() const override { return "DBStressWideMergeOperator"; }
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
#include <atomic>
|
|
7
7
|
#ifdef GFLAGS
|
|
8
8
|
|
|
9
|
-
|
|
10
9
|
#include "db/wide/wide_column_serialization.h"
|
|
10
|
+
#include "db/wide/wide_columns_helper.h"
|
|
11
11
|
#include "db_stress_tool/db_stress_common.h"
|
|
12
12
|
#include "db_stress_tool/db_stress_shared_state.h"
|
|
13
13
|
#include "db_stress_tool/expected_state.h"
|
|
@@ -363,7 +363,6 @@ bool FileExpectedStateManager::HasHistory() {
|
|
|
363
363
|
return saved_seqno_ != kMaxSequenceNumber;
|
|
364
364
|
}
|
|
365
365
|
|
|
366
|
-
|
|
367
366
|
namespace {
|
|
368
367
|
|
|
369
368
|
// An `ExpectedStateTraceRecordHandler` applies a configurable number of
|
|
@@ -462,10 +461,8 @@ class ExpectedStateTraceRecordHandler : public TraceRecord::Handler,
|
|
|
462
461
|
column_family_id, key, columns);
|
|
463
462
|
}
|
|
464
463
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
const uint32_t value_base = GetValueBase(columns.front().value());
|
|
464
|
+
const uint32_t value_base =
|
|
465
|
+
GetValueBase(WideColumnsHelper::GetDefaultColumn(columns));
|
|
469
466
|
|
|
470
467
|
state_->SyncPut(column_family_id, static_cast<int64_t>(key_id), value_base);
|
|
471
468
|
|
|
@@ -1104,8 +1104,9 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1104
1104
|
Status s = record.DecodePrimaryIndexEntry(it->key(), it->value());
|
|
1105
1105
|
if (!s.ok()) {
|
|
1106
1106
|
oss << "Cannot decode primary index entry " << it->key().ToString(true)
|
|
1107
|
-
<< "=>" << it->value().ToString(true)
|
|
1108
|
-
|
|
1107
|
+
<< "=>" << it->value().ToString(true) << ". Status is "
|
|
1108
|
+
<< s.ToString();
|
|
1109
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1109
1110
|
assert(false);
|
|
1110
1111
|
return;
|
|
1111
1112
|
}
|
|
@@ -1125,8 +1126,9 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1125
1126
|
std::string value;
|
|
1126
1127
|
s = db_->Get(ropts, sk, &value);
|
|
1127
1128
|
if (!s.ok()) {
|
|
1128
|
-
oss << "Cannot find secondary index entry " << sk.ToString(true)
|
|
1129
|
-
|
|
1129
|
+
oss << "Cannot find secondary index entry " << sk.ToString(true)
|
|
1130
|
+
<< ". Status is " << s.ToString();
|
|
1131
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1130
1132
|
assert(false);
|
|
1131
1133
|
return;
|
|
1132
1134
|
}
|
|
@@ -1153,8 +1155,9 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1153
1155
|
Status s = record.DecodeSecondaryIndexEntry(it->key(), it->value());
|
|
1154
1156
|
if (!s.ok()) {
|
|
1155
1157
|
oss << "Cannot decode secondary index entry "
|
|
1156
|
-
<< it->key().ToString(true) << "=>" << it->value().ToString(true)
|
|
1157
|
-
|
|
1158
|
+
<< it->key().ToString(true) << "=>" << it->value().ToString(true)
|
|
1159
|
+
<< ". Status is " << s.ToString();
|
|
1160
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1158
1161
|
assert(false);
|
|
1159
1162
|
return;
|
|
1160
1163
|
}
|
|
@@ -1168,7 +1171,7 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1168
1171
|
if (!s.ok()) {
|
|
1169
1172
|
oss << "Error searching pk " << Slice(pk).ToString(true) << ". "
|
|
1170
1173
|
<< s.ToString() << ". sk " << it->key().ToString(true);
|
|
1171
|
-
VerificationAbort(thread->shared, oss.str()
|
|
1174
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1172
1175
|
assert(false);
|
|
1173
1176
|
return;
|
|
1174
1177
|
}
|
|
@@ -1176,8 +1179,8 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1176
1179
|
s = std::get<0>(result);
|
|
1177
1180
|
if (!s.ok()) {
|
|
1178
1181
|
oss << "Error decoding primary index value "
|
|
1179
|
-
<< Slice(value).ToString(true) << ". " << s.ToString();
|
|
1180
|
-
VerificationAbort(thread->shared, oss.str()
|
|
1182
|
+
<< Slice(value).ToString(true) << ". Status is " << s.ToString();
|
|
1183
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1181
1184
|
assert(false);
|
|
1182
1185
|
return;
|
|
1183
1186
|
}
|
|
@@ -1187,7 +1190,7 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1187
1190
|
<< Slice(value).ToString(true) << " (a=" << record.a_value()
|
|
1188
1191
|
<< ", c=" << c_in_primary << "), sk: " << it->key().ToString(true)
|
|
1189
1192
|
<< " (c=" << record.c_value() << ")";
|
|
1190
|
-
VerificationAbort(thread->shared, oss.str()
|
|
1193
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1191
1194
|
assert(false);
|
|
1192
1195
|
return;
|
|
1193
1196
|
}
|
|
@@ -1198,7 +1201,7 @@ void MultiOpsTxnsStressTest::VerifyDb(ThreadState* thread) const {
|
|
|
1198
1201
|
oss << "Pk/sk mismatch: primary index has " << primary_index_entries_count
|
|
1199
1202
|
<< " entries. Secondary index has " << secondary_index_entries_count
|
|
1200
1203
|
<< " entries.";
|
|
1201
|
-
VerificationAbort(thread->shared, oss.str()
|
|
1204
|
+
VerificationAbort(thread->shared, oss.str());
|
|
1202
1205
|
assert(false);
|
|
1203
1206
|
return;
|
|
1204
1207
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
#include "db_stress_tool/expected_state.h"
|
|
11
11
|
#ifdef GFLAGS
|
|
12
|
+
#include "db/wide/wide_columns_helper.h"
|
|
12
13
|
#include "db_stress_tool/db_stress_common.h"
|
|
13
14
|
#include "rocksdb/utilities/transaction_db.h"
|
|
14
15
|
#include "utilities/fault_injection_fs.h"
|
|
@@ -165,9 +166,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
165
166
|
if (s.ok()) {
|
|
166
167
|
const WideColumns& columns = result.columns();
|
|
167
168
|
|
|
168
|
-
if (
|
|
169
|
-
|
|
170
|
-
from_db = columns.front().value().ToString();
|
|
169
|
+
if (WideColumnsHelper::HasDefaultColumn(columns)) {
|
|
170
|
+
from_db = WideColumnsHelper::GetDefaultColumn(columns).ToString();
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
if (!VerifyWideColumns(columns)) {
|
|
@@ -251,9 +251,9 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
251
251
|
if (statuses[j].ok()) {
|
|
252
252
|
const WideColumns& columns = results[j].columns();
|
|
253
253
|
|
|
254
|
-
if (
|
|
255
|
-
|
|
256
|
-
|
|
254
|
+
if (WideColumnsHelper::HasDefaultColumn(columns)) {
|
|
255
|
+
from_db =
|
|
256
|
+
WideColumnsHelper::GetDefaultColumn(columns).ToString();
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
if (!VerifyWideColumns(columns)) {
|
|
@@ -1067,7 +1067,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1067
1067
|
is_consistent = false;
|
|
1068
1068
|
} else if (check_get_entity && (s.ok() || s.IsNotFound())) {
|
|
1069
1069
|
PinnableWideColumns cmp_result;
|
|
1070
|
-
|
|
1070
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1071
|
+
ThreadStatus::OperationType::OP_GETENTITY);
|
|
1071
1072
|
const Status cmp_s =
|
|
1072
1073
|
db_->GetEntity(read_opts_copy, cfh, key_slices[i], &cmp_result);
|
|
1073
1074
|
|
|
@@ -1276,10 +1277,13 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1276
1277
|
const size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
1277
1278
|
const Slice v(value, sz);
|
|
1278
1279
|
|
|
1279
|
-
|
|
1280
1280
|
Status s;
|
|
1281
1281
|
|
|
1282
|
-
if (
|
|
1282
|
+
if (FLAGS_use_put_entity_one_in > 0 &&
|
|
1283
|
+
(value_base % FLAGS_use_put_entity_one_in) == 0) {
|
|
1284
|
+
s = db_->PutEntity(write_opts, cfh, k,
|
|
1285
|
+
GenerateWideColumns(value_base, v));
|
|
1286
|
+
} else if (FLAGS_use_merge) {
|
|
1283
1287
|
if (!FLAGS_use_txn) {
|
|
1284
1288
|
if (FLAGS_user_timestamp_size == 0) {
|
|
1285
1289
|
s = db_->Merge(write_opts, cfh, k, v);
|
|
@@ -1291,10 +1295,6 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1291
1295
|
return txn.Merge(cfh, k, v);
|
|
1292
1296
|
});
|
|
1293
1297
|
}
|
|
1294
|
-
} else if (FLAGS_use_put_entity_one_in > 0 &&
|
|
1295
|
-
(value_base % FLAGS_use_put_entity_one_in) == 0) {
|
|
1296
|
-
s = db_->PutEntity(write_opts, cfh, k,
|
|
1297
|
-
GenerateWideColumns(value_base, v));
|
|
1298
1298
|
} else {
|
|
1299
1299
|
if (!FLAGS_use_txn) {
|
|
1300
1300
|
if (FLAGS_user_timestamp_size == 0) {
|
|
@@ -1309,10 +1309,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1309
1309
|
}
|
|
1310
1310
|
}
|
|
1311
1311
|
|
|
1312
|
-
pending_expected_value.Commit();
|
|
1313
|
-
|
|
1314
1312
|
if (!s.ok()) {
|
|
1315
|
-
if (
|
|
1313
|
+
if (FLAGS_inject_error_severity >= 2) {
|
|
1316
1314
|
if (!is_db_stopped_ && s.severity() >= Status::Severity::kFatalError) {
|
|
1317
1315
|
is_db_stopped_ = true;
|
|
1318
1316
|
} else if (!is_db_stopped_ ||
|
|
@@ -1325,7 +1323,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1325
1323
|
thread->shared->SafeTerminate();
|
|
1326
1324
|
}
|
|
1327
1325
|
}
|
|
1328
|
-
|
|
1326
|
+
pending_expected_value.Commit();
|
|
1329
1327
|
thread->stats.AddBytesForWrites(1, sz);
|
|
1330
1328
|
PrintKeyValue(rand_column_family, static_cast<uint32_t>(rand_key), value,
|
|
1331
1329
|
sz);
|
|
@@ -1367,11 +1365,9 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1367
1365
|
return txn.Delete(cfh, key);
|
|
1368
1366
|
});
|
|
1369
1367
|
}
|
|
1370
|
-
pending_expected_value.Commit();
|
|
1371
1368
|
|
|
1372
|
-
thread->stats.AddDeletes(1);
|
|
1373
1369
|
if (!s.ok()) {
|
|
1374
|
-
if (
|
|
1370
|
+
if (FLAGS_inject_error_severity >= 2) {
|
|
1375
1371
|
if (!is_db_stopped_ &&
|
|
1376
1372
|
s.severity() >= Status::Severity::kFatalError) {
|
|
1377
1373
|
is_db_stopped_ = true;
|
|
@@ -1385,6 +1381,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1385
1381
|
thread->shared->SafeTerminate();
|
|
1386
1382
|
}
|
|
1387
1383
|
}
|
|
1384
|
+
pending_expected_value.Commit();
|
|
1385
|
+
thread->stats.AddDeletes(1);
|
|
1388
1386
|
} else {
|
|
1389
1387
|
PendingExpectedValue pending_expected_value =
|
|
1390
1388
|
shared->PrepareSingleDelete(rand_column_family, rand_key);
|
|
@@ -1399,10 +1397,9 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1399
1397
|
return txn.SingleDelete(cfh, key);
|
|
1400
1398
|
});
|
|
1401
1399
|
}
|
|
1402
|
-
|
|
1403
|
-
thread->stats.AddSingleDeletes(1);
|
|
1400
|
+
|
|
1404
1401
|
if (!s.ok()) {
|
|
1405
|
-
if (
|
|
1402
|
+
if (FLAGS_inject_error_severity >= 2) {
|
|
1406
1403
|
if (!is_db_stopped_ &&
|
|
1407
1404
|
s.severity() >= Status::Severity::kFatalError) {
|
|
1408
1405
|
is_db_stopped_ = true;
|
|
@@ -1416,6 +1413,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1416
1413
|
thread->shared->SafeTerminate();
|
|
1417
1414
|
}
|
|
1418
1415
|
}
|
|
1416
|
+
pending_expected_value.Commit();
|
|
1417
|
+
thread->stats.AddSingleDeletes(1);
|
|
1419
1418
|
}
|
|
1420
1419
|
return s;
|
|
1421
1420
|
}
|
|
@@ -1464,7 +1463,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1464
1463
|
s = db_->DeleteRange(write_opts, cfh, key, end_key);
|
|
1465
1464
|
}
|
|
1466
1465
|
if (!s.ok()) {
|
|
1467
|
-
if (
|
|
1466
|
+
if (FLAGS_inject_error_severity >= 2) {
|
|
1468
1467
|
if (!is_db_stopped_ && s.severity() >= Status::Severity::kFatalError) {
|
|
1469
1468
|
is_db_stopped_ = true;
|
|
1470
1469
|
} else if (!is_db_stopped_ ||
|
|
@@ -1543,11 +1542,8 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1543
1542
|
const Slice k(key_str);
|
|
1544
1543
|
const Slice v(value, value_len);
|
|
1545
1544
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
(value_base % FLAGS_use_put_entity_one_in) == 0;
|
|
1549
|
-
|
|
1550
|
-
if (use_put_entity) {
|
|
1545
|
+
if (FLAGS_use_put_entity_one_in > 0 &&
|
|
1546
|
+
(value_base % FLAGS_use_put_entity_one_in) == 0) {
|
|
1551
1547
|
WideColumns columns = GenerateWideColumns(value_base, v);
|
|
1552
1548
|
s = sst_file_writer.PutEntity(k, columns);
|
|
1553
1549
|
} else {
|
|
@@ -1567,12 +1563,16 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
1567
1563
|
{sst_filename}, IngestExternalFileOptions());
|
|
1568
1564
|
}
|
|
1569
1565
|
if (!s.ok()) {
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1566
|
+
if (!s.IsIOError() || !std::strstr(s.getState(), "injected")) {
|
|
1567
|
+
fprintf(stderr, "file ingestion error: %s\n", s.ToString().c_str());
|
|
1568
|
+
thread->shared->SafeTerminate();
|
|
1569
|
+
} else {
|
|
1570
|
+
fprintf(stdout, "file ingestion error: %s\n", s.ToString().c_str());
|
|
1571
|
+
}
|
|
1572
|
+
} else {
|
|
1573
|
+
for (size_t i = 0; i < pending_expected_values.size(); ++i) {
|
|
1574
|
+
pending_expected_values[i].Commit();
|
|
1575
|
+
}
|
|
1576
1576
|
}
|
|
1577
1577
|
}
|
|
1578
1578
|
|
|
@@ -2035,9 +2035,7 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
2035
2035
|
const Slice slice(value_from_db);
|
|
2036
2036
|
const uint32_t value_base_from_db = GetValueBase(slice);
|
|
2037
2037
|
if (ExpectedValueHelper::MustHaveNotExisted(expected_value,
|
|
2038
|
-
expected_value)
|
|
2039
|
-
!ExpectedValueHelper::InExpectedValueBaseRange(
|
|
2040
|
-
value_base_from_db, expected_value, expected_value)) {
|
|
2038
|
+
expected_value)) {
|
|
2041
2039
|
VerificationAbort(shared, msg_prefix + ": Unexpected value found", cf,
|
|
2042
2040
|
key, value_from_db, "");
|
|
2043
2041
|
return false;
|
|
@@ -2046,6 +2044,14 @@ class NonBatchedOpsStressTest : public StressTest {
|
|
|
2046
2044
|
size_t expected_value_data_size =
|
|
2047
2045
|
GenerateValue(expected_value.GetValueBase(), expected_value_data,
|
|
2048
2046
|
sizeof(expected_value_data));
|
|
2047
|
+
if (!ExpectedValueHelper::InExpectedValueBaseRange(
|
|
2048
|
+
value_base_from_db, expected_value, expected_value)) {
|
|
2049
|
+
VerificationAbort(shared, msg_prefix + ": Unexpected value found", cf,
|
|
2050
|
+
key, value_from_db,
|
|
2051
|
+
Slice(expected_value_data, expected_value_data_size));
|
|
2052
|
+
return false;
|
|
2053
|
+
}
|
|
2054
|
+
// TODO: are the length/memcmp() checks repetitive?
|
|
2049
2055
|
if (value_from_db.length() != expected_value_data_size) {
|
|
2050
2056
|
VerificationAbort(shared,
|
|
2051
2057
|
msg_prefix + ": Length of value read is not equal",
|
|
@@ -1229,4 +1229,9 @@ Status SystemClock::CreateFromString(const ConfigOptions& config_options,
|
|
|
1229
1229
|
return LoadSharedObject<SystemClock>(config_options, value, result);
|
|
1230
1230
|
}
|
|
1231
1231
|
}
|
|
1232
|
+
|
|
1233
|
+
bool SystemClock::TimedWait(port::CondVar* cv,
|
|
1234
|
+
std::chrono::microseconds deadline) {
|
|
1235
|
+
return cv->TimedWait(deadline.count());
|
|
1236
|
+
}
|
|
1232
1237
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -98,6 +98,9 @@ Status FilePrefetchBuffer::Read(const IOOptions& opts,
|
|
|
98
98
|
return s;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
if (usage_ == FilePrefetchBufferUsage::kUserScanPrefetch) {
|
|
102
|
+
RecordTick(stats_, PREFETCH_BYTES, read_len);
|
|
103
|
+
}
|
|
101
104
|
// Update the buffer offset and size.
|
|
102
105
|
bufs_[index].offset_ = rounddown_start;
|
|
103
106
|
bufs_[index].buffer_.Size(static_cast<size_t>(chunk_len) + result.size());
|
|
@@ -364,8 +367,11 @@ Status FilePrefetchBuffer::HandleOverlappingData(
|
|
|
364
367
|
size_t second_size = bufs_[second].async_read_in_progress_
|
|
365
368
|
? bufs_[second].async_req_len_
|
|
366
369
|
: bufs_[second].buffer_.CurrentSize();
|
|
367
|
-
|
|
368
|
-
|
|
370
|
+
uint64_t rounddown_start = bufs_[second].offset_ + second_size;
|
|
371
|
+
// Second buffer might be out of bound if first buffer already prefetched
|
|
372
|
+
// that data.
|
|
373
|
+
if (tmp_offset + tmp_length <= bufs_[second].offset_ + second_size &&
|
|
374
|
+
!IsOffsetOutOfBound(rounddown_start)) {
|
|
369
375
|
uint64_t roundup_end =
|
|
370
376
|
Roundup(rounddown_start + readahead_size, alignment);
|
|
371
377
|
uint64_t roundup_len = roundup_end - rounddown_start;
|
|
@@ -562,20 +568,24 @@ Status FilePrefetchBuffer::PrefetchAsyncInternal(const IOOptions& opts,
|
|
|
562
568
|
roundup_end2 = Roundup(rounddown_start2 + prefetch_size, alignment);
|
|
563
569
|
}
|
|
564
570
|
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
571
|
+
// Second buffer might be out of bound if first buffer already prefetched
|
|
572
|
+
// that data.
|
|
573
|
+
if (!IsOffsetOutOfBound(rounddown_start2)) {
|
|
574
|
+
uint64_t roundup_len2 = roundup_end2 - rounddown_start2;
|
|
575
|
+
uint64_t chunk_len2 = 0;
|
|
576
|
+
CalculateOffsetAndLen(alignment, rounddown_start2, roundup_len2, second,
|
|
577
|
+
false /*refit_tail*/, chunk_len2);
|
|
578
|
+
assert(chunk_len2 == 0);
|
|
579
|
+
// Update the buffer offset.
|
|
580
|
+
bufs_[second].offset_ = rounddown_start2;
|
|
581
|
+
assert(roundup_len2 >= chunk_len2);
|
|
582
|
+
uint64_t read_len2 = static_cast<size_t>(roundup_len2 - chunk_len2);
|
|
583
|
+
s = ReadAsync(opts, reader, read_len2, rounddown_start2, second);
|
|
584
|
+
if (!s.ok()) {
|
|
585
|
+
DestroyAndClearIOHandle(second);
|
|
586
|
+
bufs_[second].buffer_.Clear();
|
|
587
|
+
return s;
|
|
588
|
+
}
|
|
579
589
|
}
|
|
580
590
|
}
|
|
581
591
|
|
|
@@ -646,6 +656,11 @@ bool FilePrefetchBuffer::TryReadFromCacheUntracked(
|
|
|
646
656
|
if (for_compaction) {
|
|
647
657
|
s = Prefetch(opts, reader, offset, std::max(n, readahead_size_));
|
|
648
658
|
} else {
|
|
659
|
+
if (IsOffsetInBuffer(offset, curr_)) {
|
|
660
|
+
RecordTick(stats_, PREFETCH_BYTES_USEFUL,
|
|
661
|
+
bufs_[curr_].offset_ + bufs_[curr_].buffer_.CurrentSize() -
|
|
662
|
+
offset);
|
|
663
|
+
}
|
|
649
664
|
if (implicit_auto_readahead_) {
|
|
650
665
|
if (!IsEligibleForPrefetch(offset, n)) {
|
|
651
666
|
// Ignore status as Prefetch is not called.
|
|
@@ -653,8 +668,8 @@ bool FilePrefetchBuffer::TryReadFromCacheUntracked(
|
|
|
653
668
|
return false;
|
|
654
669
|
}
|
|
655
670
|
}
|
|
656
|
-
|
|
657
|
-
s = Prefetch(opts, reader, offset, n +
|
|
671
|
+
size_t current_readahead_size = ReadAheadSizeTuning(offset, n);
|
|
672
|
+
s = Prefetch(opts, reader, offset, n + current_readahead_size);
|
|
658
673
|
}
|
|
659
674
|
if (!s.ok()) {
|
|
660
675
|
if (status) {
|
|
@@ -669,6 +684,9 @@ bool FilePrefetchBuffer::TryReadFromCacheUntracked(
|
|
|
669
684
|
} else {
|
|
670
685
|
return false;
|
|
671
686
|
}
|
|
687
|
+
} else if (!for_compaction) {
|
|
688
|
+
RecordTick(stats_, PREFETCH_HITS);
|
|
689
|
+
RecordTick(stats_, PREFETCH_BYTES_USEFUL, n);
|
|
672
690
|
}
|
|
673
691
|
UpdateReadPattern(offset, n, false /*decrease_readaheadsize*/);
|
|
674
692
|
|
|
@@ -925,17 +943,20 @@ Status FilePrefetchBuffer::PrefetchAsync(const IOOptions& opts,
|
|
|
925
943
|
rounddown_start2 = roundup_end1;
|
|
926
944
|
}
|
|
927
945
|
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
946
|
+
// Second buffer might be out of bound if first buffer already prefetched
|
|
947
|
+
// that data.
|
|
948
|
+
if (!IsOffsetOutOfBound(rounddown_start2)) {
|
|
949
|
+
roundup_end2 = Roundup(rounddown_start2 + prefetch_size, alignment);
|
|
950
|
+
uint64_t roundup_len2 = roundup_end2 - rounddown_start2;
|
|
951
|
+
|
|
952
|
+
CalculateOffsetAndLen(alignment, rounddown_start2, roundup_len2, second,
|
|
953
|
+
false, chunk_len2);
|
|
954
|
+
assert(chunk_len2 == 0);
|
|
955
|
+
assert(roundup_len2 >= chunk_len2);
|
|
956
|
+
read_len2 = static_cast<size_t>(roundup_len2 - chunk_len2);
|
|
957
|
+
// Update the buffer offset.
|
|
958
|
+
bufs_[second].offset_ = rounddown_start2;
|
|
959
|
+
}
|
|
939
960
|
}
|
|
940
961
|
|
|
941
962
|
if (read_len1) {
|
|
@@ -56,6 +56,7 @@ struct BufferInfo {
|
|
|
56
56
|
|
|
57
57
|
enum class FilePrefetchBufferUsage {
|
|
58
58
|
kTableOpenPrefetchTail,
|
|
59
|
+
kUserScanPrefetch,
|
|
59
60
|
kUnknown,
|
|
60
61
|
};
|
|
61
62
|
|
|
@@ -90,6 +91,7 @@ class FilePrefetchBuffer {
|
|
|
90
91
|
uint64_t num_file_reads_for_auto_readahead = 0,
|
|
91
92
|
uint64_t upper_bound_offset = 0, FileSystem* fs = nullptr,
|
|
92
93
|
SystemClock* clock = nullptr, Statistics* stats = nullptr,
|
|
94
|
+
const std::function<void(uint64_t, size_t, size_t&)>& cb = nullptr,
|
|
93
95
|
FilePrefetchBufferUsage usage = FilePrefetchBufferUsage::kUnknown)
|
|
94
96
|
: curr_(0),
|
|
95
97
|
readahead_size_(readahead_size),
|
|
@@ -108,7 +110,8 @@ class FilePrefetchBuffer {
|
|
|
108
110
|
clock_(clock),
|
|
109
111
|
stats_(stats),
|
|
110
112
|
usage_(usage),
|
|
111
|
-
upper_bound_offset_(upper_bound_offset)
|
|
113
|
+
upper_bound_offset_(upper_bound_offset),
|
|
114
|
+
readaheadsize_cb_(cb) {
|
|
112
115
|
assert((num_file_reads_ >= num_file_reads_for_auto_readahead_ + 1) ||
|
|
113
116
|
(num_file_reads_ == 0));
|
|
114
117
|
// If ReadOptions.async_io is enabled, data is asynchronously filled in
|
|
@@ -279,6 +282,11 @@ class FilePrefetchBuffer {
|
|
|
279
282
|
// Callback function passed to underlying FS in case of asynchronous reads.
|
|
280
283
|
void PrefetchAsyncCallback(const FSReadRequest& req, void* cb_arg);
|
|
281
284
|
|
|
285
|
+
void ResetUpperBoundOffset(uint64_t upper_bound_offset) {
|
|
286
|
+
upper_bound_offset_ = upper_bound_offset;
|
|
287
|
+
readahead_size_ = initial_auto_readahead_size_;
|
|
288
|
+
}
|
|
289
|
+
|
|
282
290
|
private:
|
|
283
291
|
// Calculates roundoff offset and length to be prefetched based on alignment
|
|
284
292
|
// and data present in buffer_. It also allocates new buffer or refit tail if
|
|
@@ -321,7 +329,6 @@ class FilePrefetchBuffer {
|
|
|
321
329
|
void ResetValues() {
|
|
322
330
|
num_file_reads_ = 1;
|
|
323
331
|
readahead_size_ = initial_auto_readahead_size_;
|
|
324
|
-
upper_bound_offset_ = 0;
|
|
325
332
|
}
|
|
326
333
|
|
|
327
334
|
// Called in case of implicit auto prefetching.
|
|
@@ -437,6 +444,28 @@ class FilePrefetchBuffer {
|
|
|
437
444
|
}
|
|
438
445
|
}
|
|
439
446
|
|
|
447
|
+
inline bool IsOffsetOutOfBound(uint64_t offset) {
|
|
448
|
+
if (upper_bound_offset_ > 0) {
|
|
449
|
+
return (offset >= upper_bound_offset_);
|
|
450
|
+
}
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// Performs tuning to calculate readahead_size.
|
|
455
|
+
size_t ReadAheadSizeTuning(uint64_t offset, size_t n) {
|
|
456
|
+
UpdateReadAheadSizeForUpperBound(offset, n);
|
|
457
|
+
|
|
458
|
+
if (readaheadsize_cb_ != nullptr && readahead_size_ > 0) {
|
|
459
|
+
size_t updated_readahead_size = 0;
|
|
460
|
+
readaheadsize_cb_(offset, readahead_size_, updated_readahead_size);
|
|
461
|
+
if (readahead_size_ != updated_readahead_size) {
|
|
462
|
+
RecordTick(stats_, READAHEAD_TRIMMED);
|
|
463
|
+
}
|
|
464
|
+
return updated_readahead_size;
|
|
465
|
+
}
|
|
466
|
+
return readahead_size_;
|
|
467
|
+
}
|
|
468
|
+
|
|
440
469
|
std::vector<BufferInfo> bufs_;
|
|
441
470
|
// curr_ represents the index for bufs_ indicating which buffer is being
|
|
442
471
|
// consumed currently.
|
|
@@ -483,5 +512,6 @@ class FilePrefetchBuffer {
|
|
|
483
512
|
// ReadOptions.auto_readahead_size are set to trim readahead_size upto
|
|
484
513
|
// upper_bound_offset_ during prefetching.
|
|
485
514
|
uint64_t upper_bound_offset_ = 0;
|
|
515
|
+
std::function<void(uint64_t, size_t, size_t&)> readaheadsize_cb_;
|
|
486
516
|
};
|
|
487
517
|
} // namespace ROCKSDB_NAMESPACE
|