@nxtedition/rocksdb 9.0.0 → 10.0.0
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 +244 -177
- 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 +202 -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 +314 -25
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +29 -4
- 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 +38 -55
- package/package.json +4 -4
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/util.h +7 -1
- 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
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -682,6 +682,7 @@ TEST_F(DBRangeDelTest, TableEvictedDuringScan) {
|
|
|
682
682
|
// soon as its refcount drops to zero.
|
|
683
683
|
bbto.block_cache->EraseUnRefEntries();
|
|
684
684
|
}
|
|
685
|
+
ASSERT_OK(iter->status());
|
|
685
686
|
ASSERT_EQ(kNum, expected);
|
|
686
687
|
delete iter;
|
|
687
688
|
db_->ReleaseSnapshot(snapshot);
|
|
@@ -840,6 +841,7 @@ TEST_F(DBRangeDelTest, IteratorRemovesCoveredKeys) {
|
|
|
840
841
|
++expected;
|
|
841
842
|
}
|
|
842
843
|
}
|
|
844
|
+
ASSERT_OK(iter->status());
|
|
843
845
|
ASSERT_EQ(kNum, expected);
|
|
844
846
|
delete iter;
|
|
845
847
|
}
|
|
@@ -908,6 +910,7 @@ TEST_F(DBRangeDelTest, IteratorIgnoresRangeDeletions) {
|
|
|
908
910
|
std::string key;
|
|
909
911
|
ASSERT_EQ(expected[i], iter->key());
|
|
910
912
|
}
|
|
913
|
+
ASSERT_OK(iter->status());
|
|
911
914
|
ASSERT_EQ(3, i);
|
|
912
915
|
delete iter;
|
|
913
916
|
db_->ReleaseSnapshot(snapshot);
|
|
@@ -1382,6 +1385,7 @@ TEST_F(DBRangeDelTest, UntruncatedTombstoneDoesNotDeleteNewerKey) {
|
|
|
1382
1385
|
for (; iter->Valid(); iter->Next()) {
|
|
1383
1386
|
++keys_found;
|
|
1384
1387
|
}
|
|
1388
|
+
EXPECT_OK(iter->status());
|
|
1385
1389
|
delete iter;
|
|
1386
1390
|
return keys_found;
|
|
1387
1391
|
};
|
|
@@ -1485,6 +1489,7 @@ TEST_F(DBRangeDelTest, DeletedMergeOperandReappearsIterPrev) {
|
|
|
1485
1489
|
for (; iter->Valid(); iter->Prev()) {
|
|
1486
1490
|
++keys_found;
|
|
1487
1491
|
}
|
|
1492
|
+
ASSERT_OK(iter->status());
|
|
1488
1493
|
delete iter;
|
|
1489
1494
|
ASSERT_EQ(kNumKeys, keys_found);
|
|
1490
1495
|
|
|
@@ -1519,6 +1524,7 @@ TEST_F(DBRangeDelTest, SnapshotPreventsDroppedKeys) {
|
|
|
1519
1524
|
|
|
1520
1525
|
iter->Next();
|
|
1521
1526
|
ASSERT_FALSE(iter->Valid());
|
|
1527
|
+
ASSERT_OK(iter->status());
|
|
1522
1528
|
|
|
1523
1529
|
delete iter;
|
|
1524
1530
|
db_->ReleaseSnapshot(snapshot);
|
|
@@ -1564,6 +1570,7 @@ TEST_F(DBRangeDelTest, SnapshotPreventsDroppedKeysInImmMemTables) {
|
|
|
1564
1570
|
|
|
1565
1571
|
iter->Next();
|
|
1566
1572
|
ASSERT_FALSE(iter->Valid());
|
|
1573
|
+
ASSERT_OK(iter->status());
|
|
1567
1574
|
}
|
|
1568
1575
|
|
|
1569
1576
|
TEST_F(DBRangeDelTest, RangeTombstoneWrittenToMinimalSsts) {
|
|
@@ -1978,6 +1985,7 @@ TEST_F(DBRangeDelTest, IteratorRefresh) {
|
|
|
1978
1985
|
ASSERT_EQ("key1", iter->key());
|
|
1979
1986
|
iter->Next();
|
|
1980
1987
|
ASSERT_FALSE(iter->Valid());
|
|
1988
|
+
ASSERT_OK(iter->status());
|
|
1981
1989
|
|
|
1982
1990
|
delete iter;
|
|
1983
1991
|
}
|
|
@@ -3511,6 +3519,256 @@ TEST_F(DBRangeDelTest, MemtableMaxRangeDeletions) {
|
|
|
3511
3519
|
ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
|
|
3512
3520
|
ASSERT_EQ(3, NumTableFilesAtLevel(0));
|
|
3513
3521
|
}
|
|
3522
|
+
|
|
3523
|
+
TEST_F(DBRangeDelTest, RangeDelReseekAfterFileReadError) {
|
|
3524
|
+
// This is to test a bug that is fixed in
|
|
3525
|
+
// https://github.com/facebook/rocksdb/pull/11786.
|
|
3526
|
+
Options opts = CurrentOptions();
|
|
3527
|
+
opts.num_levels = 7;
|
|
3528
|
+
|
|
3529
|
+
// Set up LSM
|
|
3530
|
+
//
|
|
3531
|
+
// L4: F1: [key1] F2: [key2]
|
|
3532
|
+
// L5: F3:[DeleteRange(key3, key6)]
|
|
3533
|
+
// L6: F4:[key3, key6]
|
|
3534
|
+
// Will inject error when reading from F2.
|
|
3535
|
+
// SeekToFirst() should land on key1.
|
|
3536
|
+
// Next() should encounter error when reading from F2,
|
|
3537
|
+
// and range del reseek should not reset this status.
|
|
3538
|
+
Random rnd(301);
|
|
3539
|
+
// L6
|
|
3540
|
+
ASSERT_OK(Put(Key(3), rnd.RandomString(100)));
|
|
3541
|
+
ASSERT_OK(Put(Key(6), rnd.RandomString(100)));
|
|
3542
|
+
ASSERT_OK(Flush());
|
|
3543
|
+
MoveFilesToLevel(6);
|
|
3544
|
+
// L5
|
|
3545
|
+
ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
|
|
3546
|
+
Key(6)));
|
|
3547
|
+
ASSERT_OK(Flush());
|
|
3548
|
+
MoveFilesToLevel(5);
|
|
3549
|
+
// L4
|
|
3550
|
+
ASSERT_OK(Put(Key(2), rnd.RandomString(100)));
|
|
3551
|
+
ASSERT_OK(Flush());
|
|
3552
|
+
MoveFilesToLevel(4);
|
|
3553
|
+
std::string fname;
|
|
3554
|
+
std::vector<LiveFileMetaData> live_files;
|
|
3555
|
+
db_->GetLiveFilesMetaData(&live_files);
|
|
3556
|
+
for (auto& meta : live_files) {
|
|
3557
|
+
if (meta.level == 4) {
|
|
3558
|
+
fname = meta.name;
|
|
3559
|
+
break;
|
|
3560
|
+
}
|
|
3561
|
+
}
|
|
3562
|
+
ASSERT_TRUE(!fname.empty());
|
|
3563
|
+
ASSERT_OK(Put(Key(1), rnd.RandomString(100)));
|
|
3564
|
+
ASSERT_OK(Flush());
|
|
3565
|
+
MoveFilesToLevel(4);
|
|
3566
|
+
|
|
3567
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3568
|
+
"RandomAccessFileReader::Read::BeforeReturn", [&fname](void* pair_ptr) {
|
|
3569
|
+
auto p =
|
|
3570
|
+
reinterpret_cast<std::pair<std::string*, IOStatus*>*>(pair_ptr);
|
|
3571
|
+
if (p->first->find(fname) != std::string::npos) {
|
|
3572
|
+
*p->second = IOStatus::IOError();
|
|
3573
|
+
p->second->SetRetryable(true);
|
|
3574
|
+
}
|
|
3575
|
+
});
|
|
3576
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3577
|
+
std::unique_ptr<Iterator> iter{db_->NewIterator(ReadOptions())};
|
|
3578
|
+
iter->SeekToFirst();
|
|
3579
|
+
ASSERT_TRUE(iter->Valid());
|
|
3580
|
+
ASSERT_OK(iter->status());
|
|
3581
|
+
ASSERT_EQ(iter->key(), Key(1));
|
|
3582
|
+
iter->Next();
|
|
3583
|
+
ASSERT_FALSE(iter->Valid());
|
|
3584
|
+
ASSERT_NOK(iter->status());
|
|
3585
|
+
ASSERT_TRUE(iter->status().IsIOError());
|
|
3586
|
+
iter.reset();
|
|
3587
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
3588
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
3589
|
+
|
|
3590
|
+
// Reverse scan
|
|
3591
|
+
// LSM setup
|
|
3592
|
+
// L4: F1: [key2] F2: [key7, key8]
|
|
3593
|
+
// L5: F3:[[key3, key6)]
|
|
3594
|
+
// L6: F4:[key1, key5]
|
|
3595
|
+
// Ingest error when read from F1.
|
|
3596
|
+
// SeekToLast() should land on key8.
|
|
3597
|
+
// During Prev(), MergingIterator will encounter error when reading from F1
|
|
3598
|
+
// and do a range del reseek (it sees key5 covered by a range tombstone).
|
|
3599
|
+
DestroyAndReopen(opts);
|
|
3600
|
+
// L6
|
|
3601
|
+
ASSERT_OK(Put(Key(1), rnd.RandomString(100)));
|
|
3602
|
+
ASSERT_OK(Put(Key(5), rnd.RandomString(100)));
|
|
3603
|
+
ASSERT_OK(Flush());
|
|
3604
|
+
MoveFilesToLevel(6);
|
|
3605
|
+
// L5
|
|
3606
|
+
ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
|
|
3607
|
+
Key(6)));
|
|
3608
|
+
ASSERT_OK(Flush());
|
|
3609
|
+
MoveFilesToLevel(5);
|
|
3610
|
+
// L4
|
|
3611
|
+
ASSERT_OK(Put(Key(2), rnd.RandomString(100)));
|
|
3612
|
+
ASSERT_OK(Flush());
|
|
3613
|
+
MoveFilesToLevel(4);
|
|
3614
|
+
live_files.clear();
|
|
3615
|
+
db_->GetLiveFilesMetaData(&live_files);
|
|
3616
|
+
for (auto& meta : live_files) {
|
|
3617
|
+
if (meta.level == 4) {
|
|
3618
|
+
fname = meta.name;
|
|
3619
|
+
break;
|
|
3620
|
+
}
|
|
3621
|
+
}
|
|
3622
|
+
ASSERT_TRUE(!fname.empty());
|
|
3623
|
+
ASSERT_OK(Put(Key(7), rnd.RandomString(100)));
|
|
3624
|
+
ASSERT_OK(Put(Key(8), rnd.RandomString(100)));
|
|
3625
|
+
ASSERT_OK(Flush());
|
|
3626
|
+
MoveFilesToLevel(4);
|
|
3627
|
+
|
|
3628
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
3629
|
+
"RandomAccessFileReader::Read::AnyOffset", [&fname](void* pair_ptr) {
|
|
3630
|
+
auto p =
|
|
3631
|
+
reinterpret_cast<std::pair<std::string*, IOStatus*>*>(pair_ptr);
|
|
3632
|
+
if (p->first->find(fname) != std::string::npos) {
|
|
3633
|
+
*p->second = IOStatus::IOError();
|
|
3634
|
+
p->second->SetRetryable(true);
|
|
3635
|
+
}
|
|
3636
|
+
});
|
|
3637
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
3638
|
+
iter.reset(db_->NewIterator(ReadOptions()));
|
|
3639
|
+
iter->SeekToLast();
|
|
3640
|
+
ASSERT_TRUE(iter->Valid());
|
|
3641
|
+
ASSERT_OK(iter->status());
|
|
3642
|
+
ASSERT_EQ(iter->key(), Key(8));
|
|
3643
|
+
// Note that for reverse scan, DBIter will need to ensure
|
|
3644
|
+
// the key it returns is the one with the highest sequence number.
|
|
3645
|
+
// To return key7, it internally calls MergingIterator::Prev()
|
|
3646
|
+
// until it reaches a previous user key.
|
|
3647
|
+
iter->Prev();
|
|
3648
|
+
ASSERT_FALSE(iter->Valid());
|
|
3649
|
+
ASSERT_NOK(iter->status());
|
|
3650
|
+
ASSERT_TRUE(iter->status().IsIOError());
|
|
3651
|
+
|
|
3652
|
+
iter.reset();
|
|
3653
|
+
}
|
|
3654
|
+
|
|
3655
|
+
TEST_F(DBRangeDelTest, ReleaseSnapshotAfterIteratorCreation) {
|
|
3656
|
+
// Test that range tombstone code path in LevelIterator
|
|
3657
|
+
// does access ReadOptions::snapshot after Iterator creation.
|
|
3658
|
+
//
|
|
3659
|
+
// Put some data in L2 so that range tombstone in L1 will not be dropped.
|
|
3660
|
+
ASSERT_OK(Put(Key(0), "v"));
|
|
3661
|
+
ASSERT_OK(Put(Key(100), "v"));
|
|
3662
|
+
ASSERT_OK(Flush());
|
|
3663
|
+
MoveFilesToLevel(2);
|
|
3664
|
+
|
|
3665
|
+
// two L1 file with range del
|
|
3666
|
+
ASSERT_OK(Put(Key(1), "v"));
|
|
3667
|
+
ASSERT_OK(Put(Key(2), "v"));
|
|
3668
|
+
ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
|
|
3669
|
+
Key(4)));
|
|
3670
|
+
ASSERT_OK(Flush());
|
|
3671
|
+
MoveFilesToLevel(1);
|
|
3672
|
+
|
|
3673
|
+
ASSERT_OK(Put(Key(5), "v"));
|
|
3674
|
+
ASSERT_OK(Put(Key(6), "v"));
|
|
3675
|
+
ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(5),
|
|
3676
|
+
Key(6)));
|
|
3677
|
+
ASSERT_OK(Flush());
|
|
3678
|
+
MoveFilesToLevel(1);
|
|
3679
|
+
|
|
3680
|
+
ASSERT_EQ(2, NumTableFilesAtLevel(1));
|
|
3681
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(2));
|
|
3682
|
+
|
|
3683
|
+
const Snapshot* snapshot = db_->GetSnapshot();
|
|
3684
|
+
ReadOptions ro;
|
|
3685
|
+
ro.snapshot = snapshot;
|
|
3686
|
+
|
|
3687
|
+
Iterator* iter = db_->NewIterator(ro);
|
|
3688
|
+
db_->ReleaseSnapshot(snapshot);
|
|
3689
|
+
|
|
3690
|
+
iter->Seek(Key(1));
|
|
3691
|
+
std::vector<int> expected_keys{1, 2, 6, 100};
|
|
3692
|
+
for (int i : expected_keys) {
|
|
3693
|
+
ASSERT_OK(iter->status());
|
|
3694
|
+
ASSERT_TRUE(iter->Valid());
|
|
3695
|
+
ASSERT_EQ(iter->key(), Key(i));
|
|
3696
|
+
iter->Next();
|
|
3697
|
+
}
|
|
3698
|
+
ASSERT_TRUE(!iter->Valid() && iter->status().ok());
|
|
3699
|
+
|
|
3700
|
+
delete iter;
|
|
3701
|
+
}
|
|
3702
|
+
|
|
3703
|
+
TEST_F(DBRangeDelTest, RefreshWithSnapshot) {
|
|
3704
|
+
ASSERT_OK(Put(Key(4), "4"));
|
|
3705
|
+
ASSERT_OK(Put(Key(6), "6"));
|
|
3706
|
+
const Snapshot* snapshot = db_->GetSnapshot();
|
|
3707
|
+
ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
|
|
3708
|
+
Key(5)));
|
|
3709
|
+
|
|
3710
|
+
std::unique_ptr<Iterator> iter{db_->NewIterator(ReadOptions())};
|
|
3711
|
+
// Live Memtable
|
|
3712
|
+
iter->SeekToFirst();
|
|
3713
|
+
ASSERT_TRUE(iter->Valid());
|
|
3714
|
+
ASSERT_EQ(iter->key(), Key(6));
|
|
3715
|
+
ASSERT_OK(iter->Refresh(snapshot));
|
|
3716
|
+
iter->SeekToFirst();
|
|
3717
|
+
ASSERT_TRUE(iter->Valid());
|
|
3718
|
+
ASSERT_EQ(iter->key(), Key(4));
|
|
3719
|
+
// Immutable Memtable
|
|
3720
|
+
ASSERT_OK(dbfull()->TEST_SwitchMemtable());
|
|
3721
|
+
ASSERT_OK(iter->Refresh(nullptr));
|
|
3722
|
+
iter->SeekToFirst();
|
|
3723
|
+
ASSERT_TRUE(iter->Valid());
|
|
3724
|
+
ASSERT_EQ(iter->key(), Key(6));
|
|
3725
|
+
ASSERT_OK(iter->Refresh(snapshot));
|
|
3726
|
+
iter->SeekToFirst();
|
|
3727
|
+
ASSERT_TRUE(iter->Valid());
|
|
3728
|
+
ASSERT_EQ(iter->key(), Key(4));
|
|
3729
|
+
// L0
|
|
3730
|
+
ASSERT_OK(Flush());
|
|
3731
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(0));
|
|
3732
|
+
ASSERT_OK(iter->Refresh(nullptr));
|
|
3733
|
+
iter->SeekToFirst();
|
|
3734
|
+
ASSERT_TRUE(iter->Valid());
|
|
3735
|
+
ASSERT_EQ(iter->key(), Key(6));
|
|
3736
|
+
ASSERT_OK(iter->Refresh(snapshot));
|
|
3737
|
+
iter->SeekToFirst();
|
|
3738
|
+
ASSERT_TRUE(iter->Valid());
|
|
3739
|
+
ASSERT_EQ(iter->key(), Key(4));
|
|
3740
|
+
// L1
|
|
3741
|
+
MoveFilesToLevel(1);
|
|
3742
|
+
ASSERT_EQ(1, NumTableFilesAtLevel(1));
|
|
3743
|
+
ASSERT_OK(iter->Refresh(nullptr));
|
|
3744
|
+
iter->SeekToFirst();
|
|
3745
|
+
ASSERT_TRUE(iter->Valid());
|
|
3746
|
+
ASSERT_EQ(iter->key(), Key(6));
|
|
3747
|
+
ASSERT_OK(iter->Refresh(snapshot));
|
|
3748
|
+
iter->SeekToFirst();
|
|
3749
|
+
ASSERT_TRUE(iter->Valid());
|
|
3750
|
+
ASSERT_EQ(iter->key(), Key(4));
|
|
3751
|
+
// L1 with two file.
|
|
3752
|
+
// Test that when LevelIterator enters a new file,
|
|
3753
|
+
// it remembers which snapshot sequence number to use.
|
|
3754
|
+
ASSERT_OK(Put(Key(2), "2"));
|
|
3755
|
+
ASSERT_OK(Flush());
|
|
3756
|
+
MoveFilesToLevel(1);
|
|
3757
|
+
ASSERT_EQ(2, NumTableFilesAtLevel(1));
|
|
3758
|
+
ASSERT_OK(iter->Refresh(nullptr));
|
|
3759
|
+
iter->SeekToFirst();
|
|
3760
|
+
ASSERT_TRUE(iter->Valid());
|
|
3761
|
+
// LevelIterator is at the first file
|
|
3762
|
+
ASSERT_EQ(iter->key(), Key(2));
|
|
3763
|
+
ASSERT_OK(iter->Refresh(snapshot));
|
|
3764
|
+
// Will enter the second file, and create a new range tombstone iterator.
|
|
3765
|
+
// It should use the snapshot sequence number.
|
|
3766
|
+
iter->SeekToFirst();
|
|
3767
|
+
ASSERT_TRUE(iter->Valid());
|
|
3768
|
+
ASSERT_EQ(iter->key(), Key(4));
|
|
3769
|
+
iter.reset();
|
|
3770
|
+
db_->ReleaseSnapshot(snapshot);
|
|
3771
|
+
}
|
|
3514
3772
|
} // namespace ROCKSDB_NAMESPACE
|
|
3515
3773
|
|
|
3516
3774
|
int main(int argc, char** argv) {
|
|
@@ -220,6 +220,7 @@ TEST_P(DBRateLimiterOnReadTest, Iterator) {
|
|
|
220
220
|
++expected;
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
|
+
ASSERT_OK(iter->status());
|
|
223
224
|
// Reverse scan does not read evenly (one block per iteration) due to
|
|
224
225
|
// descending seqno ordering, so wait until after the loop to check total.
|
|
225
226
|
ASSERT_EQ(expected, options_.rate_limiter->GetTotalRequests(Env::IO_USER));
|
|
@@ -240,6 +240,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
|
|
|
240
240
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
241
241
|
write_timestamps[i]);
|
|
242
242
|
}
|
|
243
|
+
ASSERT_OK(it->status());
|
|
243
244
|
size_t expected_count = kMaxKey - start_keys[i] + 1;
|
|
244
245
|
ASSERT_EQ(expected_count, count);
|
|
245
246
|
|
|
@@ -252,6 +253,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
|
|
|
252
253
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
253
254
|
write_timestamps[i]);
|
|
254
255
|
}
|
|
256
|
+
ASSERT_OK(it->status());
|
|
255
257
|
ASSERT_EQ(static_cast<size_t>(kMaxKey) - start_keys[i] + 1, count);
|
|
256
258
|
|
|
257
259
|
// SeekToFirst()/SeekToLast() with lower/upper bounds.
|
|
@@ -273,6 +275,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
|
|
|
273
275
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
274
276
|
write_timestamps[i]);
|
|
275
277
|
}
|
|
278
|
+
ASSERT_OK(it->status());
|
|
276
279
|
ASSERT_EQ(r - std::max(l, start_keys[i]), count);
|
|
277
280
|
|
|
278
281
|
for (it->SeekToLast(), key = std::min(r, kMaxKey + 1), count = 0;
|
|
@@ -282,6 +285,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
|
|
|
282
285
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
283
286
|
write_timestamps[i]);
|
|
284
287
|
}
|
|
288
|
+
ASSERT_OK(it->status());
|
|
285
289
|
l += (kMaxKey / 100);
|
|
286
290
|
r -= (kMaxKey / 100);
|
|
287
291
|
}
|
|
@@ -328,6 +332,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, Iterators) {
|
|
|
328
332
|
CheckIterUserEntry(iters[0], Key1(key), kTypeValue,
|
|
329
333
|
"value" + std::to_string(key), write_timestamp);
|
|
330
334
|
}
|
|
335
|
+
ASSERT_OK(iters[0]->status());
|
|
331
336
|
|
|
332
337
|
size_t expected_count = kMaxKey - 0 + 1;
|
|
333
338
|
ASSERT_EQ(expected_count, count);
|
|
@@ -336,6 +341,53 @@ TEST_F(DBReadOnlyTestWithTimestamp, Iterators) {
|
|
|
336
341
|
Close();
|
|
337
342
|
}
|
|
338
343
|
|
|
344
|
+
TEST_F(DBReadOnlyTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
|
|
345
|
+
Options options = CurrentOptions();
|
|
346
|
+
options.env = env_;
|
|
347
|
+
options.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
348
|
+
// Use UDT in memtable only feature for this test, so we can control that
|
|
349
|
+
// newly set `full_history_ts_low` collapse history when Flush happens.
|
|
350
|
+
options.persist_user_defined_timestamps = false;
|
|
351
|
+
options.allow_concurrent_memtable_write = false;
|
|
352
|
+
DestroyAndReopen(options);
|
|
353
|
+
|
|
354
|
+
std::string write_ts;
|
|
355
|
+
PutFixed64(&write_ts, 1);
|
|
356
|
+
ASSERT_OK(db_->Put(WriteOptions(), "foo", write_ts, "val1"));
|
|
357
|
+
|
|
358
|
+
std::string full_history_ts_low;
|
|
359
|
+
PutFixed64(&full_history_ts_low, 3);
|
|
360
|
+
ASSERT_OK(db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
|
|
361
|
+
full_history_ts_low));
|
|
362
|
+
ASSERT_OK(Flush(0));
|
|
363
|
+
|
|
364
|
+
// Reopen the database in read only mode to test its timestamp support.
|
|
365
|
+
Close();
|
|
366
|
+
ASSERT_OK(ReadOnlyReopen(options));
|
|
367
|
+
|
|
368
|
+
// Reading below full_history_ts_low fails a sanity check.
|
|
369
|
+
std::string read_ts;
|
|
370
|
+
PutFixed64(&read_ts, 2);
|
|
371
|
+
Slice read_ts_slice = read_ts;
|
|
372
|
+
ReadOptions read_opts;
|
|
373
|
+
read_opts.timestamp = &read_ts_slice;
|
|
374
|
+
|
|
375
|
+
// Get()
|
|
376
|
+
std::string value;
|
|
377
|
+
ASSERT_TRUE(db_->Get(read_opts, "foo", &value).IsInvalidArgument());
|
|
378
|
+
// NewIterator()
|
|
379
|
+
std::unique_ptr<Iterator> iter(
|
|
380
|
+
db_->NewIterator(read_opts, db_->DefaultColumnFamily()));
|
|
381
|
+
ASSERT_TRUE(iter->status().IsInvalidArgument());
|
|
382
|
+
|
|
383
|
+
// NewIterators()
|
|
384
|
+
std::vector<ColumnFamilyHandle*> cfhs = {db_->DefaultColumnFamily()};
|
|
385
|
+
std::vector<Iterator*> iterators;
|
|
386
|
+
ASSERT_TRUE(
|
|
387
|
+
db_->NewIterators(read_opts, cfhs, &iterators).IsInvalidArgument());
|
|
388
|
+
Close();
|
|
389
|
+
}
|
|
390
|
+
|
|
339
391
|
TEST_F(DBReadOnlyTestWithTimestamp, IteratorsReadTimestampSizeMismatch) {
|
|
340
392
|
const int kNumKeysPerFile = 128;
|
|
341
393
|
const uint64_t kMaxKey = 1024;
|
|
@@ -164,12 +164,22 @@ TEST_F(DBSecondaryTest, ReopenAsSecondary) {
|
|
|
164
164
|
Reopen(options);
|
|
165
165
|
ASSERT_OK(Put("foo", "foo_value"));
|
|
166
166
|
ASSERT_OK(Put("bar", "bar_value"));
|
|
167
|
+
WideColumns columns{{kDefaultWideColumnName, "attr_default_val"},
|
|
168
|
+
{"attr_name1", "attr_value_1"},
|
|
169
|
+
{"attr_name2", "attr_value_2"}};
|
|
170
|
+
ASSERT_OK(db_->PutEntity(WriteOptions(), db_->DefaultColumnFamily(), "baz",
|
|
171
|
+
columns));
|
|
167
172
|
ASSERT_OK(dbfull()->Flush(FlushOptions()));
|
|
168
173
|
Close();
|
|
169
174
|
|
|
170
175
|
ASSERT_OK(ReopenAsSecondary(options));
|
|
171
176
|
ASSERT_EQ("foo_value", Get("foo"));
|
|
172
177
|
ASSERT_EQ("bar_value", Get("bar"));
|
|
178
|
+
PinnableWideColumns result;
|
|
179
|
+
ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(), "baz",
|
|
180
|
+
&result));
|
|
181
|
+
ASSERT_EQ(result.columns(), columns);
|
|
182
|
+
|
|
173
183
|
ReadOptions ropts;
|
|
174
184
|
ropts.verify_checksums = true;
|
|
175
185
|
auto db1 = static_cast<DBImplSecondary*>(db_);
|
|
@@ -182,13 +192,17 @@ TEST_F(DBSecondaryTest, ReopenAsSecondary) {
|
|
|
182
192
|
ASSERT_EQ("bar", iter->key().ToString());
|
|
183
193
|
ASSERT_EQ("bar_value", iter->value().ToString());
|
|
184
194
|
} else if (1 == count) {
|
|
195
|
+
ASSERT_EQ("baz", iter->key().ToString());
|
|
196
|
+
ASSERT_EQ(columns, iter->columns());
|
|
197
|
+
} else if (2 == count) {
|
|
185
198
|
ASSERT_EQ("foo", iter->key().ToString());
|
|
186
199
|
ASSERT_EQ("foo_value", iter->value().ToString());
|
|
187
200
|
}
|
|
188
201
|
++count;
|
|
189
202
|
}
|
|
203
|
+
ASSERT_OK(iter->status());
|
|
190
204
|
delete iter;
|
|
191
|
-
ASSERT_EQ(
|
|
205
|
+
ASSERT_EQ(3, count);
|
|
192
206
|
}
|
|
193
207
|
|
|
194
208
|
TEST_F(DBSecondaryTest, SimpleInternalCompaction) {
|
|
@@ -521,6 +535,8 @@ TEST_F(DBSecondaryTest, SecondaryCloseFiles) {
|
|
|
521
535
|
}
|
|
522
536
|
ASSERT_FALSE(iter1->Valid());
|
|
523
537
|
ASSERT_FALSE(iter2->Valid());
|
|
538
|
+
ASSERT_OK(iter1->status());
|
|
539
|
+
ASSERT_OK(iter2->status());
|
|
524
540
|
};
|
|
525
541
|
|
|
526
542
|
ASSERT_OK(Put("a", "value"));
|
|
@@ -793,6 +809,7 @@ TEST_F(DBSecondaryTest, MissingTableFileDuringOpen) {
|
|
|
793
809
|
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
794
810
|
++count;
|
|
795
811
|
}
|
|
812
|
+
ASSERT_OK(iter->status());
|
|
796
813
|
ASSERT_EQ(2, count);
|
|
797
814
|
delete iter;
|
|
798
815
|
}
|
|
@@ -850,6 +867,7 @@ TEST_F(DBSecondaryTest, MissingTableFile) {
|
|
|
850
867
|
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
851
868
|
++count;
|
|
852
869
|
}
|
|
870
|
+
ASSERT_OK(iter->status());
|
|
853
871
|
ASSERT_EQ(2, count);
|
|
854
872
|
delete iter;
|
|
855
873
|
}
|
|
@@ -922,6 +940,7 @@ TEST_F(DBSecondaryTest, SwitchManifest) {
|
|
|
922
940
|
ASSERT_EQ("value_" + std::to_string(kNumFiles - 1),
|
|
923
941
|
iter->value().ToString());
|
|
924
942
|
}
|
|
943
|
+
EXPECT_OK(iter->status());
|
|
925
944
|
};
|
|
926
945
|
|
|
927
946
|
range_scan_db();
|
|
@@ -1472,6 +1491,7 @@ TEST_F(DBSecondaryTestWithTimestamp, IteratorAndGet) {
|
|
|
1472
1491
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
1473
1492
|
write_timestamps[i]);
|
|
1474
1493
|
}
|
|
1494
|
+
ASSERT_OK(it->status());
|
|
1475
1495
|
size_t expected_count = kMaxKey - start_keys[i] + 1;
|
|
1476
1496
|
ASSERT_EQ(expected_count, count);
|
|
1477
1497
|
|
|
@@ -1484,6 +1504,7 @@ TEST_F(DBSecondaryTestWithTimestamp, IteratorAndGet) {
|
|
|
1484
1504
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
1485
1505
|
write_timestamps[i]);
|
|
1486
1506
|
}
|
|
1507
|
+
ASSERT_OK(it->status());
|
|
1487
1508
|
ASSERT_EQ(static_cast<size_t>(kMaxKey) - start_keys[i] + 1, count);
|
|
1488
1509
|
|
|
1489
1510
|
// SeekToFirst()/SeekToLast() with lower/upper bounds.
|
|
@@ -1505,6 +1526,7 @@ TEST_F(DBSecondaryTestWithTimestamp, IteratorAndGet) {
|
|
|
1505
1526
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
1506
1527
|
write_timestamps[i]);
|
|
1507
1528
|
}
|
|
1529
|
+
ASSERT_OK(it->status());
|
|
1508
1530
|
ASSERT_EQ(r - std::max(l, start_keys[i]), count);
|
|
1509
1531
|
|
|
1510
1532
|
for (it->SeekToLast(), key = std::min(r, kMaxKey + 1), count = 0;
|
|
@@ -1514,6 +1536,7 @@ TEST_F(DBSecondaryTestWithTimestamp, IteratorAndGet) {
|
|
|
1514
1536
|
get_value_and_check(db_, read_opts, it->key(), it->value(),
|
|
1515
1537
|
write_timestamps[i]);
|
|
1516
1538
|
}
|
|
1539
|
+
ASSERT_OK(it->status());
|
|
1517
1540
|
l += (kMaxKey / 100);
|
|
1518
1541
|
r -= (kMaxKey / 100);
|
|
1519
1542
|
}
|
|
@@ -1561,6 +1584,55 @@ TEST_F(DBSecondaryTestWithTimestamp, IteratorsReadTimestampSizeMismatch) {
|
|
|
1561
1584
|
Close();
|
|
1562
1585
|
}
|
|
1563
1586
|
|
|
1587
|
+
TEST_F(DBSecondaryTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
|
|
1588
|
+
Options options = CurrentOptions();
|
|
1589
|
+
options.env = env_;
|
|
1590
|
+
options.comparator = test::BytewiseComparatorWithU64TsWrapper();
|
|
1591
|
+
// Use UDT in memtable only feature for this test, so we can control that
|
|
1592
|
+
// newly set `full_history_ts_low` collapse history when Flush happens.
|
|
1593
|
+
options.persist_user_defined_timestamps = false;
|
|
1594
|
+
options.allow_concurrent_memtable_write = false;
|
|
1595
|
+
DestroyAndReopen(options);
|
|
1596
|
+
|
|
1597
|
+
std::string write_ts;
|
|
1598
|
+
PutFixed64(&write_ts, 1);
|
|
1599
|
+
ASSERT_OK(db_->Put(WriteOptions(), "foo", write_ts, "val1"));
|
|
1600
|
+
|
|
1601
|
+
std::string full_history_ts_low;
|
|
1602
|
+
PutFixed64(&full_history_ts_low, 3);
|
|
1603
|
+
ASSERT_OK(db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
|
|
1604
|
+
full_history_ts_low));
|
|
1605
|
+
ASSERT_OK(Flush(0));
|
|
1606
|
+
|
|
1607
|
+
// Reopen the database as secondary instance to test its timestamp support.
|
|
1608
|
+
Close();
|
|
1609
|
+
options.max_open_files = -1;
|
|
1610
|
+
ASSERT_OK(ReopenAsSecondary(options));
|
|
1611
|
+
|
|
1612
|
+
// Reading below full_history_ts_low fails a sanity check.
|
|
1613
|
+
std::string read_ts;
|
|
1614
|
+
PutFixed64(&read_ts, 2);
|
|
1615
|
+
Slice read_ts_slice = read_ts;
|
|
1616
|
+
ReadOptions read_opts;
|
|
1617
|
+
read_opts.timestamp = &read_ts_slice;
|
|
1618
|
+
|
|
1619
|
+
// Get()
|
|
1620
|
+
std::string value;
|
|
1621
|
+
ASSERT_TRUE(db_->Get(read_opts, "foo", &value).IsInvalidArgument());
|
|
1622
|
+
|
|
1623
|
+
// NewIterator()
|
|
1624
|
+
std::unique_ptr<Iterator> iter(
|
|
1625
|
+
db_->NewIterator(read_opts, db_->DefaultColumnFamily()));
|
|
1626
|
+
ASSERT_TRUE(iter->status().IsInvalidArgument());
|
|
1627
|
+
|
|
1628
|
+
// NewIterators()
|
|
1629
|
+
std::vector<ColumnFamilyHandle*> cfhs = {db_->DefaultColumnFamily()};
|
|
1630
|
+
std::vector<Iterator*> iterators;
|
|
1631
|
+
ASSERT_TRUE(
|
|
1632
|
+
db_->NewIterators(read_opts, cfhs, &iterators).IsInvalidArgument());
|
|
1633
|
+
Close();
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1564
1636
|
TEST_F(DBSecondaryTestWithTimestamp,
|
|
1565
1637
|
IteratorsReadTimestampSpecifiedWithoutWriteTimestamp) {
|
|
1566
1638
|
const int kNumKeysPerFile = 128;
|
|
@@ -1674,6 +1746,7 @@ TEST_F(DBSecondaryTestWithTimestamp, Iterators) {
|
|
|
1674
1746
|
CheckIterUserEntry(iters[0], Key1(key), kTypeValue,
|
|
1675
1747
|
"value" + std::to_string(key), write_timestamp);
|
|
1676
1748
|
}
|
|
1749
|
+
ASSERT_OK(iters[0]->status());
|
|
1677
1750
|
|
|
1678
1751
|
size_t expected_count = kMaxKey - 0 + 1;
|
|
1679
1752
|
ASSERT_EQ(expected_count, count);
|
|
@@ -937,12 +937,21 @@ INSTANTIATE_TEST_CASE_P(DBWALTestWithParam, DBWALTestWithParam,
|
|
|
937
937
|
::testing::Values(std::make_tuple("", true),
|
|
938
938
|
std::make_tuple("_wal_dir", false)));
|
|
939
939
|
|
|
940
|
-
TEST_F(DBSSTTest,
|
|
940
|
+
TEST_F(DBSSTTest, OpenDBWithExistingTrashAndObsoleteSstFile) {
|
|
941
941
|
Options options = CurrentOptions();
|
|
942
|
-
|
|
943
942
|
options.sst_file_manager.reset(
|
|
944
943
|
NewSstFileManager(env_, nullptr, "", 1024 * 1024 /* 1 MB/sec */));
|
|
945
944
|
auto sfm = static_cast<SstFileManagerImpl*>(options.sst_file_manager.get());
|
|
945
|
+
// Set an extra high trash ratio to prevent immediate/non-rate limited
|
|
946
|
+
// deletions
|
|
947
|
+
sfm->SetDeleteRateBytesPerSecond(1024 * 1024);
|
|
948
|
+
sfm->delete_scheduler()->SetMaxTrashDBRatio(1000.0);
|
|
949
|
+
|
|
950
|
+
int bg_delete_file = 0;
|
|
951
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
|
952
|
+
"DeleteScheduler::DeleteTrashFile:DeleteFile",
|
|
953
|
+
[&](void* /*arg*/) { bg_delete_file++; });
|
|
954
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
946
955
|
|
|
947
956
|
Destroy(last_options_);
|
|
948
957
|
|
|
@@ -951,13 +960,22 @@ TEST_F(DBSSTTest, OpenDBWithExistingTrash) {
|
|
|
951
960
|
ASSERT_OK(WriteStringToFile(env_, "abc", dbname_ + "/" + "001.sst.trash"));
|
|
952
961
|
ASSERT_OK(WriteStringToFile(env_, "abc", dbname_ + "/" + "002.sst.trash"));
|
|
953
962
|
ASSERT_OK(WriteStringToFile(env_, "abc", dbname_ + "/" + "003.sst.trash"));
|
|
954
|
-
|
|
955
|
-
//
|
|
963
|
+
// Manually add an obsolete sst file. Obsolete SST files are discovered and
|
|
964
|
+
// deleted upon recovery.
|
|
965
|
+
constexpr uint64_t kSstFileNumber = 100;
|
|
966
|
+
const std::string kObsoleteSstFile =
|
|
967
|
+
MakeTableFileName(dbname_, kSstFileNumber);
|
|
968
|
+
ASSERT_OK(WriteStringToFile(env_, "abc", kObsoleteSstFile));
|
|
969
|
+
|
|
970
|
+
// Reopen the DB and verify that it deletes existing trash files and obsolete
|
|
971
|
+
// SST files with rate limiting.
|
|
956
972
|
Reopen(options);
|
|
957
973
|
sfm->WaitForEmptyTrash();
|
|
958
974
|
ASSERT_NOK(env_->FileExists(dbname_ + "/" + "001.sst.trash"));
|
|
959
975
|
ASSERT_NOK(env_->FileExists(dbname_ + "/" + "002.sst.trash"));
|
|
960
976
|
ASSERT_NOK(env_->FileExists(dbname_ + "/" + "003.sst.trash"));
|
|
977
|
+
ASSERT_NOK(env_->FileExists(kObsoleteSstFile));
|
|
978
|
+
ASSERT_EQ(bg_delete_file, 4);
|
|
961
979
|
}
|
|
962
980
|
|
|
963
981
|
// Create a DB with 2 db_paths, and generate multiple files in the 2
|
|
@@ -52,6 +52,7 @@ TEST_P(DBTestTailingIterator, TailingIteratorSingle) {
|
|
|
52
52
|
|
|
53
53
|
iter->Next();
|
|
54
54
|
ASSERT_TRUE(!iter->Valid());
|
|
55
|
+
ASSERT_OK(iter->status());
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
TEST_P(DBTestTailingIterator, TailingIteratorKeepAdding) {
|
|
@@ -361,7 +362,7 @@ TEST_P(DBTestTailingIterator, TailingIteratorDeletes) {
|
|
|
361
362
|
int count = 0;
|
|
362
363
|
for (; iter->Valid(); iter->Next(), ++count)
|
|
363
364
|
;
|
|
364
|
-
|
|
365
|
+
ASSERT_OK(iter->status());
|
|
365
366
|
ASSERT_EQ(count, num_records);
|
|
366
367
|
}
|
|
367
368
|
Close();
|
|
@@ -408,6 +409,7 @@ TEST_P(DBTestTailingIterator, TailingIteratorPrefixSeek) {
|
|
|
408
409
|
|
|
409
410
|
iter->Next();
|
|
410
411
|
ASSERT_TRUE(!iter->Valid());
|
|
412
|
+
ASSERT_OK(iter->status());
|
|
411
413
|
}
|
|
412
414
|
Close();
|
|
413
415
|
}
|