@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
|
@@ -243,6 +243,36 @@ TEST_F(SmallEnumSetTest, SmallEnumSetTest2) {
|
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
+
// ***************************************************************** //
|
|
247
|
+
// Unit test for Status
|
|
248
|
+
TEST(StatusTest, Update) {
|
|
249
|
+
const Status ok = Status::OK();
|
|
250
|
+
const Status inc = Status::Incomplete("blah");
|
|
251
|
+
const Status notf = Status::NotFound("meow");
|
|
252
|
+
|
|
253
|
+
Status s = ok;
|
|
254
|
+
ASSERT_TRUE(s.UpdateIfOk(Status::Corruption("bad")).IsCorruption());
|
|
255
|
+
ASSERT_TRUE(s.IsCorruption());
|
|
256
|
+
|
|
257
|
+
s = ok;
|
|
258
|
+
ASSERT_TRUE(s.UpdateIfOk(Status::OK()).ok());
|
|
259
|
+
ASSERT_TRUE(s.UpdateIfOk(ok).ok());
|
|
260
|
+
ASSERT_TRUE(s.ok());
|
|
261
|
+
|
|
262
|
+
ASSERT_TRUE(s.UpdateIfOk(inc).IsIncomplete());
|
|
263
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
264
|
+
|
|
265
|
+
ASSERT_TRUE(s.UpdateIfOk(notf).IsIncomplete());
|
|
266
|
+
ASSERT_TRUE(s.UpdateIfOk(ok).IsIncomplete());
|
|
267
|
+
ASSERT_TRUE(s.IsIncomplete());
|
|
268
|
+
|
|
269
|
+
// Keeps left-most non-OK status
|
|
270
|
+
s = ok;
|
|
271
|
+
ASSERT_TRUE(
|
|
272
|
+
s.UpdateIfOk(Status()).UpdateIfOk(notf).UpdateIfOk(inc).IsNotFound());
|
|
273
|
+
ASSERT_TRUE(s.IsNotFound());
|
|
274
|
+
}
|
|
275
|
+
|
|
246
276
|
} // namespace ROCKSDB_NAMESPACE
|
|
247
277
|
|
|
248
278
|
int main(int argc, char** argv) {
|
|
@@ -45,6 +45,7 @@ static const char* msgs[static_cast<int>(Status::kMaxSubCode)] = {
|
|
|
45
45
|
"Txn not prepared", // kTxnNotPrepared
|
|
46
46
|
"IO fenced off", // kIOFenced
|
|
47
47
|
"Merge operator failed", // kMergeOperatorFailed
|
|
48
|
+
"Number of operands merged exceeded threshold", // kMergeOperandThresholdExceeded
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
Status::Status(Code _code, SubCode _subcode, const Slice& msg,
|
|
@@ -437,6 +437,45 @@ bool SerializeIntVector(const std::vector<int>& vec, std::string* value) {
|
|
|
437
437
|
return true;
|
|
438
438
|
}
|
|
439
439
|
|
|
440
|
+
int ParseTimeStringToSeconds(const std::string& value) {
|
|
441
|
+
int hours, minutes;
|
|
442
|
+
char colon;
|
|
443
|
+
|
|
444
|
+
std::istringstream stream(value);
|
|
445
|
+
stream >> hours >> colon >> minutes;
|
|
446
|
+
|
|
447
|
+
if (stream.fail() || !stream.eof() || colon != ':') {
|
|
448
|
+
return -1;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {
|
|
452
|
+
return -1;
|
|
453
|
+
}
|
|
454
|
+
return hours * 3600 + minutes * 60;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
bool TryParseTimeRangeString(const std::string& value, int& start_time,
|
|
458
|
+
int& end_time) {
|
|
459
|
+
if (value.empty()) {
|
|
460
|
+
start_time = 0;
|
|
461
|
+
end_time = 0;
|
|
462
|
+
return true;
|
|
463
|
+
}
|
|
464
|
+
auto split = StringSplit(value, '-');
|
|
465
|
+
if (split.size() != 2) {
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
start_time = ParseTimeStringToSeconds(split[0]);
|
|
469
|
+
if (start_time < 0) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
end_time = ParseTimeStringToSeconds(split[1]);
|
|
473
|
+
if (end_time < 0) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
return true;
|
|
477
|
+
}
|
|
478
|
+
|
|
440
479
|
// Copied from folly/string.cpp:
|
|
441
480
|
// https://github.com/facebook/folly/blob/0deef031cb8aab76dc7e736f8b7c22d701d5f36b/folly/String.cpp#L457
|
|
442
481
|
// There are two variants of `strerror_r` function, one returns
|
|
@@ -166,6 +166,16 @@ std::vector<int> ParseVectorInt(const std::string& value);
|
|
|
166
166
|
|
|
167
167
|
bool SerializeIntVector(const std::vector<int>& vec, std::string* value);
|
|
168
168
|
|
|
169
|
+
// Expects HH:mm format for the input value
|
|
170
|
+
// Returns -1 if invalid input. Otherwise returns seconds since midnight
|
|
171
|
+
int ParseTimeStringToSeconds(const std::string& value);
|
|
172
|
+
|
|
173
|
+
// Expects HH:mm-HH:mm format for the input value
|
|
174
|
+
// Returns false, if invalid format.
|
|
175
|
+
// Otherwise, returns true and start_time and end_time are set
|
|
176
|
+
bool TryParseTimeRangeString(const std::string& value, int& start_time,
|
|
177
|
+
int& end_time);
|
|
178
|
+
|
|
169
179
|
extern const std::string kNullptrString;
|
|
170
180
|
|
|
171
181
|
// errnoStr() function returns a string that describes the error code passed in
|
|
@@ -45,6 +45,8 @@ static OperationInfo global_operation_table[] = {
|
|
|
45
45
|
{ThreadStatus::OP_DBITERATOR, "DBIterator"},
|
|
46
46
|
{ThreadStatus::OP_VERIFY_DB_CHECKSUM, "VerifyDBChecksum"},
|
|
47
47
|
{ThreadStatus::OP_VERIFY_FILE_CHECKSUMS, "VerifyFileChecksums"},
|
|
48
|
+
{ThreadStatus::OP_GETENTITY, "GetEntity"},
|
|
49
|
+
{ThreadStatus::OP_MULTIGETENTITY, "MultiGetEntity"},
|
|
48
50
|
|
|
49
51
|
};
|
|
50
52
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
#include "db/dbformat.h"
|
|
10
10
|
#include "rocksdb/types.h"
|
|
11
|
+
#include "util/coding.h"
|
|
11
12
|
#include "util/write_batch_util.h"
|
|
12
13
|
|
|
13
14
|
namespace ROCKSDB_NAMESPACE {
|
|
@@ -340,4 +341,45 @@ Status ValidateUserDefinedTimestampsOptions(
|
|
|
340
341
|
return Status::InvalidArgument(
|
|
341
342
|
"Unsupported user defined timestamps settings change.");
|
|
342
343
|
}
|
|
344
|
+
|
|
345
|
+
void GetFullHistoryTsLowFromU64CutoffTs(Slice* cutoff_ts,
|
|
346
|
+
std::string* full_history_ts_low) {
|
|
347
|
+
uint64_t cutoff_udt_ts = 0;
|
|
348
|
+
[[maybe_unused]] bool format_res = GetFixed64(cutoff_ts, &cutoff_udt_ts);
|
|
349
|
+
assert(format_res);
|
|
350
|
+
PutFixed64(full_history_ts_low, cutoff_udt_ts + 1);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
std::tuple<std::optional<Slice>, std::optional<Slice>>
|
|
354
|
+
MaybeAddTimestampsToRange(const Slice* start, const Slice* end, size_t ts_sz,
|
|
355
|
+
std::string* start_with_ts, std::string* end_with_ts,
|
|
356
|
+
bool exclusive_end) {
|
|
357
|
+
std::optional<Slice> ret_start, ret_end;
|
|
358
|
+
if (start) {
|
|
359
|
+
if (ts_sz == 0) {
|
|
360
|
+
ret_start = *start;
|
|
361
|
+
} else {
|
|
362
|
+
// Maximum timestamp means including all keys with any timestamp for start
|
|
363
|
+
AppendKeyWithMaxTimestamp(start_with_ts, *start, ts_sz);
|
|
364
|
+
ret_start = Slice(*start_with_ts);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (end) {
|
|
368
|
+
if (ts_sz == 0) {
|
|
369
|
+
ret_end = *end;
|
|
370
|
+
} else {
|
|
371
|
+
if (exclusive_end) {
|
|
372
|
+
// Append a maximum timestamp as the range limit is exclusive:
|
|
373
|
+
// [start, end)
|
|
374
|
+
AppendKeyWithMaxTimestamp(end_with_ts, *end, ts_sz);
|
|
375
|
+
} else {
|
|
376
|
+
// Append a minimum timestamp to end so the range limit is inclusive:
|
|
377
|
+
// [start, end]
|
|
378
|
+
AppendKeyWithMinTimestamp(end_with_ts, *end, ts_sz);
|
|
379
|
+
}
|
|
380
|
+
ret_end = Slice(*end_with_ts);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return std::make_tuple(ret_start, ret_end);
|
|
384
|
+
}
|
|
343
385
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -246,4 +246,23 @@ Status ValidateUserDefinedTimestampsOptions(
|
|
|
246
246
|
const Comparator* new_comparator, const std::string& old_comparator_name,
|
|
247
247
|
bool new_persist_udt, bool old_persist_udt,
|
|
248
248
|
bool* mark_sst_files_has_no_udt);
|
|
249
|
+
|
|
250
|
+
// Given a cutoff user-defined timestamp formatted as uint64_t, get the
|
|
251
|
+
// effective `full_history_ts_low` timestamp, which is the next immediately
|
|
252
|
+
// bigger timestamp. Used by the UDT in memtable only feature when flushing
|
|
253
|
+
// memtables and remove timestamps. This process collapses history and increase
|
|
254
|
+
// the effective `full_history_ts_low`.
|
|
255
|
+
void GetFullHistoryTsLowFromU64CutoffTs(Slice* cutoff_ts,
|
|
256
|
+
std::string* full_history_ts_low);
|
|
257
|
+
|
|
258
|
+
// `start` is the inclusive lower user key bound without user-defined timestamp.
|
|
259
|
+
// `end` is the upper user key bound without user-defined timestamp.
|
|
260
|
+
// By default, `end` is treated as being exclusive. If `exclusive_end` is set to
|
|
261
|
+
// false, it's treated as an inclusive upper bound.
|
|
262
|
+
// If any of these two bounds is nullptr, an empty std::optional<Slice> is
|
|
263
|
+
// returned for that bound.
|
|
264
|
+
std::tuple<std::optional<Slice>, std::optional<Slice>>
|
|
265
|
+
MaybeAddTimestampsToRange(const Slice* start, const Slice* end, size_t ts_sz,
|
|
266
|
+
std::string* start_with_ts, std::string* end_with_ts,
|
|
267
|
+
bool exclusive_end = true);
|
|
249
268
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -438,6 +438,20 @@ TEST(ValidateUserDefinedTimestampsOptionsTest, InvalidUserComparatorChange) {
|
|
|
438
438
|
&mark_sst_files)
|
|
439
439
|
.IsInvalidArgument());
|
|
440
440
|
}
|
|
441
|
+
|
|
442
|
+
TEST(GetFullHistoryTsLowFromU64CutoffTsTest, Success) {
|
|
443
|
+
std::string cutoff_ts;
|
|
444
|
+
uint64_t cutoff_ts_int = 3;
|
|
445
|
+
PutFixed64(&cutoff_ts, 3);
|
|
446
|
+
Slice cutoff_ts_slice = cutoff_ts;
|
|
447
|
+
std::string actual_full_history_ts_low;
|
|
448
|
+
GetFullHistoryTsLowFromU64CutoffTs(&cutoff_ts_slice,
|
|
449
|
+
&actual_full_history_ts_low);
|
|
450
|
+
|
|
451
|
+
std::string expected_ts_low;
|
|
452
|
+
PutFixed64(&expected_ts_low, cutoff_ts_int + 1);
|
|
453
|
+
ASSERT_EQ(expected_ts_low, actual_full_history_ts_low);
|
|
454
|
+
}
|
|
441
455
|
} // namespace ROCKSDB_NAMESPACE
|
|
442
456
|
|
|
443
457
|
int main(int argc, char** argv) {
|
|
@@ -386,10 +386,6 @@ typedef struct {
|
|
|
386
386
|
#define XXPH_STATIC_LINKING_ONLY
|
|
387
387
|
#endif
|
|
388
388
|
|
|
389
|
-
/* BEGIN RocksDB customizations */
|
|
390
|
-
#include "port/lang.h" /* for FALLTHROUGH_INTENDED, inserted as appropriate */
|
|
391
|
-
/* END RocksDB customizations */
|
|
392
|
-
|
|
393
389
|
/* *************************************
|
|
394
390
|
* Compiler Specific Options
|
|
395
391
|
***************************************/
|
|
@@ -2101,8 +2101,9 @@ Iterator* BlobDBImpl::NewIterator(const ReadOptions& _read_options) {
|
|
|
2101
2101
|
own_snapshot = new ManagedSnapshot(db_);
|
|
2102
2102
|
snapshot = own_snapshot->snapshot();
|
|
2103
2103
|
}
|
|
2104
|
+
SuperVersion* sv = cfd->GetReferencedSuperVersion(db_impl_);
|
|
2104
2105
|
auto* iter = db_impl_->NewIteratorImpl(
|
|
2105
|
-
read_options, cfd, snapshot->GetSequenceNumber(),
|
|
2106
|
+
read_options, cfd, sv, snapshot->GetSequenceNumber(),
|
|
2106
2107
|
nullptr /*read_callback*/, true /*expose_blob_index*/);
|
|
2107
2108
|
return new BlobDBIterator(own_snapshot, iter, this, clock_, statistics_);
|
|
2108
2109
|
}
|
|
@@ -408,7 +408,7 @@ IOStatus TestFSRandomAccessFile::Read(uint64_t offset, size_t n,
|
|
|
408
408
|
scratch, /*need_count_increase=*/true, /*fault_injected=*/nullptr);
|
|
409
409
|
}
|
|
410
410
|
if (s.ok() && fs_->ShouldInjectRandomReadError()) {
|
|
411
|
-
return IOStatus::IOError("
|
|
411
|
+
return IOStatus::IOError("injected read error");
|
|
412
412
|
}
|
|
413
413
|
return s;
|
|
414
414
|
}
|
|
@@ -430,7 +430,7 @@ IOStatus TestFSRandomAccessFile::ReadAsync(
|
|
|
430
430
|
}
|
|
431
431
|
if (ret.ok()) {
|
|
432
432
|
if (fs_->ShouldInjectRandomReadError()) {
|
|
433
|
-
ret = IOStatus::IOError("
|
|
433
|
+
ret = IOStatus::IOError("injected read error");
|
|
434
434
|
} else {
|
|
435
435
|
s = target_->ReadAsync(req, opts, cb, cb_arg, io_handle, del_fn, nullptr);
|
|
436
436
|
}
|
|
@@ -470,7 +470,7 @@ IOStatus TestFSRandomAccessFile::MultiRead(FSReadRequest* reqs, size_t num_reqs,
|
|
|
470
470
|
/*fault_injected=*/nullptr);
|
|
471
471
|
}
|
|
472
472
|
if (s.ok() && fs_->ShouldInjectRandomReadError()) {
|
|
473
|
-
return IOStatus::IOError("
|
|
473
|
+
return IOStatus::IOError("injected read error");
|
|
474
474
|
}
|
|
475
475
|
return s;
|
|
476
476
|
}
|
|
@@ -487,7 +487,7 @@ IOStatus TestFSSequentialFile::Read(size_t n, const IOOptions& options,
|
|
|
487
487
|
IODebugContext* dbg) {
|
|
488
488
|
IOStatus s = target()->Read(n, options, result, scratch, dbg);
|
|
489
489
|
if (s.ok() && fs_->ShouldInjectRandomReadError()) {
|
|
490
|
-
return IOStatus::IOError("
|
|
490
|
+
return IOStatus::IOError("injected seq read error");
|
|
491
491
|
}
|
|
492
492
|
return s;
|
|
493
493
|
}
|
|
@@ -499,7 +499,7 @@ IOStatus TestFSSequentialFile::PositionedRead(uint64_t offset, size_t n,
|
|
|
499
499
|
IOStatus s =
|
|
500
500
|
target()->PositionedRead(offset, n, options, result, scratch, dbg);
|
|
501
501
|
if (s.ok() && fs_->ShouldInjectRandomReadError()) {
|
|
502
|
-
return IOStatus::IOError("
|
|
502
|
+
return IOStatus::IOError("injected seq positioned read error");
|
|
503
503
|
}
|
|
504
504
|
return s;
|
|
505
505
|
}
|
|
@@ -678,7 +678,7 @@ IOStatus FaultInjectionTestFS::NewRandomAccessFile(
|
|
|
678
678
|
return GetError();
|
|
679
679
|
}
|
|
680
680
|
if (ShouldInjectRandomReadError()) {
|
|
681
|
-
return IOStatus::IOError("
|
|
681
|
+
return IOStatus::IOError("injected error when open random access file");
|
|
682
682
|
}
|
|
683
683
|
IOStatus io_s = InjectThreadSpecificReadError(ErrorOperation::kOpen, nullptr,
|
|
684
684
|
false, nullptr,
|
|
@@ -701,7 +701,7 @@ IOStatus FaultInjectionTestFS::NewSequentialFile(
|
|
|
701
701
|
}
|
|
702
702
|
|
|
703
703
|
if (ShouldInjectRandomReadError()) {
|
|
704
|
-
return IOStatus::IOError("
|
|
704
|
+
return IOStatus::IOError("injected read error when creating seq file");
|
|
705
705
|
}
|
|
706
706
|
IOStatus io_s = target()->NewSequentialFile(fname, file_opts, result, dbg);
|
|
707
707
|
if (io_s.ok()) {
|
|
@@ -956,6 +956,7 @@ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
|
|
|
956
956
|
return IOStatus::OK();
|
|
957
957
|
}
|
|
958
958
|
|
|
959
|
+
IOStatus ret;
|
|
959
960
|
if (ctx->rand.OneIn(ctx->one_in)) {
|
|
960
961
|
if (ctx->count == 0) {
|
|
961
962
|
ctx->message = "";
|
|
@@ -970,15 +971,15 @@ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
|
|
|
970
971
|
|
|
971
972
|
if (op != ErrorOperation::kMultiReadSingleReq) {
|
|
972
973
|
// Likely non-per read status code for MultiRead
|
|
973
|
-
ctx->message += "error; ";
|
|
974
|
+
ctx->message += "injected read error; ";
|
|
974
975
|
ret_fault_injected = true;
|
|
975
|
-
|
|
976
|
+
ret = IOStatus::IOError(ctx->message);
|
|
976
977
|
} else if (Random::GetTLSInstance()->OneIn(8)) {
|
|
977
978
|
assert(result);
|
|
978
979
|
// For a small chance, set the failure to status but turn the
|
|
979
980
|
// result to be empty, which is supposed to be caught for a check.
|
|
980
981
|
*result = Slice();
|
|
981
|
-
ctx->message += "
|
|
982
|
+
ctx->message += "injected empty result; ";
|
|
982
983
|
ret_fault_injected = true;
|
|
983
984
|
} else if (!direct_io && Random::GetTLSInstance()->OneIn(7) &&
|
|
984
985
|
scratch != nullptr && result->data() == scratch) {
|
|
@@ -995,15 +996,18 @@ IOStatus FaultInjectionTestFS::InjectThreadSpecificReadError(
|
|
|
995
996
|
// It would work for CRC. Not 100% sure for xxhash and will adjust
|
|
996
997
|
// if it is not the case.
|
|
997
998
|
const_cast<char*>(result->data())[result->size() - 1]++;
|
|
998
|
-
ctx->message += "corrupt last byte; ";
|
|
999
|
+
ctx->message += "injected corrupt last byte; ";
|
|
999
1000
|
ret_fault_injected = true;
|
|
1000
1001
|
} else {
|
|
1001
|
-
ctx->message += "error result multiget single; ";
|
|
1002
|
+
ctx->message += "injected error result multiget single; ";
|
|
1002
1003
|
ret_fault_injected = true;
|
|
1003
|
-
|
|
1004
|
+
ret = IOStatus::IOError(ctx->message);
|
|
1004
1005
|
}
|
|
1005
1006
|
}
|
|
1006
|
-
|
|
1007
|
+
if (ctx->retryable) {
|
|
1008
|
+
ret.SetRetryable(true);
|
|
1009
|
+
}
|
|
1010
|
+
return ret;
|
|
1007
1011
|
}
|
|
1008
1012
|
|
|
1009
1013
|
bool FaultInjectionTestFS::TryParseFileName(const std::string& file_name,
|
|
@@ -1052,7 +1056,7 @@ IOStatus FaultInjectionTestFS::InjectMetadataWriteError() {
|
|
|
1052
1056
|
}
|
|
1053
1057
|
}
|
|
1054
1058
|
TEST_SYNC_POINT("FaultInjectionTestFS::InjectMetadataWriteError:Injected");
|
|
1055
|
-
return IOStatus::IOError();
|
|
1059
|
+
return IOStatus::IOError("injected metadata write error");
|
|
1056
1060
|
}
|
|
1057
1061
|
|
|
1058
1062
|
void FaultInjectionTestFS::PrintFaultBacktrace() {
|
|
@@ -323,8 +323,8 @@ class FaultInjectionTestFS : public FileSystemWrapper {
|
|
|
323
323
|
if (!TryParseFileName(file_name, &file_number, &file_type)) {
|
|
324
324
|
return false;
|
|
325
325
|
}
|
|
326
|
-
return
|
|
327
|
-
|
|
326
|
+
return direct_writable_types_.find(file_type) !=
|
|
327
|
+
direct_writable_types_.end();
|
|
328
328
|
}
|
|
329
329
|
void SetFilesystemActiveNoLock(
|
|
330
330
|
bool active, IOStatus error = IOStatus::Corruption("Not active")) {
|
|
@@ -402,7 +402,8 @@ class FaultInjectionTestFS : public FileSystemWrapper {
|
|
|
402
402
|
// seed is the seed for the random number generator, and one_in determines
|
|
403
403
|
// the probability of injecting error (i.e an error is injected with
|
|
404
404
|
// 1/one_in probability)
|
|
405
|
-
void SetThreadLocalReadErrorContext(uint32_t seed, int one_in
|
|
405
|
+
void SetThreadLocalReadErrorContext(uint32_t seed, int one_in,
|
|
406
|
+
bool retryable) {
|
|
406
407
|
struct ErrorContext* ctx =
|
|
407
408
|
static_cast<struct ErrorContext*>(thread_local_error_->Get());
|
|
408
409
|
if (ctx == nullptr) {
|
|
@@ -411,6 +412,7 @@ class FaultInjectionTestFS : public FileSystemWrapper {
|
|
|
411
412
|
}
|
|
412
413
|
ctx->one_in = one_in;
|
|
413
414
|
ctx->count = 0;
|
|
415
|
+
ctx->retryable = retryable;
|
|
414
416
|
}
|
|
415
417
|
|
|
416
418
|
static void DeleteThreadLocalErrorContext(void* p) {
|
|
@@ -437,9 +439,9 @@ class FaultInjectionTestFS : public FileSystemWrapper {
|
|
|
437
439
|
write_error_allowed_types_ = types;
|
|
438
440
|
}
|
|
439
441
|
|
|
440
|
-
void
|
|
442
|
+
void SetDirectWritableTypes(const std::set<FileType>& types) {
|
|
441
443
|
MutexLock l(&mutex_);
|
|
442
|
-
|
|
444
|
+
direct_writable_types_ = types;
|
|
443
445
|
}
|
|
444
446
|
|
|
445
447
|
void SetRandomMetadataWriteError(int one_in) {
|
|
@@ -556,12 +558,14 @@ class FaultInjectionTestFS : public FileSystemWrapper {
|
|
|
556
558
|
std::string message;
|
|
557
559
|
int frames;
|
|
558
560
|
ErrorType type;
|
|
561
|
+
bool retryable;
|
|
559
562
|
|
|
560
563
|
explicit ErrorContext(uint32_t seed)
|
|
561
564
|
: rand(seed),
|
|
562
565
|
enable_error_injection(false),
|
|
563
566
|
callstack(nullptr),
|
|
564
|
-
frames(0)
|
|
567
|
+
frames(0),
|
|
568
|
+
retryable(false) {}
|
|
565
569
|
~ErrorContext() {
|
|
566
570
|
if (callstack) {
|
|
567
571
|
free(callstack);
|
|
@@ -579,7 +583,7 @@ class FaultInjectionTestFS : public FileSystemWrapper {
|
|
|
579
583
|
bool inject_for_all_file_types_;
|
|
580
584
|
std::vector<FileType> write_error_allowed_types_;
|
|
581
585
|
// File types where direct writable is skipped.
|
|
582
|
-
std::set<FileType>
|
|
586
|
+
std::set<FileType> direct_writable_types_;
|
|
583
587
|
bool ingest_data_corruption_before_write_;
|
|
584
588
|
ChecksumType checksum_handoff_func_tpye_;
|
|
585
589
|
bool fail_get_file_unique_id_;
|
|
@@ -35,6 +35,11 @@ class FaultInjectionSecondaryCache : public SecondaryCache {
|
|
|
35
35
|
const Cache::CacheItemHelper* helper,
|
|
36
36
|
bool force_insert) override;
|
|
37
37
|
|
|
38
|
+
Status InsertSaved(const Slice& /*key*/, const Slice& /*saved*/,
|
|
39
|
+
CompressionType /*type*/, CacheTier /*source*/) override {
|
|
40
|
+
return Status::OK();
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
std::unique_ptr<SecondaryCacheResultHandle> Lookup(
|
|
39
44
|
const Slice& key, const Cache::CacheItemHelper* helper,
|
|
40
45
|
Cache::CreateContext* create_context, bool wait, bool advise_erase,
|
|
@@ -193,6 +193,7 @@ TEST_P(StringAppendOperatorTest, IteratorTest) {
|
|
|
193
193
|
ASSERT_EQ(res, "a1,a2,a3");
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
|
+
ASSERT_OK(it->status());
|
|
196
197
|
|
|
197
198
|
// Should release the snapshot and be aware of the new stuff now
|
|
198
199
|
it.reset(db_->NewIterator(ReadOptions()));
|
|
@@ -217,6 +218,7 @@ TEST_P(StringAppendOperatorTest, IteratorTest) {
|
|
|
217
218
|
ASSERT_EQ(res, "a1,a2,a3,a4");
|
|
218
219
|
}
|
|
219
220
|
}
|
|
221
|
+
ASSERT_OK(it->status());
|
|
220
222
|
|
|
221
223
|
slists.Append("k3", "g1");
|
|
222
224
|
|
|
@@ -242,6 +244,7 @@ TEST_P(StringAppendOperatorTest, IteratorTest) {
|
|
|
242
244
|
ASSERT_EQ(res, "g1");
|
|
243
245
|
}
|
|
244
246
|
}
|
|
247
|
+
ASSERT_OK(it->status());
|
|
245
248
|
}
|
|
246
249
|
|
|
247
250
|
TEST_P(StringAppendOperatorTest, SimpleTest) {
|
package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc
CHANGED
|
@@ -87,6 +87,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate1) {
|
|
|
87
87
|
for (; it->Valid(); it->Next()) {
|
|
88
88
|
keys.insert(it->key().ToString());
|
|
89
89
|
}
|
|
90
|
+
ASSERT_OK(it->status());
|
|
90
91
|
}
|
|
91
92
|
Close();
|
|
92
93
|
|
|
@@ -124,6 +125,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate1) {
|
|
|
124
125
|
it->Next();
|
|
125
126
|
}
|
|
126
127
|
ASSERT_TRUE(!it->Valid());
|
|
128
|
+
ASSERT_OK(it->status());
|
|
127
129
|
}
|
|
128
130
|
}
|
|
129
131
|
|
|
@@ -165,6 +167,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate2) {
|
|
|
165
167
|
for (; it->Valid(); it->Next()) {
|
|
166
168
|
keys.insert(it->key().ToString());
|
|
167
169
|
}
|
|
170
|
+
ASSERT_OK(it->status());
|
|
168
171
|
}
|
|
169
172
|
|
|
170
173
|
Close();
|
|
@@ -202,6 +205,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate2) {
|
|
|
202
205
|
it->Next();
|
|
203
206
|
}
|
|
204
207
|
ASSERT_TRUE(!it->Valid());
|
|
208
|
+
ASSERT_OK(it->status());
|
|
205
209
|
}
|
|
206
210
|
}
|
|
207
211
|
|
|
@@ -249,6 +253,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate3) {
|
|
|
249
253
|
for (; it->Valid(); it->Next()) {
|
|
250
254
|
keys.insert(it->key().ToString());
|
|
251
255
|
}
|
|
256
|
+
ASSERT_OK(it->status());
|
|
252
257
|
}
|
|
253
258
|
Close();
|
|
254
259
|
|
|
@@ -286,6 +291,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate3) {
|
|
|
286
291
|
it->Next();
|
|
287
292
|
}
|
|
288
293
|
ASSERT_TRUE(!it->Valid());
|
|
294
|
+
ASSERT_OK(it->status());
|
|
289
295
|
}
|
|
290
296
|
}
|
|
291
297
|
|
|
@@ -333,6 +339,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) {
|
|
|
333
339
|
for (; it->Valid(); it->Next()) {
|
|
334
340
|
keys.insert(it->key().ToString());
|
|
335
341
|
}
|
|
342
|
+
ASSERT_OK(it->status());
|
|
336
343
|
}
|
|
337
344
|
|
|
338
345
|
Close();
|
|
@@ -370,6 +377,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) {
|
|
|
370
377
|
it->Next();
|
|
371
378
|
}
|
|
372
379
|
ASSERT_TRUE(!it->Valid());
|
|
380
|
+
ASSERT_OK(it->status());
|
|
373
381
|
}
|
|
374
382
|
}
|
|
375
383
|
|
|
@@ -509,6 +517,7 @@ TEST_F(DBOptionChangeMigrationTest, CompactedSrcToUniversal) {
|
|
|
509
517
|
for (; it->Valid(); it->Next()) {
|
|
510
518
|
keys.insert(it->key().ToString());
|
|
511
519
|
}
|
|
520
|
+
ASSERT_OK(it->status());
|
|
512
521
|
}
|
|
513
522
|
|
|
514
523
|
Close();
|
|
@@ -169,7 +169,8 @@ class SimCacheImpl : public SimCache {
|
|
|
169
169
|
|
|
170
170
|
Status Insert(const Slice& key, Cache::ObjectPtr value,
|
|
171
171
|
const CacheItemHelper* helper, size_t charge, Handle** handle,
|
|
172
|
-
Priority priority
|
|
172
|
+
Priority priority, const Slice& compressed = {},
|
|
173
|
+
CompressionType type = kNoCompression) override {
|
|
173
174
|
// The handle and value passed in are for real cache, so we pass nullptr
|
|
174
175
|
// to key_only_cache_ for both instead. Also, the deleter function pointer
|
|
175
176
|
// will be called by user to perform some external operation which should
|
|
@@ -178,8 +179,9 @@ class SimCacheImpl : public SimCache {
|
|
|
178
179
|
Handle* h = key_only_cache_->Lookup(key);
|
|
179
180
|
if (h == nullptr) {
|
|
180
181
|
// TODO: Check for error here?
|
|
181
|
-
auto s =
|
|
182
|
-
|
|
182
|
+
auto s =
|
|
183
|
+
key_only_cache_->Insert(key, nullptr, &kNoopCacheItemHelper, charge,
|
|
184
|
+
nullptr, priority, compressed, type);
|
|
183
185
|
s.PermitUncheckedError();
|
|
184
186
|
} else {
|
|
185
187
|
key_only_cache_->Release(h);
|
|
@@ -189,7 +191,8 @@ class SimCacheImpl : public SimCache {
|
|
|
189
191
|
if (!target_) {
|
|
190
192
|
return Status::OK();
|
|
191
193
|
}
|
|
192
|
-
return target_->Insert(key, value, helper, charge, handle, priority
|
|
194
|
+
return target_->Insert(key, value, helper, charge, handle, priority,
|
|
195
|
+
compressed, type);
|
|
193
196
|
}
|
|
194
197
|
|
|
195
198
|
Handle* Lookup(const Slice& key, const CacheItemHelper* helper,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
The files in this directory originally come from
|
|
2
|
+
https://github.com/percona/PerconaFT/.
|
|
3
|
+
|
|
4
|
+
This directory only includes the "locktree" part of PerconaFT, and its
|
|
5
|
+
dependencies.
|
|
6
|
+
|
|
7
|
+
The following modifications were made:
|
|
8
|
+
- Make locktree usable outside of PerconaFT library
|
|
9
|
+
- Add shared read-only lock support
|
|
10
|
+
|
|
11
|
+
The files named *_subst.* are substitutes of the PerconaFT's files, they
|
|
12
|
+
contain replacements of PerconaFT's functionality.
|
|
13
|
+
|
|
@@ -1635,6 +1635,47 @@ TEST_P(OptimisticTransactionTest, SequenceNumberAfterRecoverTest) {
|
|
|
1635
1635
|
delete transaction;
|
|
1636
1636
|
}
|
|
1637
1637
|
|
|
1638
|
+
#ifdef __SANITIZE_THREAD__
|
|
1639
|
+
// Skip OptimisticTransactionTest.SequenceNumberAfterRecoverLargeTest under TSAN
|
|
1640
|
+
// to avoid false positive because of TSAN lock limit of 64.
|
|
1641
|
+
#else
|
|
1642
|
+
TEST_P(OptimisticTransactionTest, SequenceNumberAfterRecoverLargeTest) {
|
|
1643
|
+
WriteOptions write_options;
|
|
1644
|
+
OptimisticTransactionOptions transaction_options;
|
|
1645
|
+
|
|
1646
|
+
Transaction* transaction(
|
|
1647
|
+
txn_db->BeginTransaction(write_options, transaction_options));
|
|
1648
|
+
|
|
1649
|
+
std::string value(1024 * 1024, 'X');
|
|
1650
|
+
const size_t n_zero = 2;
|
|
1651
|
+
std::string s_i;
|
|
1652
|
+
Status s;
|
|
1653
|
+
for (int i = 1; i <= 64; i++) {
|
|
1654
|
+
s_i = std::to_string(i);
|
|
1655
|
+
auto key = std::string(n_zero - std::min(n_zero, s_i.length()), '0') + s_i;
|
|
1656
|
+
s = transaction->Put(key, value);
|
|
1657
|
+
ASSERT_OK(s);
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
s = transaction->Commit();
|
|
1661
|
+
ASSERT_OK(s);
|
|
1662
|
+
delete transaction;
|
|
1663
|
+
|
|
1664
|
+
Reopen();
|
|
1665
|
+
transaction = txn_db->BeginTransaction(write_options, transaction_options);
|
|
1666
|
+
s = transaction->Put("bar", "val");
|
|
1667
|
+
ASSERT_OK(s);
|
|
1668
|
+
s = transaction->Commit();
|
|
1669
|
+
if (!s.ok()) {
|
|
1670
|
+
std::cerr << "Failed to commit records. Error: " << s.ToString()
|
|
1671
|
+
<< std::endl;
|
|
1672
|
+
}
|
|
1673
|
+
ASSERT_OK(s);
|
|
1674
|
+
|
|
1675
|
+
delete transaction;
|
|
1676
|
+
}
|
|
1677
|
+
#endif // __SANITIZE_THREAD__
|
|
1678
|
+
|
|
1638
1679
|
TEST_P(OptimisticTransactionTest, TimestampedSnapshotMissingCommitTs) {
|
|
1639
1680
|
std::unique_ptr<Transaction> txn(txn_db->BeginTransaction(WriteOptions()));
|
|
1640
1681
|
ASSERT_OK(txn->Put("a", "v"));
|