@nxtedition/rocksdb 7.1.14 → 7.1.15
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 +1 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +72 -18
- package/deps/rocksdb/rocksdb/Makefile +91 -11
- package/deps/rocksdb/rocksdb/TARGETS +8 -4
- package/deps/rocksdb/rocksdb/cache/cache.cc +5 -0
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +13 -8
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +2 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +116 -57
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +958 -459
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +407 -622
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +104 -40
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +23 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +350 -184
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +12 -2
- package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +2 -0
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +130 -43
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +24 -2
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +423 -98
- package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +19 -2
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +10 -7
- package/deps/rocksdb/rocksdb/crash_test.mk +2 -2
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +46 -26
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +9 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +90 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +56 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -10
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +64 -59
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +11 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +92 -62
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +159 -136
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -13
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +129 -57
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +81 -3
- package/deps/rocksdb/rocksdb/db/c.cc +29 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +10 -1
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -36
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +344 -102
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +163 -28
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +52 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +35 -30
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -3
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +167 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +8 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +10 -13
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +0 -117
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +6 -49
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -4
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +18 -11
- package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +4 -10
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +12 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -93
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +28 -32
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +2 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +11 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +76 -138
- package/deps/rocksdb/rocksdb/db/db_iter.h +26 -23
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +931 -0
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +2 -2
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +44 -22
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -14
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_write_test.cc +45 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +5 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +24 -12
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +7 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +3 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +79 -18
- package/deps/rocksdb/rocksdb/db/memtable.h +5 -0
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +26 -4
- package/deps/rocksdb/rocksdb/db/memtable_list.h +2 -1
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +113 -0
- package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +110 -0
- package/deps/rocksdb/rocksdb/db/{periodic_work_scheduler_test.cc → periodic_task_scheduler_test.cc} +33 -39
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +12 -20
- package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +6 -5
- package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +20 -5
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +14 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +17 -8
- package/deps/rocksdb/rocksdb/db/repair_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +49 -66
- package/deps/rocksdb/rocksdb/db/table_cache.cc +92 -63
- package/deps/rocksdb/rocksdb/db/table_cache.h +16 -9
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +2 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -3
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set.cc +379 -145
- package/deps/rocksdb/rocksdb/db/version_set.h +26 -24
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +9 -9
- package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
- package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +5 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +71 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +14 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +23 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +26 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +105 -34
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +16 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +282 -25
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
- package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +367 -177
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +144 -56
- package/deps/rocksdb/rocksdb/file/filename.cc +3 -3
- package/deps/rocksdb/rocksdb/file/filename.h +4 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +415 -0
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +2 -0
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +36 -45
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +21 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +11 -11
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +15 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +163 -68
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +21 -17
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +3 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +2 -1
- package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.cc +4 -2
- package/deps/rocksdb/rocksdb/monitoring/histogram.h +2 -0
- package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +15 -1
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +17 -0
- package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +14 -3
- package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +3 -0
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +50 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +31 -32
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -1
- package/deps/rocksdb/rocksdb/options/options.cc +2 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -0
- package/deps/rocksdb/rocksdb/src.mk +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block.h +9 -8
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +110 -99
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +12 -10
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +11 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +138 -83
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +25 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +31 -30
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +16 -13
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +4 -4
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +17 -19
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
- package/deps/rocksdb/rocksdb/table/format.cc +26 -29
- package/deps/rocksdb/rocksdb/table/format.h +44 -26
- package/deps/rocksdb/rocksdb/table/get_context.cc +17 -12
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +7 -0
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +4 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +950 -104
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +28 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +3 -2
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -1
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +10 -9
- package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +22 -20
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +9 -21
- package/deps/rocksdb/rocksdb/table/table_test.cc +12 -12
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +4 -4
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +1 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +116 -34
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +6 -1
- package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/util/autovector.h +12 -0
- package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +3 -2
- package/deps/rocksdb/rocksdb/util/stderr_logger.cc +30 -0
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +5 -18
- package/deps/rocksdb/rocksdb/util/timer.h +2 -3
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -2
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +34 -53
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +9 -14
- package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +4 -3
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +3 -1
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +26 -8
- package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +114 -16
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +59 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +39 -0
- package/deps/rocksdb/rocksdb.gyp +0 -1
- package/index.js +6 -10
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +0 -168
- package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +0 -90
|
@@ -803,7 +803,6 @@ class Version {
|
|
|
803
803
|
void AddIterators(const ReadOptions& read_options,
|
|
804
804
|
const FileOptions& soptions,
|
|
805
805
|
MergeIteratorBuilder* merger_iter_builder,
|
|
806
|
-
RangeDelAggregator* range_del_agg,
|
|
807
806
|
bool allow_unprepared_value);
|
|
808
807
|
|
|
809
808
|
// @param read_options Must outlive any iterator built by
|
|
@@ -811,8 +810,7 @@ class Version {
|
|
|
811
810
|
void AddIteratorsForLevel(const ReadOptions& read_options,
|
|
812
811
|
const FileOptions& soptions,
|
|
813
812
|
MergeIteratorBuilder* merger_iter_builder,
|
|
814
|
-
int level,
|
|
815
|
-
bool allow_unprepared_value);
|
|
813
|
+
int level, bool allow_unprepared_value);
|
|
816
814
|
|
|
817
815
|
Status OverlapWithLevelIterator(const ReadOptions&, const FileOptions&,
|
|
818
816
|
const Slice& smallest_user_key,
|
|
@@ -961,7 +959,9 @@ class Version {
|
|
|
961
959
|
|
|
962
960
|
const MutableCFOptions& GetMutableCFOptions() { return mutable_cf_options_; }
|
|
963
961
|
|
|
964
|
-
|
|
962
|
+
InternalIterator* TEST_GetLevelIterator(
|
|
963
|
+
const ReadOptions& read_options, MergeIteratorBuilder* merge_iter_builder,
|
|
964
|
+
int level, bool allow_unprepared_value);
|
|
965
965
|
|
|
966
966
|
private:
|
|
967
967
|
Env* env_;
|
|
@@ -1014,15 +1014,14 @@ class Version {
|
|
|
1014
1014
|
// queue coroutine tasks to mget_tasks. It may also split the input batch
|
|
1015
1015
|
// by creating a new batch with keys definitely not in this level and
|
|
1016
1016
|
// enqueuing it to to_process.
|
|
1017
|
-
Status ProcessBatch(
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
uint64_t& num_index_read, uint64_t& num_sst_read);
|
|
1017
|
+
Status ProcessBatch(
|
|
1018
|
+
const ReadOptions& read_options, FilePickerMultiGet* batch,
|
|
1019
|
+
std::vector<folly::coro::Task<Status>>& mget_tasks,
|
|
1020
|
+
std::unordered_map<uint64_t, BlobReadContexts>* blob_ctxs,
|
|
1021
|
+
autovector<FilePickerMultiGet, 4>& batches, std::deque<size_t>& waiting,
|
|
1022
|
+
std::deque<size_t>& to_process, unsigned int& num_tasks_queued,
|
|
1023
|
+
std::unordered_map<int, std::tuple<uint64_t, uint64_t, uint64_t>>&
|
|
1024
|
+
mget_stats);
|
|
1026
1025
|
#endif
|
|
1027
1026
|
|
|
1028
1027
|
ColumnFamilyData* cfd_; // ColumnFamilyData to which this Version belongs
|
|
@@ -1099,13 +1098,14 @@ class VersionSet {
|
|
|
1099
1098
|
|
|
1100
1099
|
Status LogAndApplyToDefaultColumnFamily(
|
|
1101
1100
|
VersionEdit* edit, InstrumentedMutex* mu,
|
|
1102
|
-
FSDirectory*
|
|
1101
|
+
FSDirectory* dir_contains_current_file, bool new_descriptor_log = false,
|
|
1103
1102
|
const ColumnFamilyOptions* column_family_options = nullptr) {
|
|
1104
1103
|
ColumnFamilyData* default_cf = GetColumnFamilySet()->GetDefault();
|
|
1105
1104
|
const MutableCFOptions* cf_options =
|
|
1106
1105
|
default_cf->GetLatestMutableCFOptions();
|
|
1107
|
-
return LogAndApply(default_cf, *cf_options, edit, mu,
|
|
1108
|
-
new_descriptor_log,
|
|
1106
|
+
return LogAndApply(default_cf, *cf_options, edit, mu,
|
|
1107
|
+
dir_contains_current_file, new_descriptor_log,
|
|
1108
|
+
column_family_options);
|
|
1109
1109
|
}
|
|
1110
1110
|
|
|
1111
1111
|
// Apply *edit to the current version to form a new descriptor that
|
|
@@ -1117,7 +1117,7 @@ class VersionSet {
|
|
|
1117
1117
|
Status LogAndApply(
|
|
1118
1118
|
ColumnFamilyData* column_family_data,
|
|
1119
1119
|
const MutableCFOptions& mutable_cf_options, VersionEdit* edit,
|
|
1120
|
-
InstrumentedMutex* mu, FSDirectory*
|
|
1120
|
+
InstrumentedMutex* mu, FSDirectory* dir_contains_current_file,
|
|
1121
1121
|
bool new_descriptor_log = false,
|
|
1122
1122
|
const ColumnFamilyOptions* column_family_options = nullptr) {
|
|
1123
1123
|
autovector<ColumnFamilyData*> cfds;
|
|
@@ -1129,7 +1129,8 @@ class VersionSet {
|
|
|
1129
1129
|
edit_list.emplace_back(edit);
|
|
1130
1130
|
edit_lists.emplace_back(edit_list);
|
|
1131
1131
|
return LogAndApply(cfds, mutable_cf_options_list, edit_lists, mu,
|
|
1132
|
-
|
|
1132
|
+
dir_contains_current_file, new_descriptor_log,
|
|
1133
|
+
column_family_options);
|
|
1133
1134
|
}
|
|
1134
1135
|
// The batch version. If edit_list.size() > 1, caller must ensure that
|
|
1135
1136
|
// no edit in the list column family add or drop
|
|
@@ -1137,7 +1138,7 @@ class VersionSet {
|
|
|
1137
1138
|
ColumnFamilyData* column_family_data,
|
|
1138
1139
|
const MutableCFOptions& mutable_cf_options,
|
|
1139
1140
|
const autovector<VersionEdit*>& edit_list, InstrumentedMutex* mu,
|
|
1140
|
-
FSDirectory*
|
|
1141
|
+
FSDirectory* dir_contains_current_file, bool new_descriptor_log = false,
|
|
1141
1142
|
const ColumnFamilyOptions* column_family_options = nullptr,
|
|
1142
1143
|
const std::function<void(const Status&)>& manifest_wcb = {}) {
|
|
1143
1144
|
autovector<ColumnFamilyData*> cfds;
|
|
@@ -1147,8 +1148,8 @@ class VersionSet {
|
|
|
1147
1148
|
autovector<autovector<VersionEdit*>> edit_lists;
|
|
1148
1149
|
edit_lists.emplace_back(edit_list);
|
|
1149
1150
|
return LogAndApply(cfds, mutable_cf_options_list, edit_lists, mu,
|
|
1150
|
-
|
|
1151
|
-
{manifest_wcb});
|
|
1151
|
+
dir_contains_current_file, new_descriptor_log,
|
|
1152
|
+
column_family_options, {manifest_wcb});
|
|
1152
1153
|
}
|
|
1153
1154
|
|
|
1154
1155
|
// The across-multi-cf batch version. If edit_lists contain more than
|
|
@@ -1158,7 +1159,7 @@ class VersionSet {
|
|
|
1158
1159
|
const autovector<ColumnFamilyData*>& cfds,
|
|
1159
1160
|
const autovector<const MutableCFOptions*>& mutable_cf_options_list,
|
|
1160
1161
|
const autovector<autovector<VersionEdit*>>& edit_lists,
|
|
1161
|
-
InstrumentedMutex* mu, FSDirectory*
|
|
1162
|
+
InstrumentedMutex* mu, FSDirectory* dir_contains_current_file,
|
|
1162
1163
|
bool new_descriptor_log = false,
|
|
1163
1164
|
const ColumnFamilyOptions* new_cf_options = nullptr,
|
|
1164
1165
|
const std::vector<std::function<void(const Status&)>>& manifest_wcbs =
|
|
@@ -1574,7 +1575,8 @@ class VersionSet {
|
|
|
1574
1575
|
private:
|
|
1575
1576
|
// REQUIRES db mutex at beginning. may release and re-acquire db mutex
|
|
1576
1577
|
Status ProcessManifestWrites(std::deque<ManifestWriter>& writers,
|
|
1577
|
-
InstrumentedMutex* mu,
|
|
1578
|
+
InstrumentedMutex* mu,
|
|
1579
|
+
FSDirectory* dir_contains_current_file,
|
|
1578
1580
|
bool new_descriptor_log,
|
|
1579
1581
|
const ColumnFamilyOptions* new_cf_options);
|
|
1580
1582
|
|
|
@@ -1636,7 +1638,7 @@ class ReactiveVersionSet : public VersionSet {
|
|
|
1636
1638
|
const autovector<ColumnFamilyData*>& /*cfds*/,
|
|
1637
1639
|
const autovector<const MutableCFOptions*>& /*mutable_cf_options_list*/,
|
|
1638
1640
|
const autovector<autovector<VersionEdit*>>& /*edit_lists*/,
|
|
1639
|
-
InstrumentedMutex* /*mu*/, FSDirectory* /*
|
|
1641
|
+
InstrumentedMutex* /*mu*/, FSDirectory* /*dir_contains_current_file*/,
|
|
1640
1642
|
bool /*new_descriptor_log*/, const ColumnFamilyOptions* /*new_cf_option*/,
|
|
1641
1643
|
const std::vector<std::function<void(const Status&)>>& /*manifest_wcbs*/)
|
|
1642
1644
|
override {
|
|
@@ -1272,7 +1272,7 @@ class VersionSetTestBase {
|
|
|
1272
1272
|
mutex_.Lock();
|
|
1273
1273
|
Status s =
|
|
1274
1274
|
versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
|
|
1275
|
-
mutable_cf_options_, &edit, &mutex_);
|
|
1275
|
+
mutable_cf_options_, &edit, &mutex_, nullptr);
|
|
1276
1276
|
mutex_.Unlock();
|
|
1277
1277
|
return s;
|
|
1278
1278
|
}
|
|
@@ -1286,7 +1286,7 @@ class VersionSetTestBase {
|
|
|
1286
1286
|
mutex_.Lock();
|
|
1287
1287
|
Status s =
|
|
1288
1288
|
versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
|
|
1289
|
-
mutable_cf_options_, vedits, &mutex_);
|
|
1289
|
+
mutable_cf_options_, vedits, &mutex_, nullptr);
|
|
1290
1290
|
mutex_.Unlock();
|
|
1291
1291
|
return s;
|
|
1292
1292
|
}
|
|
@@ -1384,8 +1384,8 @@ TEST_F(VersionSetTest, SameColumnFamilyGroupCommit) {
|
|
|
1384
1384
|
});
|
|
1385
1385
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
1386
1386
|
mutex_.Lock();
|
|
1387
|
-
Status s =
|
|
1388
|
-
|
|
1387
|
+
Status s = versions_->LogAndApply(cfds, all_mutable_cf_options, edit_lists,
|
|
1388
|
+
&mutex_, nullptr);
|
|
1389
1389
|
mutex_.Unlock();
|
|
1390
1390
|
EXPECT_OK(s);
|
|
1391
1391
|
EXPECT_EQ(kGroupSize - 1, count);
|
|
@@ -1587,7 +1587,7 @@ TEST_F(VersionSetTest, ObsoleteBlobFile) {
|
|
|
1587
1587
|
mutex_.Lock();
|
|
1588
1588
|
Status s =
|
|
1589
1589
|
versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
|
|
1590
|
-
mutable_cf_options_, &edit, &mutex_);
|
|
1590
|
+
mutable_cf_options_, &edit, &mutex_, nullptr);
|
|
1591
1591
|
mutex_.Unlock();
|
|
1592
1592
|
|
|
1593
1593
|
ASSERT_OK(s);
|
|
@@ -2194,7 +2194,7 @@ class VersionSetWithTimestampTest : public VersionSetTest {
|
|
|
2194
2194
|
Status s;
|
|
2195
2195
|
mutex_.Lock();
|
|
2196
2196
|
s = versions_->LogAndApply(cfd_, *(cfd_->GetLatestMutableCFOptions()),
|
|
2197
|
-
edits_, &mutex_);
|
|
2197
|
+
edits_, &mutex_, nullptr);
|
|
2198
2198
|
mutex_.Unlock();
|
|
2199
2199
|
ASSERT_OK(s);
|
|
2200
2200
|
VerifyFullHistoryTsLow(*std::max_element(ts_lbs.begin(), ts_lbs.end()));
|
|
@@ -2661,7 +2661,7 @@ TEST_P(VersionSetTestDropOneCF, HandleDroppedColumnFamilyInAtomicGroup) {
|
|
|
2661
2661
|
mutex_.Lock();
|
|
2662
2662
|
s = versions_->LogAndApply(cfd_to_drop,
|
|
2663
2663
|
*cfd_to_drop->GetLatestMutableCFOptions(),
|
|
2664
|
-
&drop_cf_edit, &mutex_);
|
|
2664
|
+
&drop_cf_edit, &mutex_, nullptr);
|
|
2665
2665
|
mutex_.Unlock();
|
|
2666
2666
|
ASSERT_OK(s);
|
|
2667
2667
|
|
|
@@ -2710,8 +2710,8 @@ TEST_P(VersionSetTestDropOneCF, HandleDroppedColumnFamilyInAtomicGroup) {
|
|
|
2710
2710
|
});
|
|
2711
2711
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
2712
2712
|
mutex_.Lock();
|
|
2713
|
-
s = versions_->LogAndApply(cfds, mutable_cf_options_list, edit_lists,
|
|
2714
|
-
|
|
2713
|
+
s = versions_->LogAndApply(cfds, mutable_cf_options_list, edit_lists, &mutex_,
|
|
2714
|
+
nullptr);
|
|
2715
2715
|
mutex_.Unlock();
|
|
2716
2716
|
ASSERT_OK(s);
|
|
2717
2717
|
ASSERT_EQ(1, called);
|
|
@@ -31,12 +31,13 @@ class OfflineManifestWriter {
|
|
|
31
31
|
return versions_.Recover(column_families);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
Status LogAndApply(ColumnFamilyData* cfd, VersionEdit* edit
|
|
34
|
+
Status LogAndApply(ColumnFamilyData* cfd, VersionEdit* edit,
|
|
35
|
+
FSDirectory* dir_contains_current_file) {
|
|
35
36
|
// Use `mutex` to imitate a locked DB mutex when calling `LogAndApply()`.
|
|
36
37
|
InstrumentedMutex mutex;
|
|
37
38
|
mutex.Lock();
|
|
38
39
|
Status s = versions_.LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(),
|
|
39
|
-
edit, &mutex,
|
|
40
|
+
edit, &mutex, dir_contains_current_file,
|
|
40
41
|
false /* new_descriptor_log */);
|
|
41
42
|
mutex.Unlock();
|
|
42
43
|
return s;
|
|
@@ -38,6 +38,9 @@ TEST_F(DBWideBasicTest, PutEntity) {
|
|
|
38
38
|
constexpr char third_value[] = "baz";
|
|
39
39
|
|
|
40
40
|
auto verify = [&]() {
|
|
41
|
+
const WideColumns expected_third_columns{
|
|
42
|
+
{kDefaultWideColumnName, third_value}};
|
|
43
|
+
|
|
41
44
|
{
|
|
42
45
|
PinnableSlice result;
|
|
43
46
|
ASSERT_OK(db_->Get(ReadOptions(), db_->DefaultColumnFamily(), first_key,
|
|
@@ -78,8 +81,7 @@ TEST_F(DBWideBasicTest, PutEntity) {
|
|
|
78
81
|
ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
|
|
79
82
|
third_key, &result));
|
|
80
83
|
|
|
81
|
-
|
|
82
|
-
ASSERT_EQ(result.columns(), expected_columns);
|
|
84
|
+
ASSERT_EQ(result.columns(), expected_third_columns);
|
|
83
85
|
}
|
|
84
86
|
|
|
85
87
|
{
|
|
@@ -110,18 +112,21 @@ TEST_F(DBWideBasicTest, PutEntity) {
|
|
|
110
112
|
ASSERT_OK(iter->status());
|
|
111
113
|
ASSERT_EQ(iter->key(), first_key);
|
|
112
114
|
ASSERT_EQ(iter->value(), first_value_of_default_column);
|
|
115
|
+
ASSERT_EQ(iter->columns(), first_columns);
|
|
113
116
|
|
|
114
117
|
iter->Next();
|
|
115
118
|
ASSERT_TRUE(iter->Valid());
|
|
116
119
|
ASSERT_OK(iter->status());
|
|
117
120
|
ASSERT_EQ(iter->key(), second_key);
|
|
118
121
|
ASSERT_TRUE(iter->value().empty());
|
|
122
|
+
ASSERT_EQ(iter->columns(), second_columns);
|
|
119
123
|
|
|
120
124
|
iter->Next();
|
|
121
125
|
ASSERT_TRUE(iter->Valid());
|
|
122
126
|
ASSERT_OK(iter->status());
|
|
123
127
|
ASSERT_EQ(iter->key(), third_key);
|
|
124
128
|
ASSERT_EQ(iter->value(), third_value);
|
|
129
|
+
ASSERT_EQ(iter->columns(), expected_third_columns);
|
|
125
130
|
|
|
126
131
|
iter->Next();
|
|
127
132
|
ASSERT_FALSE(iter->Valid());
|
|
@@ -132,18 +137,21 @@ TEST_F(DBWideBasicTest, PutEntity) {
|
|
|
132
137
|
ASSERT_OK(iter->status());
|
|
133
138
|
ASSERT_EQ(iter->key(), third_key);
|
|
134
139
|
ASSERT_EQ(iter->value(), third_value);
|
|
140
|
+
ASSERT_EQ(iter->columns(), expected_third_columns);
|
|
135
141
|
|
|
136
142
|
iter->Prev();
|
|
137
143
|
ASSERT_TRUE(iter->Valid());
|
|
138
144
|
ASSERT_OK(iter->status());
|
|
139
145
|
ASSERT_EQ(iter->key(), second_key);
|
|
140
146
|
ASSERT_TRUE(iter->value().empty());
|
|
147
|
+
ASSERT_EQ(iter->columns(), second_columns);
|
|
141
148
|
|
|
142
149
|
iter->Prev();
|
|
143
150
|
ASSERT_TRUE(iter->Valid());
|
|
144
151
|
ASSERT_OK(iter->status());
|
|
145
152
|
ASSERT_EQ(iter->key(), first_key);
|
|
146
153
|
ASSERT_EQ(iter->value(), first_value_of_default_column);
|
|
154
|
+
ASSERT_EQ(iter->columns(), first_columns);
|
|
147
155
|
|
|
148
156
|
iter->Prev();
|
|
149
157
|
ASSERT_FALSE(iter->Valid());
|
|
@@ -24,8 +24,8 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
24
24
|
Status TestPut(ThreadState* thread, WriteOptions& write_opts,
|
|
25
25
|
const ReadOptions& /* read_opts */,
|
|
26
26
|
const std::vector<int>& rand_column_families,
|
|
27
|
-
const std::vector<int64_t>& rand_keys,
|
|
28
|
-
|
|
27
|
+
const std::vector<int64_t>& rand_keys,
|
|
28
|
+
char (&value)[100]) override {
|
|
29
29
|
uint32_t value_base =
|
|
30
30
|
thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
|
|
31
31
|
size_t sz = GenerateValue(value_base, value, sizeof(value));
|
|
@@ -66,8 +66,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
66
66
|
// in DB atomically i.e in a single batch. Also refer MultiGet.
|
|
67
67
|
Status TestDelete(ThreadState* thread, WriteOptions& writeoptions,
|
|
68
68
|
const std::vector<int>& rand_column_families,
|
|
69
|
-
const std::vector<int64_t>& rand_keys
|
|
70
|
-
std::unique_ptr<MutexLock>& /* lock */) override {
|
|
69
|
+
const std::vector<int64_t>& rand_keys) override {
|
|
71
70
|
std::string keys[10] = {"9", "7", "5", "3", "1", "8", "6", "4", "2", "0"};
|
|
72
71
|
|
|
73
72
|
WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
|
|
@@ -95,8 +94,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
95
94
|
Status TestDeleteRange(ThreadState* /* thread */,
|
|
96
95
|
WriteOptions& /* write_opts */,
|
|
97
96
|
const std::vector<int>& /* rand_column_families */,
|
|
98
|
-
const std::vector<int64_t>& /* rand_keys
|
|
99
|
-
std::unique_ptr<MutexLock>& /* lock */) override {
|
|
97
|
+
const std::vector<int64_t>& /* rand_keys */) override {
|
|
100
98
|
assert(false);
|
|
101
99
|
return Status::NotSupported(
|
|
102
100
|
"BatchedOpsStressTest does not support "
|
|
@@ -106,8 +104,7 @@ class BatchedOpsStressTest : public StressTest {
|
|
|
106
104
|
void TestIngestExternalFile(
|
|
107
105
|
ThreadState* /* thread */,
|
|
108
106
|
const std::vector<int>& /* rand_column_families */,
|
|
109
|
-
const std::vector<int64_t>& /* rand_keys
|
|
110
|
-
std::unique_ptr<MutexLock>& /* lock */) override {
|
|
107
|
+
const std::vector<int64_t>& /* rand_keys */) override {
|
|
111
108
|
assert(false);
|
|
112
109
|
fprintf(stderr,
|
|
113
110
|
"BatchedOpsStressTest does not support "
|
|
@@ -23,8 +23,8 @@ class CfConsistencyStressTest : public StressTest {
|
|
|
23
23
|
Status TestPut(ThreadState* thread, WriteOptions& write_opts,
|
|
24
24
|
const ReadOptions& /* read_opts */,
|
|
25
25
|
const std::vector<int>& rand_column_families,
|
|
26
|
-
const std::vector<int64_t>& rand_keys,
|
|
27
|
-
|
|
26
|
+
const std::vector<int64_t>& rand_keys,
|
|
27
|
+
char (&value)[100]) override {
|
|
28
28
|
std::string key_str = Key(rand_keys[0]);
|
|
29
29
|
Slice key = key_str;
|
|
30
30
|
uint64_t value_base = batch_id_.fetch_add(1);
|
|
@@ -54,8 +54,7 @@ class CfConsistencyStressTest : public StressTest {
|
|
|
54
54
|
|
|
55
55
|
Status TestDelete(ThreadState* thread, WriteOptions& write_opts,
|
|
56
56
|
const std::vector<int>& rand_column_families,
|
|
57
|
-
const std::vector<int64_t>& rand_keys
|
|
58
|
-
std::unique_ptr<MutexLock>& /* lock */) override {
|
|
57
|
+
const std::vector<int64_t>& rand_keys) override {
|
|
59
58
|
std::string key_str = Key(rand_keys[0]);
|
|
60
59
|
Slice key = key_str;
|
|
61
60
|
WriteBatch batch;
|
|
@@ -75,8 +74,7 @@ class CfConsistencyStressTest : public StressTest {
|
|
|
75
74
|
|
|
76
75
|
Status TestDeleteRange(ThreadState* thread, WriteOptions& write_opts,
|
|
77
76
|
const std::vector<int>& rand_column_families,
|
|
78
|
-
const std::vector<int64_t>& rand_keys
|
|
79
|
-
std::unique_ptr<MutexLock>& /* lock */) override {
|
|
77
|
+
const std::vector<int64_t>& rand_keys) override {
|
|
80
78
|
int64_t rand_key = rand_keys[0];
|
|
81
79
|
auto shared = thread->shared;
|
|
82
80
|
int64_t max_key = shared->GetMaxKey();
|
|
@@ -107,8 +105,7 @@ class CfConsistencyStressTest : public StressTest {
|
|
|
107
105
|
void TestIngestExternalFile(
|
|
108
106
|
ThreadState* /* thread */,
|
|
109
107
|
const std::vector<int>& /* rand_column_families */,
|
|
110
|
-
const std::vector<int64_t>& /* rand_keys
|
|
111
|
-
std::unique_ptr<MutexLock>& /* lock */) override {
|
|
108
|
+
const std::vector<int64_t>& /* rand_keys */) override {
|
|
112
109
|
assert(false);
|
|
113
110
|
fprintf(stderr,
|
|
114
111
|
"CfConsistencyStressTest does not support TestIngestExternalFile "
|
|
@@ -15,9 +15,11 @@ int main() {
|
|
|
15
15
|
return 1;
|
|
16
16
|
}
|
|
17
17
|
#else
|
|
18
|
+
#include "port/stack_trace.h"
|
|
18
19
|
#include "rocksdb/db_stress_tool.h"
|
|
19
20
|
|
|
20
21
|
int main(int argc, char** argv) {
|
|
22
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
21
23
|
return ROCKSDB_NAMESPACE::db_stress_tool(argc, argv);
|
|
22
24
|
}
|
|
23
25
|
#endif // GFLAGS
|
|
@@ -346,5 +346,76 @@ std::shared_ptr<FileChecksumGenFactory> GetFileChecksumImpl(
|
|
|
346
346
|
return std::make_shared<DbStressChecksumGenFactory>(internal_name);
|
|
347
347
|
}
|
|
348
348
|
|
|
349
|
+
Status DeleteFilesInDirectory(const std::string& dirname) {
|
|
350
|
+
std::vector<std::string> filenames;
|
|
351
|
+
Status s = Env::Default()->GetChildren(dirname, &filenames);
|
|
352
|
+
for (size_t i = 0; s.ok() && i < filenames.size(); ++i) {
|
|
353
|
+
s = Env::Default()->DeleteFile(dirname + "/" + filenames[i]);
|
|
354
|
+
}
|
|
355
|
+
return s;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
Status SaveFilesInDirectory(const std::string& src_dirname,
|
|
359
|
+
const std::string& dst_dirname) {
|
|
360
|
+
std::vector<std::string> filenames;
|
|
361
|
+
Status s = Env::Default()->GetChildren(src_dirname, &filenames);
|
|
362
|
+
for (size_t i = 0; s.ok() && i < filenames.size(); ++i) {
|
|
363
|
+
bool is_dir = false;
|
|
364
|
+
s = Env::Default()->IsDirectory(src_dirname + "/" + filenames[i], &is_dir);
|
|
365
|
+
if (s.ok()) {
|
|
366
|
+
if (is_dir) {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
s = Env::Default()->LinkFile(src_dirname + "/" + filenames[i],
|
|
370
|
+
dst_dirname + "/" + filenames[i]);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return s;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
Status InitUnverifiedSubdir(const std::string& dirname) {
|
|
377
|
+
Status s = Env::Default()->FileExists(dirname);
|
|
378
|
+
if (s.IsNotFound()) {
|
|
379
|
+
return Status::OK();
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
const std::string kUnverifiedDirname = dirname + "/unverified";
|
|
383
|
+
if (s.ok()) {
|
|
384
|
+
s = Env::Default()->CreateDirIfMissing(kUnverifiedDirname);
|
|
385
|
+
}
|
|
386
|
+
if (s.ok()) {
|
|
387
|
+
// It might already exist with some stale contents. Delete any such
|
|
388
|
+
// contents.
|
|
389
|
+
s = DeleteFilesInDirectory(kUnverifiedDirname);
|
|
390
|
+
}
|
|
391
|
+
if (s.ok()) {
|
|
392
|
+
s = SaveFilesInDirectory(dirname, kUnverifiedDirname);
|
|
393
|
+
}
|
|
394
|
+
return s;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
Status DestroyUnverifiedSubdir(const std::string& dirname) {
|
|
398
|
+
Status s = Env::Default()->FileExists(dirname);
|
|
399
|
+
if (s.IsNotFound()) {
|
|
400
|
+
return Status::OK();
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
const std::string kUnverifiedDirname = dirname + "/unverified";
|
|
404
|
+
if (s.ok()) {
|
|
405
|
+
s = Env::Default()->FileExists(kUnverifiedDirname);
|
|
406
|
+
}
|
|
407
|
+
if (s.IsNotFound()) {
|
|
408
|
+
return Status::OK();
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
if (s.ok()) {
|
|
412
|
+
s = DeleteFilesInDirectory(kUnverifiedDirname);
|
|
413
|
+
}
|
|
414
|
+
if (s.ok()) {
|
|
415
|
+
s = Env::Default()->DeleteDir(kUnverifiedDirname);
|
|
416
|
+
}
|
|
417
|
+
return s;
|
|
418
|
+
}
|
|
419
|
+
|
|
349
420
|
} // namespace ROCKSDB_NAMESPACE
|
|
350
421
|
#endif // GFLAGS
|
|
@@ -312,6 +312,14 @@ DECLARE_bool(allow_data_in_errors);
|
|
|
312
312
|
DECLARE_bool(enable_tiered_storage); // set last_level_temperature
|
|
313
313
|
DECLARE_int64(preclude_last_level_data_seconds);
|
|
314
314
|
|
|
315
|
+
DECLARE_int32(verify_iterator_with_expected_state_one_in);
|
|
316
|
+
DECLARE_bool(preserve_unverified_changes);
|
|
317
|
+
|
|
318
|
+
DECLARE_uint64(readahead_size);
|
|
319
|
+
DECLARE_uint64(initial_auto_readahead_size);
|
|
320
|
+
DECLARE_uint64(max_auto_readahead_size);
|
|
321
|
+
DECLARE_uint64(num_file_reads_for_auto_readahead);
|
|
322
|
+
|
|
315
323
|
constexpr long KB = 1024;
|
|
316
324
|
constexpr int kRandomValueMaxFactor = 3;
|
|
317
325
|
constexpr int kValueMaxLen = 100;
|
|
@@ -624,5 +632,11 @@ extern std::string GetNowNanos();
|
|
|
624
632
|
|
|
625
633
|
std::shared_ptr<FileChecksumGenFactory> GetFileChecksumImpl(
|
|
626
634
|
const std::string& name);
|
|
635
|
+
|
|
636
|
+
Status DeleteFilesInDirectory(const std::string& dirname);
|
|
637
|
+
Status SaveFilesInDirectory(const std::string& src_dirname,
|
|
638
|
+
const std::string& dst_dirname);
|
|
639
|
+
Status DestroyUnverifiedSubdir(const std::string& dirname);
|
|
640
|
+
Status InitUnverifiedSubdir(const std::string& dirname);
|
|
627
641
|
} // namespace ROCKSDB_NAMESPACE
|
|
628
642
|
#endif // GFLAGS
|
|
@@ -58,7 +58,21 @@ void ThreadBody(void* v) {
|
|
|
58
58
|
|
|
59
59
|
bool RunStressTest(StressTest* stress) {
|
|
60
60
|
SystemClock* clock = db_stress_env->GetSystemClock().get();
|
|
61
|
+
|
|
61
62
|
SharedState shared(db_stress_env, stress);
|
|
63
|
+
|
|
64
|
+
if (shared.ShouldVerifyAtBeginning() && FLAGS_preserve_unverified_changes) {
|
|
65
|
+
Status s = InitUnverifiedSubdir(FLAGS_db);
|
|
66
|
+
if (s.ok() && !FLAGS_expected_values_dir.empty()) {
|
|
67
|
+
s = InitUnverifiedSubdir(FLAGS_expected_values_dir);
|
|
68
|
+
}
|
|
69
|
+
if (!s.ok()) {
|
|
70
|
+
fprintf(stderr, "Failed to setup unverified state dir: %s\n",
|
|
71
|
+
s.ToString().c_str());
|
|
72
|
+
exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
62
76
|
stress->InitDb(&shared);
|
|
63
77
|
stress->FinishInitDb(&shared);
|
|
64
78
|
|
|
@@ -115,6 +129,15 @@ bool RunStressTest(StressTest* stress) {
|
|
|
115
129
|
fprintf(stderr, "Crash-recovery verification failed :(\n");
|
|
116
130
|
} else {
|
|
117
131
|
fprintf(stdout, "Crash-recovery verification passed :)\n");
|
|
132
|
+
Status s = DestroyUnverifiedSubdir(FLAGS_db);
|
|
133
|
+
if (s.ok() && !FLAGS_expected_values_dir.empty()) {
|
|
134
|
+
s = DestroyUnverifiedSubdir(FLAGS_expected_values_dir);
|
|
135
|
+
}
|
|
136
|
+
if (!s.ok()) {
|
|
137
|
+
fprintf(stderr, "Failed to cleanup unverified state dir: %s\n",
|
|
138
|
+
s.ToString().c_str());
|
|
139
|
+
exit(1);
|
|
140
|
+
}
|
|
118
141
|
}
|
|
119
142
|
}
|
|
120
143
|
|
|
@@ -922,7 +922,9 @@ DEFINE_bool(sync_fault_injection, false,
|
|
|
922
922
|
|
|
923
923
|
DEFINE_bool(best_efforts_recovery, false,
|
|
924
924
|
"If true, use best efforts recovery.");
|
|
925
|
-
DEFINE_bool(skip_verifydb, false,
|
|
925
|
+
DEFINE_bool(skip_verifydb, false,
|
|
926
|
+
"If true, skip VerifyDb() calls and Get()/Iterator verifications"
|
|
927
|
+
"against expected state.");
|
|
926
928
|
|
|
927
929
|
DEFINE_bool(enable_compaction_filter, false,
|
|
928
930
|
"If true, configures a compaction filter that returns a kRemove "
|
|
@@ -1027,4 +1029,27 @@ DEFINE_bool(allow_data_in_errors,
|
|
|
1027
1029
|
ROCKSDB_NAMESPACE::Options().allow_data_in_errors,
|
|
1028
1030
|
"If true, allow logging data, e.g. key, value in LOG files.");
|
|
1029
1031
|
|
|
1032
|
+
DEFINE_int32(verify_iterator_with_expected_state_one_in, 0,
|
|
1033
|
+
"If non-zero, when TestIterate() is to be called, there is a "
|
|
1034
|
+
"1/verify_iterator_with_expected_state_one_in "
|
|
1035
|
+
"chance that the iterator is verified against the expected state "
|
|
1036
|
+
"file, instead of comparing keys between two iterators.");
|
|
1037
|
+
|
|
1038
|
+
DEFINE_uint64(readahead_size, 0, "Iterator readahead size");
|
|
1039
|
+
DEFINE_uint64(initial_auto_readahead_size, 0,
|
|
1040
|
+
"Initial auto readahead size for prefetching during Iteration");
|
|
1041
|
+
DEFINE_uint64(max_auto_readahead_size, 0,
|
|
1042
|
+
"Max auto readahead size for prefetching during Iteration");
|
|
1043
|
+
DEFINE_uint64(
|
|
1044
|
+
num_file_reads_for_auto_readahead, 0,
|
|
1045
|
+
"Num of sequential reads to enable auto prefetching during Iteration");
|
|
1046
|
+
|
|
1047
|
+
DEFINE_bool(
|
|
1048
|
+
preserve_unverified_changes, false,
|
|
1049
|
+
"DB files of the current run will all be preserved in `FLAGS_db`. DB files "
|
|
1050
|
+
"from the last run will be preserved in `FLAGS_db/unverified` until the "
|
|
1051
|
+
"first verification succeeds. Expected state files from the last run will "
|
|
1052
|
+
"be preserved similarly under `FLAGS_expected_values_dir/unverified` when "
|
|
1053
|
+
"`--expected_values_dir` is nonempty.");
|
|
1054
|
+
|
|
1030
1055
|
#endif // GFLAGS
|