@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
|
@@ -152,14 +152,6 @@ struct SavePoints {
|
|
|
152
152
|
std::stack<SavePoint, autovector<SavePoint>> stack;
|
|
153
153
|
};
|
|
154
154
|
|
|
155
|
-
WriteBatch::WriteBatch(size_t reserved_bytes, size_t max_bytes)
|
|
156
|
-
: content_flags_(0), max_bytes_(max_bytes), rep_() {
|
|
157
|
-
rep_.reserve((reserved_bytes > WriteBatchInternal::kHeader)
|
|
158
|
-
? reserved_bytes
|
|
159
|
-
: WriteBatchInternal::kHeader);
|
|
160
|
-
rep_.resize(WriteBatchInternal::kHeader);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
155
|
WriteBatch::WriteBatch(size_t reserved_bytes, size_t max_bytes,
|
|
164
156
|
size_t protection_bytes_per_key, size_t default_cf_ts_sz)
|
|
165
157
|
: content_flags_(0),
|
|
@@ -580,14 +572,16 @@ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
|
|
|
580
572
|
s = handler->MarkBeginPrepare();
|
|
581
573
|
assert(s.ok());
|
|
582
574
|
empty_batch = false;
|
|
583
|
-
if (
|
|
575
|
+
if (handler->WriteAfterCommit() ==
|
|
576
|
+
WriteBatch::Handler::OptionState::kDisabled) {
|
|
584
577
|
s = Status::NotSupported(
|
|
585
578
|
"WriteCommitted txn tag when write_after_commit_ is disabled (in "
|
|
586
579
|
"WritePrepared/WriteUnprepared mode). If it is not due to "
|
|
587
580
|
"corruption, the WAL must be emptied before changing the "
|
|
588
581
|
"WritePolicy.");
|
|
589
582
|
}
|
|
590
|
-
if (handler->WriteBeforePrepare()
|
|
583
|
+
if (handler->WriteBeforePrepare() ==
|
|
584
|
+
WriteBatch::Handler::OptionState::kEnabled) {
|
|
591
585
|
s = Status::NotSupported(
|
|
592
586
|
"WriteCommitted txn tag when write_before_prepare_ is enabled "
|
|
593
587
|
"(in WriteUnprepared mode). If it is not due to corruption, the "
|
|
@@ -600,7 +594,8 @@ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
|
|
|
600
594
|
s = handler->MarkBeginPrepare();
|
|
601
595
|
assert(s.ok());
|
|
602
596
|
empty_batch = false;
|
|
603
|
-
if (handler->WriteAfterCommit()
|
|
597
|
+
if (handler->WriteAfterCommit() ==
|
|
598
|
+
WriteBatch::Handler::OptionState::kEnabled) {
|
|
604
599
|
s = Status::NotSupported(
|
|
605
600
|
"WritePrepared/WriteUnprepared txn tag when write_after_commit_ "
|
|
606
601
|
"is enabled (in default WriteCommitted mode). If it is not due "
|
|
@@ -614,13 +609,15 @@ Status WriteBatchInternal::Iterate(const WriteBatch* wb,
|
|
|
614
609
|
s = handler->MarkBeginPrepare(true /* unprepared */);
|
|
615
610
|
assert(s.ok());
|
|
616
611
|
empty_batch = false;
|
|
617
|
-
if (handler->WriteAfterCommit()
|
|
612
|
+
if (handler->WriteAfterCommit() ==
|
|
613
|
+
WriteBatch::Handler::OptionState::kEnabled) {
|
|
618
614
|
s = Status::NotSupported(
|
|
619
615
|
"WriteUnprepared txn tag when write_after_commit_ is enabled (in "
|
|
620
616
|
"default WriteCommitted mode). If it is not due to corruption, "
|
|
621
617
|
"the WAL must be emptied before changing the WritePolicy.");
|
|
622
618
|
}
|
|
623
|
-
if (
|
|
619
|
+
if (handler->WriteBeforePrepare() ==
|
|
620
|
+
WriteBatch::Handler::OptionState::kDisabled) {
|
|
624
621
|
s = Status::NotSupported(
|
|
625
622
|
"WriteUnprepared txn tag when write_before_prepare_ is disabled "
|
|
626
623
|
"(in WriteCommitted/WritePrepared mode). If it is not due to "
|
|
@@ -748,10 +745,10 @@ Status CheckColumnFamilyTimestampSize(ColumnFamilyHandle* column_family,
|
|
|
748
745
|
|
|
749
746
|
Status WriteBatchInternal::Put(WriteBatch* b, uint32_t column_family_id,
|
|
750
747
|
const Slice& key, const Slice& value) {
|
|
751
|
-
if (key.size() > size_t{
|
|
748
|
+
if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
|
|
752
749
|
return Status::InvalidArgument("key is too large");
|
|
753
750
|
}
|
|
754
|
-
if (value.size() > size_t{
|
|
751
|
+
if (value.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
|
|
755
752
|
return Status::InvalidArgument("value is too large");
|
|
756
753
|
}
|
|
757
754
|
|
|
@@ -828,7 +825,7 @@ Status WriteBatchInternal::CheckSlicePartsLength(const SliceParts& key,
|
|
|
828
825
|
for (int i = 0; i < key.num_parts; ++i) {
|
|
829
826
|
total_key_bytes += key.parts[i].size();
|
|
830
827
|
}
|
|
831
|
-
if (total_key_bytes >= size_t{
|
|
828
|
+
if (total_key_bytes >= size_t{std::numeric_limits<uint32_t>::max()}) {
|
|
832
829
|
return Status::InvalidArgument("key is too large");
|
|
833
830
|
}
|
|
834
831
|
|
|
@@ -836,7 +833,7 @@ Status WriteBatchInternal::CheckSlicePartsLength(const SliceParts& key,
|
|
|
836
833
|
for (int i = 0; i < value.num_parts; ++i) {
|
|
837
834
|
total_value_bytes += value.parts[i].size();
|
|
838
835
|
}
|
|
839
|
-
if (total_value_bytes >= size_t{
|
|
836
|
+
if (total_value_bytes >= size_t{std::numeric_limits<uint32_t>::max()}) {
|
|
840
837
|
return Status::InvalidArgument("value is too large");
|
|
841
838
|
}
|
|
842
839
|
return Status::OK();
|
|
@@ -1295,10 +1292,10 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
|
|
|
1295
1292
|
|
|
1296
1293
|
Status WriteBatchInternal::Merge(WriteBatch* b, uint32_t column_family_id,
|
|
1297
1294
|
const Slice& key, const Slice& value) {
|
|
1298
|
-
if (key.size() > size_t{
|
|
1295
|
+
if (key.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
|
|
1299
1296
|
return Status::InvalidArgument("key is too large");
|
|
1300
1297
|
}
|
|
1301
|
-
if (value.size() > size_t{
|
|
1298
|
+
if (value.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
|
|
1302
1299
|
return Status::InvalidArgument("value is too large");
|
|
1303
1300
|
}
|
|
1304
1301
|
|
|
@@ -1494,6 +1491,8 @@ Status WriteBatch::UpdateTimestamps(
|
|
|
1494
1491
|
return s;
|
|
1495
1492
|
}
|
|
1496
1493
|
|
|
1494
|
+
namespace {
|
|
1495
|
+
|
|
1497
1496
|
class MemTableInserter : public WriteBatch::Handler {
|
|
1498
1497
|
|
|
1499
1498
|
SequenceNumber sequence_;
|
|
@@ -1581,9 +1580,24 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
1581
1580
|
return res;
|
|
1582
1581
|
}
|
|
1583
1582
|
|
|
1583
|
+
void DecrementProtectionInfoIdxForTryAgain() {
|
|
1584
|
+
if (prot_info_ != nullptr) --prot_info_idx_;
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
void ResetProtectionInfo() {
|
|
1588
|
+
prot_info_idx_ = 0;
|
|
1589
|
+
prot_info_ = nullptr;
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1584
1592
|
protected:
|
|
1585
|
-
|
|
1586
|
-
|
|
1593
|
+
Handler::OptionState WriteBeforePrepare() const override {
|
|
1594
|
+
return write_before_prepare_ ? Handler::OptionState::kEnabled
|
|
1595
|
+
: Handler::OptionState::kDisabled;
|
|
1596
|
+
}
|
|
1597
|
+
Handler::OptionState WriteAfterCommit() const override {
|
|
1598
|
+
return write_after_commit_ ? Handler::OptionState::kEnabled
|
|
1599
|
+
: Handler::OptionState::kDisabled;
|
|
1600
|
+
}
|
|
1587
1601
|
|
|
1588
1602
|
public:
|
|
1589
1603
|
// cf_mems should not be shared with concurrent inserters
|
|
@@ -1871,15 +1885,25 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
1871
1885
|
Status PutCF(uint32_t column_family_id, const Slice& key,
|
|
1872
1886
|
const Slice& value) override {
|
|
1873
1887
|
const auto* kv_prot_info = NextProtectionInfo();
|
|
1888
|
+
Status ret_status;
|
|
1874
1889
|
if (kv_prot_info != nullptr) {
|
|
1875
1890
|
// Memtable needs seqno, doesn't need CF ID
|
|
1876
1891
|
auto mem_kv_prot_info =
|
|
1877
1892
|
kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
|
|
1878
|
-
|
|
1879
|
-
|
|
1893
|
+
ret_status = PutCFImpl(column_family_id, key, value, kTypeValue,
|
|
1894
|
+
&mem_kv_prot_info);
|
|
1895
|
+
} else {
|
|
1896
|
+
ret_status = PutCFImpl(column_family_id, key, value, kTypeValue,
|
|
1897
|
+
nullptr /* kv_prot_info */);
|
|
1880
1898
|
}
|
|
1881
|
-
|
|
1882
|
-
|
|
1899
|
+
// TODO: this assumes that if TryAgain status is returned to the caller,
|
|
1900
|
+
// the operation is actually tried again. The proper way to do this is to
|
|
1901
|
+
// pass a `try_again` parameter to the operation itself and decrement
|
|
1902
|
+
// prot_info_idx_ based on that
|
|
1903
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
1904
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
1905
|
+
}
|
|
1906
|
+
return ret_status;
|
|
1883
1907
|
}
|
|
1884
1908
|
|
|
1885
1909
|
Status DeleteImpl(uint32_t /*column_family_id*/, const Slice& key,
|
|
@@ -1926,6 +1950,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
1926
1950
|
} else if (ret_status.ok()) {
|
|
1927
1951
|
MaybeAdvanceSeq(false /* batch_boundary */);
|
|
1928
1952
|
}
|
|
1953
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
1954
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
1955
|
+
}
|
|
1929
1956
|
return ret_status;
|
|
1930
1957
|
}
|
|
1931
1958
|
|
|
@@ -1957,6 +1984,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
1957
1984
|
ret_status =
|
|
1958
1985
|
WriteBatchInternal::Delete(rebuilding_trx_, column_family_id, key);
|
|
1959
1986
|
}
|
|
1987
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
1988
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
1989
|
+
}
|
|
1960
1990
|
return ret_status;
|
|
1961
1991
|
}
|
|
1962
1992
|
|
|
@@ -1985,6 +2015,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
1985
2015
|
} else if (ret_status.ok()) {
|
|
1986
2016
|
MaybeAdvanceSeq(false /* batch_boundary */);
|
|
1987
2017
|
}
|
|
2018
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2019
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2020
|
+
}
|
|
1988
2021
|
return ret_status;
|
|
1989
2022
|
}
|
|
1990
2023
|
assert(ret_status.ok());
|
|
@@ -2009,6 +2042,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2009
2042
|
ret_status = WriteBatchInternal::SingleDelete(rebuilding_trx_,
|
|
2010
2043
|
column_family_id, key);
|
|
2011
2044
|
}
|
|
2045
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2046
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2047
|
+
}
|
|
2012
2048
|
return ret_status;
|
|
2013
2049
|
}
|
|
2014
2050
|
|
|
@@ -2038,6 +2074,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2038
2074
|
} else if (ret_status.ok()) {
|
|
2039
2075
|
MaybeAdvanceSeq(false /* batch_boundary */);
|
|
2040
2076
|
}
|
|
2077
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2078
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2079
|
+
}
|
|
2041
2080
|
return ret_status;
|
|
2042
2081
|
}
|
|
2043
2082
|
assert(ret_status.ok());
|
|
@@ -2092,6 +2131,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2092
2131
|
ret_status = WriteBatchInternal::DeleteRange(
|
|
2093
2132
|
rebuilding_trx_, column_family_id, begin_key, end_key);
|
|
2094
2133
|
}
|
|
2134
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2135
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2136
|
+
}
|
|
2095
2137
|
return ret_status;
|
|
2096
2138
|
}
|
|
2097
2139
|
|
|
@@ -2121,6 +2163,9 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2121
2163
|
} else if (ret_status.ok()) {
|
|
2122
2164
|
MaybeAdvanceSeq(false /* batch_boundary */);
|
|
2123
2165
|
}
|
|
2166
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2167
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2168
|
+
}
|
|
2124
2169
|
return ret_status;
|
|
2125
2170
|
}
|
|
2126
2171
|
assert(ret_status.ok());
|
|
@@ -2242,23 +2287,31 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2242
2287
|
ret_status = WriteBatchInternal::Merge(rebuilding_trx_, column_family_id,
|
|
2243
2288
|
key, value);
|
|
2244
2289
|
}
|
|
2290
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2291
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2292
|
+
}
|
|
2245
2293
|
return ret_status;
|
|
2246
2294
|
}
|
|
2247
2295
|
|
|
2248
2296
|
Status PutBlobIndexCF(uint32_t column_family_id, const Slice& key,
|
|
2249
2297
|
const Slice& value) override {
|
|
2250
2298
|
const auto* kv_prot_info = NextProtectionInfo();
|
|
2299
|
+
Status ret_status;
|
|
2251
2300
|
if (kv_prot_info != nullptr) {
|
|
2252
2301
|
// Memtable needs seqno, doesn't need CF ID
|
|
2253
2302
|
auto mem_kv_prot_info =
|
|
2254
2303
|
kv_prot_info->StripC(column_family_id).ProtectS(sequence_);
|
|
2255
2304
|
// Same as PutCF except for value type.
|
|
2256
|
-
|
|
2257
|
-
|
|
2305
|
+
ret_status = PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
|
|
2306
|
+
&mem_kv_prot_info);
|
|
2258
2307
|
} else {
|
|
2259
|
-
|
|
2260
|
-
|
|
2308
|
+
ret_status = PutCFImpl(column_family_id, key, value, kTypeBlobIndex,
|
|
2309
|
+
nullptr /* kv_prot_info */);
|
|
2261
2310
|
}
|
|
2311
|
+
if (UNLIKELY(ret_status.IsTryAgain())) {
|
|
2312
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2313
|
+
}
|
|
2314
|
+
return ret_status;
|
|
2262
2315
|
}
|
|
2263
2316
|
|
|
2264
2317
|
void CheckMemtableFull() {
|
|
@@ -2401,6 +2454,7 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2401
2454
|
const auto& batch_info = trx->batches_.begin()->second;
|
|
2402
2455
|
// all inserts must reference this trx log number
|
|
2403
2456
|
log_number_ref_ = batch_info.log_number_;
|
|
2457
|
+
ResetProtectionInfo();
|
|
2404
2458
|
s = batch_info.batch_->Iterate(this);
|
|
2405
2459
|
log_number_ref_ = 0;
|
|
2406
2460
|
}
|
|
@@ -2422,6 +2476,10 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2422
2476
|
const bool batch_boundry = true;
|
|
2423
2477
|
MaybeAdvanceSeq(batch_boundry);
|
|
2424
2478
|
|
|
2479
|
+
if (UNLIKELY(s.IsTryAgain())) {
|
|
2480
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2481
|
+
}
|
|
2482
|
+
|
|
2425
2483
|
return s;
|
|
2426
2484
|
}
|
|
2427
2485
|
|
|
@@ -2466,6 +2524,7 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2466
2524
|
return ucmp->timestamp_size();
|
|
2467
2525
|
});
|
|
2468
2526
|
if (s.ok()) {
|
|
2527
|
+
ResetProtectionInfo();
|
|
2469
2528
|
s = batch_info.batch_->Iterate(this);
|
|
2470
2529
|
log_number_ref_ = 0;
|
|
2471
2530
|
}
|
|
@@ -2488,6 +2547,10 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2488
2547
|
constexpr bool batch_boundary = true;
|
|
2489
2548
|
MaybeAdvanceSeq(batch_boundary);
|
|
2490
2549
|
|
|
2550
|
+
if (UNLIKELY(s.IsTryAgain())) {
|
|
2551
|
+
DecrementProtectionInfoIdxForTryAgain();
|
|
2552
|
+
}
|
|
2553
|
+
|
|
2491
2554
|
return s;
|
|
2492
2555
|
}
|
|
2493
2556
|
|
|
@@ -2523,6 +2586,8 @@ class MemTableInserter : public WriteBatch::Handler {
|
|
|
2523
2586
|
}
|
|
2524
2587
|
};
|
|
2525
2588
|
|
|
2589
|
+
} // namespace
|
|
2590
|
+
|
|
2526
2591
|
// This function can only be called in these conditions:
|
|
2527
2592
|
// 1) During Recovery()
|
|
2528
2593
|
// 2) During Write(), in a single-threaded write thread
|
|
@@ -2613,11 +2678,94 @@ Status WriteBatchInternal::InsertInto(
|
|
|
2613
2678
|
return s;
|
|
2614
2679
|
}
|
|
2615
2680
|
|
|
2681
|
+
namespace {
|
|
2682
|
+
|
|
2683
|
+
// This class updates protection info for a WriteBatch.
|
|
2684
|
+
class ProtectionInfoUpdater : public WriteBatch::Handler {
|
|
2685
|
+
public:
|
|
2686
|
+
explicit ProtectionInfoUpdater(WriteBatch::ProtectionInfo* prot_info)
|
|
2687
|
+
: prot_info_(prot_info) {}
|
|
2688
|
+
|
|
2689
|
+
~ProtectionInfoUpdater() override {}
|
|
2690
|
+
|
|
2691
|
+
Status PutCF(uint32_t cf, const Slice& key, const Slice& val) override {
|
|
2692
|
+
return UpdateProtInfo(cf, key, val, kTypeValue);
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
Status DeleteCF(uint32_t cf, const Slice& key) override {
|
|
2696
|
+
return UpdateProtInfo(cf, key, "", kTypeDeletion);
|
|
2697
|
+
}
|
|
2698
|
+
|
|
2699
|
+
Status SingleDeleteCF(uint32_t cf, const Slice& key) override {
|
|
2700
|
+
return UpdateProtInfo(cf, key, "", kTypeSingleDeletion);
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
Status DeleteRangeCF(uint32_t cf, const Slice& begin_key,
|
|
2704
|
+
const Slice& end_key) override {
|
|
2705
|
+
return UpdateProtInfo(cf, begin_key, end_key, kTypeRangeDeletion);
|
|
2706
|
+
}
|
|
2707
|
+
|
|
2708
|
+
Status MergeCF(uint32_t cf, const Slice& key, const Slice& val) override {
|
|
2709
|
+
return UpdateProtInfo(cf, key, val, kTypeMerge);
|
|
2710
|
+
}
|
|
2711
|
+
|
|
2712
|
+
Status PutBlobIndexCF(uint32_t cf, const Slice& key,
|
|
2713
|
+
const Slice& val) override {
|
|
2714
|
+
return UpdateProtInfo(cf, key, val, kTypeBlobIndex);
|
|
2715
|
+
}
|
|
2716
|
+
|
|
2717
|
+
Status MarkBeginPrepare(bool /* unprepare */) override {
|
|
2718
|
+
return Status::OK();
|
|
2719
|
+
}
|
|
2720
|
+
|
|
2721
|
+
Status MarkEndPrepare(const Slice& /* xid */) override {
|
|
2722
|
+
return Status::OK();
|
|
2723
|
+
}
|
|
2724
|
+
|
|
2725
|
+
Status MarkCommit(const Slice& /* xid */) override { return Status::OK(); }
|
|
2726
|
+
|
|
2727
|
+
Status MarkCommitWithTimestamp(const Slice& /* xid */,
|
|
2728
|
+
const Slice& /* ts */) override {
|
|
2729
|
+
return Status::OK();
|
|
2730
|
+
}
|
|
2731
|
+
|
|
2732
|
+
Status MarkRollback(const Slice& /* xid */) override { return Status::OK(); }
|
|
2733
|
+
|
|
2734
|
+
Status MarkNoop(bool /* empty_batch */) override { return Status::OK(); }
|
|
2735
|
+
|
|
2736
|
+
private:
|
|
2737
|
+
Status UpdateProtInfo(uint32_t cf, const Slice& key, const Slice& val,
|
|
2738
|
+
const ValueType op_type) {
|
|
2739
|
+
if (prot_info_) {
|
|
2740
|
+
prot_info_->entries_.emplace_back(
|
|
2741
|
+
ProtectionInfo64().ProtectKVO(key, val, op_type).ProtectC(cf));
|
|
2742
|
+
}
|
|
2743
|
+
return Status::OK();
|
|
2744
|
+
}
|
|
2745
|
+
|
|
2746
|
+
// No copy or move.
|
|
2747
|
+
ProtectionInfoUpdater(const ProtectionInfoUpdater&) = delete;
|
|
2748
|
+
ProtectionInfoUpdater(ProtectionInfoUpdater&&) = delete;
|
|
2749
|
+
ProtectionInfoUpdater& operator=(const ProtectionInfoUpdater&) = delete;
|
|
2750
|
+
ProtectionInfoUpdater& operator=(ProtectionInfoUpdater&&) = delete;
|
|
2751
|
+
|
|
2752
|
+
WriteBatch::ProtectionInfo* const prot_info_ = nullptr;
|
|
2753
|
+
};
|
|
2754
|
+
|
|
2755
|
+
} // namespace
|
|
2756
|
+
|
|
2616
2757
|
Status WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) {
|
|
2617
2758
|
assert(contents.size() >= WriteBatchInternal::kHeader);
|
|
2618
|
-
|
|
2759
|
+
|
|
2619
2760
|
b->rep_.assign(contents.data(), contents.size());
|
|
2620
2761
|
b->content_flags_.store(ContentFlags::DEFERRED, std::memory_order_relaxed);
|
|
2762
|
+
|
|
2763
|
+
// If we have a prot_info_, update protection info entries for the batch.
|
|
2764
|
+
if (b->prot_info_) {
|
|
2765
|
+
ProtectionInfoUpdater prot_info_updater(b->prot_info_.get());
|
|
2766
|
+
return b->Iterate(&prot_info_updater);
|
|
2767
|
+
}
|
|
2768
|
+
|
|
2621
2769
|
return Status::OK();
|
|
2622
2770
|
}
|
|
2623
2771
|
|
|
@@ -118,7 +118,7 @@ static std::string PrintContents(WriteBatch* b,
|
|
|
118
118
|
break;
|
|
119
119
|
}
|
|
120
120
|
state.append("@");
|
|
121
|
-
state.append(
|
|
121
|
+
state.append(std::to_string(ikey.sequence));
|
|
122
122
|
}
|
|
123
123
|
EXPECT_OK(iter->status());
|
|
124
124
|
}
|
|
@@ -253,7 +253,7 @@ namespace {
|
|
|
253
253
|
if (column_family_id == 0) {
|
|
254
254
|
seen += "Put(" + key.ToString() + ", " + value.ToString() + ")";
|
|
255
255
|
} else {
|
|
256
|
-
seen += "PutCF(" +
|
|
256
|
+
seen += "PutCF(" + std::to_string(column_family_id) + ", " +
|
|
257
257
|
key.ToString() + ", " + value.ToString() + ")";
|
|
258
258
|
}
|
|
259
259
|
return Status::OK();
|
|
@@ -262,7 +262,7 @@ namespace {
|
|
|
262
262
|
if (column_family_id == 0) {
|
|
263
263
|
seen += "Delete(" + key.ToString() + ")";
|
|
264
264
|
} else {
|
|
265
|
-
seen += "DeleteCF(" +
|
|
265
|
+
seen += "DeleteCF(" + std::to_string(column_family_id) + ", " +
|
|
266
266
|
key.ToString() + ")";
|
|
267
267
|
}
|
|
268
268
|
return Status::OK();
|
|
@@ -272,7 +272,7 @@ namespace {
|
|
|
272
272
|
if (column_family_id == 0) {
|
|
273
273
|
seen += "SingleDelete(" + key.ToString() + ")";
|
|
274
274
|
} else {
|
|
275
|
-
seen += "SingleDeleteCF(" +
|
|
275
|
+
seen += "SingleDeleteCF(" + std::to_string(column_family_id) + ", " +
|
|
276
276
|
key.ToString() + ")";
|
|
277
277
|
}
|
|
278
278
|
return Status::OK();
|
|
@@ -283,7 +283,7 @@ namespace {
|
|
|
283
283
|
seen += "DeleteRange(" + begin_key.ToString() + ", " +
|
|
284
284
|
end_key.ToString() + ")";
|
|
285
285
|
} else {
|
|
286
|
-
seen += "DeleteRangeCF(" +
|
|
286
|
+
seen += "DeleteRangeCF(" + std::to_string(column_family_id) + ", " +
|
|
287
287
|
begin_key.ToString() + ", " + end_key.ToString() + ")";
|
|
288
288
|
}
|
|
289
289
|
return Status::OK();
|
|
@@ -293,7 +293,7 @@ namespace {
|
|
|
293
293
|
if (column_family_id == 0) {
|
|
294
294
|
seen += "Merge(" + key.ToString() + ", " + value.ToString() + ")";
|
|
295
295
|
} else {
|
|
296
|
-
seen += "MergeCF(" +
|
|
296
|
+
seen += "MergeCF(" + std::to_string(column_family_id) + ", " +
|
|
297
297
|
key.ToString() + ", " + value.ToString() + ")";
|
|
298
298
|
}
|
|
299
299
|
return Status::OK();
|
|
@@ -52,7 +52,7 @@ class WriteController {
|
|
|
52
52
|
bool IsStopped() const;
|
|
53
53
|
bool NeedsDelay() const { return total_delayed_.load() > 0; }
|
|
54
54
|
bool NeedSpeedupCompaction() const {
|
|
55
|
-
return IsStopped() || NeedsDelay() || total_compaction_pressure_ > 0;
|
|
55
|
+
return IsStopped() || NeedsDelay() || total_compaction_pressure_.load() > 0;
|
|
56
56
|
}
|
|
57
57
|
// return how many microseconds the caller needs to sleep after the call
|
|
58
58
|
// num_bytes: how many number of bytes to put into the DB.
|
|
@@ -18,11 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
ROCKSDB_NAMESPACE::Env* db_stress_listener_env = nullptr;
|
|
20
20
|
ROCKSDB_NAMESPACE::Env* db_stress_env = nullptr;
|
|
21
|
-
#ifndef NDEBUG
|
|
22
21
|
// If non-null, injects read error at a rate specified by the
|
|
23
22
|
// read_fault_one_in or write_fault_one_in flag
|
|
24
23
|
std::shared_ptr<ROCKSDB_NAMESPACE::FaultInjectionTestFS> fault_fs_guard;
|
|
25
|
-
#endif // NDEBUG
|
|
26
24
|
enum ROCKSDB_NAMESPACE::CompressionType compression_type_e =
|
|
27
25
|
ROCKSDB_NAMESPACE::kSnappyCompression;
|
|
28
26
|
enum ROCKSDB_NAMESPACE::CompressionType bottommost_compression_type_e =
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
#include "util/random.h"
|
|
68
68
|
#include "util/string_util.h"
|
|
69
69
|
#include "utilities/blob_db/blob_db.h"
|
|
70
|
+
#include "utilities/fault_injection_fs.h"
|
|
70
71
|
#include "utilities/merge_operators.h"
|
|
71
72
|
|
|
72
73
|
using GFLAGS_NAMESPACE::ParseCommandLineFlags;
|
|
@@ -107,6 +108,7 @@ DECLARE_double(memtable_prefix_bloom_size_ratio);
|
|
|
107
108
|
DECLARE_bool(memtable_whole_key_filtering);
|
|
108
109
|
DECLARE_int32(open_files);
|
|
109
110
|
DECLARE_int64(compressed_cache_size);
|
|
111
|
+
DECLARE_int32(compressed_cache_numshardbits);
|
|
110
112
|
DECLARE_int32(compaction_style);
|
|
111
113
|
DECLARE_int32(num_levels);
|
|
112
114
|
DECLARE_int32(level0_file_num_compaction_trigger);
|
|
@@ -134,7 +136,9 @@ DECLARE_int32(set_in_place_one_in);
|
|
|
134
136
|
DECLARE_int64(cache_size);
|
|
135
137
|
DECLARE_int32(cache_numshardbits);
|
|
136
138
|
DECLARE_bool(cache_index_and_filter_blocks);
|
|
137
|
-
DECLARE_bool(
|
|
139
|
+
DECLARE_bool(charge_compression_dictionary_building_buffer);
|
|
140
|
+
DECLARE_bool(charge_filter_construction);
|
|
141
|
+
DECLARE_bool(charge_table_reader);
|
|
138
142
|
DECLARE_int32(top_level_index_pinning);
|
|
139
143
|
DECLARE_int32(partition_pinning);
|
|
140
144
|
DECLARE_int32(unpartitioned_pinning);
|
|
@@ -166,6 +170,8 @@ DECLARE_bool(mock_direct_io);
|
|
|
166
170
|
DECLARE_bool(statistics);
|
|
167
171
|
DECLARE_bool(sync);
|
|
168
172
|
DECLARE_bool(use_fsync);
|
|
173
|
+
DECLARE_uint64(bytes_per_sync);
|
|
174
|
+
DECLARE_uint64(wal_bytes_per_sync);
|
|
169
175
|
DECLARE_int32(kill_random_test);
|
|
170
176
|
DECLARE_string(kill_exclude_prefixes);
|
|
171
177
|
DECLARE_bool(disable_wal);
|
|
@@ -294,12 +300,7 @@ constexpr int kValueMaxLen = 100;
|
|
|
294
300
|
// wrapped posix environment
|
|
295
301
|
extern ROCKSDB_NAMESPACE::Env* db_stress_env;
|
|
296
302
|
extern ROCKSDB_NAMESPACE::Env* db_stress_listener_env;
|
|
297
|
-
#ifndef NDEBUG
|
|
298
|
-
namespace ROCKSDB_NAMESPACE {
|
|
299
|
-
class FaultInjectionTestFS;
|
|
300
|
-
} // namespace ROCKSDB_NAMESPACE
|
|
301
303
|
extern std::shared_ptr<ROCKSDB_NAMESPACE::FaultInjectionTestFS> fault_fs_guard;
|
|
302
|
-
#endif
|
|
303
304
|
|
|
304
305
|
extern enum ROCKSDB_NAMESPACE::CompressionType compression_type_e;
|
|
305
306
|
extern enum ROCKSDB_NAMESPACE::CompressionType bottommost_compression_type_e;
|
|
@@ -46,11 +46,12 @@ class DbStressCompactionFilter : public CompactionFilter {
|
|
|
46
46
|
// Reaching here means we acquired the lock.
|
|
47
47
|
|
|
48
48
|
bool key_exists = state_->Exists(cf_id_, key_num);
|
|
49
|
+
const bool allow_overwrite = state_->AllowsOverwrite(key_num);
|
|
49
50
|
|
|
50
51
|
key_mutex->Unlock();
|
|
51
52
|
|
|
52
53
|
if (!key_exists) {
|
|
53
|
-
return Decision::kRemove;
|
|
54
|
+
return allow_overwrite ? Decision::kRemove : Decision::kPurge;
|
|
54
55
|
}
|
|
55
56
|
return Decision::kKeep;
|
|
56
57
|
}
|
|
@@ -58,15 +58,16 @@ void ThreadBody(void* v) {
|
|
|
58
58
|
|
|
59
59
|
bool RunStressTest(StressTest* stress) {
|
|
60
60
|
SystemClock* clock = db_stress_env->GetSystemClock().get();
|
|
61
|
-
stress->InitDb();
|
|
62
61
|
SharedState shared(db_stress_env, stress);
|
|
62
|
+
stress->InitDb(&shared);
|
|
63
63
|
stress->FinishInitDb(&shared);
|
|
64
64
|
|
|
65
|
-
#ifndef NDEBUG
|
|
66
65
|
if (FLAGS_sync_fault_injection) {
|
|
67
66
|
fault_fs_guard->SetFilesystemDirectWritable(false);
|
|
68
67
|
}
|
|
69
|
-
|
|
68
|
+
if (FLAGS_write_fault_one_in) {
|
|
69
|
+
fault_fs_guard->EnableWriteErrorInjection();
|
|
70
|
+
}
|
|
70
71
|
|
|
71
72
|
uint32_t n = FLAGS_threads;
|
|
72
73
|
uint64_t now = clock->NowMicros();
|
|
@@ -187,9 +187,15 @@ DEFINE_int32(open_files, ROCKSDB_NAMESPACE::Options().max_open_files,
|
|
|
187
187
|
"Maximum number of files to keep open at the same time "
|
|
188
188
|
"(use default if == 0)");
|
|
189
189
|
|
|
190
|
-
DEFINE_int64(compressed_cache_size,
|
|
190
|
+
DEFINE_int64(compressed_cache_size, 0,
|
|
191
191
|
"Number of bytes to use as a cache of compressed data."
|
|
192
|
-
"
|
|
192
|
+
" 0 means use default settings.");
|
|
193
|
+
|
|
194
|
+
DEFINE_int32(
|
|
195
|
+
compressed_cache_numshardbits, -1,
|
|
196
|
+
"Number of shards for the compressed block cache is 2 ** "
|
|
197
|
+
"compressed_cache_numshardbits. Negative value means default settings. "
|
|
198
|
+
"This is applied only if compressed_cache_size is greater than 0.");
|
|
193
199
|
|
|
194
200
|
DEFINE_int32(compaction_style, ROCKSDB_NAMESPACE::Options().compaction_style,
|
|
195
201
|
"");
|
|
@@ -304,10 +310,20 @@ DEFINE_int32(cache_numshardbits, 6,
|
|
|
304
310
|
DEFINE_bool(cache_index_and_filter_blocks, false,
|
|
305
311
|
"True if indexes/filters should be cached in block cache.");
|
|
306
312
|
|
|
307
|
-
DEFINE_bool(
|
|
308
|
-
"
|
|
309
|
-
"
|
|
310
|
-
"
|
|
313
|
+
DEFINE_bool(charge_compression_dictionary_building_buffer, false,
|
|
314
|
+
"Setting for "
|
|
315
|
+
"CacheEntryRoleOptions::charged of"
|
|
316
|
+
"CacheEntryRole::kCompressionDictionaryBuildingBuffer");
|
|
317
|
+
|
|
318
|
+
DEFINE_bool(charge_filter_construction, false,
|
|
319
|
+
"Setting for "
|
|
320
|
+
"CacheEntryRoleOptions::charged of"
|
|
321
|
+
"CacheEntryRole::kFilterConstruction");
|
|
322
|
+
|
|
323
|
+
DEFINE_bool(charge_table_reader, false,
|
|
324
|
+
"Setting for "
|
|
325
|
+
"CacheEntryRoleOptions::charged of"
|
|
326
|
+
"CacheEntryRole::kBlockBasedTableReader");
|
|
311
327
|
|
|
312
328
|
DEFINE_int32(
|
|
313
329
|
top_level_index_pinning,
|
|
@@ -516,6 +532,15 @@ DEFINE_bool(sync, false, "Sync all writes to disk");
|
|
|
516
532
|
|
|
517
533
|
DEFINE_bool(use_fsync, false, "If true, issue fsync instead of fdatasync");
|
|
518
534
|
|
|
535
|
+
DEFINE_uint64(bytes_per_sync, ROCKSDB_NAMESPACE::Options().bytes_per_sync,
|
|
536
|
+
"If nonzero, sync SST file data incrementally after every "
|
|
537
|
+
"`bytes_per_sync` bytes are written");
|
|
538
|
+
|
|
539
|
+
DEFINE_uint64(wal_bytes_per_sync,
|
|
540
|
+
ROCKSDB_NAMESPACE::Options().wal_bytes_per_sync,
|
|
541
|
+
"If nonzero, sync WAL file data incrementally after every "
|
|
542
|
+
"`bytes_per_sync` bytes are written");
|
|
543
|
+
|
|
519
544
|
DEFINE_int32(kill_random_test, 0,
|
|
520
545
|
"If non-zero, kill at various points in source code with "
|
|
521
546
|
"probability 1/this");
|
|
@@ -173,7 +173,10 @@ void DbStressListener::VerifyTableFileUniqueId(
|
|
|
173
173
|
const TableProperties& new_file_properties, const std::string& file_path) {
|
|
174
174
|
// Verify unique ID
|
|
175
175
|
std::string id;
|
|
176
|
-
|
|
176
|
+
// Unit tests verify that GetUniqueIdFromTableProperties returns just a
|
|
177
|
+
// substring of this, and we're only going to pull out 64 bits, so using
|
|
178
|
+
// GetExtendedUniqueIdFromTableProperties is arguably stronger testing here.
|
|
179
|
+
Status s = GetExtendedUniqueIdFromTableProperties(new_file_properties, &id);
|
|
177
180
|
if (!s.ok()) {
|
|
178
181
|
fprintf(stderr, "Error getting SST unique id for %s: %s\n",
|
|
179
182
|
file_path.c_str(), s.ToString().c_str());
|
|
@@ -12,16 +12,6 @@
|
|
|
12
12
|
#include "db_stress_tool/db_stress_shared_state.h"
|
|
13
13
|
|
|
14
14
|
namespace ROCKSDB_NAMESPACE {
|
|
15
|
-
const uint32_t SharedState::UNKNOWN_SENTINEL = 0xfffffffe;
|
|
16
|
-
const uint32_t SharedState::DELETION_SENTINEL = 0xffffffff;
|
|
17
|
-
#if defined(ROCKSDB_SUPPORT_THREAD_LOCAL)
|
|
18
|
-
#if defined(OS_SOLARIS)
|
|
19
|
-
__thread bool SharedState::ignore_read_error;
|
|
20
|
-
#else
|
|
21
15
|
thread_local bool SharedState::ignore_read_error;
|
|
22
|
-
#endif // OS_SOLARIS
|
|
23
|
-
#else
|
|
24
|
-
bool SharedState::ignore_read_error;
|
|
25
|
-
#endif // ROCKSDB_SUPPORT_THREAD_LOCAL
|
|
26
16
|
} // namespace ROCKSDB_NAMESPACE
|
|
27
17
|
#endif // GFLAGS
|