@nxtedition/rocksdb 6.0.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUILDING.md +2 -2
- package/binding.cc +14 -17
- package/deps/rocksdb/build_version.cc +4 -10
- package/deps/rocksdb/rocksdb/CMakeLists.txt +17 -3
- package/deps/rocksdb/rocksdb/Makefile +57 -86
- package/deps/rocksdb/rocksdb/TARGETS +4 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
- package/deps/rocksdb/rocksdb/common.mk +30 -0
- package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/builder.cc +11 -4
- package/deps/rocksdb/rocksdb/db/c.cc +45 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +25 -2
- package/deps/rocksdb/rocksdb/db/column_family.cc +4 -3
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +25 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +6 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +69 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +21 -21
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +135 -32
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +9 -8
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +9 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +15 -14
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_test.cc +44 -42
- package/deps/rocksdb/rocksdb/db/db_test2.cc +23 -19
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +95 -17
- package/deps/rocksdb/rocksdb/db/db_test_util.h +48 -0
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +34 -12
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +3 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
- package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +18 -4
- package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
- package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
- package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
- package/deps/rocksdb/rocksdb/db/repair_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
- package/deps/rocksdb/rocksdb/db/table_cache.cc +2 -4
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +2 -2
- package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
- package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +31 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +359 -275
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
- package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
- package/deps/rocksdb/rocksdb/env/env.cc +0 -60
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
- package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
- package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +1 -1
- package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +69 -45
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +28 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
- package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +2 -8
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
- package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
- package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +34 -38
- package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
- package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
- package/deps/rocksdb/rocksdb/options/db_options.cc +38 -17
- package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +82 -39
- package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -3
- package/deps/rocksdb/rocksdb/options/options_test.cc +115 -59
- package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
- package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
- package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
- package/deps/rocksdb/rocksdb/src.mk +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +14 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +85 -41
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +42 -72
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +7 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +6 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -5
- package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +22 -20
- package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +14 -11
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
- package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
- package/deps/rocksdb/rocksdb/table/unique_id.cc +57 -25
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +34 -4
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +254 -98
- package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +17 -3
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
- package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
- package/deps/rocksdb/rocksdb/util/compression.h +7 -7
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
- package/deps/rocksdb/rocksdb/util/heap.h +5 -3
- package/deps/rocksdb/rocksdb/util/random.cc +1 -5
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
- package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
- package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
- package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
- package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
- package/deps/rocksdb/rocksdb.gyp +8 -2
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/python.mk +0 -9
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-arm64/node.napi.node +0 -0
|
@@ -397,7 +397,7 @@ TEST_P(ComparatorDBTest, DoubleComparator) {
|
|
|
397
397
|
for (uint32_t j = 0; j < divide_order; j++) {
|
|
398
398
|
to_divide *= 10.0;
|
|
399
399
|
}
|
|
400
|
-
source_strings.push_back(
|
|
400
|
+
source_strings.push_back(std::to_string(r / to_divide));
|
|
401
401
|
}
|
|
402
402
|
|
|
403
403
|
DoRandomIteraratorTest(GetDB(), source_strings, &rnd, 200, 1000, 66);
|
|
@@ -40,7 +40,8 @@ Status VerifySstFileChecksum(const Options& options,
|
|
|
40
40
|
Status VerifySstFileChecksum(const Options& options,
|
|
41
41
|
const EnvOptions& env_options,
|
|
42
42
|
const ReadOptions& read_options,
|
|
43
|
-
const std::string& file_path
|
|
43
|
+
const std::string& file_path,
|
|
44
|
+
const SequenceNumber& largest_seqno) {
|
|
44
45
|
std::unique_ptr<FSRandomAccessFile> file;
|
|
45
46
|
uint64_t file_size;
|
|
46
47
|
InternalKeyComparator internal_comparator(options.comparator);
|
|
@@ -61,12 +62,13 @@ Status VerifySstFileChecksum(const Options& options,
|
|
|
61
62
|
nullptr /* stats */, 0 /* hist_type */, nullptr /* file_read_hist */,
|
|
62
63
|
ioptions.rate_limiter.get()));
|
|
63
64
|
const bool kImmortal = true;
|
|
65
|
+
auto reader_options = TableReaderOptions(
|
|
66
|
+
ioptions, options.prefix_extractor, env_options, internal_comparator,
|
|
67
|
+
false /* skip_filters */, !kImmortal, false /* force_direct_prefetch */,
|
|
68
|
+
-1 /* level */);
|
|
69
|
+
reader_options.largest_seqno = largest_seqno;
|
|
64
70
|
s = ioptions.table_factory->NewTableReader(
|
|
65
|
-
|
|
66
|
-
internal_comparator, false /* skip_filters */,
|
|
67
|
-
!kImmortal, false /* force_direct_prefetch */,
|
|
68
|
-
-1 /* level */),
|
|
69
|
-
std::move(file_reader), file_size, &table_reader,
|
|
71
|
+
reader_options, std::move(file_reader), file_size, &table_reader,
|
|
70
72
|
false /* prefetch_index_and_filter_in_cache */);
|
|
71
73
|
if (!s.ok()) {
|
|
72
74
|
return s;
|
|
@@ -308,7 +308,7 @@ class CorruptionTest : public testing::Test {
|
|
|
308
308
|
uint64_t new_size = old_size - bytes_to_truncate;
|
|
309
309
|
// If bytes_to_truncate == 0, it will do full truncation.
|
|
310
310
|
if (bytes_to_truncate == 0) {
|
|
311
|
-
new_size =
|
|
311
|
+
new_size = 0;
|
|
312
312
|
}
|
|
313
313
|
ASSERT_OK(test::TruncateFile(env_, path, new_size));
|
|
314
314
|
}
|
|
@@ -354,6 +354,7 @@ TEST_F(CorruptionTest, PostPITRCorruptionWALsRetained) {
|
|
|
354
354
|
options_.create_missing_column_families = true;
|
|
355
355
|
std::vector<ColumnFamilyHandle*> cfhs;
|
|
356
356
|
ASSERT_OK(DB::Open(options_, dbname_, cf_descs, &cfhs, &db_));
|
|
357
|
+
assert(db_ != nullptr); // suppress false clang-analyze report
|
|
357
358
|
|
|
358
359
|
ASSERT_OK(db_->Put(WriteOptions(), cfhs[0], "k", "v"));
|
|
359
360
|
ASSERT_OK(db_->Put(WriteOptions(), cfhs[1], "k", "v"));
|
|
@@ -375,6 +376,8 @@ TEST_F(CorruptionTest, PostPITRCorruptionWALsRetained) {
|
|
|
375
376
|
options_.avoid_flush_during_recovery = true;
|
|
376
377
|
std::vector<ColumnFamilyHandle*> cfhs;
|
|
377
378
|
ASSERT_OK(DB::Open(options_, dbname_, cf_descs, &cfhs, &db_));
|
|
379
|
+
assert(db_ != nullptr); // suppress false clang-analyze report
|
|
380
|
+
|
|
378
381
|
// Flush one but not both CFs and write some data so there's a seqno gap
|
|
379
382
|
// between the PITR corruption and the next DB session's first WAL.
|
|
380
383
|
ASSERT_OK(db_->Put(WriteOptions(), cfhs[1], "k2", "v2"));
|
|
@@ -391,6 +394,7 @@ TEST_F(CorruptionTest, PostPITRCorruptionWALsRetained) {
|
|
|
391
394
|
for (int i = 0; i < 2; ++i) {
|
|
392
395
|
std::vector<ColumnFamilyHandle*> cfhs;
|
|
393
396
|
ASSERT_OK(DB::Open(options_, dbname_, cf_descs, &cfhs, &db_));
|
|
397
|
+
assert(db_ != nullptr); // suppress false clang-analyze report
|
|
394
398
|
|
|
395
399
|
for (auto* cfh : cfhs) {
|
|
396
400
|
delete cfh;
|
|
@@ -1045,16 +1049,23 @@ INSTANTIATE_TEST_CASE_P(CorruptionTest, CrashDuringRecoveryWithCorruptionTest,
|
|
|
1045
1049
|
// "Column family inconsistency: SST file contains data beyond the point of
|
|
1046
1050
|
// corruption" error will be hit, causing recovery to fail.
|
|
1047
1051
|
//
|
|
1048
|
-
// After adding the fix,
|
|
1049
|
-
//
|
|
1050
|
-
// Only after new WAL is synced, RocksDB persist a new MANIFEST with column
|
|
1051
|
-
// families to ensure RocksDB is in consistent state.
|
|
1052
|
+
// After adding the fix, only after new WAL is synced, RocksDB persist a new
|
|
1053
|
+
// MANIFEST with column families to ensure RocksDB is in consistent state.
|
|
1052
1054
|
// RocksDB writes an empty WriteBatch as a sentinel to the new WAL which is
|
|
1053
1055
|
// synced immediately afterwards. The sequence number of the sentinel
|
|
1054
1056
|
// WriteBatch will be the next sequence number immediately after the largest
|
|
1055
1057
|
// sequence number recovered from previous WALs and MANIFEST because of which DB
|
|
1056
1058
|
// will be in consistent state.
|
|
1057
|
-
|
|
1059
|
+
// If a future recovery starts from the new MANIFEST, then it means the new WAL
|
|
1060
|
+
// is successfully synced. Due to the sentinel empty write batch at the
|
|
1061
|
+
// beginning, kPointInTimeRecovery of WAL is guaranteed to go after this point.
|
|
1062
|
+
// If future recovery starts from the old MANIFEST, it means the writing the new
|
|
1063
|
+
// MANIFEST failed. It won't have the "SST ahead of WAL" error.
|
|
1064
|
+
//
|
|
1065
|
+
// The combination of corrupting a WAL and injecting an error during subsequent
|
|
1066
|
+
// re-open exposes the bug of prematurely persisting a new MANIFEST with
|
|
1067
|
+
// advanced ColumnFamilyData::log_number.
|
|
1068
|
+
TEST_P(CrashDuringRecoveryWithCorruptionTest, DISABLED_CrashDuringRecovery) {
|
|
1058
1069
|
CloseDb();
|
|
1059
1070
|
Options options;
|
|
1060
1071
|
options.track_and_verify_wals_in_manifest =
|
|
@@ -1064,7 +1075,7 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, CrashDuringRecovery) {
|
|
|
1064
1075
|
options.env = env_;
|
|
1065
1076
|
ASSERT_OK(DestroyDB(dbname_, options));
|
|
1066
1077
|
options.create_if_missing = true;
|
|
1067
|
-
options.max_write_buffer_number =
|
|
1078
|
+
options.max_write_buffer_number = 8;
|
|
1068
1079
|
|
|
1069
1080
|
Reopen(&options);
|
|
1070
1081
|
Status s;
|
|
@@ -1090,13 +1101,15 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, CrashDuringRecovery) {
|
|
|
1090
1101
|
|
|
1091
1102
|
// Write one key to test_cf.
|
|
1092
1103
|
ASSERT_OK(db_->Put(WriteOptions(), handles[1], "old_key", "dontcare"));
|
|
1104
|
+
ASSERT_OK(db_->Flush(FlushOptions(), handles[1]));
|
|
1105
|
+
|
|
1093
1106
|
// Write to default_cf and flush this cf several times to advance wal
|
|
1094
|
-
// number.
|
|
1107
|
+
// number. TEST_SwitchMemtable makes sure WALs are not synced and test can
|
|
1108
|
+
// corrupt un-sync WAL.
|
|
1095
1109
|
for (int i = 0; i < 2; ++i) {
|
|
1096
1110
|
ASSERT_OK(db_->Put(WriteOptions(), "key" + std::to_string(i), "value"));
|
|
1097
1111
|
ASSERT_OK(dbimpl->TEST_SwitchMemtable());
|
|
1098
1112
|
}
|
|
1099
|
-
ASSERT_OK(db_->Put(WriteOptions(), handles[1], "dontcare", "dontcare"));
|
|
1100
1113
|
|
|
1101
1114
|
for (auto* h : handles) {
|
|
1102
1115
|
delete h;
|
|
@@ -1105,12 +1118,13 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, CrashDuringRecovery) {
|
|
|
1105
1118
|
CloseDb();
|
|
1106
1119
|
}
|
|
1107
1120
|
|
|
1108
|
-
// 2. Corrupt second last wal file to emulate power reset which
|
|
1109
|
-
// to lose the un-synced WAL.
|
|
1121
|
+
// 2. Corrupt second last un-syned wal file to emulate power reset which
|
|
1122
|
+
// caused the DB to lose the un-synced WAL.
|
|
1110
1123
|
{
|
|
1111
1124
|
std::vector<uint64_t> file_nums;
|
|
1112
1125
|
GetSortedWalFiles(file_nums);
|
|
1113
1126
|
size_t size = file_nums.size();
|
|
1127
|
+
assert(size >= 2);
|
|
1114
1128
|
uint64_t log_num = file_nums[size - 2];
|
|
1115
1129
|
CorruptFileWithTruncation(FileType::kWalFile, log_num,
|
|
1116
1130
|
/*bytes_to_truncate=*/8);
|
|
@@ -1127,25 +1141,31 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, CrashDuringRecovery) {
|
|
|
1127
1141
|
// Case2: If avoid_flush_during_recovery = false, all column families have
|
|
1128
1142
|
// flushed their data from WAL to L0 during recovery, and none of them will
|
|
1129
1143
|
// ever need to read the WALs again.
|
|
1144
|
+
|
|
1145
|
+
// 4. Fault is injected to fail the recovery.
|
|
1130
1146
|
{
|
|
1131
|
-
|
|
1147
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1148
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1149
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1150
|
+
"DBImpl::GetLogSizeAndMaybeTruncate:0", [&](void* arg) {
|
|
1151
|
+
auto* tmp_s = reinterpret_cast<Status*>(arg);
|
|
1152
|
+
assert(tmp_s);
|
|
1153
|
+
*tmp_s = Status::IOError("Injected");
|
|
1154
|
+
});
|
|
1155
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
1156
|
+
|
|
1157
|
+
handles.clear();
|
|
1158
|
+
options.avoid_flush_during_recovery = true;
|
|
1132
1159
|
s = DB::Open(options, dbname_, cf_descs, &handles, &db_);
|
|
1133
|
-
|
|
1160
|
+
ASSERT_TRUE(s.IsIOError());
|
|
1161
|
+
ASSERT_EQ("IO error: Injected", s.ToString());
|
|
1134
1162
|
for (auto* h : handles) {
|
|
1135
1163
|
delete h;
|
|
1136
1164
|
}
|
|
1137
|
-
handles.clear();
|
|
1138
1165
|
CloseDb();
|
|
1139
|
-
}
|
|
1140
1166
|
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
{
|
|
1144
|
-
std::vector<uint64_t> file_nums;
|
|
1145
|
-
GetSortedWalFiles(file_nums);
|
|
1146
|
-
size_t size = file_nums.size();
|
|
1147
|
-
uint64_t log_num = file_nums[size - 1];
|
|
1148
|
-
CorruptFileWithTruncation(FileType::kWalFile, log_num);
|
|
1167
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1168
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1149
1169
|
}
|
|
1150
1170
|
|
|
1151
1171
|
// 5. After second crash reopen the db with second corruption. Default family
|
|
@@ -1183,16 +1203,24 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, CrashDuringRecovery) {
|
|
|
1183
1203
|
// file contains data beyond the point of corruption" error will be hit, causing
|
|
1184
1204
|
// recovery to fail.
|
|
1185
1205
|
//
|
|
1186
|
-
// After adding the fix,
|
|
1187
|
-
//
|
|
1188
|
-
// Only after new WAL is synced, RocksDB persist a new MANIFEST with column
|
|
1189
|
-
// families to ensure RocksDB is in consistent state.
|
|
1206
|
+
// After adding the fix, only after new WAL is synced, RocksDB persist a new
|
|
1207
|
+
// MANIFEST with column families to ensure RocksDB is in consistent state.
|
|
1190
1208
|
// RocksDB writes an empty WriteBatch as a sentinel to the new WAL which is
|
|
1191
1209
|
// synced immediately afterwards. The sequence number of the sentinel
|
|
1192
1210
|
// WriteBatch will be the next sequence number immediately after the largest
|
|
1193
1211
|
// sequence number recovered from previous WALs and MANIFEST because of which DB
|
|
1194
1212
|
// will be in consistent state.
|
|
1195
|
-
|
|
1213
|
+
// If a future recovery starts from the new MANIFEST, then it means the new WAL
|
|
1214
|
+
// is successfully synced. Due to the sentinel empty write batch at the
|
|
1215
|
+
// beginning, kPointInTimeRecovery of WAL is guaranteed to go after this point.
|
|
1216
|
+
// If future recovery starts from the old MANIFEST, it means the writing the new
|
|
1217
|
+
// MANIFEST failed. It won't have the "SST ahead of WAL" error.
|
|
1218
|
+
//
|
|
1219
|
+
// The combination of corrupting a WAL and injecting an error during subsequent
|
|
1220
|
+
// re-open exposes the bug of prematurely persisting a new MANIFEST with
|
|
1221
|
+
// advanced ColumnFamilyData::log_number.
|
|
1222
|
+
TEST_P(CrashDuringRecoveryWithCorruptionTest,
|
|
1223
|
+
DISABLED_TxnDbCrashDuringRecovery) {
|
|
1196
1224
|
CloseDb();
|
|
1197
1225
|
Options options;
|
|
1198
1226
|
options.wal_recovery_mode = WALRecoveryMode::kPointInTimeRecovery;
|
|
@@ -1225,7 +1253,6 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1225
1253
|
// advance wal number so that some column families have advanced log_number
|
|
1226
1254
|
// while other don't.
|
|
1227
1255
|
{
|
|
1228
|
-
options.avoid_flush_during_recovery = avoid_flush_during_recovery_;
|
|
1229
1256
|
ASSERT_OK(TransactionDB::Open(options, txn_db_opts, dbname_, cf_descs,
|
|
1230
1257
|
&handles, &txn_db));
|
|
1231
1258
|
|
|
@@ -1234,6 +1261,8 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1234
1261
|
ASSERT_OK(txn->Put(handles[1], "foo", "value"));
|
|
1235
1262
|
ASSERT_OK(txn->SetName("txn0"));
|
|
1236
1263
|
ASSERT_OK(txn->Prepare());
|
|
1264
|
+
ASSERT_OK(txn_db->Flush(FlushOptions()));
|
|
1265
|
+
|
|
1237
1266
|
delete txn;
|
|
1238
1267
|
txn = nullptr;
|
|
1239
1268
|
|
|
@@ -1253,6 +1282,7 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1253
1282
|
|
|
1254
1283
|
delete txn;
|
|
1255
1284
|
txn = nullptr;
|
|
1285
|
+
|
|
1256
1286
|
for (auto* h : handles) {
|
|
1257
1287
|
delete h;
|
|
1258
1288
|
}
|
|
@@ -1266,6 +1296,7 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1266
1296
|
std::vector<uint64_t> file_nums;
|
|
1267
1297
|
GetSortedWalFiles(file_nums);
|
|
1268
1298
|
size_t size = file_nums.size();
|
|
1299
|
+
assert(size >= 2);
|
|
1269
1300
|
uint64_t log_num = file_nums[size - 2];
|
|
1270
1301
|
CorruptFileWithTruncation(FileType::kWalFile, log_num,
|
|
1271
1302
|
/*bytes_to_truncate=*/8);
|
|
@@ -1275,24 +1306,38 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1275
1306
|
// family has higher log number than corrupted wal number. There may be old
|
|
1276
1307
|
// WAL files that it must not delete because they can contain data of
|
|
1277
1308
|
// uncommitted transactions. As a result, min_log_number_to_keep won't change.
|
|
1309
|
+
|
|
1278
1310
|
{
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1311
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1312
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1313
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1314
|
+
"DBImpl::Open::BeforeSyncWAL", [&](void* arg) {
|
|
1315
|
+
auto* tmp_s = reinterpret_cast<Status*>(arg);
|
|
1316
|
+
assert(tmp_s);
|
|
1317
|
+
*tmp_s = Status::IOError("Injected");
|
|
1318
|
+
});
|
|
1319
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
1282
1320
|
|
|
1321
|
+
handles.clear();
|
|
1322
|
+
s = TransactionDB::Open(options, txn_db_opts, dbname_, cf_descs, &handles,
|
|
1323
|
+
&txn_db);
|
|
1324
|
+
ASSERT_TRUE(s.IsIOError());
|
|
1325
|
+
ASSERT_EQ("IO error: Injected", s.ToString());
|
|
1283
1326
|
for (auto* h : handles) {
|
|
1284
1327
|
delete h;
|
|
1285
1328
|
}
|
|
1286
|
-
|
|
1287
|
-
|
|
1329
|
+
CloseDb();
|
|
1330
|
+
|
|
1331
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1332
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1288
1333
|
}
|
|
1289
1334
|
|
|
1290
|
-
// 4. Corrupt max_wal_num
|
|
1291
|
-
// DB to again lose the un-synced WAL.
|
|
1335
|
+
// 4. Corrupt max_wal_num.
|
|
1292
1336
|
{
|
|
1293
1337
|
std::vector<uint64_t> file_nums;
|
|
1294
1338
|
GetSortedWalFiles(file_nums);
|
|
1295
1339
|
size_t size = file_nums.size();
|
|
1340
|
+
assert(size >= 2);
|
|
1296
1341
|
uint64_t log_num = file_nums[size - 1];
|
|
1297
1342
|
CorruptFileWithTruncation(FileType::kWalFile, log_num);
|
|
1298
1343
|
}
|
|
@@ -1307,8 +1352,6 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1307
1352
|
// recovered from previous WALs and MANIFEST, db will be in consistent state
|
|
1308
1353
|
// and opens successfully.
|
|
1309
1354
|
{
|
|
1310
|
-
options.avoid_flush_during_recovery = false;
|
|
1311
|
-
|
|
1312
1355
|
ASSERT_OK(TransactionDB::Open(options, txn_db_opts, dbname_, cf_descs,
|
|
1313
1356
|
&handles, &txn_db));
|
|
1314
1357
|
for (auto* h : handles) {
|
|
@@ -1318,6 +1361,134 @@ TEST_P(CrashDuringRecoveryWithCorruptionTest, TxnDbCrashDuringRecovery) {
|
|
|
1318
1361
|
}
|
|
1319
1362
|
}
|
|
1320
1363
|
|
|
1364
|
+
// This test is similar to
|
|
1365
|
+
// CrashDuringRecoveryWithCorruptionTest.CrashDuringRecovery except it calls
|
|
1366
|
+
// flush and corrupts Last WAL. It calls flush to sync some of the WALs and
|
|
1367
|
+
// remaining are unsyned one of which is then corrupted to simulate crash.
|
|
1368
|
+
//
|
|
1369
|
+
// In case of non-TransactionDB with avoid_flush_during_recovery = true, RocksDB
|
|
1370
|
+
// won't flush the data from WAL to L0 for all column families if possible. As a
|
|
1371
|
+
// result, not all column families can increase their log_numbers, and
|
|
1372
|
+
// min_log_number_to_keep won't change.
|
|
1373
|
+
// It may prematurely persist a new MANIFEST even before we can declare the DB
|
|
1374
|
+
// is in consistent state after recovery (this is when the new WAL is synced)
|
|
1375
|
+
// and advances log_numbers for some column families.
|
|
1376
|
+
//
|
|
1377
|
+
// If there is power failure before we sync the new WAL, we will end up in
|
|
1378
|
+
// a situation in which after persisting the MANIFEST, RocksDB will see some
|
|
1379
|
+
// column families' log_numbers larger than the corrupted wal, and
|
|
1380
|
+
// "Column family inconsistency: SST file contains data beyond the point of
|
|
1381
|
+
// corruption" error will be hit, causing recovery to fail.
|
|
1382
|
+
//
|
|
1383
|
+
// After adding the fix, only after new WAL is synced, RocksDB persist a new
|
|
1384
|
+
// MANIFEST with column families to ensure RocksDB is in consistent state.
|
|
1385
|
+
// RocksDB writes an empty WriteBatch as a sentinel to the new WAL which is
|
|
1386
|
+
// synced immediately afterwards. The sequence number of the sentinel
|
|
1387
|
+
// WriteBatch will be the next sequence number immediately after the largest
|
|
1388
|
+
// sequence number recovered from previous WALs and MANIFEST because of which DB
|
|
1389
|
+
// will be in consistent state.
|
|
1390
|
+
// If a future recovery starts from the new MANIFEST, then it means the new WAL
|
|
1391
|
+
// is successfully synced. Due to the sentinel empty write batch at the
|
|
1392
|
+
// beginning, kPointInTimeRecovery of WAL is guaranteed to go after this point.
|
|
1393
|
+
// If future recovery starts from the old MANIFEST, it means the writing the new
|
|
1394
|
+
// MANIFEST failed. It won't have the "SST ahead of WAL" error.
|
|
1395
|
+
|
|
1396
|
+
// The combination of corrupting a WAL and injecting an error during subsequent
|
|
1397
|
+
// re-open exposes the bug of prematurely persisting a new MANIFEST with
|
|
1398
|
+
// advanced ColumnFamilyData::log_number.
|
|
1399
|
+
TEST_P(CrashDuringRecoveryWithCorruptionTest,
|
|
1400
|
+
DISABLED_CrashDuringRecoveryWithFlush) {
|
|
1401
|
+
CloseDb();
|
|
1402
|
+
Options options;
|
|
1403
|
+
options.wal_recovery_mode = WALRecoveryMode::kPointInTimeRecovery;
|
|
1404
|
+
options.avoid_flush_during_recovery = false;
|
|
1405
|
+
options.env = env_;
|
|
1406
|
+
options.create_if_missing = true;
|
|
1407
|
+
|
|
1408
|
+
ASSERT_OK(DestroyDB(dbname_, options));
|
|
1409
|
+
Reopen(&options);
|
|
1410
|
+
|
|
1411
|
+
ColumnFamilyHandle* cfh = nullptr;
|
|
1412
|
+
const std::string test_cf_name = "test_cf";
|
|
1413
|
+
Status s = db_->CreateColumnFamily(options, test_cf_name, &cfh);
|
|
1414
|
+
ASSERT_OK(s);
|
|
1415
|
+
delete cfh;
|
|
1416
|
+
|
|
1417
|
+
CloseDb();
|
|
1418
|
+
|
|
1419
|
+
std::vector<ColumnFamilyDescriptor> cf_descs;
|
|
1420
|
+
cf_descs.emplace_back(kDefaultColumnFamilyName, options);
|
|
1421
|
+
cf_descs.emplace_back(test_cf_name, options);
|
|
1422
|
+
std::vector<ColumnFamilyHandle*> handles;
|
|
1423
|
+
|
|
1424
|
+
{
|
|
1425
|
+
ASSERT_OK(DB::Open(options, dbname_, cf_descs, &handles, &db_));
|
|
1426
|
+
|
|
1427
|
+
// Write one key to test_cf.
|
|
1428
|
+
ASSERT_OK(db_->Put(WriteOptions(), handles[1], "old_key", "dontcare"));
|
|
1429
|
+
|
|
1430
|
+
// Write to default_cf and flush this cf several times to advance wal
|
|
1431
|
+
// number.
|
|
1432
|
+
for (int i = 0; i < 2; ++i) {
|
|
1433
|
+
ASSERT_OK(db_->Put(WriteOptions(), "key" + std::to_string(i), "value"));
|
|
1434
|
+
ASSERT_OK(db_->Flush(FlushOptions()));
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
ASSERT_OK(db_->Put(WriteOptions(), handles[1], "dontcare", "dontcare"));
|
|
1438
|
+
for (auto* h : handles) {
|
|
1439
|
+
delete h;
|
|
1440
|
+
}
|
|
1441
|
+
handles.clear();
|
|
1442
|
+
CloseDb();
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
// Corrupt second last un-syned wal file to emulate power reset which
|
|
1446
|
+
// caused the DB to lose the un-synced WAL.
|
|
1447
|
+
{
|
|
1448
|
+
std::vector<uint64_t> file_nums;
|
|
1449
|
+
GetSortedWalFiles(file_nums);
|
|
1450
|
+
size_t size = file_nums.size();
|
|
1451
|
+
uint64_t log_num = file_nums[size - 1];
|
|
1452
|
+
CorruptFileWithTruncation(FileType::kWalFile, log_num,
|
|
1453
|
+
/*bytes_to_truncate=*/8);
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
// Fault is injected to fail the recovery.
|
|
1457
|
+
{
|
|
1458
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1459
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1460
|
+
SyncPoint::GetInstance()->SetCallBack(
|
|
1461
|
+
"DBImpl::GetLogSizeAndMaybeTruncate:0", [&](void* arg) {
|
|
1462
|
+
auto* tmp_s = reinterpret_cast<Status*>(arg);
|
|
1463
|
+
assert(tmp_s);
|
|
1464
|
+
*tmp_s = Status::IOError("Injected");
|
|
1465
|
+
});
|
|
1466
|
+
SyncPoint::GetInstance()->EnableProcessing();
|
|
1467
|
+
|
|
1468
|
+
handles.clear();
|
|
1469
|
+
options.avoid_flush_during_recovery = true;
|
|
1470
|
+
s = DB::Open(options, dbname_, cf_descs, &handles, &db_);
|
|
1471
|
+
ASSERT_TRUE(s.IsIOError());
|
|
1472
|
+
ASSERT_EQ("IO error: Injected", s.ToString());
|
|
1473
|
+
for (auto* h : handles) {
|
|
1474
|
+
delete h;
|
|
1475
|
+
}
|
|
1476
|
+
CloseDb();
|
|
1477
|
+
|
|
1478
|
+
SyncPoint::GetInstance()->DisableProcessing();
|
|
1479
|
+
SyncPoint::GetInstance()->ClearAllCallBacks();
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
// Reopen db again
|
|
1483
|
+
{
|
|
1484
|
+
options.avoid_flush_during_recovery = avoid_flush_during_recovery_;
|
|
1485
|
+
ASSERT_OK(DB::Open(options, dbname_, cf_descs, &handles, &db_));
|
|
1486
|
+
for (auto* h : handles) {
|
|
1487
|
+
delete h;
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1321
1492
|
} // namespace ROCKSDB_NAMESPACE
|
|
1322
1493
|
|
|
1323
1494
|
int main(int argc, char** argv) {
|
|
@@ -95,8 +95,8 @@ class CuckooTableDBTest : public testing::Test {
|
|
|
95
95
|
|
|
96
96
|
int NumTableFilesAtLevel(int level) {
|
|
97
97
|
std::string property;
|
|
98
|
-
EXPECT_TRUE(db_->GetProperty(
|
|
99
|
-
|
|
98
|
+
EXPECT_TRUE(db_->GetProperty(
|
|
99
|
+
"rocksdb.num-files-at-level" + std::to_string(level), &property));
|
|
100
100
|
return atoi(property.c_str());
|
|
101
101
|
}
|
|
102
102
|
|
|
@@ -3783,7 +3783,7 @@ TEST_P(DBBasicTestDeadline, PointLookupDeadline) {
|
|
|
3783
3783
|
|
|
3784
3784
|
Random rnd(301);
|
|
3785
3785
|
for (int i = 0; i < 400; ++i) {
|
|
3786
|
-
std::string key = "k" +
|
|
3786
|
+
std::string key = "k" + std::to_string(i);
|
|
3787
3787
|
ASSERT_OK(Put(key, rnd.RandomString(100)));
|
|
3788
3788
|
}
|
|
3789
3789
|
ASSERT_OK(Flush());
|
|
@@ -3866,7 +3866,7 @@ TEST_P(DBBasicTestDeadline, IteratorDeadline) {
|
|
|
3866
3866
|
|
|
3867
3867
|
Random rnd(301);
|
|
3868
3868
|
for (int i = 0; i < 400; ++i) {
|
|
3869
|
-
std::string key = "k" +
|
|
3869
|
+
std::string key = "k" + std::to_string(i);
|
|
3870
3870
|
ASSERT_OK(Put(key, rnd.RandomString(100)));
|
|
3871
3871
|
}
|
|
3872
3872
|
ASSERT_OK(Flush());
|