@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
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
|
|
11
11
|
#include "util/compression.h"
|
|
12
12
|
#ifdef GFLAGS
|
|
13
|
-
#include "cache/clock_cache.h"
|
|
14
13
|
#include "cache/fast_lru_cache.h"
|
|
15
14
|
#include "db_stress_tool/db_stress_common.h"
|
|
16
15
|
#include "db_stress_tool/db_stress_compaction_filter.h"
|
|
@@ -115,14 +114,13 @@ std::shared_ptr<Cache> StressTest::NewCache(size_t capacity,
|
|
|
115
114
|
}
|
|
116
115
|
|
|
117
116
|
if (FLAGS_cache_type == "clock_cache") {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return cache;
|
|
117
|
+
fprintf(stderr, "Old clock cache implementation has been removed.\n");
|
|
118
|
+
exit(1);
|
|
119
|
+
} else if (FLAGS_cache_type == "hyper_clock_cache") {
|
|
120
|
+
return HyperClockCacheOptions(static_cast<size_t>(capacity),
|
|
121
|
+
FLAGS_block_size /*estimated_entry_charge*/,
|
|
122
|
+
num_shard_bits)
|
|
123
|
+
.MakeSharedCache();
|
|
126
124
|
} else if (FLAGS_cache_type == "fast_lru_cache") {
|
|
127
125
|
return NewFastLRUCache(static_cast<size_t>(capacity), FLAGS_block_size,
|
|
128
126
|
num_shard_bits, false /*strict_capacity_limit*/,
|
|
@@ -411,6 +409,19 @@ void StressTest::VerificationAbort(SharedState* shared, std::string msg, int cf,
|
|
|
411
409
|
shared->SetVerificationFailure();
|
|
412
410
|
}
|
|
413
411
|
|
|
412
|
+
void StressTest::VerificationAbort(SharedState* shared, std::string msg, int cf,
|
|
413
|
+
int64_t key, Slice value_from_db,
|
|
414
|
+
Slice value_from_expected) const {
|
|
415
|
+
auto key_str = Key(key);
|
|
416
|
+
fprintf(stderr,
|
|
417
|
+
"Verification failed for column family %d key %s (%" PRIi64
|
|
418
|
+
"): value_from_db: %s, value_from_expected: %s, msg: %s\n",
|
|
419
|
+
cf, Slice(key_str).ToString(true).c_str(), key,
|
|
420
|
+
value_from_db.ToString(true).c_str(),
|
|
421
|
+
value_from_expected.ToString(true).c_str(), msg.c_str());
|
|
422
|
+
shared->SetVerificationFailure();
|
|
423
|
+
}
|
|
424
|
+
|
|
414
425
|
void StressTest::PrintStatistics() {
|
|
415
426
|
if (dbstats) {
|
|
416
427
|
fprintf(stdout, "STATISTICS:\n%s\n", dbstats->ToString().c_str());
|
|
@@ -622,6 +633,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
622
633
|
FLAGS_rate_limit_user_ops ? Env::IO_USER : Env::IO_TOTAL;
|
|
623
634
|
read_opts.async_io = FLAGS_async_io;
|
|
624
635
|
read_opts.adaptive_readahead = FLAGS_adaptive_readahead;
|
|
636
|
+
read_opts.readahead_size = FLAGS_readahead_size;
|
|
625
637
|
WriteOptions write_opts;
|
|
626
638
|
if (FLAGS_rate_limit_auto_wal_flush) {
|
|
627
639
|
write_opts.rate_limiter_priority = Env::IO_USER;
|
|
@@ -734,11 +746,6 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
734
746
|
int64_t rand_key = GenerateOneKey(thread, i);
|
|
735
747
|
std::string keystr = Key(rand_key);
|
|
736
748
|
Slice key = keystr;
|
|
737
|
-
std::unique_ptr<MutexLock> lock;
|
|
738
|
-
if (ShouldAcquireMutexOnKey()) {
|
|
739
|
-
lock.reset(new MutexLock(
|
|
740
|
-
shared->GetMutexForKey(rand_column_family, rand_key)));
|
|
741
|
-
}
|
|
742
749
|
|
|
743
750
|
if (thread->rand.OneInOpt(FLAGS_compact_range_one_in)) {
|
|
744
751
|
TestCompactRange(thread, rand_key, key, column_family);
|
|
@@ -811,7 +818,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
811
818
|
std::vector<int64_t> rand_keys = GenerateKeys(rand_key);
|
|
812
819
|
|
|
813
820
|
if (thread->rand.OneInOpt(FLAGS_ingest_external_file_one_in)) {
|
|
814
|
-
TestIngestExternalFile(thread, rand_column_families, rand_keys
|
|
821
|
+
TestIngestExternalFile(thread, rand_column_families, rand_keys);
|
|
815
822
|
}
|
|
816
823
|
|
|
817
824
|
if (thread->rand.OneInOpt(FLAGS_backup_one_in)) {
|
|
@@ -867,7 +874,7 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
867
874
|
std::string write_ts_str;
|
|
868
875
|
Slice read_ts;
|
|
869
876
|
Slice write_ts;
|
|
870
|
-
if (
|
|
877
|
+
if (FLAGS_user_timestamp_size > 0) {
|
|
871
878
|
read_ts_str = GetNowNanos();
|
|
872
879
|
read_ts = read_ts_str;
|
|
873
880
|
read_opts.timestamp = &read_ts;
|
|
@@ -909,25 +916,31 @@ void StressTest::OperateDb(ThreadState* thread) {
|
|
|
909
916
|
assert(prefix_bound <= prob_op);
|
|
910
917
|
// OPERATION write
|
|
911
918
|
TestPut(thread, write_opts, read_opts, rand_column_families, rand_keys,
|
|
912
|
-
value
|
|
919
|
+
value);
|
|
913
920
|
} else if (prob_op < del_bound) {
|
|
914
921
|
assert(write_bound <= prob_op);
|
|
915
922
|
// OPERATION delete
|
|
916
|
-
TestDelete(thread, write_opts, rand_column_families, rand_keys
|
|
923
|
+
TestDelete(thread, write_opts, rand_column_families, rand_keys);
|
|
917
924
|
} else if (prob_op < delrange_bound) {
|
|
918
925
|
assert(del_bound <= prob_op);
|
|
919
926
|
// OPERATION delete range
|
|
920
|
-
TestDeleteRange(thread, write_opts, rand_column_families, rand_keys
|
|
921
|
-
lock);
|
|
927
|
+
TestDeleteRange(thread, write_opts, rand_column_families, rand_keys);
|
|
922
928
|
} else if (prob_op < iterate_bound) {
|
|
923
929
|
assert(delrange_bound <= prob_op);
|
|
924
930
|
// OPERATION iterate
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
+
if (!FLAGS_skip_verifydb &&
|
|
932
|
+
thread->rand.OneInOpt(
|
|
933
|
+
FLAGS_verify_iterator_with_expected_state_one_in)) {
|
|
934
|
+
TestIterateAgainstExpected(thread, read_opts, rand_column_families,
|
|
935
|
+
rand_keys);
|
|
936
|
+
} else {
|
|
937
|
+
int num_seeks = static_cast<int>(
|
|
938
|
+
std::min(static_cast<uint64_t>(thread->rand.Uniform(4)),
|
|
939
|
+
FLAGS_ops_per_thread - i - 1));
|
|
940
|
+
rand_keys = GenerateNKeys(thread, num_seeks, i);
|
|
941
|
+
i += num_seeks - 1;
|
|
942
|
+
TestIterate(thread, read_opts, rand_column_families, rand_keys);
|
|
943
|
+
}
|
|
931
944
|
} else {
|
|
932
945
|
assert(iterate_bound <= prob_op);
|
|
933
946
|
TestCustomOperations(thread, rand_column_families);
|
|
@@ -1402,6 +1415,15 @@ void StressTest::TestCompactFiles(ThreadState* /* thread */,
|
|
|
1402
1415
|
Status StressTest::TestBackupRestore(
|
|
1403
1416
|
ThreadState* thread, const std::vector<int>& rand_column_families,
|
|
1404
1417
|
const std::vector<int64_t>& rand_keys) {
|
|
1418
|
+
std::vector<std::unique_ptr<MutexLock>> locks;
|
|
1419
|
+
if (ShouldAcquireMutexOnKey()) {
|
|
1420
|
+
for (int rand_column_family : rand_column_families) {
|
|
1421
|
+
// `rand_keys[0]` on each chosen CF will be verified.
|
|
1422
|
+
locks.emplace_back(new MutexLock(
|
|
1423
|
+
thread->shared->GetMutexForKey(rand_column_family, rand_keys[0])));
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1405
1427
|
const std::string backup_dir =
|
|
1406
1428
|
FLAGS_db + "/.backup" + std::to_string(thread->tid);
|
|
1407
1429
|
const std::string restore_dir =
|
|
@@ -1703,6 +1725,15 @@ Status StressTest::TestApproximateSize(
|
|
|
1703
1725
|
Status StressTest::TestCheckpoint(ThreadState* thread,
|
|
1704
1726
|
const std::vector<int>& rand_column_families,
|
|
1705
1727
|
const std::vector<int64_t>& rand_keys) {
|
|
1728
|
+
std::vector<std::unique_ptr<MutexLock>> locks;
|
|
1729
|
+
if (ShouldAcquireMutexOnKey()) {
|
|
1730
|
+
for (int rand_column_family : rand_column_families) {
|
|
1731
|
+
// `rand_keys[0]` on each chosen CF will be verified.
|
|
1732
|
+
locks.emplace_back(new MutexLock(
|
|
1733
|
+
thread->shared->GetMutexForKey(rand_column_family, rand_keys[0])));
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1706
1737
|
std::string checkpoint_dir =
|
|
1707
1738
|
FLAGS_db + "/.checkpoint" + std::to_string(thread->tid);
|
|
1708
1739
|
Options tmp_opts(options_);
|
|
@@ -2395,14 +2426,16 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2395
2426
|
|
|
2396
2427
|
if (FLAGS_use_blob_cache) {
|
|
2397
2428
|
fprintf(stdout,
|
|
2398
|
-
"Integrated BlobDB: blob cache enabled
|
|
2399
|
-
"
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2429
|
+
"Integrated BlobDB: blob cache enabled"
|
|
2430
|
+
", block and blob caches shared: %d",
|
|
2431
|
+
FLAGS_use_shared_block_and_blob_cache);
|
|
2432
|
+
if (!FLAGS_use_shared_block_and_blob_cache) {
|
|
2433
|
+
fprintf(stdout,
|
|
2434
|
+
", blob cache size %" PRIu64 ", blob cache num shard bits: %d",
|
|
2435
|
+
FLAGS_blob_cache_size, FLAGS_blob_cache_numshardbits);
|
|
2436
|
+
}
|
|
2437
|
+
fprintf(stdout, ", blob cache prepopulated: %d\n",
|
|
2438
|
+
FLAGS_prepopulate_blob_cache);
|
|
2406
2439
|
} else {
|
|
2407
2440
|
fprintf(stdout, "Integrated BlobDB: blob cache disabled\n");
|
|
2408
2441
|
}
|
|
@@ -2635,6 +2668,10 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2635
2668
|
assert(trans.size() == 0);
|
|
2636
2669
|
#endif
|
|
2637
2670
|
}
|
|
2671
|
+
if (!s.ok()) {
|
|
2672
|
+
fprintf(stderr, "Error in opening the DB [%s]\n", s.ToString().c_str());
|
|
2673
|
+
fflush(stderr);
|
|
2674
|
+
}
|
|
2638
2675
|
assert(s.ok());
|
|
2639
2676
|
assert(column_families_.size() ==
|
|
2640
2677
|
static_cast<size_t>(FLAGS_column_families));
|
|
@@ -2668,6 +2705,21 @@ void StressTest::Open(SharedState* shared) {
|
|
|
2668
2705
|
exit(1);
|
|
2669
2706
|
#endif
|
|
2670
2707
|
}
|
|
2708
|
+
|
|
2709
|
+
if (FLAGS_preserve_unverified_changes) {
|
|
2710
|
+
// Up until now, no live file should have become obsolete due to these
|
|
2711
|
+
// options. After `DisableFileDeletions()` we can reenable auto compactions
|
|
2712
|
+
// since, even if live files become obsolete, they won't be deleted.
|
|
2713
|
+
assert(options_.avoid_flush_during_recovery);
|
|
2714
|
+
assert(options_.disable_auto_compactions);
|
|
2715
|
+
if (s.ok()) {
|
|
2716
|
+
s = db_->DisableFileDeletions();
|
|
2717
|
+
}
|
|
2718
|
+
if (s.ok()) {
|
|
2719
|
+
s = db_->EnableAutoCompaction(column_families_);
|
|
2720
|
+
}
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2671
2723
|
if (!s.ok()) {
|
|
2672
2724
|
fprintf(stderr, "open error: %s\n", s.ToString().c_str());
|
|
2673
2725
|
exit(1);
|
|
@@ -2924,6 +2976,11 @@ void InitializeOptionsFromFlags(
|
|
|
2924
2976
|
block_based_options.prepopulate_block_cache =
|
|
2925
2977
|
static_cast<BlockBasedTableOptions::PrepopulateBlockCache>(
|
|
2926
2978
|
FLAGS_prepopulate_block_cache);
|
|
2979
|
+
block_based_options.initial_auto_readahead_size =
|
|
2980
|
+
FLAGS_initial_auto_readahead_size;
|
|
2981
|
+
block_based_options.max_auto_readahead_size = FLAGS_max_auto_readahead_size;
|
|
2982
|
+
block_based_options.num_file_reads_for_auto_readahead =
|
|
2983
|
+
FLAGS_num_file_reads_for_auto_readahead;
|
|
2927
2984
|
options.table_factory.reset(NewBlockBasedTableFactory(block_based_options));
|
|
2928
2985
|
options.db_write_buffer_size = FLAGS_db_write_buffer_size;
|
|
2929
2986
|
options.write_buffer_size = FLAGS_write_buffer_size;
|
|
@@ -3177,6 +3234,20 @@ void InitializeOptionsGeneral(
|
|
|
3177
3234
|
}
|
|
3178
3235
|
}
|
|
3179
3236
|
|
|
3237
|
+
if (FLAGS_preserve_unverified_changes) {
|
|
3238
|
+
if (!options.avoid_flush_during_recovery) {
|
|
3239
|
+
fprintf(stderr,
|
|
3240
|
+
"WARNING: flipping `avoid_flush_during_recovery` to true for "
|
|
3241
|
+
"`preserve_unverified_changes` to keep all files\n");
|
|
3242
|
+
options.avoid_flush_during_recovery = true;
|
|
3243
|
+
}
|
|
3244
|
+
// Together with `avoid_flush_during_recovery == true`, this will prevent
|
|
3245
|
+
// live files from becoming obsolete and deleted between `DB::Open()` and
|
|
3246
|
+
// `DisableFileDeletions()` due to flush or compaction. We do not need to
|
|
3247
|
+
// warn the user since we will reenable compaction soon.
|
|
3248
|
+
options.disable_auto_compactions = true;
|
|
3249
|
+
}
|
|
3250
|
+
|
|
3180
3251
|
options.table_properties_collector_factories.emplace_back(
|
|
3181
3252
|
std::make_shared<DbStressTablePropertiesCollectorFactory>());
|
|
3182
3253
|
}
|
|
@@ -94,23 +94,20 @@ class StressTest {
|
|
|
94
94
|
virtual Status TestPut(ThreadState* thread, WriteOptions& write_opts,
|
|
95
95
|
const ReadOptions& read_opts,
|
|
96
96
|
const std::vector<int>& cf_ids,
|
|
97
|
-
const std::vector<int64_t>& keys,
|
|
98
|
-
|
|
97
|
+
const std::vector<int64_t>& keys,
|
|
98
|
+
char (&value)[100]) = 0;
|
|
99
99
|
|
|
100
100
|
virtual Status TestDelete(ThreadState* thread, WriteOptions& write_opts,
|
|
101
101
|
const std::vector<int>& rand_column_families,
|
|
102
|
-
const std::vector<int64_t>& rand_keys
|
|
103
|
-
std::unique_ptr<MutexLock>& lock) = 0;
|
|
102
|
+
const std::vector<int64_t>& rand_keys) = 0;
|
|
104
103
|
|
|
105
104
|
virtual Status TestDeleteRange(ThreadState* thread, WriteOptions& write_opts,
|
|
106
105
|
const std::vector<int>& rand_column_families,
|
|
107
|
-
const std::vector<int64_t>& rand_keys
|
|
108
|
-
std::unique_ptr<MutexLock>& lock) = 0;
|
|
106
|
+
const std::vector<int64_t>& rand_keys) = 0;
|
|
109
107
|
|
|
110
108
|
virtual void TestIngestExternalFile(
|
|
111
109
|
ThreadState* thread, const std::vector<int>& rand_column_families,
|
|
112
|
-
const std::vector<int64_t>& rand_keys
|
|
113
|
-
std::unique_ptr<MutexLock>& lock) = 0;
|
|
110
|
+
const std::vector<int64_t>& rand_keys) = 0;
|
|
114
111
|
|
|
115
112
|
// Issue compact range, starting with start_key, whose integer value
|
|
116
113
|
// is rand_key.
|
|
@@ -152,6 +149,13 @@ class StressTest {
|
|
|
152
149
|
const std::vector<int>& rand_column_families,
|
|
153
150
|
const std::vector<int64_t>& rand_keys);
|
|
154
151
|
|
|
152
|
+
virtual Status TestIterateAgainstExpected(
|
|
153
|
+
ThreadState* /* thread */, const ReadOptions& /* read_opts */,
|
|
154
|
+
const std::vector<int>& /* rand_column_families */,
|
|
155
|
+
const std::vector<int64_t>& /* rand_keys */) {
|
|
156
|
+
return Status::NotSupported();
|
|
157
|
+
}
|
|
158
|
+
|
|
155
159
|
// Enum used by VerifyIterator() to identify the mode to validate.
|
|
156
160
|
enum LastIterateOp {
|
|
157
161
|
kLastOpSeek,
|
|
@@ -214,6 +218,10 @@ class StressTest {
|
|
|
214
218
|
void VerificationAbort(SharedState* shared, std::string msg, int cf,
|
|
215
219
|
int64_t key) const;
|
|
216
220
|
|
|
221
|
+
void VerificationAbort(SharedState* shared, std::string msg, int cf,
|
|
222
|
+
int64_t key, Slice value_from_db,
|
|
223
|
+
Slice value_from_expected) const;
|
|
224
|
+
|
|
217
225
|
void PrintEnv() const;
|
|
218
226
|
|
|
219
227
|
void Open(SharedState* shared);
|
|
@@ -280,6 +280,12 @@ int db_stress_tool(int argc, char** argv) {
|
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
+
if (FLAGS_preserve_unverified_changes && FLAGS_reopen != 0) {
|
|
284
|
+
fprintf(stderr,
|
|
285
|
+
"Reopen DB is incompatible with preserving unverified changes\n");
|
|
286
|
+
exit(1);
|
|
287
|
+
}
|
|
288
|
+
|
|
283
289
|
#ifndef NDEBUG
|
|
284
290
|
KillPoint* kp = KillPoint::GetInstance();
|
|
285
291
|
kp->rocksdb_kill_odds = FLAGS_kill_random_test;
|
|
@@ -416,8 +416,7 @@ Status MultiOpsTxnsStressTest::TestPut(ThreadState* /*thread*/,
|
|
|
416
416
|
const ReadOptions& /*read_opts*/,
|
|
417
417
|
const std::vector<int>& /*cf_ids*/,
|
|
418
418
|
const std::vector<int64_t>& /*keys*/,
|
|
419
|
-
char (&value)[100]
|
|
420
|
-
std::unique_ptr<MutexLock>& /*lock*/) {
|
|
419
|
+
char (&value)[100]) {
|
|
421
420
|
(void)value;
|
|
422
421
|
return Status::NotSupported();
|
|
423
422
|
}
|
|
@@ -426,8 +425,7 @@ Status MultiOpsTxnsStressTest::TestPut(ThreadState* /*thread*/,
|
|
|
426
425
|
Status MultiOpsTxnsStressTest::TestDelete(
|
|
427
426
|
ThreadState* /*thread*/, WriteOptions& /*write_opts*/,
|
|
428
427
|
const std::vector<int>& /*rand_column_families*/,
|
|
429
|
-
const std::vector<int64_t>& /*rand_keys
|
|
430
|
-
std::unique_ptr<MutexLock>& /*lock*/) {
|
|
428
|
+
const std::vector<int64_t>& /*rand_keys*/) {
|
|
431
429
|
return Status::NotSupported();
|
|
432
430
|
}
|
|
433
431
|
|
|
@@ -435,15 +433,13 @@ Status MultiOpsTxnsStressTest::TestDelete(
|
|
|
435
433
|
Status MultiOpsTxnsStressTest::TestDeleteRange(
|
|
436
434
|
ThreadState* /*thread*/, WriteOptions& /*write_opts*/,
|
|
437
435
|
const std::vector<int>& /*rand_column_families*/,
|
|
438
|
-
const std::vector<int64_t>& /*rand_keys
|
|
439
|
-
std::unique_ptr<MutexLock>& /*lock*/) {
|
|
436
|
+
const std::vector<int64_t>& /*rand_keys*/) {
|
|
440
437
|
return Status::NotSupported();
|
|
441
438
|
}
|
|
442
439
|
|
|
443
440
|
void MultiOpsTxnsStressTest::TestIngestExternalFile(
|
|
444
441
|
ThreadState* thread, const std::vector<int>& rand_column_families,
|
|
445
|
-
const std::vector<int64_t>& /*rand_keys
|
|
446
|
-
std::unique_ptr<MutexLock>& /*lock*/) {
|
|
442
|
+
const std::vector<int64_t>& /*rand_keys*/) {
|
|
447
443
|
// TODO (yanqin)
|
|
448
444
|
(void)thread;
|
|
449
445
|
(void)rand_column_families;
|
|
@@ -222,23 +222,19 @@ class MultiOpsTxnsStressTest : public StressTest {
|
|
|
222
222
|
|
|
223
223
|
Status TestPut(ThreadState* thread, WriteOptions& write_opts,
|
|
224
224
|
const ReadOptions& read_opts, const std::vector<int>& cf_ids,
|
|
225
|
-
const std::vector<int64_t>& keys, char (&value)[100]
|
|
226
|
-
std::unique_ptr<MutexLock>& lock) override;
|
|
225
|
+
const std::vector<int64_t>& keys, char (&value)[100]) override;
|
|
227
226
|
|
|
228
227
|
Status TestDelete(ThreadState* thread, WriteOptions& write_opts,
|
|
229
228
|
const std::vector<int>& rand_column_families,
|
|
230
|
-
const std::vector<int64_t>& rand_keys
|
|
231
|
-
std::unique_ptr<MutexLock>& lock) override;
|
|
229
|
+
const std::vector<int64_t>& rand_keys) override;
|
|
232
230
|
|
|
233
231
|
Status TestDeleteRange(ThreadState* thread, WriteOptions& write_opts,
|
|
234
232
|
const std::vector<int>& rand_column_families,
|
|
235
|
-
const std::vector<int64_t>& rand_keys
|
|
236
|
-
std::unique_ptr<MutexLock>& lock) override;
|
|
233
|
+
const std::vector<int64_t>& rand_keys) override;
|
|
237
234
|
|
|
238
235
|
void TestIngestExternalFile(ThreadState* thread,
|
|
239
236
|
const std::vector<int>& rand_column_families,
|
|
240
|
-
const std::vector<int64_t>& rand_keys
|
|
241
|
-
std::unique_ptr<MutexLock>& lock) override;
|
|
237
|
+
const std::vector<int64_t>& rand_keys) override;
|
|
242
238
|
|
|
243
239
|
void TestCompactRange(ThreadState* thread, int64_t rand_key,
|
|
244
240
|
const Slice& start_key,
|