@nxtedition/rocksdb 5.2.21 → 5.2.26
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 +216 -252
- package/binding.gyp +78 -72
- package/deps/rocksdb/build_version.cc +70 -4
- package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
- package/deps/rocksdb/rocksdb/Makefile +459 -469
- package/deps/rocksdb/rocksdb/README.md +4 -4
- package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
- package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
- package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
- package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
- package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
- package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
- package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
- package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
- package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
- package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
- package/deps/rocksdb/rocksdb/db/builder.h +16 -37
- package/deps/rocksdb/rocksdb/db/c.cc +413 -208
- package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
- package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
- package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
- package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
- package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
- package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
- package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
- package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
- package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
- package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
- package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
- package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
- package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
- package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
- package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
- package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
- package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
- package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
- package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
- package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
- package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
- package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
- package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
- package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
- package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
- package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
- package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
- package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
- package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
- package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
- package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
- package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
- package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
- package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
- package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
- package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
- package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
- package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
- package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
- package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
- package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
- package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
- package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
- package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
- package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
- package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
- package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
- package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
- package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
- package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
- package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
- package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
- package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
- package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
- package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
- package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
- package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
- package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
- package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
- package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
- package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
- package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
- package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
- package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
- package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
- package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
- package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
- package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
- package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
- package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
- package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
- package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
- package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
- package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
- package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
- package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
- package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
- package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
- package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
- package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
- package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
- package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
- package/deps/rocksdb/rocksdb/env/env.cc +632 -42
- package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
- package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
- package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
- package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
- package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
- package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
- package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
- package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
- package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
- package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
- package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
- package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
- package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
- package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
- package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
- package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
- package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
- package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
- package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
- package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
- package/deps/rocksdb/rocksdb/file/filename.h +13 -8
- package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
- package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
- package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
- package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
- package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
- package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
- package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
- package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
- package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
- package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
- package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
- package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
- package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
- package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
- package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
- package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
- package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
- package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
- package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
- package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
- package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
- package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
- package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
- package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
- package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
- package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
- package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
- package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
- package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
- package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
- package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
- package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
- package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
- package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
- package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
- package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
- package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
- package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
- package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
- package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
- package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
- package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
- package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
- package/deps/rocksdb/rocksdb/options/options.cc +49 -17
- package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
- package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
- package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
- package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
- package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
- package/deps/rocksdb/rocksdb/port/lang.h +52 -0
- package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
- package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
- package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
- package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
- package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
- package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
- package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
- package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
- package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
- package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
- package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
- package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
- package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
- package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
- package/deps/rocksdb/rocksdb/python.mk +9 -0
- package/deps/rocksdb/rocksdb/src.mk +82 -34
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
- package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
- package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
- package/deps/rocksdb/rocksdb/table/format.cc +258 -104
- package/deps/rocksdb/rocksdb/table/format.h +120 -109
- package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
- package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
- package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
- package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
- package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
- package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
- package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
- package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
- package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
- package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
- package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
- package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
- package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
- package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
- package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
- package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
- package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
- package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
- package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
- package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
- package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
- package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
- package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
- package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
- package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
- package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
- package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
- package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
- package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
- package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
- package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
- package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
- package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
- package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
- package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
- package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
- package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
- package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
- package/deps/rocksdb/rocksdb/util/channel.h +2 -0
- package/deps/rocksdb/rocksdb/util/coding.h +1 -33
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
- package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
- package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
- package/deps/rocksdb/rocksdb/util/compression.h +212 -7
- package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
- package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
- package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
- package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
- package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
- package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
- package/deps/rocksdb/rocksdb/util/defer.h +30 -1
- package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
- package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
- package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
- package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
- package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
- package/deps/rocksdb/rocksdb/util/hash.h +31 -1
- package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
- package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
- package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
- package/deps/rocksdb/rocksdb/util/heap.h +6 -1
- package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
- package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
- package/deps/rocksdb/rocksdb/util/math.h +74 -7
- package/deps/rocksdb/rocksdb/util/math128.h +13 -1
- package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
- package/deps/rocksdb/rocksdb/util/random.cc +9 -0
- package/deps/rocksdb/rocksdb/util/random.h +6 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
- package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
- package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
- package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
- package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
- package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
- package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
- package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
- package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
- package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
- package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
- package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
- package/deps/rocksdb/rocksdb/util/status.cc +32 -29
- package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
- package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
- package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
- package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
- package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
- package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
- package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
- package/deps/rocksdb/rocksdb/util/timer.h +55 -46
- package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
- package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
- package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
- package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
- package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
- package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
- package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
- package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
- package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
- package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
- package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
- package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
- package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
- package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
- package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
- package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
- package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
- package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
- package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
- package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
- package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
- package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
- package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
- package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
- package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
- package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
- package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
- package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
- package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
- package/deps/rocksdb/rocksdb.gyp +425 -446
- package/package.json +8 -8
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x86/node.napi.node +0 -0
- package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
- package/deps/rocksdb/rocksdb/hdfs/README +0 -23
- package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
- package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
- package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
- package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
- package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
- package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
- package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
- package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
- package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
- package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
- package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
- package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
- package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
- package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
- package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
- package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
- package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
- package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
- package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
- package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
- package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
|
@@ -14,31 +14,61 @@
|
|
|
14
14
|
#include "db_stress_tool/db_stress_driver.h"
|
|
15
15
|
#include "db_stress_tool/db_stress_table_properties_collector.h"
|
|
16
16
|
#include "rocksdb/convenience.h"
|
|
17
|
+
#include "rocksdb/filter_policy.h"
|
|
18
|
+
#include "rocksdb/secondary_cache.h"
|
|
17
19
|
#include "rocksdb/sst_file_manager.h"
|
|
18
20
|
#include "rocksdb/types.h"
|
|
21
|
+
#include "rocksdb/utilities/object_registry.h"
|
|
22
|
+
#include "test_util/testutil.h"
|
|
19
23
|
#include "util/cast_util.h"
|
|
24
|
+
#include "utilities/backup/backup_engine_impl.h"
|
|
20
25
|
#include "utilities/fault_injection_fs.h"
|
|
26
|
+
#include "utilities/fault_injection_secondary_cache.h"
|
|
21
27
|
|
|
22
28
|
namespace ROCKSDB_NAMESPACE {
|
|
29
|
+
|
|
30
|
+
namespace {
|
|
31
|
+
|
|
32
|
+
std::shared_ptr<const FilterPolicy> CreateFilterPolicy() {
|
|
33
|
+
if (FLAGS_bloom_bits < 0) {
|
|
34
|
+
return BlockBasedTableOptions().filter_policy;
|
|
35
|
+
}
|
|
36
|
+
const FilterPolicy* new_policy;
|
|
37
|
+
if (FLAGS_use_block_based_filter) {
|
|
38
|
+
if (FLAGS_ribbon_starting_level < 999) {
|
|
39
|
+
fprintf(
|
|
40
|
+
stderr,
|
|
41
|
+
"Cannot combine use_block_based_filter and ribbon_starting_level\n");
|
|
42
|
+
exit(1);
|
|
43
|
+
} else {
|
|
44
|
+
new_policy = NewBloomFilterPolicy(FLAGS_bloom_bits, true);
|
|
45
|
+
}
|
|
46
|
+
} else if (FLAGS_ribbon_starting_level >= 999) {
|
|
47
|
+
// Use Bloom API
|
|
48
|
+
new_policy = NewBloomFilterPolicy(FLAGS_bloom_bits, false);
|
|
49
|
+
} else {
|
|
50
|
+
new_policy = NewRibbonFilterPolicy(
|
|
51
|
+
FLAGS_bloom_bits, /* bloom_before_level */ FLAGS_ribbon_starting_level);
|
|
52
|
+
}
|
|
53
|
+
return std::shared_ptr<const FilterPolicy>(new_policy);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
} // namespace
|
|
57
|
+
|
|
23
58
|
StressTest::StressTest()
|
|
24
|
-
: cache_(NewCache(FLAGS_cache_size)),
|
|
59
|
+
: cache_(NewCache(FLAGS_cache_size, FLAGS_cache_numshardbits)),
|
|
25
60
|
compressed_cache_(NewLRUCache(FLAGS_compressed_cache_size)),
|
|
26
|
-
filter_policy_(
|
|
27
|
-
FLAGS_bloom_bits >= 0
|
|
28
|
-
? FLAGS_use_ribbon_filter
|
|
29
|
-
? NewExperimentalRibbonFilterPolicy(FLAGS_bloom_bits)
|
|
30
|
-
: FLAGS_use_block_based_filter
|
|
31
|
-
? NewBloomFilterPolicy(FLAGS_bloom_bits, true)
|
|
32
|
-
: NewBloomFilterPolicy(FLAGS_bloom_bits, false)
|
|
33
|
-
: nullptr),
|
|
61
|
+
filter_policy_(CreateFilterPolicy()),
|
|
34
62
|
db_(nullptr),
|
|
35
63
|
#ifndef ROCKSDB_LITE
|
|
36
64
|
txn_db_(nullptr),
|
|
37
65
|
#endif
|
|
66
|
+
clock_(db_stress_env->GetSystemClock().get()),
|
|
38
67
|
new_column_family_name_(1),
|
|
39
68
|
num_times_reopened_(0),
|
|
40
69
|
db_preload_finished_(false),
|
|
41
|
-
cmp_db_(nullptr)
|
|
70
|
+
cmp_db_(nullptr),
|
|
71
|
+
is_db_stopped_(false) {
|
|
42
72
|
if (FLAGS_destroy_db_initially) {
|
|
43
73
|
std::vector<std::string> files;
|
|
44
74
|
db_stress_env->GetChildren(FLAGS_db, &files);
|
|
@@ -92,7 +122,9 @@ StressTest::~StressTest() {
|
|
|
92
122
|
delete cmp_db_;
|
|
93
123
|
}
|
|
94
124
|
|
|
95
|
-
std::shared_ptr<Cache> StressTest::NewCache(size_t capacity
|
|
125
|
+
std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
|
|
126
|
+
int32_t num_shard_bits) {
|
|
127
|
+
ConfigOptions config_options;
|
|
96
128
|
if (capacity <= 0) {
|
|
97
129
|
return nullptr;
|
|
98
130
|
}
|
|
@@ -104,8 +136,46 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity) {
|
|
|
104
136
|
}
|
|
105
137
|
return cache;
|
|
106
138
|
} else {
|
|
107
|
-
|
|
139
|
+
LRUCacheOptions opts;
|
|
140
|
+
opts.capacity = capacity;
|
|
141
|
+
opts.num_shard_bits = num_shard_bits;
|
|
142
|
+
#ifndef ROCKSDB_LITE
|
|
143
|
+
std::shared_ptr<SecondaryCache> secondary_cache;
|
|
144
|
+
if (!FLAGS_secondary_cache_uri.empty()) {
|
|
145
|
+
Status s = SecondaryCache::CreateFromString(
|
|
146
|
+
config_options, FLAGS_secondary_cache_uri, &secondary_cache);
|
|
147
|
+
if (secondary_cache == nullptr) {
|
|
148
|
+
fprintf(stderr,
|
|
149
|
+
"No secondary cache registered matching string: %s status=%s\n",
|
|
150
|
+
FLAGS_secondary_cache_uri.c_str(), s.ToString().c_str());
|
|
151
|
+
exit(1);
|
|
152
|
+
}
|
|
153
|
+
if (FLAGS_secondary_cache_fault_one_in > 0) {
|
|
154
|
+
secondary_cache = std::make_shared<FaultInjectionSecondaryCache>(
|
|
155
|
+
secondary_cache, static_cast<uint32_t>(FLAGS_seed),
|
|
156
|
+
FLAGS_secondary_cache_fault_one_in);
|
|
157
|
+
}
|
|
158
|
+
opts.secondary_cache = secondary_cache;
|
|
159
|
+
}
|
|
160
|
+
#endif
|
|
161
|
+
return NewLRUCache(opts);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
std::vector<std::string> StressTest::GetBlobCompressionTags() {
|
|
166
|
+
std::vector<std::string> compression_tags{"kNoCompression"};
|
|
167
|
+
|
|
168
|
+
if (Snappy_Supported()) {
|
|
169
|
+
compression_tags.emplace_back("kSnappyCompression");
|
|
170
|
+
}
|
|
171
|
+
if (LZ4_Supported()) {
|
|
172
|
+
compression_tags.emplace_back("kLZ4Compression");
|
|
108
173
|
}
|
|
174
|
+
if (ZSTD_Supported()) {
|
|
175
|
+
compression_tags.emplace_back("kZSTD");
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return compression_tags;
|
|
109
179
|
}
|
|
110
180
|
|
|
111
181
|
bool StressTest::BuildOptionsTable() {
|
|
@@ -133,8 +203,6 @@ bool StressTest::BuildOptionsTable() {
|
|
|
133
203
|
{"inplace_update_num_locks", {"100", "200", "300"}},
|
|
134
204
|
// TODO(ljin): enable test for this option
|
|
135
205
|
// {"disable_auto_compactions", {"100", "200", "300"}},
|
|
136
|
-
{"soft_rate_limit", {"0", "0.5", "0.9"}},
|
|
137
|
-
{"hard_rate_limit", {"0", "1.1", "2.0"}},
|
|
138
206
|
{"level0_file_num_compaction_trigger",
|
|
139
207
|
{
|
|
140
208
|
ToString(options_.level0_file_num_compaction_trigger),
|
|
@@ -186,6 +254,25 @@ bool StressTest::BuildOptionsTable() {
|
|
|
186
254
|
{"max_sequential_skip_in_iterations", {"4", "8", "12"}},
|
|
187
255
|
};
|
|
188
256
|
|
|
257
|
+
if (FLAGS_allow_setting_blob_options_dynamically) {
|
|
258
|
+
options_tbl.emplace("enable_blob_files",
|
|
259
|
+
std::vector<std::string>{"false", "true"});
|
|
260
|
+
options_tbl.emplace("min_blob_size",
|
|
261
|
+
std::vector<std::string>{"0", "8", "16"});
|
|
262
|
+
options_tbl.emplace("blob_file_size",
|
|
263
|
+
std::vector<std::string>{"1M", "16M", "256M", "1G"});
|
|
264
|
+
options_tbl.emplace("blob_compression_type", GetBlobCompressionTags());
|
|
265
|
+
options_tbl.emplace("enable_blob_garbage_collection",
|
|
266
|
+
std::vector<std::string>{"false", "true"});
|
|
267
|
+
options_tbl.emplace(
|
|
268
|
+
"blob_garbage_collection_age_cutoff",
|
|
269
|
+
std::vector<std::string>{"0.0", "0.25", "0.5", "0.75", "1.0"});
|
|
270
|
+
options_tbl.emplace("blob_garbage_collection_force_threshold",
|
|
271
|
+
std::vector<std::string>{"0.5", "0.75", "1.0"});
|
|
272
|
+
options_tbl.emplace("blob_compaction_readahead_size",
|
|
273
|
+
std::vector<std::string>{"0", "1M", "4M"});
|
|
274
|
+
}
|
|
275
|
+
|
|
189
276
|
options_table_ = std::move(options_tbl);
|
|
190
277
|
|
|
191
278
|
for (const auto& iter : options_table_) {
|
|
@@ -195,9 +282,9 @@ bool StressTest::BuildOptionsTable() {
|
|
|
195
282
|
}
|
|
196
283
|
|
|
197
284
|
void StressTest::InitDb() {
|
|
198
|
-
uint64_t now =
|
|
285
|
+
uint64_t now = clock_->NowMicros();
|
|
199
286
|
fprintf(stdout, "%s Initializing db_stress\n",
|
|
200
|
-
|
|
287
|
+
clock_->TimeToString(now / 1000000).c_str());
|
|
201
288
|
PrintEnv();
|
|
202
289
|
Open();
|
|
203
290
|
BuildOptionsTable();
|
|
@@ -205,25 +292,56 @@ void StressTest::InitDb() {
|
|
|
205
292
|
|
|
206
293
|
void StressTest::FinishInitDb(SharedState* shared) {
|
|
207
294
|
if (FLAGS_read_only) {
|
|
208
|
-
uint64_t now =
|
|
295
|
+
uint64_t now = clock_->NowMicros();
|
|
209
296
|
fprintf(stdout, "%s Preloading db with %" PRIu64 " KVs\n",
|
|
210
|
-
|
|
297
|
+
clock_->TimeToString(now / 1000000).c_str(), FLAGS_max_key);
|
|
211
298
|
PreloadDbAndReopenAsReadOnly(FLAGS_max_key, shared);
|
|
212
299
|
}
|
|
300
|
+
|
|
301
|
+
if (shared->HasHistory()) {
|
|
302
|
+
// The way it works right now is, if there's any history, that means the
|
|
303
|
+
// previous run mutating the DB had all its operations traced, in which case
|
|
304
|
+
// we should always be able to `Restore()` the expected values to match the
|
|
305
|
+
// `db_`'s current seqno.
|
|
306
|
+
Status s = shared->Restore(db_);
|
|
307
|
+
if (!s.ok()) {
|
|
308
|
+
fprintf(stderr, "Error restoring historical expected values: %s\n",
|
|
309
|
+
s.ToString().c_str());
|
|
310
|
+
exit(1);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
213
314
|
if (FLAGS_enable_compaction_filter) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
315
|
+
auto* compaction_filter_factory =
|
|
316
|
+
reinterpret_cast<DbStressCompactionFilterFactory*>(
|
|
317
|
+
options_.compaction_filter_factory.get());
|
|
318
|
+
assert(compaction_filter_factory);
|
|
319
|
+
// This must be called only after any potential `SharedState::Restore()` has
|
|
320
|
+
// completed in order for the `compaction_filter_factory` to operate on the
|
|
321
|
+
// correct latest values file.
|
|
322
|
+
compaction_filter_factory->SetSharedState(shared);
|
|
323
|
+
fprintf(stdout, "Compaction filter factory: %s\n",
|
|
324
|
+
compaction_filter_factory->Name());
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
void StressTest::TrackExpectedState(SharedState* shared) {
|
|
329
|
+
if ((FLAGS_sync_fault_injection || FLAGS_disable_wal) && IsStateTracked()) {
|
|
330
|
+
Status s = shared->SaveAtAndAfter(db_);
|
|
331
|
+
if (!s.ok()) {
|
|
332
|
+
fprintf(stderr, "Error enabling history tracing: %s\n",
|
|
333
|
+
s.ToString().c_str());
|
|
334
|
+
exit(1);
|
|
335
|
+
}
|
|
217
336
|
}
|
|
218
337
|
}
|
|
219
338
|
|
|
220
339
|
bool StressTest::VerifySecondaries() {
|
|
221
340
|
#ifndef ROCKSDB_LITE
|
|
222
341
|
if (FLAGS_test_secondary) {
|
|
223
|
-
uint64_t now =
|
|
224
|
-
fprintf(
|
|
225
|
-
|
|
226
|
-
db_stress_env->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
|
|
342
|
+
uint64_t now = clock_->NowMicros();
|
|
343
|
+
fprintf(stdout, "%s Start to verify secondaries against primary\n",
|
|
344
|
+
clock_->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
|
|
227
345
|
}
|
|
228
346
|
for (size_t k = 0; k != secondaries_.size(); ++k) {
|
|
229
347
|
Status s = secondaries_[k]->TryCatchUpWithPrimary();
|
|
@@ -231,6 +349,8 @@ bool StressTest::VerifySecondaries() {
|
|
|
231
349
|
fprintf(stderr, "Secondary failed to catch up with primary\n");
|
|
232
350
|
return false;
|
|
233
351
|
}
|
|
352
|
+
// This `ReadOptions` is for validation purposes. Ignore
|
|
353
|
+
// `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
|
|
234
354
|
ReadOptions ropts;
|
|
235
355
|
ropts.total_order_seek = true;
|
|
236
356
|
// Verify only the default column family since the primary may have
|
|
@@ -265,10 +385,9 @@ bool StressTest::VerifySecondaries() {
|
|
|
265
385
|
}
|
|
266
386
|
}
|
|
267
387
|
if (FLAGS_test_secondary) {
|
|
268
|
-
uint64_t now =
|
|
269
|
-
fprintf(
|
|
270
|
-
|
|
271
|
-
db_stress_env->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
|
|
388
|
+
uint64_t now = clock_->NowMicros();
|
|
389
|
+
fprintf(stdout, "%s Verification of secondaries succeeded\n",
|
|
390
|
+
clock_->TimeToString(static_cast<uint64_t>(now) / 1000000).c_str());
|
|
272
391
|
}
|
|
273
392
|
#endif // ROCKSDB_LITE
|
|
274
393
|
return true;
|
|
@@ -280,8 +399,15 @@ Status StressTest::AssertSame(DB* db, ColumnFamilyHandle* cf,
|
|
|
280
399
|
if (cf->GetName() != snap_state.cf_at_name) {
|
|
281
400
|
return s;
|
|
282
401
|
}
|
|
402
|
+
// This `ReadOptions` is for validation purposes. Ignore
|
|
403
|
+
// `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
|
|
283
404
|
ReadOptions ropt;
|
|
284
405
|
ropt.snapshot = snap_state.snapshot;
|
|
406
|
+
Slice ts;
|
|
407
|
+
if (!snap_state.timestamp.empty()) {
|
|
408
|
+
ts = snap_state.timestamp;
|
|
409
|
+
ropt.timestamp = &ts;
|
|
410
|
+
}
|
|
285
411
|
PinnableSlice exp_v(&snap_state.value);
|
|
286
412
|
exp_v.PinSelf();
|
|
287
413
|
PinnableSlice v;
|
|
@@ -359,6 +485,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
359
485
|
if (FLAGS_sync) {
|
|
360
486
|
write_opts.sync = true;
|
|
361
487
|
}
|
|
488
|
+
if (FLAGS_rate_limit_auto_wal_flush) {
|
|
489
|
+
write_opts.rate_limiter_priority = Env::IO_USER;
|
|
490
|
+
}
|
|
362
491
|
char value[100];
|
|
363
492
|
int cf_idx = 0;
|
|
364
493
|
Status s;
|
|
@@ -387,7 +516,15 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
387
516
|
}
|
|
388
517
|
} else {
|
|
389
518
|
if (!FLAGS_use_txn) {
|
|
390
|
-
|
|
519
|
+
std::string ts_str;
|
|
520
|
+
Slice ts;
|
|
521
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
522
|
+
ts_str = NowNanosStr();
|
|
523
|
+
ts = ts_str;
|
|
524
|
+
s = db_->Put(write_opts, cfh, key, ts, v);
|
|
525
|
+
} else {
|
|
526
|
+
s = db_->Put(write_opts, cfh, key, v);
|
|
527
|
+
}
|
|
391
528
|
} else {
|
|
392
529
|
#ifndef ROCKSDB_LITE
|
|
393
530
|
Transaction* txn;
|
|
@@ -427,9 +564,9 @@ void StressTest::PreloadDbAndReopenAsReadOnly(int64_t number_of_keys,
|
|
|
427
564
|
#endif
|
|
428
565
|
|
|
429
566
|
db_preload_finished_.store(true);
|
|
430
|
-
auto now =
|
|
567
|
+
auto now = clock_->NowMicros();
|
|
431
568
|
fprintf(stdout, "%s Reopening database in read-only\n",
|
|
432
|
-
|
|
569
|
+
clock_->TimeToString(now / 1000000).c_str());
|
|
433
570
|
// Reopen as read-only, can ignore all options related to updates
|
|
434
571
|
Open();
|
|
435
572
|
} else {
|
|
@@ -444,12 +581,9 @@ Status StressTest::SetOptions(ThreadState* thread) {
|
|
|
444
581
|
std::string name =
|
|
445
582
|
options_index_[thread->rand.Next() % options_index_.size()];
|
|
446
583
|
int value_idx = thread->rand.Next() % options_table_[name].size();
|
|
447
|
-
if (name == "
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
} else if (name == "level0_file_num_compaction_trigger" ||
|
|
451
|
-
name == "level0_slowdown_writes_trigger" ||
|
|
452
|
-
name == "level0_stop_writes_trigger") {
|
|
584
|
+
if (name == "level0_file_num_compaction_trigger" ||
|
|
585
|
+
name == "level0_slowdown_writes_trigger" ||
|
|
586
|
+
name == "level0_stop_writes_trigger") {
|
|
453
587
|
opts["level0_file_num_compaction_trigger"] =
|
|
454
588
|
options_table_["level0_file_num_compaction_trigger"][value_idx];
|
|
455
589
|
opts["level0_slowdown_writes_trigger"] =
|
|
@@ -470,8 +604,11 @@ Status StressTest::NewTxn(WriteOptions& write_opts, Transaction** txn) {
|
|
|
470
604
|
if (!FLAGS_use_txn) {
|
|
471
605
|
return Status::InvalidArgument("NewTxn when FLAGS_use_txn is not set");
|
|
472
606
|
}
|
|
607
|
+
write_opts.disableWAL = FLAGS_disable_wal;
|
|
473
608
|
static std::atomic<uint64_t> txn_id = {0};
|
|
474
609
|
TransactionOptions txn_options;
|
|
610
|
+
txn_options.use_only_the_last_commit_time_batch_for_recovery =
|
|
611
|
+
FLAGS_use_only_the_last_commit_time_batch_for_recovery;
|
|
475
612
|
txn_options.lock_timeout = 600000; // 10 min
|
|
476
613
|
txn_options.deadlock_detect = true;
|
|
477
614
|
*txn = txn_db_->BeginTransaction(write_opts, txn_options);
|
|
@@ -506,7 +643,14 @@ Status StressTest::RollbackTxn(Transaction* txn) {
|
|
|
506
643
|
|
|
507
644
|
void StressTest::OperateDb(ThreadState* thread) {
|
|
508
645
|
ReadOptions read_opts(FLAGS_verify_checksum, true);
|
|
646
|
+
read_opts.rate_limiter_priority =
|
|
647
|
+
FLAGS_rate_limit_user_ops ? Env::IO_USER : Env::IO_TOTAL;
|
|
648
|
+
read_opts.async_io = FLAGS_async_io;
|
|
649
|
+
read_opts.adaptive_readahead = FLAGS_adaptive_readahead;
|
|
509
650
|
WriteOptions write_opts;
|
|
651
|
+
if (FLAGS_rate_limit_auto_wal_flush) {
|
|
652
|
+
write_opts.rate_limiter_priority = Env::IO_USER;
|
|
653
|
+
}
|
|
510
654
|
auto shared = thread->shared;
|
|
511
655
|
char value[100];
|
|
512
656
|
std::string from_db;
|
|
@@ -514,11 +658,15 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
514
658
|
write_opts.sync = true;
|
|
515
659
|
}
|
|
516
660
|
write_opts.disableWAL = FLAGS_disable_wal;
|
|
517
|
-
const int
|
|
518
|
-
|
|
519
|
-
const int
|
|
520
|
-
const int
|
|
521
|
-
const int
|
|
661
|
+
const int prefix_bound = static_cast<int>(FLAGS_readpercent) +
|
|
662
|
+
static_cast<int>(FLAGS_prefixpercent);
|
|
663
|
+
const int write_bound = prefix_bound + static_cast<int>(FLAGS_writepercent);
|
|
664
|
+
const int del_bound = write_bound + static_cast<int>(FLAGS_delpercent);
|
|
665
|
+
const int delrange_bound =
|
|
666
|
+
del_bound + static_cast<int>(FLAGS_delrangepercent);
|
|
667
|
+
const int iterate_bound =
|
|
668
|
+
delrange_bound + static_cast<int>(FLAGS_iterpercent);
|
|
669
|
+
|
|
522
670
|
const uint64_t ops_per_open = FLAGS_ops_per_thread / (FLAGS_reopen + 1);
|
|
523
671
|
|
|
524
672
|
#ifndef NDEBUG
|
|
@@ -527,14 +675,21 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
527
675
|
FLAGS_read_fault_one_in);
|
|
528
676
|
}
|
|
529
677
|
if (FLAGS_write_fault_one_in) {
|
|
530
|
-
IOStatus error_msg
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
678
|
+
IOStatus error_msg;
|
|
679
|
+
if (FLAGS_injest_error_severity <= 1 || FLAGS_injest_error_severity > 2) {
|
|
680
|
+
error_msg = IOStatus::IOError("Retryable IO Error");
|
|
681
|
+
error_msg.SetRetryable(true);
|
|
682
|
+
} else if (FLAGS_injest_error_severity == 2) {
|
|
683
|
+
// Ingest the fatal error
|
|
684
|
+
error_msg = IOStatus::IOError("Fatal IO Error");
|
|
685
|
+
error_msg.SetDataLoss(true);
|
|
686
|
+
}
|
|
687
|
+
std::vector<FileType> types = {FileType::kTableFile,
|
|
688
|
+
FileType::kDescriptorFile,
|
|
689
|
+
FileType::kCurrentFile};
|
|
536
690
|
fault_fs_guard->SetRandomWriteError(
|
|
537
|
-
thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg,
|
|
691
|
+
thread->shared->GetSeed(), FLAGS_write_fault_one_in, error_msg,
|
|
692
|
+
/*inject_for_all_file_types=*/false, types);
|
|
538
693
|
}
|
|
539
694
|
#endif // NDEBUG
|
|
540
695
|
thread->stats.Start();
|
|
@@ -731,6 +886,19 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
731
886
|
}
|
|
732
887
|
}
|
|
733
888
|
|
|
889
|
+
// Assign timestamps if necessary.
|
|
890
|
+
std::string read_ts_str;
|
|
891
|
+
std::string write_ts_str;
|
|
892
|
+
Slice read_ts;
|
|
893
|
+
Slice write_ts;
|
|
894
|
+
if (ShouldAcquireMutexOnKey() && FLAGS_user_timestamp_size > 0) {
|
|
895
|
+
read_ts_str = GenerateTimestampForRead();
|
|
896
|
+
read_ts = read_ts_str;
|
|
897
|
+
read_opts.timestamp = &read_ts;
|
|
898
|
+
write_ts_str = NowNanosStr();
|
|
899
|
+
write_ts = write_ts_str;
|
|
900
|
+
}
|
|
901
|
+
|
|
734
902
|
int prob_op = thread->rand.Uniform(100);
|
|
735
903
|
// Reset this in case we pick something other than a read op. We don't
|
|
736
904
|
// want to use a stale value when deciding at the beginning of the loop
|
|
@@ -753,7 +921,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
753
921
|
} else {
|
|
754
922
|
TestGet(thread, read_opts, rand_column_families, rand_keys);
|
|
755
923
|
}
|
|
756
|
-
} else if (prob_op <
|
|
924
|
+
} else if (prob_op < prefix_bound) {
|
|
757
925
|
assert(static_cast<int>(FLAGS_readpercent) <= prob_op);
|
|
758
926
|
// OPERATION prefix scan
|
|
759
927
|
// keys are 8 bytes long, prefix size is FLAGS_prefix_size. There are
|
|
@@ -761,22 +929,22 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
761
929
|
// be 2 ^ ((8 - FLAGS_prefix_size) * 8) possible keys with the same
|
|
762
930
|
// prefix
|
|
763
931
|
TestPrefixScan(thread, read_opts, rand_column_families, rand_keys);
|
|
764
|
-
} else if (prob_op <
|
|
765
|
-
assert(
|
|
932
|
+
} else if (prob_op < write_bound) {
|
|
933
|
+
assert(prefix_bound <= prob_op);
|
|
766
934
|
// OPERATION write
|
|
767
935
|
TestPut(thread, write_opts, read_opts, rand_column_families, rand_keys,
|
|
768
936
|
value, lock);
|
|
769
|
-
} else if (prob_op <
|
|
770
|
-
assert(
|
|
937
|
+
} else if (prob_op < del_bound) {
|
|
938
|
+
assert(write_bound <= prob_op);
|
|
771
939
|
// OPERATION delete
|
|
772
940
|
TestDelete(thread, write_opts, rand_column_families, rand_keys, lock);
|
|
773
|
-
} else if (prob_op <
|
|
774
|
-
assert(
|
|
941
|
+
} else if (prob_op < delrange_bound) {
|
|
942
|
+
assert(del_bound <= prob_op);
|
|
775
943
|
// OPERATION delete range
|
|
776
944
|
TestDeleteRange(thread, write_opts, rand_column_families, rand_keys,
|
|
777
945
|
lock);
|
|
778
|
-
} else {
|
|
779
|
-
assert(
|
|
946
|
+
} else if (prob_op < iterate_bound) {
|
|
947
|
+
assert(delrange_bound <= prob_op);
|
|
780
948
|
// OPERATION iterate
|
|
781
949
|
int num_seeks = static_cast<int>(
|
|
782
950
|
std::min(static_cast<uint64_t>(thread->rand.Uniform(4)),
|
|
@@ -784,6 +952,9 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
784
952
|
rand_keys = GenerateNKeys(thread, num_seeks, i);
|
|
785
953
|
i += num_seeks - 1;
|
|
786
954
|
TestIterate(thread, read_opts, rand_column_families, rand_keys);
|
|
955
|
+
} else {
|
|
956
|
+
assert(iterate_bound <= prob_op);
|
|
957
|
+
TestCustomOperations(thread, rand_column_families);
|
|
787
958
|
}
|
|
788
959
|
thread->stats.FinishedSingleOp();
|
|
789
960
|
#ifndef ROCKSDB_LITE
|
|
@@ -821,8 +992,16 @@ std::vector<std::string> StressTest::GetWhiteBoxKeys(ThreadState* thread,
|
|
|
821
992
|
std::vector<std::string> boundaries;
|
|
822
993
|
for (const LevelMetaData& lmd : cfmd.levels) {
|
|
823
994
|
for (const SstFileMetaData& sfmd : lmd.files) {
|
|
824
|
-
|
|
825
|
-
|
|
995
|
+
// If FLAGS_user_timestamp_size > 0, then both smallestkey and largestkey
|
|
996
|
+
// have timestamps.
|
|
997
|
+
const auto& skey = sfmd.smallestkey;
|
|
998
|
+
const auto& lkey = sfmd.largestkey;
|
|
999
|
+
assert(skey.size() >= FLAGS_user_timestamp_size);
|
|
1000
|
+
assert(lkey.size() >= FLAGS_user_timestamp_size);
|
|
1001
|
+
boundaries.push_back(
|
|
1002
|
+
skey.substr(0, skey.size() - FLAGS_user_timestamp_size));
|
|
1003
|
+
boundaries.push_back(
|
|
1004
|
+
lkey.substr(0, lkey.size() - FLAGS_user_timestamp_size));
|
|
826
1005
|
}
|
|
827
1006
|
}
|
|
828
1007
|
if (boundaries.empty()) {
|
|
@@ -971,7 +1150,10 @@ Status StressTest::TestIterate(ThreadState* thread,
|
|
|
971
1150
|
// to bounds, prefix extractor or reseeking. Sometimes we are comparing
|
|
972
1151
|
// iterators with the same set-up, and it doesn't hurt to check them
|
|
973
1152
|
// to be equal.
|
|
1153
|
+
// This `ReadOptions` is for validation purposes. Ignore
|
|
1154
|
+
// `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
|
|
974
1155
|
ReadOptions cmp_ro;
|
|
1156
|
+
cmp_ro.timestamp = readoptionscopy.timestamp;
|
|
975
1157
|
cmp_ro.snapshot = snapshot;
|
|
976
1158
|
cmp_ro.total_order_seek = true;
|
|
977
1159
|
ColumnFamilyHandle* cmp_cfh =
|
|
@@ -1091,21 +1273,25 @@ void StressTest::VerifyIterator(ThreadState* thread,
|
|
|
1091
1273
|
*diverged = true;
|
|
1092
1274
|
return;
|
|
1093
1275
|
} else if (op == kLastOpSeek && ro.iterate_lower_bound != nullptr &&
|
|
1094
|
-
(options_.comparator->
|
|
1095
|
-
|
|
1276
|
+
(options_.comparator->CompareWithoutTimestamp(
|
|
1277
|
+
*ro.iterate_lower_bound, /*a_has_ts=*/false, seek_key,
|
|
1278
|
+
/*b_has_ts=*/false) >= 0 ||
|
|
1096
1279
|
(ro.iterate_upper_bound != nullptr &&
|
|
1097
|
-
options_.comparator->
|
|
1098
|
-
|
|
1280
|
+
options_.comparator->CompareWithoutTimestamp(
|
|
1281
|
+
*ro.iterate_lower_bound, /*a_has_ts=*/false,
|
|
1282
|
+
*ro.iterate_upper_bound, /*b_has_ts*/ false) >= 0))) {
|
|
1099
1283
|
// Lower bound behavior is not well defined if it is larger than
|
|
1100
1284
|
// seek key or upper bound. Disable the check for now.
|
|
1101
1285
|
*diverged = true;
|
|
1102
1286
|
return;
|
|
1103
1287
|
} else if (op == kLastOpSeekForPrev && ro.iterate_upper_bound != nullptr &&
|
|
1104
|
-
(options_.comparator->
|
|
1105
|
-
|
|
1288
|
+
(options_.comparator->CompareWithoutTimestamp(
|
|
1289
|
+
*ro.iterate_upper_bound, /*a_has_ts=*/false, seek_key,
|
|
1290
|
+
/*b_has_ts=*/false) <= 0 ||
|
|
1106
1291
|
(ro.iterate_lower_bound != nullptr &&
|
|
1107
|
-
options_.comparator->
|
|
1108
|
-
|
|
1292
|
+
options_.comparator->CompareWithoutTimestamp(
|
|
1293
|
+
*ro.iterate_lower_bound, /*a_has_ts=*/false,
|
|
1294
|
+
*ro.iterate_upper_bound, /*b_has_ts=*/false) >= 0))) {
|
|
1109
1295
|
// Uppder bound behavior is not well defined if it is smaller than
|
|
1110
1296
|
// seek key or lower bound. Disable the check for now.
|
|
1111
1297
|
*diverged = true;
|
|
@@ -1174,9 +1360,13 @@ void StressTest::VerifyIterator(ThreadState* thread,
|
|
|
1174
1360
|
if ((iter->Valid() && iter->key() != cmp_iter->key()) ||
|
|
1175
1361
|
(!iter->Valid() &&
|
|
1176
1362
|
(ro.iterate_upper_bound == nullptr ||
|
|
1177
|
-
cmp->
|
|
1363
|
+
cmp->CompareWithoutTimestamp(total_order_key, /*a_has_ts=*/false,
|
|
1364
|
+
*ro.iterate_upper_bound,
|
|
1365
|
+
/*b_has_ts=*/false) < 0) &&
|
|
1178
1366
|
(ro.iterate_lower_bound == nullptr ||
|
|
1179
|
-
cmp->
|
|
1367
|
+
cmp->CompareWithoutTimestamp(total_order_key, /*a_has_ts=*/false,
|
|
1368
|
+
*ro.iterate_lower_bound,
|
|
1369
|
+
/*b_has_ts=*/false) > 0))) {
|
|
1180
1370
|
fprintf(stderr,
|
|
1181
1371
|
"Iterator diverged from control iterator which"
|
|
1182
1372
|
" has value %s %s\n",
|
|
@@ -1236,10 +1426,9 @@ Status StressTest::TestBackupRestore(
|
|
|
1236
1426
|
const std::vector<int64_t>& rand_keys) {
|
|
1237
1427
|
std::string backup_dir = FLAGS_db + "/.backup" + ToString(thread->tid);
|
|
1238
1428
|
std::string restore_dir = FLAGS_db + "/.restore" + ToString(thread->tid);
|
|
1239
|
-
|
|
1429
|
+
BackupEngineOptions backup_opts(backup_dir);
|
|
1240
1430
|
// For debugging, get info_log from live options
|
|
1241
1431
|
backup_opts.info_log = db_->GetDBOptions().info_log.get();
|
|
1242
|
-
assert(backup_opts.info_log);
|
|
1243
1432
|
if (thread->rand.OneIn(10)) {
|
|
1244
1433
|
backup_opts.share_table_files = false;
|
|
1245
1434
|
} else {
|
|
@@ -1251,24 +1440,24 @@ Status StressTest::TestBackupRestore(
|
|
|
1251
1440
|
if (thread->rand.OneIn(2)) {
|
|
1252
1441
|
// old
|
|
1253
1442
|
backup_opts.share_files_with_checksum_naming =
|
|
1254
|
-
|
|
1443
|
+
BackupEngineOptions::kLegacyCrc32cAndFileSize;
|
|
1255
1444
|
} else {
|
|
1256
1445
|
// new
|
|
1257
1446
|
backup_opts.share_files_with_checksum_naming =
|
|
1258
|
-
|
|
1447
|
+
BackupEngineOptions::kUseDbSessionId;
|
|
1259
1448
|
}
|
|
1260
1449
|
if (thread->rand.OneIn(2)) {
|
|
1261
1450
|
backup_opts.share_files_with_checksum_naming =
|
|
1262
1451
|
backup_opts.share_files_with_checksum_naming |
|
|
1263
|
-
|
|
1264
|
-
}
|
|
1265
|
-
if (thread->rand.OneIn(2)) {
|
|
1266
|
-
backup_opts.share_files_with_checksum_naming =
|
|
1267
|
-
backup_opts.share_files_with_checksum_naming |
|
|
1268
|
-
BackupableDBOptions::kFlagMatchInterimNaming;
|
|
1452
|
+
BackupEngineOptions::kFlagIncludeFileSize;
|
|
1269
1453
|
}
|
|
1270
1454
|
}
|
|
1271
1455
|
}
|
|
1456
|
+
if (thread->rand.OneIn(2)) {
|
|
1457
|
+
backup_opts.schema_version = 1;
|
|
1458
|
+
} else {
|
|
1459
|
+
backup_opts.schema_version = 2;
|
|
1460
|
+
}
|
|
1272
1461
|
BackupEngine* backup_engine = nullptr;
|
|
1273
1462
|
std::string from = "a backup/restore operation";
|
|
1274
1463
|
Status s = BackupEngine::Open(db_stress_env, backup_opts, &backup_engine);
|
|
@@ -1276,7 +1465,26 @@ Status StressTest::TestBackupRestore(
|
|
|
1276
1465
|
from = "BackupEngine::Open";
|
|
1277
1466
|
}
|
|
1278
1467
|
if (s.ok()) {
|
|
1279
|
-
|
|
1468
|
+
if (backup_opts.schema_version >= 2 && thread->rand.OneIn(2)) {
|
|
1469
|
+
TEST_BackupMetaSchemaOptions test_opts;
|
|
1470
|
+
test_opts.crc32c_checksums = thread->rand.OneIn(2) == 0;
|
|
1471
|
+
test_opts.file_sizes = thread->rand.OneIn(2) == 0;
|
|
1472
|
+
TEST_SetBackupMetaSchemaOptions(backup_engine, test_opts);
|
|
1473
|
+
}
|
|
1474
|
+
CreateBackupOptions create_opts;
|
|
1475
|
+
if (FLAGS_disable_wal) {
|
|
1476
|
+
// The verification can only work when latest value of `key` is backed up,
|
|
1477
|
+
// which requires flushing in case of WAL disabled.
|
|
1478
|
+
//
|
|
1479
|
+
// Note this triggers a flush with a key lock held. Meanwhile, operations
|
|
1480
|
+
// like flush/compaction may attempt to grab key locks like in
|
|
1481
|
+
// `DbStressCompactionFilter`. The philosophy around preventing deadlock
|
|
1482
|
+
// is the background operation key lock acquisition only tries but does
|
|
1483
|
+
// not wait for the lock. So here in the foreground it is OK to hold the
|
|
1484
|
+
// lock and wait on a background operation (flush).
|
|
1485
|
+
create_opts.flush_before_backup = true;
|
|
1486
|
+
}
|
|
1487
|
+
s = backup_engine->CreateNewBackup(create_opts, db_);
|
|
1280
1488
|
if (!s.ok()) {
|
|
1281
1489
|
from = "BackupEngine::CreateNewBackup";
|
|
1282
1490
|
}
|
|
@@ -1290,8 +1498,13 @@ Status StressTest::TestBackupRestore(
|
|
|
1290
1498
|
}
|
|
1291
1499
|
}
|
|
1292
1500
|
std::vector<BackupInfo> backup_info;
|
|
1501
|
+
// If inplace_not_restore, we verify the backup by opening it as a
|
|
1502
|
+
// read-only DB. If !inplace_not_restore, we restore it to a temporary
|
|
1503
|
+
// directory for verification.
|
|
1504
|
+
bool inplace_not_restore = thread->rand.OneIn(3);
|
|
1293
1505
|
if (s.ok()) {
|
|
1294
|
-
backup_engine->GetBackupInfo(&backup_info
|
|
1506
|
+
backup_engine->GetBackupInfo(&backup_info,
|
|
1507
|
+
/*include_file_details*/ inplace_not_restore);
|
|
1295
1508
|
if (backup_info.empty()) {
|
|
1296
1509
|
s = Status::NotFound("no backups found");
|
|
1297
1510
|
from = "BackupEngine::GetBackupInfo";
|
|
@@ -1307,8 +1520,8 @@ Status StressTest::TestBackupRestore(
|
|
|
1307
1520
|
}
|
|
1308
1521
|
const bool allow_persistent = thread->tid == 0; // not too many
|
|
1309
1522
|
bool from_latest = false;
|
|
1310
|
-
|
|
1311
|
-
|
|
1523
|
+
int count = static_cast<int>(backup_info.size());
|
|
1524
|
+
if (s.ok() && !inplace_not_restore) {
|
|
1312
1525
|
if (count > 1) {
|
|
1313
1526
|
s = backup_engine->RestoreDBFromBackup(
|
|
1314
1527
|
RestoreOptions(), backup_info[thread->rand.Uniform(count)].backup_id,
|
|
@@ -1326,7 +1539,9 @@ Status StressTest::TestBackupRestore(
|
|
|
1326
1539
|
}
|
|
1327
1540
|
}
|
|
1328
1541
|
}
|
|
1329
|
-
if (s.ok()) {
|
|
1542
|
+
if (s.ok() && !inplace_not_restore) {
|
|
1543
|
+
// Purge early if restoring, to ensure the restored directory doesn't
|
|
1544
|
+
// have some secret dependency on the backup directory.
|
|
1330
1545
|
uint32_t to_keep = 0;
|
|
1331
1546
|
if (allow_persistent) {
|
|
1332
1547
|
// allow one thread to keep up to 2 backups
|
|
@@ -1354,10 +1569,21 @@ Status StressTest::TestBackupRestore(
|
|
|
1354
1569
|
for (auto name : column_family_names_) {
|
|
1355
1570
|
cf_descriptors.emplace_back(name, ColumnFamilyOptions(restore_options));
|
|
1356
1571
|
}
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1572
|
+
if (inplace_not_restore) {
|
|
1573
|
+
BackupInfo& info = backup_info[thread->rand.Uniform(count)];
|
|
1574
|
+
restore_options.env = info.env_for_open.get();
|
|
1575
|
+
s = DB::OpenForReadOnly(DBOptions(restore_options), info.name_for_open,
|
|
1576
|
+
cf_descriptors, &restored_cf_handles,
|
|
1577
|
+
&restored_db);
|
|
1578
|
+
if (!s.ok()) {
|
|
1579
|
+
from = "DB::OpenForReadOnly in backup/restore";
|
|
1580
|
+
}
|
|
1581
|
+
} else {
|
|
1582
|
+
s = DB::Open(DBOptions(restore_options), restore_dir, cf_descriptors,
|
|
1583
|
+
&restored_cf_handles, &restored_db);
|
|
1584
|
+
if (!s.ok()) {
|
|
1585
|
+
from = "DB::Open in backup/restore";
|
|
1586
|
+
}
|
|
1361
1587
|
}
|
|
1362
1588
|
}
|
|
1363
1589
|
// Note the column families chosen by `rand_column_families` cannot be
|
|
@@ -1371,8 +1597,18 @@ Status StressTest::TestBackupRestore(
|
|
|
1371
1597
|
std::string key_str = Key(rand_keys[0]);
|
|
1372
1598
|
Slice key = key_str;
|
|
1373
1599
|
std::string restored_value;
|
|
1600
|
+
// This `ReadOptions` is for validation purposes. Ignore
|
|
1601
|
+
// `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
|
|
1602
|
+
ReadOptions read_opts;
|
|
1603
|
+
std::string ts_str;
|
|
1604
|
+
Slice ts;
|
|
1605
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
1606
|
+
ts_str = GenerateTimestampForRead();
|
|
1607
|
+
ts = ts_str;
|
|
1608
|
+
read_opts.timestamp = &ts;
|
|
1609
|
+
}
|
|
1374
1610
|
Status get_status = restored_db->Get(
|
|
1375
|
-
|
|
1611
|
+
read_opts, restored_cf_handles[rand_column_families[i]], key,
|
|
1376
1612
|
&restored_value);
|
|
1377
1613
|
bool exists = thread->shared->Exists(rand_column_families[i], rand_keys[0]);
|
|
1378
1614
|
if (get_status.ok()) {
|
|
@@ -1390,10 +1626,6 @@ Status StressTest::TestBackupRestore(
|
|
|
1390
1626
|
}
|
|
1391
1627
|
}
|
|
1392
1628
|
}
|
|
1393
|
-
if (backup_engine != nullptr) {
|
|
1394
|
-
delete backup_engine;
|
|
1395
|
-
backup_engine = nullptr;
|
|
1396
|
-
}
|
|
1397
1629
|
if (restored_db != nullptr) {
|
|
1398
1630
|
for (auto* cf_handle : restored_cf_handles) {
|
|
1399
1631
|
restored_db->DestroyColumnFamilyHandle(cf_handle);
|
|
@@ -1401,6 +1633,22 @@ Status StressTest::TestBackupRestore(
|
|
|
1401
1633
|
delete restored_db;
|
|
1402
1634
|
restored_db = nullptr;
|
|
1403
1635
|
}
|
|
1636
|
+
if (s.ok() && inplace_not_restore) {
|
|
1637
|
+
// Purge late if inplace open read-only
|
|
1638
|
+
uint32_t to_keep = 0;
|
|
1639
|
+
if (allow_persistent) {
|
|
1640
|
+
// allow one thread to keep up to 2 backups
|
|
1641
|
+
to_keep = thread->rand.Uniform(3);
|
|
1642
|
+
}
|
|
1643
|
+
s = backup_engine->PurgeOldBackups(to_keep);
|
|
1644
|
+
if (!s.ok()) {
|
|
1645
|
+
from = "BackupEngine::PurgeOldBackups";
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
if (backup_engine != nullptr) {
|
|
1649
|
+
delete backup_engine;
|
|
1650
|
+
backup_engine = nullptr;
|
|
1651
|
+
}
|
|
1404
1652
|
if (s.ok()) {
|
|
1405
1653
|
// Preserve directories on failure, or allowed persistent backup
|
|
1406
1654
|
if (!allow_persistent) {
|
|
@@ -1448,8 +1696,8 @@ Status StressTest::TestApproximateSize(
|
|
|
1448
1696
|
std::string key2_str = Key(key2);
|
|
1449
1697
|
Range range{Slice(key1_str), Slice(key2_str)};
|
|
1450
1698
|
SizeApproximationOptions sao;
|
|
1451
|
-
sao.
|
|
1452
|
-
if (sao.
|
|
1699
|
+
sao.include_memtables = thread->rand.OneIn(2);
|
|
1700
|
+
if (sao.include_memtables) {
|
|
1453
1701
|
sao.include_files = thread->rand.OneIn(2);
|
|
1454
1702
|
}
|
|
1455
1703
|
if (thread->rand.OneIn(2)) {
|
|
@@ -1512,6 +1760,8 @@ Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
|
1512
1760
|
if (s.ok()) {
|
|
1513
1761
|
Options options(options_);
|
|
1514
1762
|
options.listeners.clear();
|
|
1763
|
+
// Avoid race condition in trash handling after delete checkpoint_db
|
|
1764
|
+
options.sst_file_manager.reset();
|
|
1515
1765
|
std::vector<ColumnFamilyDescriptor> cf_descs;
|
|
1516
1766
|
// TODO(ajkr): `column_family_names_` is not safe to access here when
|
|
1517
1767
|
// `clear_column_family_one_in != 0`. But we can't easily switch to
|
|
@@ -1578,6 +1828,9 @@ void StressTest::TestGetProperty(ThreadState* thread) const {
|
|
|
1578
1828
|
std::unordered_set<std::string> unknownPropertyNames = {
|
|
1579
1829
|
DB::Properties::kEstimateOldestKeyTime,
|
|
1580
1830
|
DB::Properties::kOptionsStatistics,
|
|
1831
|
+
DB::Properties::
|
|
1832
|
+
kLiveSstFilesSizeAtTemperature, // similar to levelPropertyNames, it
|
|
1833
|
+
// requires a number suffix
|
|
1581
1834
|
};
|
|
1582
1835
|
unknownPropertyNames.insert(levelPropertyNames.begin(),
|
|
1583
1836
|
levelPropertyNames.end());
|
|
@@ -1600,6 +1853,14 @@ void StressTest::TestGetProperty(ThreadState* thread) const {
|
|
|
1600
1853
|
thread->shared->SetVerificationFailure();
|
|
1601
1854
|
}
|
|
1602
1855
|
}
|
|
1856
|
+
if (ppt_name_and_info.second.handle_map != nullptr) {
|
|
1857
|
+
std::map<std::string, std::string> prop_map;
|
|
1858
|
+
if (!db_->GetMapProperty(ppt_name_and_info.first, &prop_map)) {
|
|
1859
|
+
fprintf(stderr, "Failed to get Map property: %s\n",
|
|
1860
|
+
ppt_name_and_info.first.c_str());
|
|
1861
|
+
thread->shared->SetVerificationFailure();
|
|
1862
|
+
}
|
|
1863
|
+
}
|
|
1603
1864
|
}
|
|
1604
1865
|
}
|
|
1605
1866
|
|
|
@@ -1631,6 +1892,10 @@ void StressTest::TestCompactFiles(ThreadState* thread,
|
|
|
1631
1892
|
ROCKSDB_NAMESPACE::ColumnFamilyMetaData cf_meta_data;
|
|
1632
1893
|
db_->GetColumnFamilyMetaData(column_family, &cf_meta_data);
|
|
1633
1894
|
|
|
1895
|
+
if (cf_meta_data.levels.empty()) {
|
|
1896
|
+
return;
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1634
1899
|
// Randomly compact up to three consecutive files from a level
|
|
1635
1900
|
const int kMaxRetry = 3;
|
|
1636
1901
|
for (int attempt = 0; attempt < kMaxRetry; ++attempt) {
|
|
@@ -1676,6 +1941,9 @@ void StressTest::TestCompactFiles(ThreadState* thread,
|
|
|
1676
1941
|
|
|
1677
1942
|
Status StressTest::TestFlush(const std::vector<int>& rand_column_families) {
|
|
1678
1943
|
FlushOptions flush_opts;
|
|
1944
|
+
if (FLAGS_atomic_flush) {
|
|
1945
|
+
return db_->Flush(flush_opts, column_families_);
|
|
1946
|
+
}
|
|
1679
1947
|
std::vector<ColumnFamilyHandle*> cfhs;
|
|
1680
1948
|
std::for_each(rand_column_families.begin(), rand_column_families.end(),
|
|
1681
1949
|
[this, &cfhs](int k) { cfhs.push_back(column_families_[k]); });
|
|
@@ -1694,7 +1962,7 @@ Status StressTest::TestPauseBackground(ThreadState* thread) {
|
|
|
1694
1962
|
// 1 chance in 625 of pausing full 16s.)
|
|
1695
1963
|
int pwr2_micros =
|
|
1696
1964
|
std::min(thread->rand.Uniform(25), thread->rand.Uniform(25));
|
|
1697
|
-
|
|
1965
|
+
clock_->SleepForMicroseconds(1 << pwr2_micros);
|
|
1698
1966
|
return db_->ContinueBackgroundWork();
|
|
1699
1967
|
}
|
|
1700
1968
|
|
|
@@ -1703,6 +1971,9 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
|
|
|
1703
1971
|
const std::string& keystr, uint64_t i) {
|
|
1704
1972
|
Slice key = keystr;
|
|
1705
1973
|
ColumnFamilyHandle* column_family = column_families_[rand_column_family];
|
|
1974
|
+
// This `ReadOptions` is for validation purposes. Ignore
|
|
1975
|
+
// `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
|
|
1976
|
+
ReadOptions ropt;
|
|
1706
1977
|
#ifndef ROCKSDB_LITE
|
|
1707
1978
|
auto db_impl = static_cast_with_check<DBImpl>(db_->GetRootDB());
|
|
1708
1979
|
const bool ww_snapshot = thread->rand.OneIn(10);
|
|
@@ -1712,8 +1983,19 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
|
|
|
1712
1983
|
#else
|
|
1713
1984
|
const Snapshot* snapshot = db_->GetSnapshot();
|
|
1714
1985
|
#endif // !ROCKSDB_LITE
|
|
1715
|
-
ReadOptions ropt;
|
|
1716
1986
|
ropt.snapshot = snapshot;
|
|
1987
|
+
|
|
1988
|
+
// Ideally, we want snapshot taking and timestamp generation to be atomic
|
|
1989
|
+
// here, so that the snapshot corresponds to the timestamp. However, it is
|
|
1990
|
+
// not possible with current GetSnapshot() API.
|
|
1991
|
+
std::string ts_str;
|
|
1992
|
+
Slice ts;
|
|
1993
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
1994
|
+
ts_str = GenerateTimestampForRead();
|
|
1995
|
+
ts = ts_str;
|
|
1996
|
+
ropt.timestamp = &ts;
|
|
1997
|
+
}
|
|
1998
|
+
|
|
1717
1999
|
std::string value_at;
|
|
1718
2000
|
// When taking a snapshot, we also read a key from that snapshot. We
|
|
1719
2001
|
// will later read the same key before releasing the snapshot and
|
|
@@ -1735,10 +2017,14 @@ void StressTest::TestAcquireSnapshot(ThreadState* thread,
|
|
|
1735
2017
|
}
|
|
1736
2018
|
}
|
|
1737
2019
|
|
|
1738
|
-
ThreadState::SnapshotState snap_state = {
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
2020
|
+
ThreadState::SnapshotState snap_state = {snapshot,
|
|
2021
|
+
rand_column_family,
|
|
2022
|
+
column_family->GetName(),
|
|
2023
|
+
keystr,
|
|
2024
|
+
status_at,
|
|
2025
|
+
value_at,
|
|
2026
|
+
key_vec,
|
|
2027
|
+
ts_str};
|
|
1742
2028
|
uint64_t hold_for = FLAGS_snapshot_hold_ops;
|
|
1743
2029
|
if (FLAGS_long_running_snapshots) {
|
|
1744
2030
|
// Hold 10% of snapshots for 10x more
|
|
@@ -1840,9 +2126,18 @@ uint32_t StressTest::GetRangeHash(ThreadState* thread, const Snapshot* snapshot,
|
|
|
1840
2126
|
const Slice& end_key) {
|
|
1841
2127
|
const std::string kCrcCalculatorSepearator = ";";
|
|
1842
2128
|
uint32_t crc = 0;
|
|
2129
|
+
// This `ReadOptions` is for validation purposes. Ignore
|
|
2130
|
+
// `FLAGS_rate_limit_user_ops` to avoid slowing any validation.
|
|
1843
2131
|
ReadOptions ro;
|
|
1844
2132
|
ro.snapshot = snapshot;
|
|
1845
2133
|
ro.total_order_seek = true;
|
|
2134
|
+
std::string ts_str;
|
|
2135
|
+
Slice ts;
|
|
2136
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
2137
|
+
ts_str = GenerateTimestampForRead();
|
|
2138
|
+
ts = ts_str;
|
|
2139
|
+
ro.timestamp = &ts;
|
|
2140
|
+
}
|
|
1846
2141
|
std::unique_ptr<Iterator> it(db_->NewIterator(ro, column_family));
|
|
1847
2142
|
for (it->Seek(start_key);
|
|
1848
2143
|
it->Valid() && options_.comparator->Compare(it->key(), end_key) <= 0;
|
|
@@ -1868,8 +2163,30 @@ void StressTest::PrintEnv() const {
|
|
|
1868
2163
|
fprintf(stdout, "Format version : %d\n", FLAGS_format_version);
|
|
1869
2164
|
fprintf(stdout, "TransactionDB : %s\n",
|
|
1870
2165
|
FLAGS_use_txn ? "true" : "false");
|
|
2166
|
+
|
|
2167
|
+
if (FLAGS_use_txn) {
|
|
2168
|
+
#ifndef ROCKSDB_LITE
|
|
2169
|
+
fprintf(stdout, "Two write queues: : %s\n",
|
|
2170
|
+
FLAGS_two_write_queues ? "true" : "false");
|
|
2171
|
+
fprintf(stdout, "Write policy : %d\n",
|
|
2172
|
+
static_cast<int>(FLAGS_txn_write_policy));
|
|
2173
|
+
if (static_cast<uint64_t>(TxnDBWritePolicy::WRITE_PREPARED) ==
|
|
2174
|
+
FLAGS_txn_write_policy ||
|
|
2175
|
+
static_cast<uint64_t>(TxnDBWritePolicy::WRITE_UNPREPARED) ==
|
|
2176
|
+
FLAGS_txn_write_policy) {
|
|
2177
|
+
fprintf(stdout, "Snapshot cache bits : %d\n",
|
|
2178
|
+
static_cast<int>(FLAGS_wp_snapshot_cache_bits));
|
|
2179
|
+
fprintf(stdout, "Commit cache bits : %d\n",
|
|
2180
|
+
static_cast<int>(FLAGS_wp_commit_cache_bits));
|
|
2181
|
+
}
|
|
2182
|
+
fprintf(stdout, "last cwb for recovery : %s\n",
|
|
2183
|
+
FLAGS_use_only_the_last_commit_time_batch_for_recovery ? "true"
|
|
2184
|
+
: "false");
|
|
2185
|
+
#endif // !ROCKSDB_LITE
|
|
2186
|
+
}
|
|
2187
|
+
|
|
1871
2188
|
#ifndef ROCKSDB_LITE
|
|
1872
|
-
fprintf(stdout, "BlobDB
|
|
2189
|
+
fprintf(stdout, "Stacked BlobDB : %s\n",
|
|
1873
2190
|
FLAGS_use_blob_db ? "true" : "false");
|
|
1874
2191
|
#endif // !ROCKSDB_LITE
|
|
1875
2192
|
fprintf(stdout, "Read only mode : %s\n",
|
|
@@ -1886,7 +2203,7 @@ void StressTest::PrintEnv() const {
|
|
|
1886
2203
|
(unsigned long)FLAGS_ops_per_thread);
|
|
1887
2204
|
std::string ttl_state("unused");
|
|
1888
2205
|
if (FLAGS_ttl > 0) {
|
|
1889
|
-
ttl_state =
|
|
2206
|
+
ttl_state = ToString(FLAGS_ttl);
|
|
1890
2207
|
}
|
|
1891
2208
|
fprintf(stdout, "Time to live(sec) : %s\n", ttl_state.c_str());
|
|
1892
2209
|
fprintf(stdout, "Read percentage : %d%%\n", FLAGS_readpercent);
|
|
@@ -1897,6 +2214,7 @@ void StressTest::PrintEnv() const {
|
|
|
1897
2214
|
fprintf(stdout, "No overwrite percentage : %d%%\n",
|
|
1898
2215
|
FLAGS_nooverwritepercent);
|
|
1899
2216
|
fprintf(stdout, "Iterate percentage : %d%%\n", FLAGS_iterpercent);
|
|
2217
|
+
fprintf(stdout, "Custom ops percentage : %d%%\n", FLAGS_customopspercent);
|
|
1900
2218
|
fprintf(stdout, "DB-write-buffer-size : %" PRIu64 "\n",
|
|
1901
2219
|
FLAGS_db_write_buffer_size);
|
|
1902
2220
|
fprintf(stdout, "Write-buffer-size : %d\n", FLAGS_write_buffer_size);
|
|
@@ -1944,13 +2262,16 @@ void StressTest::PrintEnv() const {
|
|
|
1944
2262
|
|
|
1945
2263
|
fprintf(stdout, "Memtablerep : %s\n", memtablerep);
|
|
1946
2264
|
|
|
1947
|
-
|
|
1948
|
-
|
|
2265
|
+
#ifndef NDEBUG
|
|
2266
|
+
KillPoint* kp = KillPoint::GetInstance();
|
|
2267
|
+
fprintf(stdout, "Test kill odd : %d\n", kp->rocksdb_kill_odds);
|
|
2268
|
+
if (!kp->rocksdb_kill_exclude_prefixes.empty()) {
|
|
1949
2269
|
fprintf(stdout, "Skipping kill points prefixes:\n");
|
|
1950
|
-
for (auto& p : rocksdb_kill_exclude_prefixes) {
|
|
2270
|
+
for (auto& p : kp->rocksdb_kill_exclude_prefixes) {
|
|
1951
2271
|
fprintf(stdout, " %s\n", p.c_str());
|
|
1952
2272
|
}
|
|
1953
2273
|
}
|
|
2274
|
+
#endif
|
|
1954
2275
|
fprintf(stdout, "Periodic Compaction Secs : %" PRIu64 "\n",
|
|
1955
2276
|
FLAGS_periodic_compaction_seconds);
|
|
1956
2277
|
fprintf(stdout, "Compaction TTL : %" PRIu64 "\n",
|
|
@@ -1965,9 +2286,18 @@ void StressTest::PrintEnv() const {
|
|
|
1965
2286
|
static_cast<int>(FLAGS_level_compaction_dynamic_level_bytes));
|
|
1966
2287
|
fprintf(stdout, "Read fault one in : %d\n", FLAGS_read_fault_one_in);
|
|
1967
2288
|
fprintf(stdout, "Write fault one in : %d\n", FLAGS_write_fault_one_in);
|
|
2289
|
+
fprintf(stdout, "Open metadata write fault one in:\n");
|
|
2290
|
+
fprintf(stdout, " %d\n",
|
|
2291
|
+
FLAGS_open_metadata_write_fault_one_in);
|
|
1968
2292
|
fprintf(stdout, "Sync fault injection : %d\n", FLAGS_sync_fault_injection);
|
|
1969
2293
|
fprintf(stdout, "Best efforts recovery : %d\n",
|
|
1970
2294
|
static_cast<int>(FLAGS_best_efforts_recovery));
|
|
2295
|
+
fprintf(stdout, "Fail if OPTIONS file error: %d\n",
|
|
2296
|
+
static_cast<int>(FLAGS_fail_if_options_file_error));
|
|
2297
|
+
fprintf(stdout, "User timestamp size bytes : %d\n",
|
|
2298
|
+
static_cast<int>(FLAGS_user_timestamp_size));
|
|
2299
|
+
fprintf(stdout, "WAL compression : %s\n",
|
|
2300
|
+
FLAGS_wal_compression.c_str());
|
|
1971
2301
|
|
|
1972
2302
|
fprintf(stdout, "------------------------------------------------\n");
|
|
1973
2303
|
}
|
|
@@ -1991,6 +2321,8 @@ void StressTest::Open() {
|
|
|
1991
2321
|
block_based_options.block_cache_compressed = compressed_cache_;
|
|
1992
2322
|
block_based_options.checksum = checksum_type_e;
|
|
1993
2323
|
block_based_options.block_size = FLAGS_block_size;
|
|
2324
|
+
block_based_options.reserve_table_reader_memory =
|
|
2325
|
+
FLAGS_reserve_table_reader_memory;
|
|
1994
2326
|
block_based_options.format_version =
|
|
1995
2327
|
static_cast<uint32_t>(FLAGS_format_version);
|
|
1996
2328
|
block_based_options.index_block_restart_interval =
|
|
@@ -1999,8 +2331,13 @@ void StressTest::Open() {
|
|
|
1999
2331
|
block_based_options.partition_filters = FLAGS_partition_filters;
|
|
2000
2332
|
block_based_options.optimize_filters_for_memory =
|
|
2001
2333
|
FLAGS_optimize_filters_for_memory;
|
|
2334
|
+
block_based_options.detect_filter_construct_corruption =
|
|
2335
|
+
FLAGS_detect_filter_construct_corruption;
|
|
2002
2336
|
block_based_options.index_type =
|
|
2003
2337
|
static_cast<BlockBasedTableOptions::IndexType>(FLAGS_index_type);
|
|
2338
|
+
block_based_options.prepopulate_block_cache =
|
|
2339
|
+
static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
|
|
2340
|
+
FLAGS_prepopulate_block_cache);
|
|
2004
2341
|
options_.table_factory.reset(
|
|
2005
2342
|
NewBlockBasedTableFactory(block_based_options));
|
|
2006
2343
|
options_.db_write_buffer_size = FLAGS_db_write_buffer_size;
|
|
@@ -2015,6 +2352,7 @@ void StressTest::Open() {
|
|
|
2015
2352
|
options_.memtable_prefix_bloom_size_ratio =
|
|
2016
2353
|
FLAGS_memtable_prefix_bloom_size_ratio;
|
|
2017
2354
|
options_.memtable_whole_key_filtering = FLAGS_memtable_whole_key_filtering;
|
|
2355
|
+
options_.disable_auto_compactions = FLAGS_disable_auto_compactions;
|
|
2018
2356
|
options_.max_background_compactions = FLAGS_max_background_compactions;
|
|
2019
2357
|
options_.max_background_flushes = FLAGS_max_background_flushes;
|
|
2020
2358
|
options_.compaction_style =
|
|
@@ -2052,12 +2390,16 @@ void StressTest::Open() {
|
|
|
2052
2390
|
FLAGS_compression_zstd_max_train_bytes;
|
|
2053
2391
|
options_.compression_opts.parallel_threads =
|
|
2054
2392
|
FLAGS_compression_parallel_threads;
|
|
2393
|
+
options_.compression_opts.max_dict_buffer_bytes =
|
|
2394
|
+
FLAGS_compression_max_dict_buffer_bytes;
|
|
2055
2395
|
options_.create_if_missing = true;
|
|
2056
2396
|
options_.max_manifest_file_size = FLAGS_max_manifest_file_size;
|
|
2057
2397
|
options_.inplace_update_support = FLAGS_in_place_update;
|
|
2058
2398
|
options_.max_subcompactions = static_cast<uint32_t>(FLAGS_subcompactions);
|
|
2059
2399
|
options_.allow_concurrent_memtable_write =
|
|
2060
2400
|
FLAGS_allow_concurrent_memtable_write;
|
|
2401
|
+
options_.experimental_mempurge_threshold =
|
|
2402
|
+
FLAGS_experimental_mempurge_threshold;
|
|
2061
2403
|
options_.periodic_compaction_seconds = FLAGS_periodic_compaction_seconds;
|
|
2062
2404
|
options_.ttl = FLAGS_compaction_ttl;
|
|
2063
2405
|
options_.enable_pipelined_write = FLAGS_enable_pipelined_write;
|
|
@@ -2083,6 +2425,24 @@ void StressTest::Open() {
|
|
|
2083
2425
|
options_.file_checksum_gen_factory =
|
|
2084
2426
|
GetFileChecksumImpl(FLAGS_file_checksum_impl);
|
|
2085
2427
|
options_.track_and_verify_wals_in_manifest = true;
|
|
2428
|
+
|
|
2429
|
+
// Integrated BlobDB
|
|
2430
|
+
options_.enable_blob_files = FLAGS_enable_blob_files;
|
|
2431
|
+
options_.min_blob_size = FLAGS_min_blob_size;
|
|
2432
|
+
options_.blob_file_size = FLAGS_blob_file_size;
|
|
2433
|
+
options_.blob_compression_type =
|
|
2434
|
+
StringToCompressionType(FLAGS_blob_compression_type.c_str());
|
|
2435
|
+
options_.enable_blob_garbage_collection =
|
|
2436
|
+
FLAGS_enable_blob_garbage_collection;
|
|
2437
|
+
options_.blob_garbage_collection_age_cutoff =
|
|
2438
|
+
FLAGS_blob_garbage_collection_age_cutoff;
|
|
2439
|
+
options_.blob_garbage_collection_force_threshold =
|
|
2440
|
+
FLAGS_blob_garbage_collection_force_threshold;
|
|
2441
|
+
options_.blob_compaction_readahead_size =
|
|
2442
|
+
FLAGS_blob_compaction_readahead_size;
|
|
2443
|
+
|
|
2444
|
+
options_.wal_compression =
|
|
2445
|
+
StringToCompressionType(FLAGS_wal_compression.c_str());
|
|
2086
2446
|
} else {
|
|
2087
2447
|
#ifdef ROCKSDB_LITE
|
|
2088
2448
|
fprintf(stderr, "--options_file not supported in lite mode\n");
|
|
@@ -2108,9 +2468,6 @@ void StressTest::Open() {
|
|
|
2108
2468
|
10 /* fairness */,
|
|
2109
2469
|
FLAGS_rate_limit_bg_reads ? RateLimiter::Mode::kReadsOnly
|
|
2110
2470
|
: RateLimiter::Mode::kWritesOnly));
|
|
2111
|
-
if (FLAGS_rate_limit_bg_reads) {
|
|
2112
|
-
options_.new_table_reader_for_compaction_inputs = true;
|
|
2113
|
-
}
|
|
2114
2471
|
}
|
|
2115
2472
|
if (FLAGS_sst_file_manager_bytes_per_sec > 0 ||
|
|
2116
2473
|
FLAGS_sst_file_manager_bytes_per_truncate > 0) {
|
|
@@ -2171,10 +2528,38 @@ void StressTest::Open() {
|
|
|
2171
2528
|
|
|
2172
2529
|
options_.best_efforts_recovery = FLAGS_best_efforts_recovery;
|
|
2173
2530
|
options_.paranoid_file_checks = FLAGS_paranoid_file_checks;
|
|
2531
|
+
options_.fail_if_options_file_error = FLAGS_fail_if_options_file_error;
|
|
2532
|
+
|
|
2533
|
+
if ((options_.enable_blob_files || options_.enable_blob_garbage_collection ||
|
|
2534
|
+
FLAGS_allow_setting_blob_options_dynamically) &&
|
|
2535
|
+
FLAGS_best_efforts_recovery) {
|
|
2536
|
+
fprintf(stderr,
|
|
2537
|
+
"Integrated BlobDB is currently incompatible with best-effort "
|
|
2538
|
+
"recovery\n");
|
|
2539
|
+
exit(1);
|
|
2540
|
+
}
|
|
2541
|
+
|
|
2542
|
+
fprintf(stdout,
|
|
2543
|
+
"Integrated BlobDB: blob files enabled %d, min blob size %" PRIu64
|
|
2544
|
+
", blob file size %" PRIu64
|
|
2545
|
+
", blob compression type %s, blob GC enabled %d, cutoff %f, force "
|
|
2546
|
+
"threshold %f, blob compaction readahead size %" PRIu64 "\n",
|
|
2547
|
+
options_.enable_blob_files, options_.min_blob_size,
|
|
2548
|
+
options_.blob_file_size,
|
|
2549
|
+
CompressionTypeToString(options_.blob_compression_type).c_str(),
|
|
2550
|
+
options_.enable_blob_garbage_collection,
|
|
2551
|
+
options_.blob_garbage_collection_age_cutoff,
|
|
2552
|
+
options_.blob_garbage_collection_force_threshold,
|
|
2553
|
+
options_.blob_compaction_readahead_size);
|
|
2174
2554
|
|
|
2175
2555
|
fprintf(stdout, "DB path: [%s]\n", FLAGS_db.c_str());
|
|
2176
2556
|
|
|
2177
2557
|
Status s;
|
|
2558
|
+
|
|
2559
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
2560
|
+
CheckAndSetOptionsForUserTimestamp();
|
|
2561
|
+
}
|
|
2562
|
+
|
|
2178
2563
|
if (FLAGS_ttl == -1) {
|
|
2179
2564
|
std::vector<std::string> existing_column_families;
|
|
2180
2565
|
s = DB::ListColumnFamilies(DBOptions(options_), FLAGS_db,
|
|
@@ -2224,36 +2609,130 @@ void StressTest::Open() {
|
|
|
2224
2609
|
column_family_names_.push_back(name);
|
|
2225
2610
|
}
|
|
2226
2611
|
options_.listeners.clear();
|
|
2227
|
-
|
|
2228
|
-
|
|
2612
|
+
#ifndef ROCKSDB_LITE
|
|
2613
|
+
options_.listeners.emplace_back(new DbStressListener(
|
|
2614
|
+
FLAGS_db, options_.db_paths, cf_descriptors, db_stress_listener_env));
|
|
2615
|
+
#endif // !ROCKSDB_LITE
|
|
2229
2616
|
options_.create_missing_column_families = true;
|
|
2230
2617
|
if (!FLAGS_use_txn) {
|
|
2231
|
-
#ifndef
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2618
|
+
#ifndef NDEBUG
|
|
2619
|
+
// Determine whether we need to ingest file metadata write failures
|
|
2620
|
+
// during DB reopen. If it does, enable it.
|
|
2621
|
+
// Only ingest metadata error if it is reopening, as initial open
|
|
2622
|
+
// failure doesn't need to be handled.
|
|
2623
|
+
// TODO cover transaction DB is not covered in this fault test too.
|
|
2624
|
+
bool ingest_meta_error = false;
|
|
2625
|
+
bool ingest_write_error = false;
|
|
2626
|
+
bool ingest_read_error = false;
|
|
2627
|
+
if ((FLAGS_open_metadata_write_fault_one_in ||
|
|
2628
|
+
FLAGS_open_write_fault_one_in || FLAGS_open_read_fault_one_in) &&
|
|
2629
|
+
fault_fs_guard
|
|
2630
|
+
->FileExists(FLAGS_db + "/CURRENT", IOOptions(), nullptr)
|
|
2631
|
+
.ok()) {
|
|
2632
|
+
if (!FLAGS_sync) {
|
|
2633
|
+
// When DB Stress is not sync mode, we expect all WAL writes to
|
|
2634
|
+
// WAL is durable. Buffering unsynced writes will cause false
|
|
2635
|
+
// positive in crash tests. Before we figure out a way to
|
|
2636
|
+
// solve it, skip WAL from failure injection.
|
|
2637
|
+
fault_fs_guard->SetSkipDirectWritableTypes({kWalFile});
|
|
2638
|
+
}
|
|
2639
|
+
ingest_meta_error = FLAGS_open_metadata_write_fault_one_in;
|
|
2640
|
+
ingest_write_error = FLAGS_open_write_fault_one_in;
|
|
2641
|
+
ingest_read_error = FLAGS_open_read_fault_one_in;
|
|
2642
|
+
if (ingest_meta_error) {
|
|
2643
|
+
fault_fs_guard->EnableMetadataWriteErrorInjection();
|
|
2644
|
+
fault_fs_guard->SetRandomMetadataWriteError(
|
|
2645
|
+
FLAGS_open_metadata_write_fault_one_in);
|
|
2646
|
+
}
|
|
2647
|
+
if (ingest_write_error) {
|
|
2648
|
+
fault_fs_guard->SetFilesystemDirectWritable(false);
|
|
2649
|
+
fault_fs_guard->EnableWriteErrorInjection();
|
|
2650
|
+
fault_fs_guard->SetRandomWriteError(
|
|
2651
|
+
static_cast<uint32_t>(FLAGS_seed), FLAGS_open_write_fault_one_in,
|
|
2652
|
+
IOStatus::IOError("Injected Open Error"),
|
|
2653
|
+
/*inject_for_all_file_types=*/true, /*types=*/{});
|
|
2245
2654
|
}
|
|
2246
|
-
|
|
2655
|
+
if (ingest_read_error) {
|
|
2656
|
+
fault_fs_guard->SetRandomReadError(FLAGS_open_read_fault_one_in);
|
|
2657
|
+
}
|
|
2658
|
+
}
|
|
2659
|
+
while (true) {
|
|
2660
|
+
#endif // NDEBUG
|
|
2661
|
+
#ifndef ROCKSDB_LITE
|
|
2662
|
+
// StackableDB-based BlobDB
|
|
2663
|
+
if (FLAGS_use_blob_db) {
|
|
2664
|
+
blob_db::BlobDBOptions blob_db_options;
|
|
2665
|
+
blob_db_options.min_blob_size = FLAGS_blob_db_min_blob_size;
|
|
2666
|
+
blob_db_options.bytes_per_sync = FLAGS_blob_db_bytes_per_sync;
|
|
2667
|
+
blob_db_options.blob_file_size = FLAGS_blob_db_file_size;
|
|
2668
|
+
blob_db_options.enable_garbage_collection = FLAGS_blob_db_enable_gc;
|
|
2669
|
+
blob_db_options.garbage_collection_cutoff = FLAGS_blob_db_gc_cutoff;
|
|
2670
|
+
|
|
2671
|
+
blob_db::BlobDB* blob_db = nullptr;
|
|
2672
|
+
s = blob_db::BlobDB::Open(options_, blob_db_options, FLAGS_db,
|
|
2673
|
+
cf_descriptors, &column_families_,
|
|
2674
|
+
&blob_db);
|
|
2675
|
+
if (s.ok()) {
|
|
2676
|
+
db_ = blob_db;
|
|
2677
|
+
}
|
|
2678
|
+
} else
|
|
2247
2679
|
#endif // !ROCKSDB_LITE
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2680
|
+
{
|
|
2681
|
+
if (db_preload_finished_.load() && FLAGS_read_only) {
|
|
2682
|
+
s = DB::OpenForReadOnly(DBOptions(options_), FLAGS_db,
|
|
2683
|
+
cf_descriptors, &column_families_, &db_);
|
|
2684
|
+
} else {
|
|
2685
|
+
s = DB::Open(DBOptions(options_), FLAGS_db, cf_descriptors,
|
|
2686
|
+
&column_families_, &db_);
|
|
2687
|
+
}
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2690
|
+
#ifndef NDEBUG
|
|
2691
|
+
if (ingest_meta_error || ingest_write_error || ingest_read_error) {
|
|
2692
|
+
fault_fs_guard->SetFilesystemDirectWritable(true);
|
|
2693
|
+
fault_fs_guard->DisableMetadataWriteErrorInjection();
|
|
2694
|
+
fault_fs_guard->DisableWriteErrorInjection();
|
|
2695
|
+
fault_fs_guard->SetSkipDirectWritableTypes({});
|
|
2696
|
+
fault_fs_guard->SetRandomReadError(0);
|
|
2697
|
+
if (s.ok()) {
|
|
2698
|
+
// Ingested errors might happen in background compactions. We
|
|
2699
|
+
// wait for all compactions to finish to make sure DB is in
|
|
2700
|
+
// clean state before executing queries.
|
|
2701
|
+
s = static_cast_with_check<DBImpl>(db_->GetRootDB())
|
|
2702
|
+
->TEST_WaitForCompact(true);
|
|
2703
|
+
if (!s.ok()) {
|
|
2704
|
+
for (auto cf : column_families_) {
|
|
2705
|
+
delete cf;
|
|
2706
|
+
}
|
|
2707
|
+
column_families_.clear();
|
|
2708
|
+
delete db_;
|
|
2709
|
+
db_ = nullptr;
|
|
2710
|
+
}
|
|
2711
|
+
}
|
|
2712
|
+
if (!s.ok()) {
|
|
2713
|
+
// After failure to opening a DB due to IO error, retry should
|
|
2714
|
+
// successfully open the DB with correct data if no IO error shows
|
|
2715
|
+
// up.
|
|
2716
|
+
ingest_meta_error = false;
|
|
2717
|
+
ingest_write_error = false;
|
|
2718
|
+
ingest_read_error = false;
|
|
2719
|
+
|
|
2720
|
+
Random rand(static_cast<uint32_t>(FLAGS_seed));
|
|
2721
|
+
if (rand.OneIn(2)) {
|
|
2722
|
+
fault_fs_guard->DeleteFilesCreatedAfterLastDirSync(IOOptions(),
|
|
2723
|
+
nullptr);
|
|
2724
|
+
}
|
|
2725
|
+
if (rand.OneIn(3)) {
|
|
2726
|
+
fault_fs_guard->DropUnsyncedFileData();
|
|
2727
|
+
} else if (rand.OneIn(2)) {
|
|
2728
|
+
fault_fs_guard->DropRandomUnsyncedFileData(&rand);
|
|
2729
|
+
}
|
|
2730
|
+
continue;
|
|
2731
|
+
}
|
|
2255
2732
|
}
|
|
2733
|
+
break;
|
|
2256
2734
|
}
|
|
2735
|
+
#endif // NDEBUG
|
|
2257
2736
|
} else {
|
|
2258
2737
|
#ifndef ROCKSDB_LITE
|
|
2259
2738
|
TransactionDBOptions txn_db_options;
|
|
@@ -2265,7 +2744,13 @@ void StressTest::Open() {
|
|
|
2265
2744
|
options_.unordered_write = true;
|
|
2266
2745
|
options_.two_write_queues = true;
|
|
2267
2746
|
txn_db_options.skip_concurrency_control = true;
|
|
2747
|
+
} else {
|
|
2748
|
+
options_.two_write_queues = FLAGS_two_write_queues;
|
|
2268
2749
|
}
|
|
2750
|
+
txn_db_options.wp_snapshot_cache_bits =
|
|
2751
|
+
static_cast<size_t>(FLAGS_wp_snapshot_cache_bits);
|
|
2752
|
+
txn_db_options.wp_commit_cache_bits =
|
|
2753
|
+
static_cast<size_t>(FLAGS_wp_commit_cache_bits);
|
|
2269
2754
|
s = TransactionDB::Open(options_, txn_db_options, FLAGS_db,
|
|
2270
2755
|
cf_descriptors, &column_families_, &txn_db_);
|
|
2271
2756
|
if (!s.ok()) {
|
|
@@ -2297,7 +2782,7 @@ void StressTest::Open() {
|
|
|
2297
2782
|
assert(!s.ok() || column_families_.size() ==
|
|
2298
2783
|
static_cast<size_t>(FLAGS_column_families));
|
|
2299
2784
|
|
|
2300
|
-
if (FLAGS_test_secondary) {
|
|
2785
|
+
if (s.ok() && FLAGS_test_secondary) {
|
|
2301
2786
|
#ifndef ROCKSDB_LITE
|
|
2302
2787
|
secondaries_.resize(FLAGS_threads);
|
|
2303
2788
|
std::fill(secondaries_.begin(), secondaries_.end(), nullptr);
|
|
@@ -2318,13 +2803,16 @@ void StressTest::Open() {
|
|
|
2318
2803
|
break;
|
|
2319
2804
|
}
|
|
2320
2805
|
}
|
|
2321
|
-
assert(s.ok());
|
|
2322
2806
|
#else
|
|
2323
2807
|
fprintf(stderr, "Secondary is not supported in RocksDBLite\n");
|
|
2324
2808
|
exit(1);
|
|
2325
2809
|
#endif
|
|
2326
2810
|
}
|
|
2327
|
-
|
|
2811
|
+
// Secondary instance does not support write-prepared/write-unprepared
|
|
2812
|
+
// transactions, thus just disable secondary instance if we use
|
|
2813
|
+
// transaction.
|
|
2814
|
+
if (s.ok() && FLAGS_continuous_verification_interval > 0 &&
|
|
2815
|
+
!FLAGS_use_txn && !cmp_db_) {
|
|
2328
2816
|
Options tmp_opts;
|
|
2329
2817
|
// TODO(yanqin) support max_open_files != -1 for secondary instance.
|
|
2330
2818
|
tmp_opts.max_open_files = -1;
|
|
@@ -2374,7 +2862,7 @@ void StressTest::Reopen(ThreadState* thread) {
|
|
|
2374
2862
|
// the db via a callbac ii) they hold on to a snapshot and the upcoming
|
|
2375
2863
|
// ::Close would complain about it.
|
|
2376
2864
|
const bool write_prepared = FLAGS_use_txn && FLAGS_txn_write_policy != 0;
|
|
2377
|
-
bool bg_canceled = false;
|
|
2865
|
+
bool bg_canceled __attribute__((unused)) = false;
|
|
2378
2866
|
if (write_prepared || thread->rand.OneIn(2)) {
|
|
2379
2867
|
const bool wait =
|
|
2380
2868
|
write_prepared || static_cast<bool>(thread->rand.OneIn(2));
|
|
@@ -2382,7 +2870,6 @@ void StressTest::Reopen(ThreadState* thread) {
|
|
|
2382
2870
|
bg_canceled = wait;
|
|
2383
2871
|
}
|
|
2384
2872
|
assert(!write_prepared || bg_canceled);
|
|
2385
|
-
(void) bg_canceled;
|
|
2386
2873
|
#else
|
|
2387
2874
|
(void) thread;
|
|
2388
2875
|
#endif
|
|
@@ -2420,11 +2907,80 @@ void StressTest::Reopen(ThreadState* thread) {
|
|
|
2420
2907
|
secondaries_.clear();
|
|
2421
2908
|
|
|
2422
2909
|
num_times_reopened_++;
|
|
2423
|
-
auto now =
|
|
2910
|
+
auto now = clock_->NowMicros();
|
|
2424
2911
|
fprintf(stdout, "%s Reopening database for the %dth time\n",
|
|
2425
|
-
|
|
2426
|
-
num_times_reopened_);
|
|
2912
|
+
clock_->TimeToString(now / 1000000).c_str(), num_times_reopened_);
|
|
2427
2913
|
Open();
|
|
2914
|
+
|
|
2915
|
+
if ((FLAGS_sync_fault_injection || FLAGS_disable_wal) && IsStateTracked()) {
|
|
2916
|
+
Status s = thread->shared->SaveAtAndAfter(db_);
|
|
2917
|
+
if (!s.ok()) {
|
|
2918
|
+
fprintf(stderr, "Error enabling history tracing: %s\n",
|
|
2919
|
+
s.ToString().c_str());
|
|
2920
|
+
exit(1);
|
|
2921
|
+
}
|
|
2922
|
+
}
|
|
2923
|
+
}
|
|
2924
|
+
|
|
2925
|
+
void StressTest::CheckAndSetOptionsForUserTimestamp() {
|
|
2926
|
+
assert(FLAGS_user_timestamp_size > 0);
|
|
2927
|
+
const Comparator* const cmp = test::BytewiseComparatorWithU64TsWrapper();
|
|
2928
|
+
assert(cmp);
|
|
2929
|
+
if (FLAGS_user_timestamp_size != cmp->timestamp_size()) {
|
|
2930
|
+
fprintf(stderr,
|
|
2931
|
+
"Only -user_timestamp_size=%d is supported in stress test.\n",
|
|
2932
|
+
static_cast<int>(cmp->timestamp_size()));
|
|
2933
|
+
exit(1);
|
|
2934
|
+
}
|
|
2935
|
+
if (FLAGS_use_merge || FLAGS_use_full_merge_v1) {
|
|
2936
|
+
fprintf(stderr, "Merge does not support timestamp yet.\n");
|
|
2937
|
+
exit(1);
|
|
2938
|
+
}
|
|
2939
|
+
if (FLAGS_delrangepercent > 0) {
|
|
2940
|
+
fprintf(stderr, "DeleteRange does not support timestamp yet.\n");
|
|
2941
|
+
exit(1);
|
|
2942
|
+
}
|
|
2943
|
+
if (FLAGS_use_txn) {
|
|
2944
|
+
fprintf(stderr, "TransactionDB does not support timestamp yet.\n");
|
|
2945
|
+
exit(1);
|
|
2946
|
+
}
|
|
2947
|
+
if (FLAGS_read_only) {
|
|
2948
|
+
fprintf(stderr, "When opened as read-only, timestamp not supported.\n");
|
|
2949
|
+
exit(1);
|
|
2950
|
+
}
|
|
2951
|
+
if (FLAGS_test_secondary || FLAGS_secondary_catch_up_one_in > 0 ||
|
|
2952
|
+
FLAGS_continuous_verification_interval > 0) {
|
|
2953
|
+
fprintf(stderr, "Secondary instance does not support timestamp.\n");
|
|
2954
|
+
exit(1);
|
|
2955
|
+
}
|
|
2956
|
+
if (FLAGS_checkpoint_one_in > 0) {
|
|
2957
|
+
fprintf(stderr,
|
|
2958
|
+
"-checkpoint_one_in=%d requires "
|
|
2959
|
+
"DBImplReadOnly, which is not supported with timestamp\n",
|
|
2960
|
+
FLAGS_checkpoint_one_in);
|
|
2961
|
+
exit(1);
|
|
2962
|
+
}
|
|
2963
|
+
#ifndef ROCKSDB_LITE
|
|
2964
|
+
if (FLAGS_enable_blob_files || FLAGS_use_blob_db) {
|
|
2965
|
+
fprintf(stderr, "BlobDB not supported with timestamp.\n");
|
|
2966
|
+
exit(1);
|
|
2967
|
+
}
|
|
2968
|
+
#endif // !ROCKSDB_LITE
|
|
2969
|
+
if (FLAGS_enable_compaction_filter) {
|
|
2970
|
+
fprintf(stderr, "CompactionFilter not supported with timestamp.\n");
|
|
2971
|
+
exit(1);
|
|
2972
|
+
}
|
|
2973
|
+
if (FLAGS_test_cf_consistency || FLAGS_test_batches_snapshots) {
|
|
2974
|
+
fprintf(stderr,
|
|
2975
|
+
"Due to per-key ts-seq ordering constraint, only the (default) "
|
|
2976
|
+
"non-batched test is supported with timestamp.\n");
|
|
2977
|
+
exit(1);
|
|
2978
|
+
}
|
|
2979
|
+
if (FLAGS_ingest_external_file_one_in > 0) {
|
|
2980
|
+
fprintf(stderr, "Bulk loading may not support timestamp yet.\n");
|
|
2981
|
+
exit(1);
|
|
2982
|
+
}
|
|
2983
|
+
options_.comparator = cmp;
|
|
2428
2984
|
}
|
|
2429
2985
|
} // namespace ROCKSDB_NAMESPACE
|
|
2430
2986
|
#endif // GFLAGS
|