@nxtedition/rocksdb 8.2.8 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.cc +0 -21
- package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
- package/deps/rocksdb/rocksdb/Makefile +37 -25
- package/deps/rocksdb/rocksdb/README.md +29 -0
- package/deps/rocksdb/rocksdb/TARGETS +25 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
- package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
- package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
- package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
- package/deps/rocksdb/rocksdb/db/c.cc +233 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
- package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
- package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
- package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
- package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
- package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
- package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
- package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
- package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
- package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
- package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
- package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
- package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
- package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
- package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
- package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
- package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
- package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
- package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
- package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
- package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
- package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
- package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
- package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
- package/deps/rocksdb/rocksdb/env/env.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
- package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
- package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
- package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
- package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
- package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
- package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
- package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
- package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
- package/deps/rocksdb/rocksdb/options/options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/README +10 -0
- package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
- package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
- package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
- package/deps/rocksdb/rocksdb/src.mk +10 -1
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
- package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
- package/deps/rocksdb/rocksdb/table/format.cc +175 -33
- package/deps/rocksdb/rocksdb/table/format.h +63 -10
- package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
- package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
- package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
- package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
- package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
- package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
- package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
- package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
- package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
- package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
- package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
- package/deps/rocksdb/rocksdb/util/compression.h +119 -35
- package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
- package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
- package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
- package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
- package/deps/rocksdb/rocksdb/util/hash.h +7 -3
- package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
- package/deps/rocksdb/rocksdb/util/math.h +58 -6
- package/deps/rocksdb/rocksdb/util/math128.h +29 -7
- package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
- package/deps/rocksdb/rocksdb/util/overload.h +23 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
- package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
- package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
- package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
- package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
- package/deps/rocksdb/rocksdb.gyp +6 -2
- package/index.js +0 -8
- 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/cmake/modules/CxxFlags.cmake +0 -7
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#include "db_stress_tool/db_stress_compaction_filter.h"
|
|
18
18
|
#include "db_stress_tool/db_stress_driver.h"
|
|
19
19
|
#include "db_stress_tool/db_stress_table_properties_collector.h"
|
|
20
|
+
#include "db_stress_tool/db_stress_wide_merge_operator.h"
|
|
20
21
|
#include "rocksdb/convenience.h"
|
|
21
22
|
#include "rocksdb/filter_policy.h"
|
|
22
23
|
#include "rocksdb/secondary_cache.h"
|
|
@@ -39,12 +40,12 @@ std::shared_ptr<const FilterPolicy> CreateFilterPolicy() {
|
|
|
39
40
|
return BlockBasedTableOptions().filter_policy;
|
|
40
41
|
}
|
|
41
42
|
const FilterPolicy* new_policy;
|
|
42
|
-
if (
|
|
43
|
+
if (FLAGS_bloom_before_level == INT_MAX) {
|
|
43
44
|
// Use Bloom API
|
|
44
45
|
new_policy = NewBloomFilterPolicy(FLAGS_bloom_bits, false);
|
|
45
46
|
} else {
|
|
46
|
-
new_policy =
|
|
47
|
-
FLAGS_bloom_bits,
|
|
47
|
+
new_policy =
|
|
48
|
+
NewRibbonFilterPolicy(FLAGS_bloom_bits, FLAGS_bloom_before_level);
|
|
48
49
|
}
|
|
49
50
|
return std::shared_ptr<const FilterPolicy>(new_policy);
|
|
50
51
|
}
|
|
@@ -56,7 +57,7 @@ StressTest::StressTest()
|
|
|
56
57
|
filter_policy_(CreateFilterPolicy()),
|
|
57
58
|
db_(nullptr),
|
|
58
59
|
txn_db_(nullptr),
|
|
59
|
-
|
|
60
|
+
optimistic_txn_db_(nullptr),
|
|
60
61
|
db_aptr_(nullptr),
|
|
61
62
|
clock_(db_stress_env->GetSystemClock().get()),
|
|
62
63
|
new_column_family_name_(1),
|
|
@@ -111,6 +112,11 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
|
|
|
111
112
|
|
|
112
113
|
std::shared_ptr<SecondaryCache> secondary_cache;
|
|
113
114
|
if (!FLAGS_secondary_cache_uri.empty()) {
|
|
115
|
+
assert(!strstr(FLAGS_secondary_cache_uri.c_str(),
|
|
116
|
+
"compressed_secondary_cache") ||
|
|
117
|
+
(FLAGS_compressed_secondary_cache_size == 0 &&
|
|
118
|
+
FLAGS_compressed_secondary_cache_ratio == 0.0 &&
|
|
119
|
+
!StartsWith(FLAGS_cache_type, "tiered_")));
|
|
114
120
|
Status s = SecondaryCache::CreateFromString(
|
|
115
121
|
config_options, FLAGS_secondary_cache_uri, &secondary_cache);
|
|
116
122
|
if (secondary_cache == nullptr) {
|
|
@@ -124,27 +130,81 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
|
|
|
124
130
|
secondary_cache, static_cast<uint32_t>(FLAGS_seed),
|
|
125
131
|
FLAGS_secondary_cache_fault_one_in);
|
|
126
132
|
}
|
|
133
|
+
} else if (FLAGS_compressed_secondary_cache_size > 0) {
|
|
134
|
+
if (StartsWith(FLAGS_cache_type, "tiered_")) {
|
|
135
|
+
fprintf(stderr,
|
|
136
|
+
"Cannot specify both compressed_secondary_cache_size and %s\n",
|
|
137
|
+
FLAGS_cache_type.c_str());
|
|
138
|
+
exit(1);
|
|
139
|
+
}
|
|
140
|
+
CompressedSecondaryCacheOptions opts;
|
|
141
|
+
opts.capacity = FLAGS_compressed_secondary_cache_size;
|
|
142
|
+
secondary_cache = NewCompressedSecondaryCache(opts);
|
|
143
|
+
if (secondary_cache == nullptr) {
|
|
144
|
+
fprintf(stderr, "Failed to allocate compressed secondary cache\n");
|
|
145
|
+
exit(1);
|
|
146
|
+
}
|
|
147
|
+
compressed_secondary_cache = secondary_cache;
|
|
127
148
|
}
|
|
128
149
|
|
|
129
|
-
|
|
150
|
+
std::string cache_type = FLAGS_cache_type;
|
|
151
|
+
size_t cache_size = FLAGS_cache_size;
|
|
152
|
+
bool tiered = false;
|
|
153
|
+
if (StartsWith(cache_type, "tiered_")) {
|
|
154
|
+
tiered = true;
|
|
155
|
+
cache_type.erase(0, strlen("tiered_"));
|
|
156
|
+
}
|
|
157
|
+
if (FLAGS_use_write_buffer_manager) {
|
|
158
|
+
cache_size += FLAGS_db_write_buffer_size;
|
|
159
|
+
}
|
|
160
|
+
if (cache_type == "clock_cache") {
|
|
130
161
|
fprintf(stderr, "Old clock cache implementation has been removed.\n");
|
|
131
162
|
exit(1);
|
|
132
|
-
} else if (
|
|
133
|
-
|
|
134
|
-
|
|
163
|
+
} else if (EndsWith(cache_type, "hyper_clock_cache")) {
|
|
164
|
+
size_t estimated_entry_charge;
|
|
165
|
+
if (cache_type == "fixed_hyper_clock_cache" ||
|
|
166
|
+
cache_type == "hyper_clock_cache") {
|
|
167
|
+
estimated_entry_charge = FLAGS_block_size;
|
|
168
|
+
} else if (cache_type == "auto_hyper_clock_cache") {
|
|
169
|
+
estimated_entry_charge = 0;
|
|
170
|
+
} else {
|
|
171
|
+
fprintf(stderr, "Cache type not supported.");
|
|
172
|
+
exit(1);
|
|
173
|
+
}
|
|
174
|
+
HyperClockCacheOptions opts(cache_size, estimated_entry_charge,
|
|
135
175
|
num_shard_bits);
|
|
136
|
-
opts.
|
|
137
|
-
|
|
138
|
-
|
|
176
|
+
opts.hash_seed = BitwiseAnd(FLAGS_seed, INT32_MAX);
|
|
177
|
+
if (tiered) {
|
|
178
|
+
TieredCacheOptions tiered_opts;
|
|
179
|
+
tiered_opts.cache_opts = &opts;
|
|
180
|
+
tiered_opts.cache_type = PrimaryCacheType::kCacheTypeHCC;
|
|
181
|
+
tiered_opts.total_capacity = cache_size;
|
|
182
|
+
tiered_opts.compressed_secondary_ratio = 0.5;
|
|
183
|
+
block_cache = NewTieredCache(tiered_opts);
|
|
184
|
+
} else {
|
|
185
|
+
opts.secondary_cache = std::move(secondary_cache);
|
|
186
|
+
block_cache = opts.MakeSharedCache();
|
|
187
|
+
}
|
|
188
|
+
} else if (EndsWith(cache_type, "lru_cache")) {
|
|
139
189
|
LRUCacheOptions opts;
|
|
140
190
|
opts.capacity = capacity;
|
|
141
191
|
opts.num_shard_bits = num_shard_bits;
|
|
142
|
-
|
|
143
|
-
|
|
192
|
+
if (tiered) {
|
|
193
|
+
TieredCacheOptions tiered_opts;
|
|
194
|
+
tiered_opts.cache_opts = &opts;
|
|
195
|
+
tiered_opts.cache_type = PrimaryCacheType::kCacheTypeLRU;
|
|
196
|
+
tiered_opts.total_capacity = cache_size;
|
|
197
|
+
tiered_opts.compressed_secondary_ratio = 0.5;
|
|
198
|
+
block_cache = NewTieredCache(tiered_opts);
|
|
199
|
+
} else {
|
|
200
|
+
opts.secondary_cache = std::move(secondary_cache);
|
|
201
|
+
block_cache = NewLRUCache(opts);
|
|
202
|
+
}
|
|
144
203
|
} else {
|
|
145
204
|
fprintf(stderr, "Cache type not supported.");
|
|
146
205
|
exit(1);
|
|
147
206
|
}
|
|
207
|
+
return block_cache;
|
|
148
208
|
}
|
|
149
209
|
|
|
150
210
|
std::vector<std::string> StressTest::GetBlobCompressionTags() {
|
|
@@ -264,6 +324,13 @@ bool StressTest::BuildOptionsTable() {
|
|
|
264
324
|
std::vector<std::string>{"kDisable", "kFlushOnly"});
|
|
265
325
|
}
|
|
266
326
|
|
|
327
|
+
if (FLAGS_bloom_before_level != INT_MAX) {
|
|
328
|
+
// Can modify RibbonFilterPolicy field
|
|
329
|
+
options_tbl.emplace("table_factory.filter_policy.bloom_before_level",
|
|
330
|
+
std::vector<std::string>{"-1", "0", "1", "2",
|
|
331
|
+
"2147483646", "2147483647"});
|
|
332
|
+
}
|
|
333
|
+
|
|
267
334
|
options_table_ = std::move(options_tbl);
|
|
268
335
|
|
|
269
336
|
for (const auto& iter : options_table_) {
|
|
@@ -301,7 +368,7 @@ void StressTest::FinishInitDb(SharedState* shared) {
|
|
|
301
368
|
exit(1);
|
|
302
369
|
}
|
|
303
370
|
}
|
|
304
|
-
if (FLAGS_use_txn) {
|
|
371
|
+
if (FLAGS_use_txn && !FLAGS_use_optimistic_txn) {
|
|
305
372
|
// It's OK here without sync because unsynced data cannot be lost at this
|
|
306
373
|
// point
|
|
307
374
|
// - even with sync_fault_injection=1 as the
|
|
@@ -398,10 +465,22 @@ Status StressTest::AssertSame(DB* db, ColumnFamilyHandle* cf,
|
|
|
398
465
|
return Status::OK();
|
|
399
466
|
}
|
|
400
467
|
|
|
401
|
-
void StressTest::
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
468
|
+
void StressTest::ProcessStatus(SharedState* shared, std::string opname,
|
|
469
|
+
Status s) const {
|
|
470
|
+
if (s.ok()) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
if (!s.IsIOError() || !std::strstr(s.getState(), "injected")) {
|
|
474
|
+
std::ostringstream oss;
|
|
475
|
+
oss << opname << " failed: " << s.ToString();
|
|
476
|
+
VerificationAbort(shared, oss.str());
|
|
477
|
+
assert(false);
|
|
478
|
+
}
|
|
479
|
+
fprintf(stdout, "%s failed: %s\n", opname.c_str(), s.ToString().c_str());
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
void StressTest::VerificationAbort(SharedState* shared, std::string msg) const {
|
|
483
|
+
fprintf(stderr, "Verification failed: %s\n", msg.c_str());
|
|
405
484
|
shared->SetVerificationFailure();
|
|
406
485
|
}
|
|
407
486
|
|
|
@@ -490,13 +569,16 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
490
569
|
|
|
491
570
|
const Slice v(value, sz);
|
|
492
571
|
|
|
493
|
-
|
|
494
572
|
std::string ts;
|
|
495
573
|
if (FLAGS_user_timestamp_size > 0) {
|
|
496
574
|
ts = GetNowNanos();
|
|
497
575
|
}
|
|
498
576
|
|
|
499
|
-
if (
|
|
577
|
+
if (FLAGS_use_put_entity_one_in > 0 &&
|
|
578
|
+
(value_base % FLAGS_use_put_entity_one_in) == 0) {
|
|
579
|
+
s = db_->PutEntity(write_opts, cfh, key,
|
|
580
|
+
GenerateWideColumns(value_base, v));
|
|
581
|
+
} else if (FLAGS_use_merge) {
|
|
500
582
|
if (!FLAGS_use_txn) {
|
|
501
583
|
if (FLAGS_user_timestamp_size > 0) {
|
|
502
584
|
s = db_->Merge(write_opts, cfh, key, ts, v);
|
|
@@ -504,18 +586,10 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
504
586
|
s = db_->Merge(write_opts, cfh, key, v);
|
|
505
587
|
}
|
|
506
588
|
} else {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
s = txn->Merge(cfh, key, v);
|
|
511
|
-
if (s.ok()) {
|
|
512
|
-
s = CommitTxn(txn);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
589
|
+
s = ExecuteTransaction(
|
|
590
|
+
write_opts, /*thread=*/nullptr,
|
|
591
|
+
[&](Transaction& txn) { return txn.Merge(cfh, key, v); });
|
|
515
592
|
}
|
|
516
|
-
} else if (FLAGS_use_put_entity_one_in > 0) {
|
|
517
|
-
s = db_->PutEntity(write_opts, cfh, key,
|
|
518
|
-
GenerateWideColumns(value_base, v));
|
|
519
593
|
} else {
|
|
520
594
|
if (!FLAGS_use_txn) {
|
|
521
595
|
if (FLAGS_user_timestamp_size > 0) {
|
|
@@ -524,14 +598,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
524
598
|
s = db_->Put(write_opts, cfh, key, v);
|
|
525
599
|
}
|
|
526
600
|
} else {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
s = txn->Put(cfh, key, v);
|
|
531
|
-
if (s.ok()) {
|
|
532
|
-
s = CommitTxn(txn);
|
|
533
|
-
}
|
|
534
|
-
}
|
|
601
|
+
s = ExecuteTransaction(
|
|
602
|
+
write_opts, /*thread=*/nullptr,
|
|
603
|
+
[&](Transaction& txn) { return txn.Put(cfh, key, v); });
|
|
535
604
|
}
|
|
536
605
|
}
|
|
537
606
|
|
|
@@ -556,6 +625,7 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
556
625
|
delete db_;
|
|
557
626
|
db_ = nullptr;
|
|
558
627
|
txn_db_ = nullptr;
|
|
628
|
+
optimistic_txn_db_ = nullptr;
|
|
559
629
|
|
|
560
630
|
db_preload_finished_.store(true);
|
|
561
631
|
auto now = clock_->NowMicros();
|
|
@@ -628,74 +698,116 @@ void StressTest::ProcessRecoveredPreparedTxnsHelper(Transaction* txn,
|
|
|
628
698
|
}
|
|
629
699
|
}
|
|
630
700
|
|
|
631
|
-
Status StressTest::NewTxn(WriteOptions& write_opts,
|
|
701
|
+
Status StressTest::NewTxn(WriteOptions& write_opts,
|
|
702
|
+
std::unique_ptr<Transaction>* out_txn) {
|
|
632
703
|
if (!FLAGS_use_txn) {
|
|
633
704
|
return Status::InvalidArgument("NewTxn when FLAGS_use_txn is not set");
|
|
634
705
|
}
|
|
635
706
|
write_opts.disableWAL = FLAGS_disable_wal;
|
|
636
707
|
static std::atomic<uint64_t> txn_id = {0};
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
708
|
+
if (FLAGS_use_optimistic_txn) {
|
|
709
|
+
out_txn->reset(optimistic_txn_db_->BeginTransaction(write_opts));
|
|
710
|
+
return Status::OK();
|
|
711
|
+
} else {
|
|
712
|
+
TransactionOptions txn_options;
|
|
713
|
+
txn_options.use_only_the_last_commit_time_batch_for_recovery =
|
|
714
|
+
FLAGS_use_only_the_last_commit_time_batch_for_recovery;
|
|
715
|
+
txn_options.lock_timeout = 600000; // 10 min
|
|
716
|
+
txn_options.deadlock_detect = true;
|
|
717
|
+
out_txn->reset(txn_db_->BeginTransaction(write_opts, txn_options));
|
|
718
|
+
auto istr = std::to_string(txn_id.fetch_add(1));
|
|
719
|
+
Status s = (*out_txn)->SetName("xid" + istr);
|
|
720
|
+
return s;
|
|
721
|
+
}
|
|
646
722
|
}
|
|
647
723
|
|
|
648
|
-
Status StressTest::CommitTxn(Transaction
|
|
724
|
+
Status StressTest::CommitTxn(Transaction& txn, ThreadState* thread) {
|
|
649
725
|
if (!FLAGS_use_txn) {
|
|
650
726
|
return Status::InvalidArgument("CommitTxn when FLAGS_use_txn is not set");
|
|
651
727
|
}
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
728
|
+
Status s = Status::OK();
|
|
729
|
+
if (FLAGS_use_optimistic_txn) {
|
|
730
|
+
assert(optimistic_txn_db_);
|
|
731
|
+
s = txn.Commit();
|
|
732
|
+
} else {
|
|
733
|
+
assert(txn_db_);
|
|
734
|
+
s = txn.Prepare();
|
|
735
|
+
std::shared_ptr<const Snapshot> timestamped_snapshot;
|
|
736
|
+
if (s.ok()) {
|
|
737
|
+
if (thread && FLAGS_create_timestamped_snapshot_one_in &&
|
|
738
|
+
thread->rand.OneIn(FLAGS_create_timestamped_snapshot_one_in)) {
|
|
739
|
+
uint64_t ts = db_stress_env->NowNanos();
|
|
740
|
+
s = txn.CommitAndTryCreateSnapshot(/*notifier=*/nullptr, ts,
|
|
741
|
+
×tamped_snapshot);
|
|
742
|
+
|
|
743
|
+
std::pair<Status, std::shared_ptr<const Snapshot>> res;
|
|
744
|
+
if (thread->tid == 0) {
|
|
745
|
+
uint64_t now = db_stress_env->NowNanos();
|
|
746
|
+
res = txn_db_->CreateTimestampedSnapshot(now);
|
|
747
|
+
if (res.first.ok()) {
|
|
748
|
+
assert(res.second);
|
|
749
|
+
assert(res.second->GetTimestamp() == now);
|
|
750
|
+
if (timestamped_snapshot) {
|
|
751
|
+
assert(res.second->GetTimestamp() >
|
|
752
|
+
timestamped_snapshot->GetTimestamp());
|
|
753
|
+
}
|
|
754
|
+
} else {
|
|
755
|
+
assert(!res.second);
|
|
672
756
|
}
|
|
673
|
-
} else {
|
|
674
|
-
assert(!res.second);
|
|
675
757
|
}
|
|
758
|
+
} else {
|
|
759
|
+
s = txn.Commit();
|
|
676
760
|
}
|
|
677
|
-
}
|
|
678
|
-
|
|
761
|
+
}
|
|
762
|
+
if (thread && FLAGS_create_timestamped_snapshot_one_in > 0 &&
|
|
763
|
+
thread->rand.OneInOpt(50000)) {
|
|
764
|
+
uint64_t now = db_stress_env->NowNanos();
|
|
765
|
+
constexpr uint64_t time_diff = static_cast<uint64_t>(1000) * 1000 * 1000;
|
|
766
|
+
txn_db_->ReleaseTimestampedSnapshotsOlderThan(now - time_diff);
|
|
679
767
|
}
|
|
680
768
|
}
|
|
681
|
-
if (thread && FLAGS_create_timestamped_snapshot_one_in > 0 &&
|
|
682
|
-
thread->rand.OneInOpt(50000)) {
|
|
683
|
-
uint64_t now = db_stress_env->NowNanos();
|
|
684
|
-
constexpr uint64_t time_diff = static_cast<uint64_t>(1000) * 1000 * 1000;
|
|
685
|
-
txn_db_->ReleaseTimestampedSnapshotsOlderThan(now - time_diff);
|
|
686
|
-
}
|
|
687
|
-
delete txn;
|
|
688
769
|
return s;
|
|
689
770
|
}
|
|
690
771
|
|
|
691
|
-
Status StressTest::
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
772
|
+
Status StressTest::ExecuteTransaction(
|
|
773
|
+
WriteOptions& write_opts, ThreadState* thread,
|
|
774
|
+
std::function<Status(Transaction&)>&& ops) {
|
|
775
|
+
std::unique_ptr<Transaction> txn;
|
|
776
|
+
Status s = NewTxn(write_opts, &txn);
|
|
777
|
+
std::string try_again_messages;
|
|
778
|
+
if (s.ok()) {
|
|
779
|
+
for (int tries = 1;; ++tries) {
|
|
780
|
+
s = ops(*txn);
|
|
781
|
+
if (s.ok()) {
|
|
782
|
+
s = CommitTxn(*txn, thread);
|
|
783
|
+
if (s.ok()) {
|
|
784
|
+
break;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
// Optimistic txn might return TryAgain, in which case rollback
|
|
788
|
+
// and try again.
|
|
789
|
+
if (!s.IsTryAgain() || !FLAGS_use_optimistic_txn) {
|
|
790
|
+
break;
|
|
791
|
+
}
|
|
792
|
+
// Record and report historical TryAgain messages for debugging
|
|
793
|
+
try_again_messages +=
|
|
794
|
+
std::to_string(SystemClock::Default()->NowMicros() / 1000);
|
|
795
|
+
try_again_messages += "ms ";
|
|
796
|
+
try_again_messages += s.getState();
|
|
797
|
+
try_again_messages += "\n";
|
|
798
|
+
// In theory, each Rollback after TryAgain should have an independent
|
|
799
|
+
// chance of success, so too many retries could indicate something is
|
|
800
|
+
// not working properly.
|
|
801
|
+
if (tries >= 10) {
|
|
802
|
+
s = Status::TryAgain(try_again_messages);
|
|
803
|
+
break;
|
|
804
|
+
}
|
|
805
|
+
s = txn->Rollback();
|
|
806
|
+
if (!s.ok()) {
|
|
807
|
+
break;
|
|
808
|
+
}
|
|
809
|
+
}
|
|
696
810
|
}
|
|
697
|
-
Status s = txn->Rollback();
|
|
698
|
-
delete txn;
|
|
699
811
|
return s;
|
|
700
812
|
}
|
|
701
813
|
|
|
@@ -706,6 +818,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
706
818
|
read_opts.async_io = FLAGS_async_io;
|
|
707
819
|
read_opts.adaptive_readahead = FLAGS_adaptive_readahead;
|
|
708
820
|
read_opts.readahead_size = FLAGS_readahead_size;
|
|
821
|
+
read_opts.auto_readahead_size = FLAGS_auto_readahead_size;
|
|
709
822
|
WriteOptions write_opts;
|
|
710
823
|
if (FLAGS_rate_limit_auto_wal_flush) {
|
|
711
824
|
write_opts.rate_limiter_priority = Env::IO_USER;
|
|
@@ -731,27 +844,11 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
731
844
|
|
|
732
845
|
#ifndef NDEBUG
|
|
733
846
|
if (FLAGS_read_fault_one_in) {
|
|
734
|
-
fault_fs_guard->SetThreadLocalReadErrorContext(
|
|
735
|
-
|
|
847
|
+
fault_fs_guard->SetThreadLocalReadErrorContext(
|
|
848
|
+
thread->shared->GetSeed(), FLAGS_read_fault_one_in,
|
|
849
|
+
FLAGS_inject_error_severity == 1 /* retryable */);
|
|
736
850
|
}
|
|
737
851
|
#endif // NDEBUG
|
|
738
|
-
if (FLAGS_write_fault_one_in) {
|
|
739
|
-
IOStatus error_msg;
|
|
740
|
-
if (FLAGS_injest_error_severity <= 1 || FLAGS_injest_error_severity > 2) {
|
|
741
|
-
error_msg = IOStatus::IOError("Retryable IO Error");
|
|
742
|
-
error_msg.SetRetryable(true);
|
|
743
|
-
} else if (FLAGS_injest_error_severity == 2) {
|
|
744
|
-
// Ingest the fatal error
|
|
745
|
-
error_msg = IOStatus::IOError("Fatal IO Error");
|
|
746
|
-
error_msg.SetDataLoss(true);
|
|
747
|
-
}
|
|
748
|
-
std::vector<FileType> types = {FileType::kTableFile,
|
|
749
|
-
FileType::kDescriptorFile,
|
|
750
|
-
FileType::kCurrentFile};
|
|
751
|
-
fault_fs_guard->SetRandomWriteError(
|
|
752
|
-
thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg,
|
|
753
|
-
/*inject_for_all_file_types=*/false, types);
|
|
754
|
-
}
|
|
755
852
|
thread->stats.Start();
|
|
756
853
|
for (int open_cnt = 0; open_cnt <= FLAGS_reopen; ++open_cnt) {
|
|
757
854
|
if (thread->shared->HasVerificationFailedYet() ||
|
|
@@ -875,42 +972,42 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
875
972
|
if (thread->rand.OneInOpt(FLAGS_get_live_files_one_in) &&
|
|
876
973
|
!FLAGS_write_fault_one_in) {
|
|
877
974
|
Status status = VerifyGetLiveFiles();
|
|
878
|
-
|
|
879
|
-
VerificationAbort(shared, "VerifyGetLiveFiles status not OK", status);
|
|
880
|
-
}
|
|
975
|
+
ProcessStatus(shared, "VerifyGetLiveFiles", status);
|
|
881
976
|
}
|
|
882
977
|
|
|
883
978
|
// Verify GetSortedWalFiles with a 1 in N chance.
|
|
884
979
|
if (thread->rand.OneInOpt(FLAGS_get_sorted_wal_files_one_in)) {
|
|
885
980
|
Status status = VerifyGetSortedWalFiles();
|
|
886
|
-
|
|
887
|
-
VerificationAbort(shared, "VerifyGetSortedWalFiles status not OK",
|
|
888
|
-
status);
|
|
889
|
-
}
|
|
981
|
+
ProcessStatus(shared, "VerifyGetSortedWalFiles", status);
|
|
890
982
|
}
|
|
891
983
|
|
|
892
984
|
// Verify GetCurrentWalFile with a 1 in N chance.
|
|
893
985
|
if (thread->rand.OneInOpt(FLAGS_get_current_wal_file_one_in)) {
|
|
894
986
|
Status status = VerifyGetCurrentWalFile();
|
|
895
|
-
|
|
896
|
-
VerificationAbort(shared, "VerifyGetCurrentWalFile status not OK",
|
|
897
|
-
status);
|
|
898
|
-
}
|
|
987
|
+
ProcessStatus(shared, "VerifyGetCurrentWalFile", status);
|
|
899
988
|
}
|
|
900
989
|
|
|
901
990
|
if (thread->rand.OneInOpt(FLAGS_pause_background_one_in)) {
|
|
902
991
|
Status status = TestPauseBackground(thread);
|
|
903
|
-
|
|
904
|
-
VerificationAbort(
|
|
905
|
-
shared, "Pause/ContinueBackgroundWork status not OK", status);
|
|
906
|
-
}
|
|
992
|
+
ProcessStatus(shared, "Pause/ContinueBackgroundWork", status);
|
|
907
993
|
}
|
|
908
994
|
|
|
909
995
|
if (thread->rand.OneInOpt(FLAGS_verify_checksum_one_in)) {
|
|
996
|
+
ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
|
|
997
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
998
|
+
ThreadStatus::OperationType::OP_VERIFY_DB_CHECKSUM);
|
|
910
999
|
Status status = db_->VerifyChecksum();
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
1000
|
+
ThreadStatusUtil::ResetThreadStatus();
|
|
1001
|
+
ProcessStatus(shared, "VerifyChecksum", status);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (thread->rand.OneInOpt(FLAGS_verify_file_checksums_one_in)) {
|
|
1005
|
+
ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
|
|
1006
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1007
|
+
ThreadStatus::OperationType::OP_VERIFY_FILE_CHECKSUMS);
|
|
1008
|
+
Status status = db_->VerifyFileChecksums(read_opts);
|
|
1009
|
+
ThreadStatusUtil::ResetThreadStatus();
|
|
1010
|
+
ProcessStatus(shared, "VerifyFileChecksums", status);
|
|
914
1011
|
}
|
|
915
1012
|
|
|
916
1013
|
if (thread->rand.OneInOpt(FLAGS_get_property_one_in)) {
|
|
@@ -937,26 +1034,19 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
937
1034
|
|
|
938
1035
|
if (total_size <= FLAGS_backup_max_size) {
|
|
939
1036
|
Status s = TestBackupRestore(thread, rand_column_families, rand_keys);
|
|
940
|
-
|
|
941
|
-
VerificationAbort(shared, "Backup/restore gave inconsistent state",
|
|
942
|
-
s);
|
|
943
|
-
}
|
|
1037
|
+
ProcessStatus(shared, "Backup/restore", s);
|
|
944
1038
|
}
|
|
945
1039
|
}
|
|
946
1040
|
|
|
947
1041
|
if (thread->rand.OneInOpt(FLAGS_checkpoint_one_in)) {
|
|
948
1042
|
Status s = TestCheckpoint(thread, rand_column_families, rand_keys);
|
|
949
|
-
|
|
950
|
-
VerificationAbort(shared, "Checkpoint gave inconsistent state", s);
|
|
951
|
-
}
|
|
1043
|
+
ProcessStatus(shared, "Checkpoint", s);
|
|
952
1044
|
}
|
|
953
1045
|
|
|
954
1046
|
if (thread->rand.OneInOpt(FLAGS_approximate_size_one_in)) {
|
|
955
1047
|
Status s =
|
|
956
1048
|
TestApproximateSize(thread, i, rand_column_families, rand_keys);
|
|
957
|
-
|
|
958
|
-
VerificationAbort(shared, "ApproximateSize Failed", s);
|
|
959
|
-
}
|
|
1049
|
+
ProcessStatus(shared, "ApproximateSize", s);
|
|
960
1050
|
}
|
|
961
1051
|
if (thread->rand.OneInOpt(FLAGS_acquire_snapshot_one_in)) {
|
|
962
1052
|
TestAcquireSnapshot(thread, rand_column_family, keystr, i);
|
|
@@ -964,9 +1054,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
964
1054
|
|
|
965
1055
|
/*always*/ {
|
|
966
1056
|
Status s = MaybeReleaseSnapshots(thread, i);
|
|
967
|
-
|
|
968
|
-
VerificationAbort(shared, "Snapshot gave inconsistent state", s);
|
|
969
|
-
}
|
|
1057
|
+
ProcessStatus(shared, "Snapshot", s);
|
|
970
1058
|
}
|
|
971
1059
|
|
|
972
1060
|
// Assign timestamps if necessary.
|
|
@@ -985,6 +1073,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
985
1073
|
if (prob_op >= 0 && prob_op < static_cast<int>(FLAGS_readpercent)) {
|
|
986
1074
|
assert(0 <= prob_op);
|
|
987
1075
|
// OPERATION read
|
|
1076
|
+
ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
|
|
988
1077
|
if (FLAGS_use_multi_get_entity) {
|
|
989
1078
|
constexpr uint64_t max_batch_size = 64;
|
|
990
1079
|
const uint64_t batch_size = std::min(
|
|
@@ -995,12 +1084,14 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
995
1084
|
assert(i + batch_size <= ops_per_open);
|
|
996
1085
|
|
|
997
1086
|
rand_keys = GenerateNKeys(thread, static_cast<int>(batch_size), i);
|
|
998
|
-
|
|
1087
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1088
|
+
ThreadStatus::OperationType::OP_MULTIGETENTITY);
|
|
999
1089
|
TestMultiGetEntity(thread, read_opts, rand_column_families,
|
|
1000
1090
|
rand_keys);
|
|
1001
|
-
|
|
1002
1091
|
i += batch_size - 1;
|
|
1003
1092
|
} else if (FLAGS_use_get_entity) {
|
|
1093
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1094
|
+
ThreadStatus::OperationType::OP_GETENTITY);
|
|
1004
1095
|
TestGetEntity(thread, read_opts, rand_column_families, rand_keys);
|
|
1005
1096
|
} else if (FLAGS_use_multiget) {
|
|
1006
1097
|
// Leave room for one more iteration of the loop with a single key
|
|
@@ -1012,11 +1103,16 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
1012
1103
|
// If its the last iteration, ensure that multiget_batch_size is 1
|
|
1013
1104
|
multiget_batch_size = std::max(multiget_batch_size, 1);
|
|
1014
1105
|
rand_keys = GenerateNKeys(thread, multiget_batch_size, i);
|
|
1106
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1107
|
+
ThreadStatus::OperationType::OP_MULTIGET);
|
|
1015
1108
|
TestMultiGet(thread, read_opts, rand_column_families, rand_keys);
|
|
1016
1109
|
i += multiget_batch_size - 1;
|
|
1017
1110
|
} else {
|
|
1111
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1112
|
+
ThreadStatus::OperationType::OP_GET);
|
|
1018
1113
|
TestGet(thread, read_opts, rand_column_families, rand_keys);
|
|
1019
1114
|
}
|
|
1115
|
+
ThreadStatusUtil::ResetThreadStatus();
|
|
1020
1116
|
} else if (prob_op < prefix_bound) {
|
|
1021
1117
|
assert(static_cast<int>(FLAGS_readpercent) <= prob_op);
|
|
1022
1118
|
// OPERATION prefix scan
|
|
@@ -1044,8 +1140,12 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
1044
1140
|
if (!FLAGS_skip_verifydb &&
|
|
1045
1141
|
thread->rand.OneInOpt(
|
|
1046
1142
|
FLAGS_verify_iterator_with_expected_state_one_in)) {
|
|
1143
|
+
ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
|
|
1144
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1145
|
+
ThreadStatus::OperationType::OP_DBITERATOR);
|
|
1047
1146
|
TestIterateAgainstExpected(thread, read_opts, rand_column_families,
|
|
1048
1147
|
rand_keys);
|
|
1148
|
+
ThreadStatusUtil::ResetThreadStatus();
|
|
1049
1149
|
} else {
|
|
1050
1150
|
int num_seeks = static_cast<int>(std::min(
|
|
1051
1151
|
std::max(static_cast<uint64_t>(thread->rand.Uniform(4)),
|
|
@@ -1054,7 +1154,11 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
1054
1154
|
static_cast<uint64_t>(1))));
|
|
1055
1155
|
rand_keys = GenerateNKeys(thread, num_seeks, i);
|
|
1056
1156
|
i += num_seeks - 1;
|
|
1157
|
+
ThreadStatusUtil::SetEnableTracking(FLAGS_enable_thread_tracking);
|
|
1158
|
+
ThreadStatusUtil::SetThreadOperation(
|
|
1159
|
+
ThreadStatus::OperationType::OP_DBITERATOR);
|
|
1057
1160
|
TestIterate(thread, read_opts, rand_column_families, rand_keys);
|
|
1161
|
+
ThreadStatusUtil::ResetThreadStatus();
|
|
1058
1162
|
}
|
|
1059
1163
|
} else {
|
|
1060
1164
|
assert(iterate_bound <= prob_op);
|
|
@@ -1161,7 +1265,6 @@ Status StressTest::TestIterate(ThreadState* thread,
|
|
|
1161
1265
|
} else if (options_.prefix_extractor.get() == nullptr) {
|
|
1162
1266
|
expect_total_order = true;
|
|
1163
1267
|
}
|
|
1164
|
-
|
|
1165
1268
|
std::string upper_bound_str;
|
|
1166
1269
|
Slice upper_bound;
|
|
1167
1270
|
if (thread->rand.OneIn(16)) {
|
|
@@ -1172,6 +1275,7 @@ Status StressTest::TestIterate(ThreadState* thread,
|
|
|
1172
1275
|
upper_bound = Slice(upper_bound_str);
|
|
1173
1276
|
ro.iterate_upper_bound = &upper_bound;
|
|
1174
1277
|
}
|
|
1278
|
+
|
|
1175
1279
|
std::string lower_bound_str;
|
|
1176
1280
|
Slice lower_bound;
|
|
1177
1281
|
if (thread->rand.OneIn(16)) {
|
|
@@ -1266,6 +1370,14 @@ Status StressTest::TestIterate(ThreadState* thread,
|
|
|
1266
1370
|
|
|
1267
1371
|
const bool support_seek_first_or_last = expect_total_order;
|
|
1268
1372
|
|
|
1373
|
+
// Write-prepared and Write-unprepared do not support Refresh() yet.
|
|
1374
|
+
if (!(FLAGS_use_txn && FLAGS_txn_write_policy != 0 /* write committed */) &&
|
|
1375
|
+
thread->rand.OneIn(4)) {
|
|
1376
|
+
Status s = iter->Refresh(snapshot_guard.snapshot());
|
|
1377
|
+
assert(s.ok());
|
|
1378
|
+
op_logs += "Refresh ";
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1269
1381
|
LastIterateOp last_op;
|
|
1270
1382
|
if (support_seek_first_or_last && thread->rand.OneIn(100)) {
|
|
1271
1383
|
iter->SeekToFirst();
|
|
@@ -1481,7 +1593,8 @@ void StressTest::VerifyIterator(ThreadState* thread,
|
|
|
1481
1593
|
fprintf(stderr, "iterator has value %s\n",
|
|
1482
1594
|
iter->key().ToString(true).c_str());
|
|
1483
1595
|
} else {
|
|
1484
|
-
fprintf(stderr, "iterator is not valid\n"
|
|
1596
|
+
fprintf(stderr, "iterator is not valid with status: %s\n",
|
|
1597
|
+
iter->status().ToString().c_str());
|
|
1485
1598
|
}
|
|
1486
1599
|
*diverged = true;
|
|
1487
1600
|
}
|
|
@@ -1769,7 +1882,7 @@ Status StressTest::TestBackupRestore(
|
|
|
1769
1882
|
from = "Destroy restore dir";
|
|
1770
1883
|
}
|
|
1771
1884
|
}
|
|
1772
|
-
if (!s.ok()) {
|
|
1885
|
+
if (!s.ok() && (!s.IsIOError() || !std::strstr(s.getState(), "injected"))) {
|
|
1773
1886
|
fprintf(stderr, "Failure in %s with: %s\n", from.c_str(),
|
|
1774
1887
|
s.ToString().c_str());
|
|
1775
1888
|
}
|
|
@@ -1845,17 +1958,19 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
|
1845
1958
|
if (s.ok()) {
|
|
1846
1959
|
s = checkpoint->CreateCheckpoint(checkpoint_dir);
|
|
1847
1960
|
if (!s.ok()) {
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1961
|
+
if (!s.IsIOError() || !std::strstr(s.getState(), "injected")) {
|
|
1962
|
+
fprintf(stderr, "Fail to create checkpoint to %s\n",
|
|
1963
|
+
checkpoint_dir.c_str());
|
|
1964
|
+
std::vector<std::string> files;
|
|
1965
|
+
Status my_s = db_stress_env->GetChildren(checkpoint_dir, &files);
|
|
1966
|
+
if (my_s.ok()) {
|
|
1967
|
+
for (const auto& f : files) {
|
|
1968
|
+
fprintf(stderr, " %s\n", f.c_str());
|
|
1969
|
+
}
|
|
1970
|
+
} else {
|
|
1971
|
+
fprintf(stderr, "Fail to get files under the directory to %s\n",
|
|
1972
|
+
my_s.ToString().c_str());
|
|
1855
1973
|
}
|
|
1856
|
-
} else {
|
|
1857
|
-
fprintf(stderr, "Fail to get files under the directory to %s\n",
|
|
1858
|
-
my_s.ToString().c_str());
|
|
1859
1974
|
}
|
|
1860
1975
|
}
|
|
1861
1976
|
}
|
|
@@ -1931,8 +2046,10 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
|
1931
2046
|
}
|
|
1932
2047
|
|
|
1933
2048
|
if (!s.ok()) {
|
|
1934
|
-
|
|
1935
|
-
|
|
2049
|
+
if (!s.IsIOError() || !std::strstr(s.getState(), "injected")) {
|
|
2050
|
+
fprintf(stderr, "A checkpoint operation failed with: %s\n",
|
|
2051
|
+
s.ToString().c_str());
|
|
2052
|
+
}
|
|
1936
2053
|
} else {
|
|
1937
2054
|
DestroyDB(checkpoint_dir, tmp_opts);
|
|
1938
2055
|
}
|
|
@@ -2311,24 +2428,39 @@ void StressTest::PrintEnv() const {
|
|
|
2311
2428
|
fprintf(stdout, "Format version : %d\n", FLAGS_format_version);
|
|
2312
2429
|
fprintf(stdout, "TransactionDB : %s\n",
|
|
2313
2430
|
FLAGS_use_txn ? "true" : "false");
|
|
2314
|
-
|
|
2315
2431
|
if (FLAGS_use_txn) {
|
|
2316
|
-
fprintf(stdout, "
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2432
|
+
fprintf(stdout, "TransactionDB Type : %s\n",
|
|
2433
|
+
FLAGS_use_optimistic_txn ? "Optimistic" : "Pessimistic");
|
|
2434
|
+
if (FLAGS_use_optimistic_txn) {
|
|
2435
|
+
fprintf(stdout, "OCC Validation Type : %d\n",
|
|
2436
|
+
static_cast<int>(FLAGS_occ_validation_policy));
|
|
2437
|
+
if (static_cast<uint64_t>(OccValidationPolicy::kValidateParallel) ==
|
|
2438
|
+
FLAGS_occ_validation_policy) {
|
|
2439
|
+
fprintf(stdout, "Share Lock Buckets : %s\n",
|
|
2440
|
+
FLAGS_share_occ_lock_buckets ? "true" : "false");
|
|
2441
|
+
if (FLAGS_share_occ_lock_buckets) {
|
|
2442
|
+
fprintf(stdout, "Lock Bucket Count : %d\n",
|
|
2443
|
+
static_cast<int>(FLAGS_occ_lock_bucket_count));
|
|
2444
|
+
}
|
|
2445
|
+
}
|
|
2446
|
+
} else {
|
|
2447
|
+
fprintf(stdout, "Two write queues: : %s\n",
|
|
2448
|
+
FLAGS_two_write_queues ? "true" : "false");
|
|
2449
|
+
fprintf(stdout, "Write policy : %d\n",
|
|
2450
|
+
static_cast<int>(FLAGS_txn_write_policy));
|
|
2451
|
+
if (static_cast<uint64_t>(TxnDBWritePolicy::WRITE_PREPARED) ==
|
|
2452
|
+
FLAGS_txn_write_policy ||
|
|
2453
|
+
static_cast<uint64_t>(TxnDBWritePolicy::WRITE_UNPREPARED) ==
|
|
2454
|
+
FLAGS_txn_write_policy) {
|
|
2455
|
+
fprintf(stdout, "Snapshot cache bits : %d\n",
|
|
2456
|
+
static_cast<int>(FLAGS_wp_snapshot_cache_bits));
|
|
2457
|
+
fprintf(stdout, "Commit cache bits : %d\n",
|
|
2458
|
+
static_cast<int>(FLAGS_wp_commit_cache_bits));
|
|
2459
|
+
}
|
|
2460
|
+
fprintf(stdout, "last cwb for recovery : %s\n",
|
|
2461
|
+
FLAGS_use_only_the_last_commit_time_batch_for_recovery ? "true"
|
|
2462
|
+
: "false");
|
|
2463
|
+
}
|
|
2332
2464
|
}
|
|
2333
2465
|
|
|
2334
2466
|
fprintf(stdout, "Stacked BlobDB : %s\n",
|
|
@@ -2396,6 +2528,8 @@ void StressTest::PrintEnv() const {
|
|
|
2396
2528
|
FLAGS_use_get_entity ? "true" : "false");
|
|
2397
2529
|
fprintf(stdout, "Use MultiGetEntity : %s\n",
|
|
2398
2530
|
FLAGS_use_multi_get_entity ? "true" : "false");
|
|
2531
|
+
fprintf(stdout, "Verification only : %s\n",
|
|
2532
|
+
FLAGS_verification_only ? "true" : "false");
|
|
2399
2533
|
|
|
2400
2534
|
const char* memtablerep = "";
|
|
2401
2535
|
switch (FLAGS_rep_factory) {
|
|
@@ -2474,9 +2608,10 @@ void StressTest::PrintEnv() const {
|
|
|
2474
2608
|
fprintf(stdout, "------------------------------------------------\n");
|
|
2475
2609
|
}
|
|
2476
2610
|
|
|
2477
|
-
void StressTest::Open(SharedState* shared) {
|
|
2611
|
+
void StressTest::Open(SharedState* shared, bool reopen) {
|
|
2478
2612
|
assert(db_ == nullptr);
|
|
2479
2613
|
assert(txn_db_ == nullptr);
|
|
2614
|
+
assert(optimistic_txn_db_ == nullptr);
|
|
2480
2615
|
if (!InitializeOptionsFromFile(options_)) {
|
|
2481
2616
|
InitializeOptionsFromFlags(cache_, filter_policy_, options_);
|
|
2482
2617
|
}
|
|
@@ -2591,15 +2726,20 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2591
2726
|
FLAGS_db, options_.db_paths, cf_descriptors, db_stress_listener_env));
|
|
2592
2727
|
RegisterAdditionalListeners();
|
|
2593
2728
|
|
|
2729
|
+
// If this is for DB reopen, write error injection may have been enabled.
|
|
2730
|
+
// Disable it here in case there is no open fault injection.
|
|
2731
|
+
if (fault_fs_guard) {
|
|
2732
|
+
fault_fs_guard->DisableWriteErrorInjection();
|
|
2733
|
+
}
|
|
2594
2734
|
if (!FLAGS_use_txn) {
|
|
2595
|
-
// Determine whether we need to
|
|
2735
|
+
// Determine whether we need to inject file metadata write failures
|
|
2596
2736
|
// during DB reopen. If it does, enable it.
|
|
2597
|
-
// Only
|
|
2737
|
+
// Only inject metadata error if it is reopening, as initial open
|
|
2598
2738
|
// failure doesn't need to be handled.
|
|
2599
2739
|
// TODO cover transaction DB is not covered in this fault test too.
|
|
2600
|
-
bool
|
|
2601
|
-
bool
|
|
2602
|
-
bool
|
|
2740
|
+
bool inject_meta_error = false;
|
|
2741
|
+
bool inject_write_error = false;
|
|
2742
|
+
bool inject_read_error = false;
|
|
2603
2743
|
if ((FLAGS_open_metadata_write_fault_one_in ||
|
|
2604
2744
|
FLAGS_open_write_fault_one_in || FLAGS_open_read_fault_one_in) &&
|
|
2605
2745
|
fault_fs_guard
|
|
@@ -2610,25 +2750,25 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2610
2750
|
// WAL is durable. Buffering unsynced writes will cause false
|
|
2611
2751
|
// positive in crash tests. Before we figure out a way to
|
|
2612
2752
|
// solve it, skip WAL from failure injection.
|
|
2613
|
-
fault_fs_guard->
|
|
2753
|
+
fault_fs_guard->SetDirectWritableTypes({kWalFile});
|
|
2614
2754
|
}
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
if (
|
|
2755
|
+
inject_meta_error = FLAGS_open_metadata_write_fault_one_in;
|
|
2756
|
+
inject_write_error = FLAGS_open_write_fault_one_in;
|
|
2757
|
+
inject_read_error = FLAGS_open_read_fault_one_in;
|
|
2758
|
+
if (inject_meta_error) {
|
|
2619
2759
|
fault_fs_guard->EnableMetadataWriteErrorInjection();
|
|
2620
2760
|
fault_fs_guard->SetRandomMetadataWriteError(
|
|
2621
2761
|
FLAGS_open_metadata_write_fault_one_in);
|
|
2622
2762
|
}
|
|
2623
|
-
if (
|
|
2763
|
+
if (inject_write_error) {
|
|
2624
2764
|
fault_fs_guard->SetFilesystemDirectWritable(false);
|
|
2625
2765
|
fault_fs_guard->EnableWriteErrorInjection();
|
|
2626
2766
|
fault_fs_guard->SetRandomWriteError(
|
|
2627
2767
|
static_cast<uint32_t>(FLAGS_seed), FLAGS_open_write_fault_one_in,
|
|
2628
|
-
IOStatus::IOError("Injected Open Error"),
|
|
2768
|
+
IOStatus::IOError("Injected Open Write Error"),
|
|
2629
2769
|
/*inject_for_all_file_types=*/true, /*types=*/{});
|
|
2630
2770
|
}
|
|
2631
|
-
if (
|
|
2771
|
+
if (inject_read_error) {
|
|
2632
2772
|
fault_fs_guard->SetRandomReadError(FLAGS_open_read_fault_one_in);
|
|
2633
2773
|
}
|
|
2634
2774
|
}
|
|
@@ -2649,8 +2789,7 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2649
2789
|
if (s.ok()) {
|
|
2650
2790
|
db_ = blob_db;
|
|
2651
2791
|
}
|
|
2652
|
-
} else
|
|
2653
|
-
{
|
|
2792
|
+
} else {
|
|
2654
2793
|
if (db_preload_finished_.load() && FLAGS_read_only) {
|
|
2655
2794
|
s = DB::OpenForReadOnly(DBOptions(options_), FLAGS_db,
|
|
2656
2795
|
cf_descriptors, &column_families_, &db_);
|
|
@@ -2660,18 +2799,19 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2660
2799
|
}
|
|
2661
2800
|
}
|
|
2662
2801
|
|
|
2663
|
-
if (
|
|
2802
|
+
if (inject_meta_error || inject_write_error || inject_read_error) {
|
|
2803
|
+
// TODO: re-enable write error injection after reopen. Same for
|
|
2804
|
+
// sync fault injection.
|
|
2664
2805
|
fault_fs_guard->SetFilesystemDirectWritable(true);
|
|
2665
2806
|
fault_fs_guard->DisableMetadataWriteErrorInjection();
|
|
2666
2807
|
fault_fs_guard->DisableWriteErrorInjection();
|
|
2667
|
-
fault_fs_guard->
|
|
2808
|
+
fault_fs_guard->SetDirectWritableTypes({});
|
|
2668
2809
|
fault_fs_guard->SetRandomReadError(0);
|
|
2669
2810
|
if (s.ok()) {
|
|
2670
|
-
//
|
|
2811
|
+
// Injected errors might happen in background compactions. We
|
|
2671
2812
|
// wait for all compactions to finish to make sure DB is in
|
|
2672
2813
|
// clean state before executing queries.
|
|
2673
|
-
s =
|
|
2674
|
-
->WaitForCompact();
|
|
2814
|
+
s = db_->GetRootDB()->WaitForCompact(WaitForCompactOptions());
|
|
2675
2815
|
if (!s.ok()) {
|
|
2676
2816
|
for (auto cf : column_families_) {
|
|
2677
2817
|
delete cf;
|
|
@@ -2685,19 +2825,24 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2685
2825
|
// After failure to opening a DB due to IO error, retry should
|
|
2686
2826
|
// successfully open the DB with correct data if no IO error shows
|
|
2687
2827
|
// up.
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2828
|
+
inject_meta_error = false;
|
|
2829
|
+
inject_write_error = false;
|
|
2830
|
+
inject_read_error = false;
|
|
2831
|
+
|
|
2832
|
+
// TODO: Unsynced data loss during DB reopen is not supported yet in
|
|
2833
|
+
// stress test. Will need to recreate expected state if we decide
|
|
2834
|
+
// to support unsynced data loss during DB reopen.
|
|
2835
|
+
if (!reopen) {
|
|
2836
|
+
Random rand(static_cast<uint32_t>(FLAGS_seed));
|
|
2837
|
+
if (rand.OneIn(2)) {
|
|
2838
|
+
fault_fs_guard->DeleteFilesCreatedAfterLastDirSync(IOOptions(),
|
|
2839
|
+
nullptr);
|
|
2840
|
+
}
|
|
2841
|
+
if (rand.OneIn(3)) {
|
|
2842
|
+
fault_fs_guard->DropUnsyncedFileData();
|
|
2843
|
+
} else if (rand.OneIn(2)) {
|
|
2844
|
+
fault_fs_guard->DropRandomUnsyncedFileData(&rand);
|
|
2845
|
+
}
|
|
2701
2846
|
}
|
|
2702
2847
|
continue;
|
|
2703
2848
|
}
|
|
@@ -2705,36 +2850,65 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2705
2850
|
break;
|
|
2706
2851
|
}
|
|
2707
2852
|
} else {
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2853
|
+
if (FLAGS_use_optimistic_txn) {
|
|
2854
|
+
OptimisticTransactionDBOptions optimistic_txn_db_options;
|
|
2855
|
+
optimistic_txn_db_options.validate_policy =
|
|
2856
|
+
static_cast<OccValidationPolicy>(FLAGS_occ_validation_policy);
|
|
2857
|
+
|
|
2858
|
+
if (FLAGS_share_occ_lock_buckets) {
|
|
2859
|
+
optimistic_txn_db_options.shared_lock_buckets =
|
|
2860
|
+
MakeSharedOccLockBuckets(FLAGS_occ_lock_bucket_count);
|
|
2861
|
+
} else {
|
|
2862
|
+
optimistic_txn_db_options.occ_lock_buckets =
|
|
2863
|
+
FLAGS_occ_lock_bucket_count;
|
|
2864
|
+
optimistic_txn_db_options.shared_lock_buckets = nullptr;
|
|
2865
|
+
}
|
|
2866
|
+
s = OptimisticTransactionDB::Open(
|
|
2867
|
+
options_, optimistic_txn_db_options, FLAGS_db, cf_descriptors,
|
|
2868
|
+
&column_families_, &optimistic_txn_db_);
|
|
2869
|
+
if (!s.ok()) {
|
|
2870
|
+
fprintf(stderr, "Error in opening the OptimisticTransactionDB [%s]\n",
|
|
2871
|
+
s.ToString().c_str());
|
|
2872
|
+
fflush(stderr);
|
|
2873
|
+
}
|
|
2874
|
+
assert(s.ok());
|
|
2875
|
+
{
|
|
2876
|
+
db_ = optimistic_txn_db_;
|
|
2877
|
+
db_aptr_.store(optimistic_txn_db_, std::memory_order_release);
|
|
2878
|
+
}
|
|
2717
2879
|
} else {
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2880
|
+
TransactionDBOptions txn_db_options;
|
|
2881
|
+
assert(FLAGS_txn_write_policy <= TxnDBWritePolicy::WRITE_UNPREPARED);
|
|
2882
|
+
txn_db_options.write_policy =
|
|
2883
|
+
static_cast<TxnDBWritePolicy>(FLAGS_txn_write_policy);
|
|
2884
|
+
if (FLAGS_unordered_write) {
|
|
2885
|
+
assert(txn_db_options.write_policy ==
|
|
2886
|
+
TxnDBWritePolicy::WRITE_PREPARED);
|
|
2887
|
+
options_.unordered_write = true;
|
|
2888
|
+
options_.two_write_queues = true;
|
|
2889
|
+
txn_db_options.skip_concurrency_control = true;
|
|
2890
|
+
} else {
|
|
2891
|
+
options_.two_write_queues = FLAGS_two_write_queues;
|
|
2892
|
+
}
|
|
2893
|
+
txn_db_options.wp_snapshot_cache_bits =
|
|
2894
|
+
static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
|
|
2895
|
+
txn_db_options.wp_commit_cache_bits =
|
|
2896
|
+
static_cast<size_t>(FLAGS_wp_commit_cache_bits);
|
|
2897
|
+
PrepareTxnDbOptions(shared, txn_db_options);
|
|
2898
|
+
s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
|
|
2899
|
+
cf_descriptors, &column_families_, &txn_db_);
|
|
2900
|
+
if (!s.ok()) {
|
|
2901
|
+
fprintf(stderr, "Error in opening the TransactionDB [%s]\n",
|
|
2902
|
+
s.ToString().c_str());
|
|
2903
|
+
fflush(stderr);
|
|
2904
|
+
}
|
|
2905
|
+
assert(s.ok());
|
|
2733
2906
|
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2907
|
+
// Do not swap the order of the following.
|
|
2908
|
+
{
|
|
2909
|
+
db_ = txn_db_;
|
|
2910
|
+
db_aptr_.store(txn_db_, std::memory_order_release);
|
|
2911
|
+
}
|
|
2738
2912
|
}
|
|
2739
2913
|
}
|
|
2740
2914
|
if (!s.ok()) {
|
|
@@ -2812,16 +2986,18 @@ void StressTest::Reopen(ThreadState* thread) {
|
|
|
2812
2986
|
}
|
|
2813
2987
|
assert(s.ok());
|
|
2814
2988
|
}
|
|
2815
|
-
assert(txn_db_ == nullptr
|
|
2989
|
+
assert((txn_db_ == nullptr && optimistic_txn_db_ == nullptr) ||
|
|
2990
|
+
(db_ == txn_db_ || db_ == optimistic_txn_db_));
|
|
2816
2991
|
delete db_;
|
|
2817
2992
|
db_ = nullptr;
|
|
2818
2993
|
txn_db_ = nullptr;
|
|
2994
|
+
optimistic_txn_db_ = nullptr;
|
|
2819
2995
|
|
|
2820
2996
|
num_times_reopened_++;
|
|
2821
2997
|
auto now = clock_->NowMicros();
|
|
2822
2998
|
fprintf(stdout, "%s Reopening database for the %dth time\n",
|
|
2823
2999
|
clock_->TimeToString(now / 1000000).c_str(), num_times_reopened_);
|
|
2824
|
-
Open(thread->shared);
|
|
3000
|
+
Open(thread->shared, /*reopen=*/true);
|
|
2825
3001
|
|
|
2826
3002
|
if ((FLAGS_sync_fault_injection || FLAGS_disable_wal ||
|
|
2827
3003
|
FLAGS_manual_wal_flush_one_in > 0) &&
|
|
@@ -3031,6 +3207,10 @@ void InitializeOptionsFromFlags(
|
|
|
3031
3207
|
FLAGS_max_write_buffer_size_to_maintain;
|
|
3032
3208
|
options.memtable_prefix_bloom_size_ratio =
|
|
3033
3209
|
FLAGS_memtable_prefix_bloom_size_ratio;
|
|
3210
|
+
if (FLAGS_use_write_buffer_manager) {
|
|
3211
|
+
options.write_buffer_manager.reset(
|
|
3212
|
+
new WriteBufferManager(FLAGS_db_write_buffer_size, block_cache));
|
|
3213
|
+
}
|
|
3034
3214
|
options.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
|
|
3035
3215
|
options.disable_auto_compactions = FLAGS_disable_auto_compactions;
|
|
3036
3216
|
options.max_background_compactions = FLAGS_max_background_compactions;
|
|
@@ -3087,6 +3267,9 @@ void InitializeOptionsFromFlags(
|
|
|
3087
3267
|
"cannot be used because ZSTD 1.4.5+ is not linked with the binary."
|
|
3088
3268
|
" zstd dictionary trainer will be used.\n");
|
|
3089
3269
|
}
|
|
3270
|
+
if (FLAGS_compression_checksum) {
|
|
3271
|
+
options.compression_opts.checksum = true;
|
|
3272
|
+
}
|
|
3090
3273
|
options.max_manifest_file_size = FLAGS_max_manifest_file_size;
|
|
3091
3274
|
options.inplace_update_support = FLAGS_in_place_update;
|
|
3092
3275
|
options.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
|
|
@@ -3191,7 +3374,11 @@ void InitializeOptionsFromFlags(
|
|
|
3191
3374
|
if (FLAGS_use_full_merge_v1) {
|
|
3192
3375
|
options.merge_operator = MergeOperators::CreateDeprecatedPutOperator();
|
|
3193
3376
|
} else {
|
|
3194
|
-
|
|
3377
|
+
if (FLAGS_use_put_entity_one_in > 0) {
|
|
3378
|
+
options.merge_operator = std::make_shared<DBStressWideMergeOperator>();
|
|
3379
|
+
} else {
|
|
3380
|
+
options.merge_operator = MergeOperators::CreatePutOperator();
|
|
3381
|
+
}
|
|
3195
3382
|
}
|
|
3196
3383
|
|
|
3197
3384
|
if (FLAGS_enable_compaction_filter) {
|
|
@@ -3210,6 +3397,11 @@ void InitializeOptionsFromFlags(
|
|
|
3210
3397
|
options.allow_data_in_errors = FLAGS_allow_data_in_errors;
|
|
3211
3398
|
|
|
3212
3399
|
options.enable_thread_tracking = FLAGS_enable_thread_tracking;
|
|
3400
|
+
|
|
3401
|
+
options.memtable_max_range_deletions = FLAGS_memtable_max_range_deletions;
|
|
3402
|
+
|
|
3403
|
+
options.bottommost_file_compaction_delay =
|
|
3404
|
+
FLAGS_bottommost_file_compaction_delay;
|
|
3213
3405
|
}
|
|
3214
3406
|
|
|
3215
3407
|
void InitializeOptionsGeneral(
|