From c7c7b07f06ca720bbb47ff01b59c79b117700991 Mon Sep 17 00:00:00 2001 From: mrambacher Date: Thu, 9 Jul 2020 14:33:42 -0700 Subject: [PATCH] More Makefile Cleanup (#7097) Summary: Cleans up some of the dependencies on test code in the Makefile while building tools: - Moves the test::RandomString, DBBaseTest::RandomString into Random - Moves the test::RandomHumanReadableString into Random - Moves the DestroyDir method into file_utils - Moves the SetupSyncPointsToMockDirectIO into sync_point. - Moves the FaultInjection Env and FS classes under env These changes allow all of the tools to build without dependencies on test_util, thereby simplifying the build dependencies. By moving the FaultInjection code, the dependency in db_stress on different libraries for debug vs release was eliminated. Tested both release and debug builds via Make and CMake for both static and shared libraries. More work remains to clean up how the tools are built and remove some unnecessary dependencies. There is also more work that should be done to get the Makefile and CMake to align in their builds -- what is in the libraries and the sizes of the executables are different. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7097 Reviewed By: riversand963 Differential Revision: D22463160 Pulled By: pdillinger fbshipit-source-id: e19462b53324ab3f0b7c72459dbc73165cc382b2 --- CMakeLists.txt | 4 +- Makefile | 26 +-- TARGETS | 4 +- db/column_family_test.cc | 18 +- db/comparator_db_test.cc | 5 +- db/corruption_test.cc | 10 +- db/db_basic_test.cc | 11 +- db/db_block_cache_test.cc | 6 +- db/db_compaction_test.cc | 155 +++++++++--------- db/db_dynamic_level_test.cc | 35 ++-- db/db_flush_test.cc | 2 +- db/db_impl/db_secondary_test.cc | 2 +- db/db_io_failure_test.cc | 9 +- db/db_iterator_test.cc | 33 ++-- db/db_merge_operand_test.cc | 2 +- db/db_merge_operator_test.cc | 11 +- db/db_options_test.cc | 11 +- db/db_properties_test.cc | 36 ++-- db/db_range_del_test.cc | 27 +-- db/db_sst_test.cc | 19 ++- db/db_statistics_test.cc | 5 +- db/db_table_properties_test.cc | 5 +- db/db_test.cc | 150 +++++++++-------- db/db_test2.cc | 43 ++--- db/db_test_util.cc | 12 +- db/db_test_util.h | 7 - db/db_universal_compaction_test.cc | 33 ++-- db/db_wal_test.cc | 2 +- db/db_with_timestamp_basic_test.cc | 2 +- db/db_write_test.cc | 8 +- db/error_handler_fs_test.cc | 27 +-- db/external_sst_file_basic_test.cc | 11 +- db/external_sst_file_test.cc | 22 ++- db/fault_injection_test.cc | 6 +- db/flush_job_test.cc | 6 +- db/import_column_family_test.cc | 20 ++- db/plain_table_db_test.cc | 15 +- db_stress_tool/cf_consistency_stress.cc | 3 +- db_stress_tool/db_stress_common.h | 11 +- db_stress_tool/db_stress_driver.cc | 1 + db_stress_tool/db_stress_test_base.cc | 3 +- db_stress_tool/db_stress_tool.cc | 4 +- db_stress_tool/no_batched_ops_stress.cc | 2 +- env/env_test.cc | 12 +- file/delete_scheduler_test.cc | 10 +- file/file_util.cc | 45 +++++ file/file_util.h | 3 + file/random_access_file_reader_test.cc | 17 +- memtable/memtablerep_bench.cc | 2 +- src.mk | 4 +- .../block_based_table_reader_test.cc | 17 +- table/block_based/block_test.cc | 10 +- .../block_based/data_block_hash_index_test.cc | 14 +- table/block_fetcher_test.cc | 8 +- table/merger_test.cc | 8 +- table/table_test.cc | 29 ++-- test_util/sync_point.cc | 23 +++ test_util/sync_point.h | 3 + test_util/testutil.cc | 83 +--------- test_util/testutil.h | 13 +- test_util/testutil_test.cc | 3 +- tools/db_repl_stress.cc | 10 +- tools/ldb_cmd_test.cc | 26 ++- util/file_reader_writer_test.cc | 15 +- util/random.cc | 18 ++ util/random.h | 6 + utilities/backupable/backupable_db_test.cc | 3 +- utilities/blob_db/blob_db_test.cc | 37 ++--- utilities/checkpoint/checkpoint_test.cc | 16 +- .../fault_injection_env.cc | 4 +- .../fault_injection_env.h | 6 +- .../fault_injection_fs.cc | 9 +- .../fault_injection_fs.h | 6 +- utilities/memory/memory_test.cc | 17 +- .../option_change_migration_test.cc | 10 +- .../persistent_cache/persistent_cache_test.h | 3 +- .../transactions/transaction_lock_mgr_test.cc | 4 +- utilities/transactions/transaction_test.cc | 5 +- utilities/transactions/transaction_test.h | 5 +- .../write_prepared_transaction_test.cc | 12 +- 80 files changed, 651 insertions(+), 689 deletions(-) rename test_util/fault_injection_test_env.cc => utilities/fault_injection_env.cc (99%) rename test_util/fault_injection_test_env.h => utilities/fault_injection_env.h (98%) rename test_util/fault_injection_test_fs.cc => utilities/fault_injection_fs.cc (99%) rename test_util/fault_injection_test_fs.h => utilities/fault_injection_fs.h (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08b48d2eb9..6401ab1059 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -751,6 +751,8 @@ set(SOURCES utilities/debug.cc utilities/env_mirror.cc utilities/env_timed.cc + utilities/fault_injection_env.cc + utilities/fault_injection_fs.cc utilities/leveldb_options/leveldb_options.cc utilities/memory/memory_util.cc utilities/merge_operators/bytesxor.cc @@ -1172,8 +1174,6 @@ if(WITH_TESTS) db/db_test_util.cc monitoring/thread_status_updater_debug.cc table/mock_table.cc - test_util/fault_injection_test_env.cc - test_util/fault_injection_test_fs.cc utilities/cassandra/test_utils.cc ) enable_testing() diff --git a/Makefile b/Makefile index ccbf8e0549..9a5da537b8 100644 --- a/Makefile +++ b/Makefile @@ -636,18 +636,12 @@ LIBRARY=$(SHARED1) TEST_LIBRARY=$(SHARED_TEST_LIBRARY) TOOLS_LIBRARY=$(SHARED_TOOLS_LIBRARY) STRESS_LIBRARY=$(SHARED_STRESS_LIBRARY) -ifeq ($(DEBUG_LEVEL),0) -STRESS_LIBRARY_RUNTIME_DEPS=$(SHARED_TOOLS_LIBRARY) -else -STRESS_LIBRARY_RUNTIME_DEPS=$(SHARED_TEST_LIBRARY) $(SHARED_TOOLS_LIBRARY) -endif CLOUD_LIBRARY=$(SHARED_CLOUD_LIBRARY) else LIBRARY=$(STATIC_LIBRARY) TEST_LIBRARY=$(STATIC_TEST_LIBRARY) TOOLS_LIBRARY=$(STATIC_TOOLS_LIBRARY) STRESS_LIBRARY=$(STATIC_STRESS_LIBRARY) -STRESS_LIBRARY_RUNTIME_DEPS= endif ROCKSDB_MAJOR = $(shell egrep "ROCKSDB_MAJOR.[0-9]" include/rocksdb/version.h | cut -d ' ' -f 3) @@ -1166,29 +1160,23 @@ $(STATIC_TEST_LIBRARY): $(TEST_OBJECTS) $(AM_V_AR)rm -f $@ $(SHARED_TEST_LIBRARY) $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ -$(STATIC_TOOLS_LIBRARY): $(BENCH_OBJECTS) $(TOOL_OBJECTS) $(TESTUTIL) +$(STATIC_TOOLS_LIBRARY): $(BENCH_OBJECTS) $(TOOL_OBJECTS) $(AM_V_AR)rm -f $@ $(SHARED_TOOLS_LIBRARY) $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ -ifeq ($(DEBUG_LEVEL),0) -$(STATIC_STRESS_LIBRARY): $(TESTUTIL) $(ANALYZE_OBJECTS) $(STRESS_OBJECTS) +$(STATIC_STRESS_LIBRARY): $(ANALYZE_OBJECTS) $(STRESS_OBJECTS) $(AM_V_AR)rm -f $@ $(SHARED_STRESS_LIBRARY) $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ -else -$(STATIC_STRESS_LIBRARY): $(TEST_OBJECTS) $(ANALYZE_OBJECTS) $(STRESS_OBJECTS) - $(AM_V_AR)rm -f $@ $(SHARED_STRESS_LIBRARY) - $(AM_V_at)$(AR) $(ARFLAGS) $@ $^ -endif $(SHARED_TEST_LIBRARY): $(TEST_OBJECTS) $(SHARED1) $(AM_V_AR)rm -f $@ $(STATIC_TEST_LIBRARY) $(AM_SHARE) -$(SHARED_TOOLS_LIBRARY): $(TOOL_OBJECTS) $(TESTUTIL) $(SHARED1) +$(SHARED_TOOLS_LIBRARY): $(TOOL_OBJECTS) $(SHARED1) $(AM_V_AR)rm -f $@ $(STATIC_TOOLS_LIBRARY) $(AM_SHARE) -$(SHARED_STRESS_LIBRARY): $(ANALYZE_OBJECTS) $(STRESS_OBJECTS) $(STRESS_LIBRARY_RUNTIME_DEPS) $(SHARED1) +$(SHARED_STRESS_LIBRARY): $(ANALYZE_OBJECTS) $(STRESS_OBJECTS) $(SHARED_TOOLS_LIBRARY) $(SHARED1) $(AM_V_AR)rm -f $@ $(STATIC_STRESS_LIBRARY) $(AM_SHARE) @@ -1216,13 +1204,13 @@ cache_bench: $(OBJ_DIR)/cache/cache_bench.o $(LIBRARY) persistent_cache_bench: $(OBJ_DIR)/utilities/persistent_cache/persistent_cache_bench.o $(LIBRARY) $(AM_LINK) -memtablerep_bench: $(OBJ_DIR)/memtable/memtablerep_bench.o $(TESTUTIL) $(LIBRARY) +memtablerep_bench: $(OBJ_DIR)/memtable/memtablerep_bench.o $(LIBRARY) $(AM_LINK) filter_bench: $(OBJ_DIR)/util/filter_bench.o $(LIBRARY) $(AM_LINK) -db_stress: $(OBJ_DIR)/db_stress_tool/db_stress.o $(STRESS_LIBRARY) $(STRESS_LIBRARY_RUNTIME_DEPS) $(LIBRARY) +db_stress: $(OBJ_DIR)/db_stress_tool/db_stress.o $(STRESS_LIBRARY) $(TOOLS_LIBRARY) $(LIBRARY) $(AM_LINK) write_stress: $(OBJ_DIR)/tools/write_stress.o $(LIBRARY) @@ -1231,7 +1219,7 @@ write_stress: $(OBJ_DIR)/tools/write_stress.o $(LIBRARY) db_sanity_test: $(OBJ_DIR)/tools/db_sanity_test.o $(LIBRARY) $(AM_LINK) -db_repl_stress: $(OBJ_DIR)/tools/db_repl_stress.o $(TESTUTIL) $(LIBRARY) +db_repl_stress: $(OBJ_DIR)/tools/db_repl_stress.o $(LIBRARY) $(AM_LINK) arena_test: $(OBJ_DIR)/memory/arena_test.o $(TEST_LIBRARY) $(LIBRARY) diff --git a/TARGETS b/TARGETS index becaff39f1..c888ce5b0a 100644 --- a/TARGETS +++ b/TARGETS @@ -332,6 +332,8 @@ cpp_library( "utilities/debug.cc", "utilities/env_mirror.cc", "utilities/env_timed.cc", + "utilities/fault_injection_env.cc", + "utilities/fault_injection_fs.cc", "utilities/leveldb_options/leveldb_options.cc", "utilities/memory/memory_util.cc", "utilities/merge_operators/bytesxor.cc", @@ -385,8 +387,6 @@ cpp_library( srcs = [ "db/db_test_util.cc", "table/mock_table.cc", - "test_util/fault_injection_test_env.cc", - "test_util/fault_injection_test_fs.cc", "test_util/testharness.cc", "test_util/testutil.cc", "tools/block_cache_analyzer/block_cache_trace_analyzer.cc", diff --git a/db/column_family_test.cc b/db/column_family_test.cc index c4181d9b8e..04ef9a30f7 100644 --- a/db/column_family_test.cc +++ b/db/column_family_test.cc @@ -22,26 +22,18 @@ #include "rocksdb/env.h" #include "rocksdb/iterator.h" #include "rocksdb/utilities/object_registry.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" #include "util/coding.h" #include "util/string_util.h" +#include "utilities/fault_injection_env.h" #include "utilities/merge_operators.h" namespace ROCKSDB_NAMESPACE { static const int kValueSize = 1000; -namespace { -std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} -} // anonymous namespace - // counts how many operations were performed class EnvCounter : public EnvWrapper { public: @@ -109,11 +101,11 @@ class ColumnFamilyTestBase : public testing::Test { // preserves the implementation that was in place when all of the // magic values in this file were picked. *storage = std::string(kValueSize, ' '); - return Slice(*storage); } else { Random r(k); - return test::RandomString(&r, kValueSize, storage); + *storage = r.RandomString(kValueSize); } + return Slice(*storage); } void Build(int base, int n, int flush_every = 0) { @@ -329,11 +321,11 @@ class ColumnFamilyTestBase : public testing::Test { // 10 bytes for key, rest is value if (!save) { ASSERT_OK(Put(cf, test::RandomKey(&rnd_, 11), - RandomString(&rnd_, key_value_size - 10))); + rnd_.RandomString(key_value_size - 10))); } else { std::string key = test::RandomKey(&rnd_, 11); keys_[cf].insert(key); - ASSERT_OK(Put(cf, key, RandomString(&rnd_, key_value_size - 10))); + ASSERT_OK(Put(cf, key, rnd_.RandomString(key_value_size - 10))); } } db_->FlushWAL(false); diff --git a/db/comparator_db_test.cc b/db/comparator_db_test.cc index 49f287a97c..4eac91e2a5 100644 --- a/db/comparator_db_test.cc +++ b/db/comparator_db_test.cc @@ -13,6 +13,7 @@ #include "test_util/testutil.h" #include "util/hash.h" #include "util/kv_map.h" +#include "util/random.h" #include "util/string_util.h" #include "utilities/merge_operators.h" @@ -342,12 +343,12 @@ TEST_P(ComparatorDBTest, SimpleSuffixReverseComparator) { std::vector source_prefixes; // Randomly generate 5 prefixes for (int i = 0; i < 5; i++) { - source_prefixes.push_back(test::RandomHumanReadableString(&rnd, 8)); + source_prefixes.push_back(rnd.HumanReadableString(8)); } for (int j = 0; j < 20; j++) { int prefix_index = rnd.Uniform(static_cast(source_prefixes.size())); std::string key = source_prefixes[prefix_index] + - test::RandomHumanReadableString(&rnd, rnd.Uniform(8)); + rnd.HumanReadableString(rnd.Uniform(8)); source_strings.push_back(key); } diff --git a/db/corruption_test.cc b/db/corruption_test.cc index 4641ec7b12..cae3ad728c 100644 --- a/db/corruption_test.cc +++ b/db/corruption_test.cc @@ -9,13 +9,13 @@ #ifndef ROCKSDB_LITE -#include "rocksdb/db.h" - #include #include #include #include + #include + #include "db/db_impl/db_impl.h" #include "db/db_test_util.h" #include "db/log_format.h" @@ -24,6 +24,7 @@ #include "file/filename.h" #include "rocksdb/cache.h" #include "rocksdb/convenience.h" +#include "rocksdb/db.h" #include "rocksdb/env.h" #include "rocksdb/table.h" #include "rocksdb/write_batch.h" @@ -31,6 +32,7 @@ #include "table/meta_blocks.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" #include "util/string_util.h" namespace ROCKSDB_NAMESPACE { @@ -219,11 +221,11 @@ class CorruptionTest : public testing::Test { // preserves the implementation that was in place when all of the // magic values in this file were picked. *storage = std::string(kValueSize, ' '); - return Slice(*storage); } else { Random r(k); - return test::RandomString(&r, kValueSize, storage); + *storage = r.RandomString(kValueSize); } + return Slice(*storage); } }; diff --git a/db/db_basic_test.cc b/db/db_basic_test.cc index 3cf52f71b3..3795a08b76 100644 --- a/db/db_basic_test.cc +++ b/db/db_basic_test.cc @@ -16,10 +16,11 @@ #include "rocksdb/utilities/debug.h" #include "table/block_based/block_based_table_reader.h" #include "table/block_based/block_builder.h" -#include "test_util/fault_injection_test_env.h" #if !defined(ROCKSDB_LITE) #include "test_util/sync_point.h" #endif +#include "util/random.h" +#include "utilities/fault_injection_env.h" #include "utilities/merge_operators.h" #include "utilities/merge_operators/string_append/stringappend.h" @@ -2040,7 +2041,7 @@ TEST_F(DBBasicTest, MultiGetIOBufferOverrun) { for (int i = 0; i < 100; ++i) { // Make the value compressible. A purely random string doesn't compress // and the resultant data block will not be compressed - std::string value(RandomString(&rnd, 128) + zero_str); + std::string value(rnd.RandomString(128) + zero_str); assert(Put(Key(i), value) == Status::OK()); } Flush(); @@ -2430,7 +2431,7 @@ class DBBasicTestMultiGet : public DBTestBase { for (int i = 0; i < 100; ++i) { // Make the value compressible. A purely random string doesn't compress // and the resultant data block will not be compressed - values_.emplace_back(RandomString(&rnd, 128) + zero_str); + values_.emplace_back(rnd.RandomString(128) + zero_str); assert(((num_cfs == 1) ? Put(Key(i), values_[i]) : Put(cf, Key(i), values_[i])) == Status::OK()); } @@ -2442,7 +2443,7 @@ class DBBasicTestMultiGet : public DBTestBase { for (int i = 0; i < 100; ++i) { // block cannot gain space by compression - uncompressable_values_.emplace_back(RandomString(&rnd, 256) + '\0'); + uncompressable_values_.emplace_back(rnd.RandomString(256) + '\0'); std::string tmp_key = "a" + Key(i); assert(((num_cfs == 1) ? Put(tmp_key, uncompressable_values_[i]) : Put(cf, tmp_key, uncompressable_values_[i])) == @@ -3210,7 +3211,7 @@ TEST_F(DBBasicTest, PointLookupDeadline) { Random rnd(301); for (int i = 0; i < 400; ++i) { std::string key = "k" + ToString(i); - Put(key, RandomString(&rnd, 100)); + Put(key, rnd.RandomString(100)); } Flush(); diff --git a/db/db_block_cache_test.cc b/db/db_block_cache_test.cc index 0841a655eb..045967de33 100644 --- a/db/db_block_cache_test.cc +++ b/db/db_block_cache_test.cc @@ -7,10 +7,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. See the AUTHORS file for names of contributors. #include + #include "cache/lru_cache.h" #include "db/db_test_util.h" #include "port/stack_trace.h" #include "util/compression.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -764,7 +766,7 @@ TEST_F(DBBlockCacheTest, CompressedCache) { std::string str; for (int i = 0; i < num_iter; i++) { if (i % 4 == 0) { // high compression ratio - str = RandomString(&rnd, 1000); + str = rnd.RandomString(1000); } values.push_back(str); ASSERT_OK(Put(1, Key(i), values[i])); @@ -851,7 +853,7 @@ TEST_F(DBBlockCacheTest, CacheCompressionDict) { for (int i = 0; i < kNumFiles; ++i) { ASSERT_EQ(i, NumTableFilesAtLevel(0, 0)); for (int j = 0; j < kNumEntriesPerFile; ++j) { - std::string value = RandomString(&rnd, kNumBytesPerEntry); + std::string value = rnd.RandomString(kNumBytesPerEntry); ASSERT_OK(Put(Key(j * kNumFiles + i), value.c_str())); } ASSERT_OK(Flush()); diff --git a/db/db_compaction_test.cc b/db/db_compaction_test.cc index eb86ec2dcc..aae1c1100f 100644 --- a/db/db_compaction_test.cc +++ b/db/db_compaction_test.cc @@ -14,9 +14,10 @@ #include "rocksdb/experimental.h" #include "rocksdb/sst_file_writer.h" #include "rocksdb/utilities/convenience.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "util/concurrent_task_limiter_impl.h" +#include "util/random.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { @@ -295,7 +296,7 @@ TEST_P(DBCompactionTestWithParam, CompactionDeletionTrigger) { const int kTestSize = kCDTKeysPerBuffer * 1024; std::vector values; for (int k = 0; k < kTestSize; ++k) { - values.push_back(RandomString(&rnd, kCDTValueSize)); + values.push_back(rnd.RandomString(kCDTValueSize)); ASSERT_OK(Put(Key(k), values[k])); } dbfull()->TEST_WaitForFlushMemTable(); @@ -343,7 +344,7 @@ TEST_P(DBCompactionTestWithParam, CompactionsPreserveDeletes) { const int kTestSize = kCDTKeysPerBuffer; std::vector values; for (int k = 0; k < kTestSize; ++k) { - values.push_back(RandomString(&rnd, kCDTValueSize)); + values.push_back(rnd.RandomString(kCDTValueSize)); ASSERT_OK(Put(Key(k), values[k])); } @@ -408,7 +409,7 @@ TEST_F(DBCompactionTest, SkipStatsUpdateTest) { const int kTestSize = kCDTKeysPerBuffer * 512; std::vector values; for (int k = 0; k < kTestSize; ++k) { - values.push_back(RandomString(&rnd, kCDTValueSize)); + values.push_back(rnd.RandomString(kCDTValueSize)); ASSERT_OK(Put(Key(k), values[k])); } @@ -555,7 +556,7 @@ TEST_P(DBCompactionTestWithParam, CompactionDeletionTriggerReopen) { const int kTestSize = kCDTKeysPerBuffer * 512; std::vector values; for (int k = 0; k < kTestSize; ++k) { - values.push_back(RandomString(&rnd, kCDTValueSize)); + values.push_back(rnd.RandomString(kCDTValueSize)); ASSERT_OK(Put(Key(k), values[k])); } dbfull()->TEST_WaitForFlushMemTable(); @@ -673,7 +674,7 @@ TEST_F(DBCompactionTest, DisableStatsUpdateReopen) { const int kTestSize = kCDTKeysPerBuffer * 512; std::vector values; for (int k = 0; k < kTestSize; ++k) { - values.push_back(RandomString(&rnd, kCDTValueSize)); + values.push_back(rnd.RandomString(kCDTValueSize)); ASSERT_OK(Put(Key(k), values[k])); } dbfull()->TEST_WaitForFlushMemTable(); @@ -736,7 +737,7 @@ TEST_P(DBCompactionTestWithParam, CompactionTrigger) { std::vector values; // Write 100KB (100 values, each 1K) for (int i = 0; i < kNumKeysPerFile; i++) { - values.push_back(RandomString(&rnd, 990)); + values.push_back(rnd.RandomString(990)); ASSERT_OK(Put(1, Key(i), values[i])); } // put extra key to trigger flush @@ -748,7 +749,7 @@ TEST_P(DBCompactionTestWithParam, CompactionTrigger) { // generate one more file in level-0, and should trigger level-0 compaction std::vector values; for (int i = 0; i < kNumKeysPerFile; i++) { - values.push_back(RandomString(&rnd, 990)); + values.push_back(rnd.RandomString(990)); ASSERT_OK(Put(1, Key(i), values[i])); } // put extra key to trigger flush @@ -867,7 +868,7 @@ TEST_P(DBCompactionTestWithParam, CompactionsGenerateMultipleFiles) { ASSERT_EQ(NumTableFilesAtLevel(0, 1), 0); std::vector values; for (int i = 0; i < 80; i++) { - values.push_back(RandomString(&rnd, 100000)); + values.push_back(rnd.RandomString(100000)); ASSERT_OK(Put(1, Key(i), values[i])); } @@ -1105,7 +1106,7 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveOneFile) { Random rnd(301); std::vector values; for (int i = 0; i < num_keys; i++) { - values.push_back(RandomString(&rnd, value_size)); + values.push_back(rnd.RandomString(value_size)); ASSERT_OK(Put(Key(i), values[i])); } @@ -1177,7 +1178,7 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveNonOverlappingFiles) { std::map values; for (size_t i = 0; i < ranges.size(); i++) { for (int32_t j = ranges[i].first; j <= ranges[i].second; j++) { - values[j] = RandomString(&rnd, value_size); + values[j] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(j), values[j])); } ASSERT_OK(Flush()); @@ -1223,7 +1224,7 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveNonOverlappingFiles) { }; for (size_t i = 0; i < ranges.size(); i++) { for (int32_t j = ranges[i].first; j <= ranges[i].second; j++) { - values[j] = RandomString(&rnd, value_size); + values[j] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(j), values[j])); } ASSERT_OK(Flush()); @@ -1268,14 +1269,14 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveTargetLevel) { // file 1 [0 => 300] for (int32_t i = 0; i <= 300; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); // file 2 [600 => 700] for (int32_t i = 600; i <= 700; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1349,14 +1350,14 @@ TEST_P(DBCompactionTestWithParam, ManualCompactionPartial) { // file 1 [0 => 100] for (int32_t i = 0; i < 100; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); // file 2 [100 => 300] for (int32_t i = 100; i < 300; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1377,7 +1378,7 @@ TEST_P(DBCompactionTestWithParam, ManualCompactionPartial) { // file 3 [ 0 => 200] for (int32_t i = 0; i < 200; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1409,21 +1410,21 @@ TEST_P(DBCompactionTestWithParam, ManualCompactionPartial) { TEST_SYNC_POINT("DBCompaction::ManualPartial:1"); // file 4 [300 => 400) for (int32_t i = 300; i <= 400; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); // file 5 [400 => 500) for (int32_t i = 400; i <= 500; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); // file 6 [500 => 600) for (int32_t i = 500; i <= 600; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } // Second non-trivial compaction is triggered @@ -1491,14 +1492,14 @@ TEST_F(DBCompactionTest, DISABLED_ManualPartialFill) { // file 1 [0 => 100] for (int32_t i = 0; i < 100; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); // file 2 [100 => 300] for (int32_t i = 100; i < 300; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1517,7 +1518,7 @@ TEST_F(DBCompactionTest, DISABLED_ManualPartialFill) { // file 3 [ 0 => 200] for (int32_t i = 0; i < 200; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1549,7 +1550,7 @@ TEST_F(DBCompactionTest, DISABLED_ManualPartialFill) { ASSERT_OK(Flush()); dbfull()->TEST_WaitForFlushMemTable(); } - values[j] = RandomString(&rnd, value_size); + values[j] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(j), values[j])); } } @@ -1620,14 +1621,14 @@ TEST_F(DBCompactionTest, DeleteFileRange) { // file 1 [0 => 100] for (int32_t i = 0; i < 100; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); // file 2 [100 => 300] for (int32_t i = 100; i < 300; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1643,7 +1644,7 @@ TEST_F(DBCompactionTest, DeleteFileRange) { // file 3 [ 0 => 200] for (int32_t i = 0; i < 200; i++) { - values[i] = RandomString(&rnd, value_size); + values[i] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1655,7 +1656,7 @@ TEST_F(DBCompactionTest, DeleteFileRange) { ASSERT_OK(Flush()); dbfull()->TEST_WaitForFlushMemTable(); } - values[j] = RandomString(&rnd, value_size); + values[j] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(j), values[j])); } } @@ -1742,7 +1743,7 @@ TEST_F(DBCompactionTest, DeleteFilesInRanges) { for (auto i = 0; i < 10; i++) { for (auto j = 0; j < 100; j++) { auto k = i * 100 + j; - values[k] = RandomString(&rnd, value_size); + values[k] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(k), values[k])); } ASSERT_OK(Flush()); @@ -1874,7 +1875,7 @@ TEST_F(DBCompactionTest, DeleteFileRangeFileEndpointsOverlapBug) { // would cause `1 -> vals[0]` (an older key) to reappear. std::string vals[kNumL0Files]; for (int i = 0; i < kNumL0Files; ++i) { - vals[i] = RandomString(&rnd, kValSize); + vals[i] = rnd.RandomString(kValSize); Put(Key(i), vals[i]); Put(Key(i + 1), vals[i]); Flush(); @@ -1916,7 +1917,7 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveToLastLevelWithFiles) { std::vector values; // File with keys [ 0 => 99 ] for (int i = 0; i < 100; i++) { - values.push_back(RandomString(&rnd, value_size)); + values.push_back(rnd.RandomString(value_size)); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -1934,7 +1935,7 @@ TEST_P(DBCompactionTestWithParam, TrivialMoveToLastLevelWithFiles) { // File with keys [ 100 => 199 ] for (int i = 100; i < 200; i++) { - values.push_back(RandomString(&rnd, value_size)); + values.push_back(rnd.RandomString(value_size)); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Flush()); @@ -2329,7 +2330,7 @@ TEST_P(DBCompactionTestWithParam, ConvertCompactionStyle) { for (int i = 0; i <= max_key_level_insert; i++) { // each value is 10K - ASSERT_OK(Put(1, Key(i), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(i), rnd.RandomString(10000))); } ASSERT_OK(Flush(1)); dbfull()->TEST_WaitForCompact(); @@ -2387,7 +2388,7 @@ TEST_P(DBCompactionTestWithParam, ConvertCompactionStyle) { ReopenWithColumnFamilies({"default", "pikachu"}, options); for (int i = max_key_level_insert / 2; i <= max_key_universal_insert; i++) { - ASSERT_OK(Put(1, Key(i), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(i), rnd.RandomString(10000))); } dbfull()->Flush(FlushOptions()); ASSERT_OK(Flush(1)); @@ -2682,7 +2683,7 @@ TEST_P(DBCompactionTestWithParam, DISABLED_CompactFilesOnLevelCompaction) { Random rnd(301); for (int key = 64 * kEntriesPerBuffer; key >= 0; --key) { - ASSERT_OK(Put(1, ToString(key), RandomString(&rnd, kTestValueSize))); + ASSERT_OK(Put(1, ToString(key), rnd.RandomString(kTestValueSize))); } dbfull()->TEST_WaitForFlushMemTable(handles_[1]); dbfull()->TEST_WaitForCompact(); @@ -2758,8 +2759,8 @@ TEST_P(DBCompactionTestWithParam, PartialCompactionFailure) { std::vector keys; std::vector values; for (int k = 0; k < kNumInsertedKeys; ++k) { - keys.emplace_back(RandomString(&rnd, kKeySize)); - values.emplace_back(RandomString(&rnd, kKvSize - kKeySize)); + keys.emplace_back(rnd.RandomString(kKeySize)); + values.emplace_back(rnd.RandomString(kKvSize - kKeySize)); ASSERT_OK(Put(Slice(keys[k]), Slice(values[k]))); dbfull()->TEST_WaitForFlushMemTable(); } @@ -2825,7 +2826,7 @@ TEST_P(DBCompactionTestWithParam, DeleteMovedFileAfterCompaction) { for (int i = 0; i < 2; ++i) { // Create 1MB sst file for (int j = 0; j < 100; ++j) { - ASSERT_OK(Put(Key(i * 50 + j), RandomString(&rnd, 10 * 1024))); + ASSERT_OK(Put(Key(i * 50 + j), rnd.RandomString(10 * 1024))); } ASSERT_OK(Flush()); } @@ -2860,7 +2861,7 @@ TEST_P(DBCompactionTestWithParam, DeleteMovedFileAfterCompaction) { for (int i = 0; i < 2; ++i) { // Create 1MB sst file for (int j = 0; j < 100; ++j) { - ASSERT_OK(Put(Key(i * 50 + j + 100), RandomString(&rnd, 10 * 1024))); + ASSERT_OK(Put(Key(i * 50 + j + 100), rnd.RandomString(10 * 1024))); } ASSERT_OK(Flush()); } @@ -3118,7 +3119,7 @@ TEST_P(DBCompactionTestWithParam, ForceBottommostLevelCompaction) { std::vector values; // File with keys [ 0 => 99 ] for (int i = 0; i < 100; i++) { - values.push_back(RandomString(&rnd, value_size)); + values.push_back(rnd.RandomString(value_size)); ASSERT_OK(Put(ShortKey(i), values[i])); } ASSERT_OK(Flush()); @@ -3135,7 +3136,7 @@ TEST_P(DBCompactionTestWithParam, ForceBottommostLevelCompaction) { // File with keys [ 100 => 199 ] for (int i = 100; i < 200; i++) { - values.push_back(RandomString(&rnd, value_size)); + values.push_back(rnd.RandomString(value_size)); ASSERT_OK(Put(ShortKey(i), values[i])); } ASSERT_OK(Flush()); @@ -3153,7 +3154,7 @@ TEST_P(DBCompactionTestWithParam, ForceBottommostLevelCompaction) { // File with keys [ 200 => 299 ] for (int i = 200; i < 300; i++) { - values.push_back(RandomString(&rnd, value_size)); + values.push_back(rnd.RandomString(value_size)); ASSERT_OK(Put(ShortKey(i), values[i])); } ASSERT_OK(Flush()); @@ -3197,7 +3198,7 @@ TEST_P(DBCompactionTestWithParam, IntraL0Compaction) { const size_t kValueSize = 1 << 20; Random rnd(301); - std::string value(RandomString(&rnd, kValueSize)); + std::string value(rnd.RandomString(kValueSize)); ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency( {{"LevelCompactionPicker::PickCompactionBySize:0", @@ -3261,7 +3262,7 @@ TEST_P(DBCompactionTestWithParam, IntraL0CompactionDoesNotObsoleteDeletions) { const size_t kValueSize = 1 << 20; Random rnd(301); - std::string value(RandomString(&rnd, kValueSize)); + std::string value(rnd.RandomString(kValueSize)); ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency( {{"LevelCompactionPicker::PickCompactionBySize:0", @@ -3480,7 +3481,7 @@ TEST_F(DBCompactionTest, CompactBottomLevelFilesWithDeletions) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } if (i == kNumLevelFiles - 1) { snapshot = db_->GetSnapshot(); @@ -3552,7 +3553,7 @@ TEST_F(DBCompactionTest, LevelCompactExpiredTtlFiles) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } @@ -3598,7 +3599,7 @@ TEST_F(DBCompactionTest, LevelCompactExpiredTtlFiles) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } @@ -3693,7 +3694,7 @@ TEST_F(DBCompactionTest, LevelTtlCascadingCompactions) { // Add two L6 files with key ranges: [1 .. 100], [101 .. 200]. Random rnd(301); for (int i = 1; i <= 100; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, kValueSize))); + ASSERT_OK(Put(Key(i), rnd.RandomString(kValueSize))); } Flush(); // Get the first file's creation time. This will be the oldest file in the @@ -3706,7 +3707,7 @@ TEST_F(DBCompactionTest, LevelTtlCascadingCompactions) { // Add 1 hour and do another flush. env_->addon_time_.fetch_add(1 * 60 * 60); for (int i = 101; i <= 200; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, kValueSize))); + ASSERT_OK(Put(Key(i), rnd.RandomString(kValueSize))); } Flush(); MoveFilesToLevel(6); @@ -3715,12 +3716,12 @@ TEST_F(DBCompactionTest, LevelTtlCascadingCompactions) { env_->addon_time_.fetch_add(1 * 60 * 60); // Add two L4 files with key ranges: [1 .. 50], [51 .. 150]. for (int i = 1; i <= 50; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, kValueSize))); + ASSERT_OK(Put(Key(i), rnd.RandomString(kValueSize))); } Flush(); env_->addon_time_.fetch_add(1 * 60 * 60); for (int i = 51; i <= 150; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, kValueSize))); + ASSERT_OK(Put(Key(i), rnd.RandomString(kValueSize))); } Flush(); MoveFilesToLevel(4); @@ -3729,7 +3730,7 @@ TEST_F(DBCompactionTest, LevelTtlCascadingCompactions) { env_->addon_time_.fetch_add(1 * 60 * 60); // Add one L1 file with key range: [26, 75]. for (int i = 26; i <= 75; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, kValueSize))); + ASSERT_OK(Put(Key(i), rnd.RandomString(kValueSize))); } Flush(); dbfull()->TEST_WaitForCompact(); @@ -3840,8 +3841,8 @@ TEST_F(DBCompactionTest, LevelPeriodicCompaction) { Random rnd(301); for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { - ASSERT_OK(Put(Key(i * kNumKeysPerFile + j), - RandomString(&rnd, kValueSize))); + ASSERT_OK( + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } @@ -3935,7 +3936,7 @@ TEST_F(DBCompactionTest, LevelPeriodicCompactionWithOldDB) { for (int i = 0; i < kNumFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); // Move the first two files to L2. @@ -3998,7 +3999,7 @@ TEST_F(DBCompactionTest, LevelPeriodicAndTtlCompaction) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } @@ -4109,7 +4110,7 @@ TEST_F(DBCompactionTest, LevelPeriodicCompactionWithCompactionFilters) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } @@ -4169,7 +4170,7 @@ TEST_F(DBCompactionTest, CompactRangeDelayedByL0FileCount) { Random rnd(301); for (int j = 0; j < kNumL0FilesLimit - 1; ++j) { for (int k = 0; k < 2; ++k) { - ASSERT_OK(Put(Key(k), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(k), rnd.RandomString(1024))); } Flush(); } @@ -4223,7 +4224,7 @@ TEST_F(DBCompactionTest, CompactRangeDelayedByImmMemTableCount) { Random rnd(301); for (int j = 0; j < kNumImmMemTableLimit - 1; ++j) { - ASSERT_OK(Put(Key(0), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(0), rnd.RandomString(1024))); FlushOptions flush_opts; flush_opts.wait = false; flush_opts.allow_write_stall = true; @@ -4271,7 +4272,7 @@ TEST_F(DBCompactionTest, CompactRangeShutdownWhileDelayed) { Random rnd(301); for (int j = 0; j < kNumL0FilesLimit - 1; ++j) { for (int k = 0; k < 2; ++k) { - ASSERT_OK(Put(1, Key(k), RandomString(&rnd, 1024))); + ASSERT_OK(Put(1, Key(k), rnd.RandomString(1024))); } Flush(1); } @@ -4331,7 +4332,7 @@ TEST_F(DBCompactionTest, CompactRangeSkipFlushAfterDelay) { flush_opts.allow_write_stall = true; for (int i = 0; i < kNumL0FilesLimit - 1; ++i) { for (int j = 0; j < 2; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(j), rnd.RandomString(1024))); } dbfull()->Flush(flush_opts); } @@ -4342,9 +4343,9 @@ TEST_F(DBCompactionTest, CompactRangeSkipFlushAfterDelay) { }); TEST_SYNC_POINT("DBCompactionTest::CompactRangeSkipFlushAfterDelay:PreFlush"); - Put(ToString(0), RandomString(&rnd, 1024)); + Put(ToString(0), rnd.RandomString(1024)); dbfull()->Flush(flush_opts); - Put(ToString(0), RandomString(&rnd, 1024)); + Put(ToString(0), rnd.RandomString(1024)); TEST_SYNC_POINT("DBCompactionTest::CompactRangeSkipFlushAfterDelay:PostFlush"); manual_compaction_thread.join(); @@ -4784,7 +4785,7 @@ TEST_P(CompactionPriTest, Test) { RandomShuffle(std::begin(keys), std::end(keys), rnd.Next()); for (int i = 0; i < kNKeys; i++) { - ASSERT_OK(Put(Key(keys[i]), RandomString(&rnd, 102))); + ASSERT_OK(Put(Key(keys[i]), rnd.RandomString(102))); } dbfull()->TEST_WaitForCompact(); @@ -4826,7 +4827,7 @@ TEST_F(DBCompactionTest, PartialManualCompaction) { Random rnd(301); for (auto i = 0; i < 8; ++i) { for (auto j = 0; j < 10; ++j) { - Merge("foo", RandomString(&rnd, 1024)); + Merge("foo", rnd.RandomString(1024)); } Flush(); } @@ -4858,8 +4859,8 @@ TEST_F(DBCompactionTest, ManualCompactionFailsInReadOnlyMode) { Random rnd(301); for (int i = 0; i < kNumL0Files; ++i) { // Make sure files are overlapping in key-range to prevent trivial move. - Put("key1", RandomString(&rnd, 1024)); - Put("key2", RandomString(&rnd, 1024)); + Put("key1", rnd.RandomString(1024)); + Put("key2", rnd.RandomString(1024)); Flush(); } ASSERT_EQ(kNumL0Files, NumTableFilesAtLevel(0)); @@ -4868,7 +4869,7 @@ TEST_F(DBCompactionTest, ManualCompactionFailsInReadOnlyMode) { mock_env->SetFilesystemActive(false); // Make sure this is outside `CompactRange`'s range so that it doesn't fail // early trying to flush memtable. - ASSERT_NOK(Put("key3", RandomString(&rnd, 1024))); + ASSERT_NOK(Put("key3", rnd.RandomString(1024))); // In the bug scenario, the first manual compaction would fail and forget to // unregister itself, causing the second one to hang forever due to conflict @@ -4907,7 +4908,7 @@ TEST_F(DBCompactionTest, ManualCompactionBottomLevelOptimized) { for (auto i = 0; i < 8; ++i) { for (auto j = 0; j < 10; ++j) { ASSERT_OK( - Put("foo" + std::to_string(i * 10 + j), RandomString(&rnd, 1024))); + Put("foo" + std::to_string(i * 10 + j), rnd.RandomString(1024))); } Flush(); } @@ -4917,7 +4918,7 @@ TEST_F(DBCompactionTest, ManualCompactionBottomLevelOptimized) { for (auto i = 0; i < 8; ++i) { for (auto j = 0; j < 10; ++j) { ASSERT_OK( - Put("bar" + std::to_string(i * 10 + j), RandomString(&rnd, 1024))); + Put("bar" + std::to_string(i * 10 + j), rnd.RandomString(1024))); } Flush(); } @@ -4951,7 +4952,7 @@ TEST_F(DBCompactionTest, CompactionDuringShutdown) { for (auto i = 0; i < 2; ++i) { for (auto j = 0; j < 10; ++j) { ASSERT_OK( - Put("foo" + std::to_string(i * 10 + j), RandomString(&rnd, 1024))); + Put("foo" + std::to_string(i * 10 + j), rnd.RandomString(1024))); } Flush(); } @@ -4974,7 +4975,7 @@ TEST_P(DBCompactionTestWithParam, FixFileIngestionCompactionDeadlock) { // Generate an external SST file containing a single key, i.e. 99 std::string sst_files_dir = dbname_ + "/sst_files/"; - test::DestroyDir(env_, sst_files_dir); + DestroyDir(env_, sst_files_dir); ASSERT_OK(env_->CreateDir(sst_files_dir)); SstFileWriter sst_writer(EnvOptions(), options); const std::string sst_file_path = sst_files_dir + "test.sst"; @@ -5001,7 +5002,7 @@ TEST_P(DBCompactionTestWithParam, FixFileIngestionCompactionDeadlock) { // Generate level0_stop_writes_trigger L0 files to trigger write stop for (int i = 0; i != options.level0_file_num_compaction_trigger; ++i) { for (int j = 0; j != kNumKeysPerFile; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 990))); + ASSERT_OK(Put(Key(j), rnd.RandomString(990))); } if (0 == i) { // When we reach here, the memtables have kNumKeysPerFile keys. Note that @@ -5093,7 +5094,7 @@ TEST_F(DBCompactionTest, ConsistencyFailTest2) { ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); Random rnd(301); - std::string value = RandomString(&rnd, 1000); + std::string value = rnd.RandomString(1000); ASSERT_OK(Put("foo1", value)); ASSERT_OK(Put("z", "")); @@ -5140,7 +5141,7 @@ TEST_P(DBCompactionTestWithParam, const size_t kValueSize = 1 << 20; Random rnd(301); std::atomic pick_intra_l0_count(0); - std::string value(RandomString(&rnd, kValueSize)); + std::string value(rnd.RandomString(kValueSize)); ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency( {{"DBCompactionTestWithParam::FlushAfterIntraL0:1", @@ -5207,8 +5208,8 @@ TEST_P(DBCompactionTestWithParam, const size_t kValueSize = 1 << 20; Random rnd(301); - std::string value(RandomString(&rnd, kValueSize)); - std::string value2(RandomString(&rnd, kValueSize)); + std::string value(rnd.RandomString(kValueSize)); + std::string value2(rnd.RandomString(kValueSize)); std::string bigvalue = value + value; // prevents trivial move diff --git a/db/db_dynamic_level_test.cc b/db/db_dynamic_level_test.cc index ec059feb95..4273354aeb 100644 --- a/db/db_dynamic_level_test.cc +++ b/db/db_dynamic_level_test.cc @@ -15,6 +15,7 @@ #include "db/db_test_util.h" #include "port/port.h" #include "port/stack_trace.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { class DBTestDynamicLevel : public DBTestBase { @@ -80,9 +81,9 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase) { for (int i = 0; i < kNKeys; i++) { int key = keys[i]; - ASSERT_OK(Put(Key(kNKeys + key), RandomString(&rnd, 102))); - ASSERT_OK(Put(Key(key), RandomString(&rnd, 102))); - ASSERT_OK(Put(Key(kNKeys * 2 + key), RandomString(&rnd, 102))); + ASSERT_OK(Put(Key(kNKeys + key), rnd.RandomString(102))); + ASSERT_OK(Put(Key(key), rnd.RandomString(102))); + ASSERT_OK(Put(Key(kNKeys * 2 + key), rnd.RandomString(102))); ASSERT_OK(Delete(Key(kNKeys + keys[i / 10]))); env_->SleepForMicroseconds(5000); } @@ -158,7 +159,7 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase2) { // Put about 28K to L0 for (int i = 0; i < 70; i++) { ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 380))); + rnd.RandomString(380))); } ASSERT_OK(dbfull()->SetOptions({ {"disable_auto_compactions", "false"}, @@ -175,7 +176,7 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase2) { })); for (int i = 0; i < 70; i++) { ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 380))); + rnd.RandomString(380))); } ASSERT_OK(dbfull()->SetOptions({ @@ -197,7 +198,7 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase2) { // Write about 40K more for (int i = 0; i < 100; i++) { ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 380))); + rnd.RandomString(380))); } ASSERT_OK(dbfull()->SetOptions({ {"disable_auto_compactions", "false"}, @@ -216,7 +217,7 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase2) { // Each file is about 11KB, with 9KB of data. for (int i = 0; i < 1300; i++) { ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 380))); + rnd.RandomString(380))); } // Make sure that the compaction starts before the last bit of data is @@ -257,7 +258,7 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase2) { TEST_SYNC_POINT("DynamicLevelMaxBytesBase2:1"); for (int i = 0; i < 2; i++) { ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 380))); + rnd.RandomString(380))); } TEST_SYNC_POINT("DynamicLevelMaxBytesBase2:2"); @@ -310,15 +311,15 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesCompactRange) { // Put about 7K to L0 for (int i = 0; i < 140; i++) { - ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 80))); + ASSERT_OK( + Put(Key(static_cast(rnd.Uniform(kMaxKey))), rnd.RandomString(80))); } Flush(); dbfull()->TEST_WaitForCompact(); if (NumTableFilesAtLevel(0) == 0) { // Make sure level 0 is not empty - ASSERT_OK(Put(Key(static_cast(rnd.Uniform(kMaxKey))), - RandomString(&rnd, 80))); + ASSERT_OK( + Put(Key(static_cast(rnd.Uniform(kMaxKey))), rnd.RandomString(80))); Flush(); } @@ -382,7 +383,7 @@ TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBaseInc) { const int total_keys = 3000; const int random_part_size = 100; for (int i = 0; i < total_keys; i++) { - std::string value = RandomString(&rnd, random_part_size); + std::string value = rnd.RandomString(random_part_size); PutFixed32(&value, static_cast(i)); ASSERT_OK(Put(Key(i), value)); } @@ -441,8 +442,8 @@ TEST_F(DBTestDynamicLevel, DISABLED_MigrateToDynamicLevelMaxBytesBase) { int total_keys = 1000; for (int i = 0; i < total_keys; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 102))); - ASSERT_OK(Put(Key(kMaxKey + i), RandomString(&rnd, 102))); + ASSERT_OK(Put(Key(i), rnd.RandomString(102))); + ASSERT_OK(Put(Key(kMaxKey + i), rnd.RandomString(102))); ASSERT_OK(Delete(Key(i / 10))); } verify_func(total_keys, false); @@ -475,8 +476,8 @@ TEST_F(DBTestDynamicLevel, DISABLED_MigrateToDynamicLevelMaxBytesBase) { int total_keys2 = 2000; for (int i = total_keys; i < total_keys2; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 102))); - ASSERT_OK(Put(Key(kMaxKey + i), RandomString(&rnd, 102))); + ASSERT_OK(Put(Key(i), rnd.RandomString(102))); + ASSERT_OK(Put(Key(kMaxKey + i), rnd.RandomString(102))); ASSERT_OK(Delete(Key(i / 10))); } diff --git a/db/db_flush_test.cc b/db/db_flush_test.cc index 6255bbd51c..0a0914484f 100644 --- a/db/db_flush_test.cc +++ b/db/db_flush_test.cc @@ -13,10 +13,10 @@ #include "db/db_test_util.h" #include "port/port.h" #include "port/stack_trace.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "util/cast_util.h" #include "util/mutexlock.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { diff --git a/db/db_impl/db_secondary_test.cc b/db/db_impl/db_secondary_test.cc index d54a52493e..00284b1a44 100644 --- a/db/db_impl/db_secondary_test.cc +++ b/db/db_impl/db_secondary_test.cc @@ -10,8 +10,8 @@ #include "db/db_impl/db_impl_secondary.h" #include "db/db_test_util.h" #include "port/stack_trace.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { diff --git a/db/db_io_failure_test.cc b/db/db_io_failure_test.cc index f8d5624475..42b4c34768 100644 --- a/db/db_io_failure_test.cc +++ b/db/db_io_failure_test.cc @@ -9,6 +9,7 @@ #include "db/db_test_util.h" #include "port/stack_trace.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -281,8 +282,8 @@ TEST_F(DBIOFailureTest, FlushSstRangeSyncError) { Random rnd(301); std::string rnd_str = - RandomString(&rnd, static_cast(options.bytes_per_sync / 2)); - std::string rnd_str_512kb = RandomString(&rnd, 512 * 1024); + rnd.RandomString(static_cast(options.bytes_per_sync / 2)); + std::string rnd_str_512kb = rnd.RandomString(512 * 1024); ASSERT_OK(Put(1, "foo", "bar")); // First 1MB doesn't get range synced @@ -330,8 +331,8 @@ TEST_F(DBIOFailureTest, CompactSstRangeSyncError) { Random rnd(301); std::string rnd_str = - RandomString(&rnd, static_cast(options.bytes_per_sync / 2)); - std::string rnd_str_512kb = RandomString(&rnd, 512 * 1024); + rnd.RandomString(static_cast(options.bytes_per_sync / 2)); + std::string rnd_str_512kb = rnd.RandomString(512 * 1024); ASSERT_OK(Put(1, "foo", "bar")); // First 1MB doesn't get range synced diff --git a/db/db_iterator_test.cc b/db/db_iterator_test.cc index 6d06fa6ea4..968511b1f6 100644 --- a/db/db_iterator_test.cc +++ b/db/db_iterator_test.cc @@ -17,6 +17,7 @@ #include "rocksdb/iostats_context.h" #include "rocksdb/perf_context.h" #include "table/block_based/flush_block_policy.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -194,10 +195,10 @@ TEST_P(DBIteratorTest, IterReseekNewUpperBound) { options.compression = kNoCompression; Reopen(options); - ASSERT_OK(Put("a", RandomString(&rnd, 400))); - ASSERT_OK(Put("aabb", RandomString(&rnd, 400))); - ASSERT_OK(Put("aaef", RandomString(&rnd, 400))); - ASSERT_OK(Put("b", RandomString(&rnd, 400))); + ASSERT_OK(Put("a", rnd.RandomString(400))); + ASSERT_OK(Put("aabb", rnd.RandomString(400))); + ASSERT_OK(Put("aaef", rnd.RandomString(400))); + ASSERT_OK(Put("b", rnd.RandomString(400))); dbfull()->Flush(FlushOptions()); ReadOptions opts; Slice ub = Slice("aa"); @@ -1360,7 +1361,7 @@ class DBIteratorTestForPinnedData : public DBIteratorTest { std::vector generated_keys(key_pool); for (int i = 0; i < key_pool; i++) { - generated_keys[i] = RandomString(&rnd, key_size); + generated_keys[i] = rnd.RandomString(key_size); } std::map true_data; @@ -1368,7 +1369,7 @@ class DBIteratorTestForPinnedData : public DBIteratorTest { std::vector deleted_keys; for (int i = 0; i < puts; i++) { auto& k = generated_keys[rnd.Next() % key_pool]; - auto v = RandomString(&rnd, val_size); + auto v = rnd.RandomString(val_size); // Insert data to true_data map and to DB true_data[k] = v; @@ -1531,7 +1532,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorMultipleFiles) { Random rnd(301); for (int i = 1; i <= 1000; i++) { std::string k = Key(i * 3); - std::string v = RandomString(&rnd, 100); + std::string v = rnd.RandomString(100); ASSERT_OK(Put(k, v)); true_data[k] = v; if (i % 250 == 0) { @@ -1545,7 +1546,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorMultipleFiles) { // Generate 4 sst files in L0 for (int i = 1; i <= 1000; i++) { std::string k = Key(i * 2); - std::string v = RandomString(&rnd, 100); + std::string v = rnd.RandomString(100); ASSERT_OK(Put(k, v)); true_data[k] = v; if (i % 250 == 0) { @@ -1557,7 +1558,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorMultipleFiles) { // Add some keys/values in memtables for (int i = 1; i <= 1000; i++) { std::string k = Key(i); - std::string v = RandomString(&rnd, 100); + std::string v = rnd.RandomString(100); ASSERT_OK(Put(k, v)); true_data[k] = v; } @@ -1659,8 +1660,8 @@ TEST_P(DBIteratorTest, PinnedDataIteratorReadAfterUpdate) { std::map true_data; for (int i = 0; i < 1000; i++) { - std::string k = RandomString(&rnd, 10); - std::string v = RandomString(&rnd, 1000); + std::string k = rnd.RandomString(10); + std::string v = rnd.RandomString(1000); ASSERT_OK(Put(k, v)); true_data[k] = v; } @@ -1674,7 +1675,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorReadAfterUpdate) { if (rnd.OneIn(2)) { ASSERT_OK(Delete(kv.first)); } else { - std::string new_val = RandomString(&rnd, 1000); + std::string new_val = rnd.RandomString(1000); ASSERT_OK(Put(kv.first, new_val)); } } @@ -1931,7 +1932,7 @@ TEST_P(DBIteratorTest, IterPrevKeyCrossingBlocksRandomized) { for (int i = 0; i < kNumKeys; i++) { gen_key = Key(i); - gen_val = RandomString(&rnd, kValSize); + gen_val = rnd.RandomString(kValSize); ASSERT_OK(Put(gen_key, gen_val)); true_data[gen_key] = gen_val; @@ -1949,7 +1950,7 @@ TEST_P(DBIteratorTest, IterPrevKeyCrossingBlocksRandomized) { for (int j = 0; j < kNumMergeOperands; j++) { gen_key = Key(i); - gen_val = RandomString(&rnd, kValSize); + gen_val = rnd.RandomString(kValSize); ASSERT_OK(db_->Merge(WriteOptions(), gen_key, gen_val)); true_data[gen_key] += "," + gen_val; @@ -2049,7 +2050,7 @@ TEST_P(DBIteratorTest, IteratorWithLocalStatistics) { Random rnd(301); for (int i = 0; i < 1000; i++) { // Key 10 bytes / Value 10 bytes - ASSERT_OK(Put(RandomString(&rnd, 10), RandomString(&rnd, 10))); + ASSERT_OK(Put(rnd.RandomString(10), rnd.RandomString(10))); } std::atomic total_next(0); @@ -2705,7 +2706,7 @@ TEST_P(DBIteratorTest, AvoidReseekLevelIterator) { Reopen(options); Random rnd(301); - std::string random_str = RandomString(&rnd, 180); + std::string random_str = rnd.RandomString(180); ASSERT_OK(Put("1", random_str)); ASSERT_OK(Put("2", random_str)); diff --git a/db/db_merge_operand_test.cc b/db/db_merge_operand_test.cc index a0ab34e01c..555bec0907 100644 --- a/db/db_merge_operand_test.cc +++ b/db/db_merge_operand_test.cc @@ -8,11 +8,11 @@ #include "rocksdb/perf_context.h" #include "rocksdb/utilities/debug.h" #include "table/block_based/block_builder.h" -#include "test_util/fault_injection_test_env.h" #if !defined(ROCKSDB_LITE) #include "test_util/sync_point.h" #endif #include "rocksdb/merge_operator.h" +#include "utilities/fault_injection_env.h" #include "utilities/merge_operators.h" #include "utilities/merge_operators/sortlist.h" #include "utilities/merge_operators/string_append/stringappend2.h" diff --git a/db/db_merge_operator_test.cc b/db/db_merge_operator_test.cc index 4f762468d6..616d276718 100644 --- a/db/db_merge_operator_test.cc +++ b/db/db_merge_operator_test.cc @@ -9,6 +9,7 @@ #include "db/forward_iterator.h" #include "port/stack_trace.h" #include "rocksdb/merge_operator.h" +#include "util/random.h" #include "utilities/merge_operators.h" #include "utilities/merge_operators/string_append/stringappend2.h" @@ -242,7 +243,7 @@ TEST_P(MergeOperatorPinningTest, OperandsMultiBlocks) { std::string key = Key(key_id % 35); key_id++; for (int k = 0; k < kOperandsPerKeyPerFile; k++) { - std::string val = RandomString(&rnd, kOperandSize); + std::string val = rnd.RandomString(kOperandSize); ASSERT_OK(db_->Merge(WriteOptions(), key, val)); if (true_data[key].size() == 0) { true_data[key] = val; @@ -327,7 +328,7 @@ TEST_P(MergeOperatorPinningTest, EvictCacheBeforeMerge) { for (int i = 0; i < kNumOperands; i++) { for (int j = 0; j < kNumKeys; j++) { std::string k = Key(j); - std::string v = RandomString(&rnd, kOperandSize); + std::string v = rnd.RandomString(kOperandSize); ASSERT_OK(db_->Merge(WriteOptions(), k, v)); true_data[k] = std::max(true_data[k], v); @@ -620,7 +621,7 @@ TEST_P(PerConfigMergeOperatorPinningTest, Randomized) { // kNumPutBefore keys will have base values for (int i = 0; i < kNumPutBefore; i++) { std::string key = Key(rnd.Next() % kKeyRange); - std::string value = RandomString(&rnd, kOperandSize); + std::string value = rnd.RandomString(kOperandSize); ASSERT_OK(db_->Put(WriteOptions(), key, value)); true_data[key] = value; @@ -629,7 +630,7 @@ TEST_P(PerConfigMergeOperatorPinningTest, Randomized) { // Do kTotalMerges merges for (int i = 0; i < kTotalMerges; i++) { std::string key = Key(rnd.Next() % kKeyRange); - std::string value = RandomString(&rnd, kOperandSize); + std::string value = rnd.RandomString(kOperandSize); ASSERT_OK(db_->Merge(WriteOptions(), key, value)); if (true_data[key] < value) { @@ -640,7 +641,7 @@ TEST_P(PerConfigMergeOperatorPinningTest, Randomized) { // Overwrite random kNumPutAfter keys for (int i = 0; i < kNumPutAfter; i++) { std::string key = Key(rnd.Next() % kKeyRange); - std::string value = RandomString(&rnd, kOperandSize); + std::string value = rnd.RandomString(kOperandSize); ASSERT_OK(db_->Put(WriteOptions(), key, value)); true_data[key] = value; diff --git a/db/db_options_test.cc b/db/db_options_test.cc index 8cc09ec546..8d61ee8837 100644 --- a/db/db_options_test.cc +++ b/db/db_options_test.cc @@ -493,8 +493,7 @@ TEST_F(DBOptionsTest, SetDelayedWriteRateOption) { TEST_F(DBOptionsTest, MaxTotalWalSizeChange) { Random rnd(1044); const auto value_size = size_t(1024); - std::string value; - test::RandomString(&rnd, value_size, &value); + std::string value = rnd.RandomString(value_size); Options options; options.create_if_missing = true; @@ -715,7 +714,7 @@ TEST_F(DBOptionsTest, SetFIFOCompactionOptions) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); } @@ -746,7 +745,7 @@ TEST_F(DBOptionsTest, SetFIFOCompactionOptions) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); } @@ -778,7 +777,7 @@ TEST_F(DBOptionsTest, SetFIFOCompactionOptions) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); } @@ -842,7 +841,7 @@ TEST_F(DBOptionsTest, FIFOTtlBackwardCompatible) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); } diff --git a/db/db_properties_test.cc b/db/db_properties_test.cc index 50dc3efef8..c7baed9202 100644 --- a/db/db_properties_test.cc +++ b/db/db_properties_test.cc @@ -126,8 +126,8 @@ TEST_F(DBPropertiesTest, GetAggregatedIntPropertyTest) { Random rnd(301); for (auto* handle : handles_) { for (int i = 0; i < kKeyNum; ++i) { - db_->Put(WriteOptions(), handle, RandomString(&rnd, kKeySize), - RandomString(&rnd, kValueSize)); + db_->Put(WriteOptions(), handle, rnd.RandomString(kKeySize), + rnd.RandomString(kValueSize)); } } @@ -346,18 +346,18 @@ TEST_F(DBPropertiesTest, AggregatedTableProperties) { Random rnd(5632); for (int table = 1; table <= kTableCount; ++table) { for (int i = 0; i < kPutsPerTable; ++i) { - db_->Put(WriteOptions(), RandomString(&rnd, kKeySize), - RandomString(&rnd, kValueSize)); + db_->Put(WriteOptions(), rnd.RandomString(kKeySize), + rnd.RandomString(kValueSize)); } for (int i = 0; i < kDeletionsPerTable; i++) { - db_->Delete(WriteOptions(), RandomString(&rnd, kKeySize)); + db_->Delete(WriteOptions(), rnd.RandomString(kKeySize)); } for (int i = 0; i < kMergeOperandsPerTable; i++) { - db_->Merge(WriteOptions(), RandomString(&rnd, kKeySize), - RandomString(&rnd, kValueSize)); + db_->Merge(WriteOptions(), rnd.RandomString(kKeySize), + rnd.RandomString(kValueSize)); } for (int i = 0; i < kRangeDeletionsPerTable; i++) { - std::string start = RandomString(&rnd, kKeySize); + std::string start = rnd.RandomString(kKeySize); std::string end = start; end.resize(kValueSize); db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), start, end); @@ -546,18 +546,18 @@ TEST_F(DBPropertiesTest, AggregatedTablePropertiesAtLevel) { TableProperties tp, sum_tp, expected_tp; for (int table = 1; table <= kTableCount; ++table) { for (int i = 0; i < kPutsPerTable; ++i) { - db_->Put(WriteOptions(), RandomString(&rnd, kKeySize), - RandomString(&rnd, kValueSize)); + db_->Put(WriteOptions(), rnd.RandomString(kKeySize), + rnd.RandomString(kValueSize)); } for (int i = 0; i < kDeletionsPerTable; i++) { - db_->Delete(WriteOptions(), RandomString(&rnd, kKeySize)); + db_->Delete(WriteOptions(), rnd.RandomString(kKeySize)); } for (int i = 0; i < kMergeOperandsPerTable; i++) { - db_->Merge(WriteOptions(), RandomString(&rnd, kKeySize), - RandomString(&rnd, kValueSize)); + db_->Merge(WriteOptions(), rnd.RandomString(kKeySize), + rnd.RandomString(kValueSize)); } for (int i = 0; i < kRangeDeletionsPerTable; i++) { - std::string start = RandomString(&rnd, kKeySize); + std::string start = rnd.RandomString(kKeySize); std::string end = start; end.resize(kValueSize); db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), start, end); @@ -920,7 +920,7 @@ TEST_F(DBPropertiesTest, ApproximateMemoryUsage) { for (int r = 0; r < kNumRounds; ++r) { for (int f = 0; f < kFlushesPerRound; ++f) { for (int w = 0; w < kWritesPerFlush; ++w) { - Put(RandomString(&rnd, kKeySize), RandomString(&rnd, kValueSize)); + Put(rnd.RandomString(kKeySize), rnd.RandomString(kValueSize)); } } // Make sure that there is no flush between getting the two properties. @@ -938,7 +938,7 @@ TEST_F(DBPropertiesTest, ApproximateMemoryUsage) { iters.push_back(db_->NewIterator(ReadOptions())); for (int f = 0; f < kFlushesPerRound; ++f) { for (int w = 0; w < kWritesPerFlush; ++w) { - Put(RandomString(&rnd, kKeySize), RandomString(&rnd, kValueSize)); + Put(rnd.RandomString(kKeySize), rnd.RandomString(kValueSize)); } } // Force flush to prevent flush from happening between getting the @@ -1296,8 +1296,8 @@ TEST_F(DBPropertiesTest, TablePropertiesNeedCompactTest) { const int kMaxKey = 1000; for (int i = 0; i < kMaxKey; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 102))); - ASSERT_OK(Put(Key(kMaxKey + i), RandomString(&rnd, 102))); + ASSERT_OK(Put(Key(i), rnd.RandomString(102))); + ASSERT_OK(Put(Key(kMaxKey + i), rnd.RandomString(102))); } Flush(); dbfull()->TEST_WaitForCompact(); diff --git a/db/db_range_del_test.cc b/db/db_range_del_test.cc index b6f721b716..ca4a6f9fc9 100644 --- a/db/db_range_del_test.cc +++ b/db/db_range_del_test.cc @@ -7,6 +7,7 @@ #include "port/stack_trace.h" #include "rocksdb/utilities/write_batch_with_index.h" #include "test_util/testutil.h" +#include "util/random.h" #include "utilities/merge_operators.h" namespace ROCKSDB_NAMESPACE { @@ -124,7 +125,7 @@ TEST_F(DBRangeDelTest, CompactionOutputFilesExactlyFilled) { std::vector values; // Write 12K (4 values, each 3K) for (int j = 0; j < kNumPerFile; j++) { - values.push_back(RandomString(&rnd, 3 << 10)); + values.push_back(rnd.RandomString(3 << 10)); ASSERT_OK(Put(Key(i * kNumPerFile + j), values[j])); if (j == 0 && i > 0) { dbfull()->TEST_WaitForFlushMemTable(); @@ -172,7 +173,7 @@ TEST_F(DBRangeDelTest, MaxCompactionBytesCutsOutputFiles) { std::vector values; // Write 1MB (256 values, each 4K) for (int j = 0; j < kNumPerFile; j++) { - values.push_back(RandomString(&rnd, kBytesPerVal)); + values.push_back(rnd.RandomString(kBytesPerVal)); ASSERT_OK(Put(GetNumericStr(kNumPerFile * i + j), values[j])); } // extra entry to trigger SpecialSkipListFactory's flush @@ -378,7 +379,7 @@ TEST_F(DBRangeDelTest, ValidLevelSubcompactionBoundaries) { std::vector values; // Write 100KB (100 values, each 1K) for (int k = 0; k < kNumPerFile; k++) { - values.push_back(RandomString(&rnd, 990)); + values.push_back(rnd.RandomString(990)); ASSERT_OK(Put(Key(j * kNumPerFile + k), values[k])); } // put extra key to trigger flush @@ -438,7 +439,7 @@ TEST_F(DBRangeDelTest, ValidUniversalSubcompactionBoundaries) { std::vector values; // Write 100KB (100 values, each 1K) for (int k = 0; k < kNumPerFile; k++) { - values.push_back(RandomString(&rnd, 990)); + values.push_back(rnd.RandomString(990)); ASSERT_OK(Put(Key(j * kNumPerFile + k), values[k])); } // put extra key to trigger flush @@ -990,7 +991,7 @@ TEST_F(DBRangeDelTest, CompactionTreatsSplitInputLevelDeletionAtomically) { Key(2 * kNumFilesPerLevel)); Random rnd(301); - std::string value = RandomString(&rnd, kValueBytes); + std::string value = rnd.RandomString(kValueBytes); for (int j = 0; j < kNumFilesPerLevel; ++j) { // give files overlapping key-ranges to prevent trivial move ASSERT_OK(Put(Key(j), value)); @@ -1063,7 +1064,7 @@ TEST_F(DBRangeDelTest, RangeTombstoneEndKeyAsSstableUpperBound) { // [key000000#3,1, key000004#72057594037927935,15] // [key000001#5,1, key000002#6,1] Random rnd(301); - std::string value = RandomString(&rnd, kValueBytes); + std::string value = rnd.RandomString(kValueBytes); for (int j = 0; j < kNumFilesPerLevel; ++j) { // Give files overlapping key-ranges to prevent a trivial move when we // compact from L0 to L1. @@ -1198,7 +1199,7 @@ TEST_F(DBRangeDelTest, KeyAtOverlappingEndpointReappears) { const Snapshot* snapshot = nullptr; for (int i = 0; i < kNumFiles; ++i) { for (int j = 0; j < kFileBytes / kValueBytes; ++j) { - auto value = RandomString(&rnd, kValueBytes); + auto value = rnd.RandomString(kValueBytes); ASSERT_OK(db_->Merge(WriteOptions(), "key", value)); } if (i == kNumFiles - 1) { @@ -1282,7 +1283,7 @@ TEST_F(DBRangeDelTest, UntruncatedTombstoneDoesNotDeleteNewerKey) { const Snapshot* snapshots[] = {nullptr, nullptr}; for (int i = 0; i < kNumFiles; ++i) { for (int j = 0; j < kFileBytes / kValueBytes; ++j) { - auto value = RandomString(&rnd, kValueBytes); + auto value = rnd.RandomString(kValueBytes); std::string key; if (i < kNumFiles / 2) { key = Key(0); @@ -1328,7 +1329,7 @@ TEST_F(DBRangeDelTest, UntruncatedTombstoneDoesNotDeleteNewerKey) { // Now overwrite a few keys that are in L1 files that definitely don't have // overlapping boundary keys. for (int i = kMaxKey; i > kMaxKey - kKeysOverwritten; --i) { - auto value = RandomString(&rnd, kValueBytes); + auto value = rnd.RandomString(kValueBytes); ASSERT_OK(db_->Merge(WriteOptions(), Key(i), value)); } ASSERT_OK(db_->Flush(FlushOptions())); @@ -1375,7 +1376,7 @@ TEST_F(DBRangeDelTest, DeletedMergeOperandReappearsIterPrev) { const Snapshot* snapshot = nullptr; for (int i = 0; i < kNumFiles; ++i) { for (int j = 0; j < kFileBytes / kValueBytes; ++j) { - auto value = RandomString(&rnd, kValueBytes); + auto value = rnd.RandomString(kValueBytes); ASSERT_OK(db_->Merge(WriteOptions(), Key(j % kNumKeys), value)); if (i == 0 && j == kNumKeys) { // Take snapshot to prevent covered merge operands from being dropped or @@ -1515,7 +1516,7 @@ TEST_F(DBRangeDelTest, RangeTombstoneWrittenToMinimalSsts) { for (int i = 0; i < kFileBytes / kValueBytes; ++i) { std::string key(1, first_char); key.append(Key(i)); - std::string value = RandomString(&rnd, kValueBytes); + std::string value = rnd.RandomString(kValueBytes); ASSERT_OK(Put(key, value)); } db_->Flush(FlushOptions()); @@ -1597,7 +1598,7 @@ TEST_F(DBRangeDelTest, OverlappedTombstones) { std::vector values; // Write 12K (4 values, each 3K) for (int j = 0; j < kNumPerFile; j++) { - values.push_back(RandomString(&rnd, 3 << 10)); + values.push_back(rnd.RandomString(3 << 10)); ASSERT_OK(Put(Key(i * kNumPerFile + j), values[j])); } } @@ -1636,7 +1637,7 @@ TEST_F(DBRangeDelTest, OverlappedKeys) { std::vector values; // Write 12K (4 values, each 3K) for (int j = 0; j < kNumPerFile; j++) { - values.push_back(RandomString(&rnd, 3 << 10)); + values.push_back(rnd.RandomString(3 << 10)); ASSERT_OK(Put(Key(i * kNumPerFile + j), values[j])); } } diff --git a/db/db_sst_test.cc b/db/db_sst_test.cc index 687d3b852e..44e2380dcb 100644 --- a/db/db_sst_test.cc +++ b/db/db_sst_test.cc @@ -12,6 +12,7 @@ #include "port/port.h" #include "port/stack_trace.h" #include "rocksdb/sst_file_manager.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -163,7 +164,7 @@ TEST_F(DBSSTTest, DontDeleteMovedFile) { for (int i = 0; i < 2; ++i) { // Create 1MB sst file for (int j = 0; j < 100; ++j) { - ASSERT_OK(Put(Key(i * 50 + j), RandomString(&rnd, 10 * 1024))); + ASSERT_OK(Put(Key(i * 50 + j), rnd.RandomString(10 * 1024))); } ASSERT_OK(Flush()); } @@ -211,7 +212,7 @@ TEST_F(DBSSTTest, DeleteObsoleteFilesPendingOutputs) { for (int i = 0; i < 2; ++i) { // Create 1MB sst file for (int j = 0; j < 100; ++j) { - ASSERT_OK(Put(Key(i * 50 + j), RandomString(&rnd, 10 * 1024))); + ASSERT_OK(Put(Key(i * 50 + j), rnd.RandomString(10 * 1024))); } ASSERT_OK(Flush()); } @@ -242,7 +243,7 @@ TEST_F(DBSSTTest, DeleteObsoleteFilesPendingOutputs) { // write_buffer_size. The flush will be blocked with block_first_time // pending_file is protecting all the files created after for (int j = 0; j < 256; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 10 * 1024))); + ASSERT_OK(Put(Key(j), rnd.RandomString(10 * 1024))); } blocking_thread.WaitUntilSleeping(); @@ -758,7 +759,7 @@ TEST_F(DBSSTTest, DBWithMaxSpaceAllowed) { // Generate a file containing 100 keys. for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); @@ -799,7 +800,7 @@ TEST_F(DBSSTTest, CancellingCompactionsWorks) { // Generate a file containing 10 keys. for (int i = 0; i < 10; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); uint64_t total_file_size = 0; @@ -809,7 +810,7 @@ TEST_F(DBSSTTest, CancellingCompactionsWorks) { // Generate another file to trigger compaction. for (int i = 0; i < 10; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); dbfull()->TEST_WaitForCompact(true); @@ -846,7 +847,7 @@ TEST_F(DBSSTTest, CancellingManualCompactionsWorks) { // Generate a file containing 10 keys. for (int i = 0; i < 10; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); uint64_t total_file_size = 0; @@ -856,7 +857,7 @@ TEST_F(DBSSTTest, CancellingManualCompactionsWorks) { // Generate another file to trigger compaction. for (int i = 0; i < 10; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); @@ -953,7 +954,7 @@ TEST_F(DBSSTTest, DBWithMaxSpaceAllowedRandomized) { // It is easy to detect if the test is stuck in a loop. No need for // complex termination logic. while (true) { - auto s = Put(RandomString(&rnd, 10), RandomString(&rnd, 50)); + auto s = Put(rnd.RandomString(10), rnd.RandomString(50)); if (!s.ok()) { break; } diff --git a/db/db_statistics_test.cc b/db/db_statistics_test.cc index 8fbbb96d5e..2450b1a535 100644 --- a/db/db_statistics_test.cc +++ b/db/db_statistics_test.cc @@ -9,6 +9,7 @@ #include "monitoring/thread_status_util.h" #include "port/stack_trace.h" #include "rocksdb/statistics.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -55,7 +56,7 @@ TEST_F(DBStatisticsTest, CompressionStatsTest) { Random rnd(301); for (int i = 0; i < kNumKeysWritten; ++i) { // compressible string - ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a'))); + ASSERT_OK(Put(Key(i), rnd.RandomString(128) + std::string(128, 'a'))); } ASSERT_OK(Flush()); ASSERT_GT(options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED), 0); @@ -75,7 +76,7 @@ TEST_F(DBStatisticsTest, CompressionStatsTest) { // Check that compressions do not occur when turned off for (int i = 0; i < kNumKeysWritten; ++i) { // compressible string - ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a'))); + ASSERT_OK(Put(Key(i), rnd.RandomString(128) + std::string(128, 'a'))); } ASSERT_OK(Flush()); ASSERT_EQ(options.statistics->getTickerCount(NUMBER_BLOCK_COMPRESSED) diff --git a/db/db_table_properties_test.cc b/db/db_table_properties_test.cc index 98512e22f7..cf71cc94a6 100644 --- a/db/db_table_properties_test.cc +++ b/db/db_table_properties_test.cc @@ -16,6 +16,7 @@ #include "rocksdb/utilities/table_properties_collectors.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" #ifndef ROCKSDB_LITE @@ -155,12 +156,12 @@ TEST_F(DBTablePropertiesTest, GetPropertiesOfTablesInRange) { // build a decent LSM for (int i = 0; i < 10000; i++) { - ASSERT_OK(Put(test::RandomKey(&rnd, 5), RandomString(&rnd, 102))); + ASSERT_OK(Put(test::RandomKey(&rnd, 5), rnd.RandomString(102))); } Flush(); dbfull()->TEST_WaitForCompact(); if (NumTableFilesAtLevel(0) == 0) { - ASSERT_OK(Put(test::RandomKey(&rnd, 5), RandomString(&rnd, 102))); + ASSERT_OK(Put(test::RandomKey(&rnd, 5), rnd.RandomString(102))); Flush(); } diff --git a/db/db_test.cc b/db/db_test.cc index 4fecae5821..00668cc063 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -64,6 +64,7 @@ #include "test_util/testutil.h" #include "util/compression.h" #include "util/mutexlock.h" +#include "util/random.h" #include "util/rate_limiter.h" #include "util/string_util.h" #include "utilities/merge_operators.h" @@ -914,7 +915,7 @@ TEST_F(DBTest, FlushSchedule) { WriteOptions wo; // this should fill up 2 memtables for (int k = 0; k < 5000; ++k) { - ASSERT_OK(db_->Put(wo, handles_[a & 1], RandomString(&rnd, 13), "")); + ASSERT_OK(db_->Put(wo, handles_[a & 1], rnd.RandomString(13), "")); } }; @@ -1171,7 +1172,7 @@ void MinLevelHelper(DBTest* self, Options& options) { std::vector values; // Write 120KB (12 values, each 10K) for (int i = 0; i < 12; i++) { - values.push_back(DBTestBase::RandomString(&rnd, 10000)); + values.push_back(rnd.RandomString(10000)); ASSERT_OK(self->Put(DBTestBase::Key(i), values[i])); } self->dbfull()->TEST_WaitForFlushMemTable(); @@ -1181,7 +1182,7 @@ void MinLevelHelper(DBTest* self, Options& options) { // generate one more file in level-0, and should trigger level-0 compaction std::vector values; for (int i = 0; i < 12; i++) { - values.push_back(DBTestBase::RandomString(&rnd, 10000)); + values.push_back(rnd.RandomString(10000)); ASSERT_OK(self->Put(DBTestBase::Key(i), values[i])); } self->dbfull()->TEST_WaitForCompact(); @@ -1294,7 +1295,7 @@ TEST_F(DBTest, DISABLED_RepeatedWritesToSameKey) { Random rnd(301); std::string value = - RandomString(&rnd, static_cast(2 * options.write_buffer_size)); + rnd.RandomString(static_cast(2 * options.write_buffer_size)); for (int i = 0; i < 5 * kMaxFiles; i++) { ASSERT_OK(Put(1, "key", value)); ASSERT_LE(TotalTableFiles(1), kMaxFiles); @@ -1370,7 +1371,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) { const int N = 128; Random rnd(301); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(i), rnd.RandomString(1024))); } uint64_t size; @@ -1394,7 +1395,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) { ASSERT_EQ(size, 0); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(1000 + i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(1000 + i), rnd.RandomString(1024))); } start = Key(500); @@ -1426,7 +1427,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) { RandomShuffle(std::begin(keys), std::end(keys), rnd.Next()); for (int i = 0; i < N * 3; i++) { - ASSERT_OK(Put(Key(keys[i] + 1000), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(keys[i] + 1000), rnd.RandomString(1024))); } start = Key(100); @@ -1460,7 +1461,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) { Flush(); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i + 1000), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(i + 1000), rnd.RandomString(1024))); } start = Key(1050); @@ -1508,7 +1509,7 @@ TEST_F(DBTest, ApproximateSizesFilesWithErrorMargin) { const int N = 64000; Random rnd(301); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 24))); + ASSERT_OK(Put(Key(i), rnd.RandomString(24))); } // Flush everything to files Flush(); @@ -1517,7 +1518,7 @@ TEST_F(DBTest, ApproximateSizesFilesWithErrorMargin) { // Write more keys for (int i = N; i < (N + N / 4); i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 24))); + ASSERT_OK(Put(Key(i), rnd.RandomString(24))); } // Flush everything to files again Flush(); @@ -1576,7 +1577,7 @@ TEST_F(DBTest, GetApproximateMemTableStats) { const int N = 128; Random rnd(301); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(i), rnd.RandomString(1024))); } uint64_t count; @@ -1608,7 +1609,7 @@ TEST_F(DBTest, GetApproximateMemTableStats) { ASSERT_EQ(size, 0); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(1000 + i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(1000 + i), rnd.RandomString(1024))); } start = Key(100); @@ -1639,7 +1640,7 @@ TEST_F(DBTest, ApproximateSizes) { static const int S2 = 105000; // Allow some expansion from metadata Random rnd(301); for (int i = 0; i < N; i++) { - ASSERT_OK(Put(1, Key(i), RandomString(&rnd, S1))); + ASSERT_OK(Put(1, Key(i), rnd.RandomString(S1))); } // 0 because GetApproximateSizes() does not account for memtable space @@ -1682,15 +1683,15 @@ TEST_F(DBTest, ApproximateSizes_MixOfSmallAndLarge) { CreateAndReopenWithCF({"pikachu"}, options); Random rnd(301); - std::string big1 = RandomString(&rnd, 100000); - ASSERT_OK(Put(1, Key(0), RandomString(&rnd, 10000))); - ASSERT_OK(Put(1, Key(1), RandomString(&rnd, 10000))); + std::string big1 = rnd.RandomString(100000); + ASSERT_OK(Put(1, Key(0), rnd.RandomString(10000))); + ASSERT_OK(Put(1, Key(1), rnd.RandomString(10000))); ASSERT_OK(Put(1, Key(2), big1)); - ASSERT_OK(Put(1, Key(3), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(3), rnd.RandomString(10000))); ASSERT_OK(Put(1, Key(4), big1)); - ASSERT_OK(Put(1, Key(5), RandomString(&rnd, 10000))); - ASSERT_OK(Put(1, Key(6), RandomString(&rnd, 300000))); - ASSERT_OK(Put(1, Key(7), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(5), rnd.RandomString(10000))); + ASSERT_OK(Put(1, Key(6), rnd.RandomString(300000))); + ASSERT_OK(Put(1, Key(7), rnd.RandomString(10000))); // Check sizes across recovery by reopening a few times for (int run = 0; run < 3; run++) { @@ -1797,7 +1798,7 @@ TEST_F(DBTest, HiddenValuesAreRemoved) { Random rnd(301); FillLevels("a", "z", 1); - std::string big = RandomString(&rnd, 50000); + std::string big = rnd.RandomString(50000); Put(1, "foo", big); Put(1, "pastfoo", "v"); const Snapshot* snapshot = db_->GetSnapshot(); @@ -2187,7 +2188,7 @@ TEST_F(DBTest, SnapshotFiles) { ASSERT_EQ(NumTableFilesAtLevel(0, 1), 0); std::vector values; for (int i = 0; i < 80; i++) { - values.push_back(RandomString(&rnd, 100000)); + values.push_back(rnd.RandomString(100000)); ASSERT_OK(Put((i < 40), Key(i), values[i])); } @@ -2240,7 +2241,7 @@ TEST_F(DBTest, SnapshotFiles) { // overwrite one key, this key should not appear in the snapshot std::vector extras; for (unsigned int i = 0; i < 1; i++) { - extras.push_back(RandomString(&rnd, 100000)); + extras.push_back(rnd.RandomString(100000)); ASSERT_OK(Put(0, Key(i), extras[i])); } @@ -3206,8 +3207,8 @@ TEST_P(DBTestRandomized, Randomized) { } if (p < 45) { // Put k = RandomKey(&rnd, minimum); - v = RandomString(&rnd, - rnd.OneIn(20) ? 100 + rnd.Uniform(100) : rnd.Uniform(8)); + v = rnd.RandomString(rnd.OneIn(20) ? 100 + rnd.Uniform(100) + : rnd.Uniform(8)); ASSERT_OK(model.Put(WriteOptions(), k, v)); ASSERT_OK(db_->Put(WriteOptions(), k, v)); } else if (p < 90) { // Delete @@ -3225,7 +3226,7 @@ TEST_P(DBTestRandomized, Randomized) { // we have multiple entries in the write batch for the same key } if (rnd.OneIn(2)) { - v = RandomString(&rnd, rnd.Uniform(10)); + v = rnd.RandomString(rnd.Uniform(10)); b.Put(k, v); } else { b.Delete(k); @@ -3395,7 +3396,7 @@ TEST_P(DBTestWithParam, FIFOCompactionTest) { Random rnd(301); for (int i = 0; i < 6; ++i) { for (int j = 0; j < 110; ++j) { - ASSERT_OK(Put(ToString(i * 100 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 100 + j), rnd.RandomString(980))); } // flush should happen here ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable()); @@ -3433,7 +3434,7 @@ TEST_F(DBTest, FIFOCompactionTestWithCompaction) { for (int i = 0; i < 60; i++) { // Generate and flush a file about 20KB. for (int j = 0; j < 20; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3444,7 +3445,7 @@ TEST_F(DBTest, FIFOCompactionTestWithCompaction) { for (int i = 0; i < 60; i++) { // Generate and flush a file about 20KB. for (int j = 0; j < 20; j++) { - ASSERT_OK(Put(ToString(i * 20 + j + 2000), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j + 2000), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3474,9 +3475,9 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) { Random rnd(301); for (int i = 0; i < 3; i++) { // Each file contains a different key which will be dropped later. - ASSERT_OK(Put("a" + ToString(i), RandomString(&rnd, 500))); + ASSERT_OK(Put("a" + ToString(i), rnd.RandomString(500))); ASSERT_OK(Put("key" + ToString(i), "")); - ASSERT_OK(Put("z" + ToString(i), RandomString(&rnd, 500))); + ASSERT_OK(Put("z" + ToString(i), rnd.RandomString(500))); Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); } @@ -3486,9 +3487,9 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) { } for (int i = 0; i < 3; i++) { // Each file contains a different key which will be dropped later. - ASSERT_OK(Put("a" + ToString(i), RandomString(&rnd, 500))); + ASSERT_OK(Put("a" + ToString(i), rnd.RandomString(500))); ASSERT_OK(Delete("key" + ToString(i))); - ASSERT_OK(Put("z" + ToString(i), RandomString(&rnd, 500))); + ASSERT_OK(Put("z" + ToString(i), rnd.RandomString(500))); Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); } @@ -3558,7 +3559,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3593,7 +3594,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3609,7 +3610,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { // Create 1 more file to trigger TTL compaction. The old files are dropped. for (int i = 0; i < 1; i++) { for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); } @@ -3635,7 +3636,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 3; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3650,7 +3651,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 140; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3673,7 +3674,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 10; i++) { // Generate and flush a file about 10KB. for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3692,7 +3693,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { // Create 10 more files. The old 5 files are dropped as their ttl expired. for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3717,7 +3718,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 60; i++) { // Generate and flush a file about 20KB. for (int j = 0; j < 20; j++) { - ASSERT_OK(Put(ToString(i * 20 + j), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3728,7 +3729,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) { for (int i = 0; i < 60; i++) { // Generate and flush a file about 20KB. for (int j = 0; j < 20; j++) { - ASSERT_OK(Put(ToString(i * 20 + j + 2000), RandomString(&rnd, 980))); + ASSERT_OK(Put(ToString(i * 20 + j + 2000), rnd.RandomString(980))); } Flush(); ASSERT_OK(dbfull()->TEST_WaitForCompact()); @@ -3771,8 +3772,7 @@ TEST_F(DBTest, DISABLED_RateLimitingTest) { uint64_t start = env_->NowMicros(); // Write ~96M data for (int64_t i = 0; i < (96 << 10); ++i) { - ASSERT_OK( - Put(RandomString(&rnd, 32), RandomString(&rnd, (1 << 10) + 1), wo)); + ASSERT_OK(Put(rnd.RandomString(32), rnd.RandomString((1 << 10) + 1), wo)); } uint64_t elapsed = env_->NowMicros() - start; double raw_rate = env_->bytes_written_ * 1000000.0 / elapsed; @@ -3790,8 +3790,7 @@ TEST_F(DBTest, DISABLED_RateLimitingTest) { start = env_->NowMicros(); // Write ~96M data for (int64_t i = 0; i < (96 << 10); ++i) { - ASSERT_OK( - Put(RandomString(&rnd, 32), RandomString(&rnd, (1 << 10) + 1), wo)); + ASSERT_OK(Put(rnd.RandomString(32), rnd.RandomString((1 << 10) + 1), wo)); } rate_limiter_drains = TestGetTickerCount(options, NUMBER_RATE_LIMITER_DRAINS) - @@ -3816,8 +3815,7 @@ TEST_F(DBTest, DISABLED_RateLimitingTest) { start = env_->NowMicros(); // Write ~96M data for (int64_t i = 0; i < (96 << 10); ++i) { - ASSERT_OK( - Put(RandomString(&rnd, 32), RandomString(&rnd, (1 << 10) + 1), wo)); + ASSERT_OK(Put(rnd.RandomString(32), rnd.RandomString((1 << 10) + 1), wo)); } elapsed = env_->NowMicros() - start; rate_limiter_drains = @@ -4018,7 +4016,7 @@ TEST_F(DBTest, DynamicMemtableOptions) { const int kNumPutsBeforeWaitForFlush = 64; Random rnd(301); for (int i = 0; i < size; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(i), rnd.RandomString(1024))); // The following condition prevents a race condition between flush jobs // acquiring work and this thread filling up multiple memtables. Without @@ -4092,7 +4090,7 @@ TEST_F(DBTest, DynamicMemtableOptions) { ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); while (!sleeping_task_low.WokenUp() && count < 256) { - ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), WriteOptions())); + ASSERT_OK(Put(Key(count), rnd.RandomString(1024), WriteOptions())); count++; } ASSERT_GT(static_cast(count), 128 * 0.8); @@ -4112,7 +4110,7 @@ TEST_F(DBTest, DynamicMemtableOptions) { Env::Priority::LOW); count = 0; while (!sleeping_task_low.WokenUp() && count < 1024) { - ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), WriteOptions())); + ASSERT_OK(Put(Key(count), rnd.RandomString(1024), WriteOptions())); count++; } // Windows fails this test. Will tune in the future and figure out @@ -4136,7 +4134,7 @@ TEST_F(DBTest, DynamicMemtableOptions) { count = 0; while (!sleeping_task_low.WokenUp() && count < 1024) { - ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), WriteOptions())); + ASSERT_OK(Put(Key(count), rnd.RandomString(1024), WriteOptions())); count++; } // Windows fails this test. Will tune in the future and figure out @@ -4323,7 +4321,7 @@ TEST_P(DBTestWithParam, ThreadStatusSingleCompaction) { for (int file = 0; file < kNumL0Files; ++file) { for (int key = 0; key < kEntriesPerBuffer; ++key) { ASSERT_OK(Put(ToString(key + file * kEntriesPerBuffer), - RandomString(&rnd, kTestValueSize))); + rnd.RandomString(kTestValueSize))); } Flush(); } @@ -4471,7 +4469,7 @@ TEST_P(DBTestWithParam, PreShutdownMultipleCompaction) { int operation_count[ThreadStatus::NUM_OP_TYPES] = {0}; for (int file = 0; file < 16 * kNumL0Files; ++file) { for (int k = 0; k < kEntriesPerBuffer; ++k) { - ASSERT_OK(Put(ToString(key++), RandomString(&rnd, kTestValueSize))); + ASSERT_OK(Put(ToString(key++), rnd.RandomString(kTestValueSize))); } Status s = env_->GetThreadList(&thread_list); @@ -4558,7 +4556,7 @@ TEST_P(DBTestWithParam, PreShutdownCompactionMiddle) { int operation_count[ThreadStatus::NUM_OP_TYPES] = {0}; for (int file = 0; file < 16 * kNumL0Files; ++file) { for (int k = 0; k < kEntriesPerBuffer; ++k) { - ASSERT_OK(Put(ToString(key++), RandomString(&rnd, kTestValueSize))); + ASSERT_OK(Put(ToString(key++), rnd.RandomString(kTestValueSize))); } Status s = env_->GetThreadList(&thread_list); @@ -4744,7 +4742,7 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) { ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); for (int i = 0; i < 100; i++) { - std::string value = RandomString(&rnd, 200); + std::string value = rnd.RandomString(200); ASSERT_OK(Put(Key(keys[i]), value)); if (i % 25 == 24) { Flush(); @@ -4789,7 +4787,7 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) { ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); for (int i = 101; i < 500; i++) { - std::string value = RandomString(&rnd, 200); + std::string value = rnd.RandomString(200); ASSERT_OK(Put(Key(keys[i]), value)); if (i % 100 == 99) { Flush(); @@ -4841,7 +4839,7 @@ TEST_F(DBTest, DynamicCompactionOptions) { auto gen_l0_kb = [this](int start, int size, int stride) { Random rnd(301); for (int i = 0; i < size; i++) { - ASSERT_OK(Put(Key(start + stride * i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(start + stride * i), rnd.RandomString(1024))); } dbfull()->TEST_WaitForFlushMemTable(); }; @@ -4936,7 +4934,7 @@ TEST_F(DBTest, DynamicCompactionOptions) { Random rnd(301); WriteOptions wo; while (count < 64) { - ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), wo)); + ASSERT_OK(Put(Key(count), rnd.RandomString(1024), wo)); dbfull()->TEST_FlushMemTable(true, true); count++; if (dbfull()->TEST_write_controler().IsStopped()) { @@ -4964,7 +4962,7 @@ TEST_F(DBTest, DynamicCompactionOptions) { sleeping_task_low.WaitUntilSleeping(); count = 0; while (count < 64) { - ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), wo)); + ASSERT_OK(Put(Key(count), rnd.RandomString(1024), wo)); dbfull()->TEST_FlushMemTable(true, true); count++; if (dbfull()->TEST_write_controler().IsStopped()) { @@ -4986,7 +4984,7 @@ TEST_F(DBTest, DynamicCompactionOptions) { ASSERT_EQ(NumTableFilesAtLevel(0), 0); for (int i = 0; i < 4; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(i), rnd.RandomString(1024))); // Wait for compaction so that put won't stop dbfull()->TEST_FlushMemTable(true); } @@ -5000,7 +4998,7 @@ TEST_F(DBTest, DynamicCompactionOptions) { ASSERT_EQ(NumTableFilesAtLevel(0), 0); for (int i = 0; i < 4; ++i) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(i), rnd.RandomString(1024))); // Wait for compaction so that put won't stop dbfull()->TEST_FlushMemTable(true); } @@ -5174,7 +5172,7 @@ TEST_F(DBTest, FileCreationRandomFailure) { } for (int k = 0; k < kTestSize; ++k) { // here we expect some of the Put fails. - std::string value = RandomString(&rnd, 100); + std::string value = rnd.RandomString(100); Status s = Put(Key(k), Slice(value)); if (s.ok()) { // update the latest successful put @@ -5223,11 +5221,11 @@ TEST_F(DBTest, DynamicMiscOptions) { int key1 = key_start + 1; int key2 = key_start + 2; Random rnd(301); - ASSERT_OK(Put(Key(key0), RandomString(&rnd, 8))); + ASSERT_OK(Put(Key(key0), rnd.RandomString(8))); for (int i = 0; i < 10; ++i) { - ASSERT_OK(Put(Key(key1), RandomString(&rnd, 8))); + ASSERT_OK(Put(Key(key1), rnd.RandomString(8))); } - ASSERT_OK(Put(Key(key2), RandomString(&rnd, 8))); + ASSERT_OK(Put(Key(key2), rnd.RandomString(8))); std::unique_ptr iter(db_->NewIterator(ReadOptions())); iter->Seek(Key(key1)); ASSERT_TRUE(iter->Valid()); @@ -5367,7 +5365,7 @@ TEST_F(DBTest, EncodeDecompressedBlockSizeTest) { Random rnd(301); for (int i = 0; i < kNumKeysWritten; ++i) { // compressible string - ASSERT_OK(Put(Key(i), RandomString(&rnd, 128) + std::string(128, 'a'))); + ASSERT_OK(Put(Key(i), rnd.RandomString(128) + std::string(128, 'a'))); } table_options.format_version = first_table_version == 1 ? 2 : 1; @@ -5712,7 +5710,7 @@ TEST_F(DBTest, PromoteL0) { std::map values; for (const auto& range : ranges) { for (int32_t j = range.first; j < range.second; j++) { - values[j] = RandomString(&rnd, value_size); + values[j] = rnd.RandomString(value_size); ASSERT_OK(Put(Key(j), values[j])); } ASSERT_OK(Flush()); @@ -5773,7 +5771,7 @@ TEST_F(DBTest, CompactRangeWithEmptyBottomLevel) { Random rnd(301); for (int i = 0; i < kNumL0Files; ++i) { - ASSERT_OK(Put(Key(0), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(0), rnd.RandomString(1024))); Flush(); } ASSERT_EQ(NumTableFilesAtLevel(0), kNumL0Files); @@ -5812,7 +5810,7 @@ TEST_F(DBTest, AutomaticConflictsWithManualCompaction) { for (int i = 0; i < 2; ++i) { // put two keys to ensure no trivial move for (int j = 0; j < 2; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(j), rnd.RandomString(1024))); } ASSERT_OK(Flush()); } @@ -5826,7 +5824,7 @@ TEST_F(DBTest, AutomaticConflictsWithManualCompaction) { for (int i = 0; i < kNumL0Files; ++i) { // put two keys to ensure no trivial move for (int j = 0; j < 2; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(j), rnd.RandomString(1024))); } ASSERT_OK(Flush()); } @@ -5855,7 +5853,7 @@ TEST_F(DBTest, CompactFilesShouldTriggerAutoCompaction) { for (int i = 0; i < 2; ++i) { // put two keys to ensure no trivial move for (int j = 0; j < 2; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(j), rnd.RandomString(1024))); } ASSERT_OK(Flush()); } @@ -5885,7 +5883,7 @@ TEST_F(DBTest, CompactFilesShouldTriggerAutoCompaction) { // generate enough files to trigger compaction for (int i = 0; i < 20; ++i) { for (int j = 0; j < 2; ++j) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 1024))); + ASSERT_OK(Put(Key(j), rnd.RandomString(1024))); } ASSERT_OK(Flush()); } @@ -6496,7 +6494,7 @@ TEST_F(DBTest, PauseBackgroundWorkTest) { threads.emplace_back([&]() { Random rnd(301); for (int i = 0; i < 10000; ++i) { - Put(RandomString(&rnd, 10), RandomString(&rnd, 10)); + Put(rnd.RandomString(10), rnd.RandomString(10)); } done.store(true); }); @@ -6626,7 +6624,7 @@ TEST_F(DBTest, CreationTimeOfOldestFile) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } @@ -6651,7 +6649,7 @@ TEST_F(DBTest, CreationTimeOfOldestFile) { for (int i = 0; i < kNumLevelFiles; ++i) { for (int j = 0; j < kNumKeysPerFile; ++j) { ASSERT_OK( - Put(Key(i * kNumKeysPerFile + j), RandomString(&rnd, kValueSize))); + Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize))); } Flush(); } diff --git a/db/db_test2.cc b/db/db_test2.cc index 95a7f557a0..b01d15dba0 100644 --- a/db/db_test2.cc +++ b/db/db_test2.cc @@ -16,7 +16,8 @@ #include "port/stack_trace.h" #include "rocksdb/persistent_cache.h" #include "rocksdb/wal_filter.h" -#include "test_util/fault_injection_test_env.h" +#include "util/random.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { @@ -166,7 +167,7 @@ TEST_F(DBTest2, PartitionedIndexUserToInternalKey) { for (int i = 0; i < 3000; i++) { int j = i % 30; - std::string value = RandomString(&rnd, 10500); + std::string value = rnd.RandomString(10500); ASSERT_OK(Put("keykey_" + std::to_string(j), value)); snapshots.push_back(db_->GetSnapshot()); } @@ -1274,7 +1275,7 @@ TEST_F(DBTest2, PresetCompressionDict) { std::string seq_datas[10]; for (int j = 0; j < 10; ++j) { seq_datas[j] = - RandomString(&rnd, kBlockSizeBytes - kApproxPerBlockOverheadBytes); + rnd.RandomString(kBlockSizeBytes - kApproxPerBlockOverheadBytes); } ASSERT_EQ(0, NumTableFilesAtLevel(0, 1)); @@ -1349,7 +1350,7 @@ TEST_F(DBTest2, PresetCompressionDictLocality) { for (int i = 0; i < kNumFiles; ++i) { for (int j = 0; j < kNumEntriesPerFile; ++j) { ASSERT_OK(Put(Key(i * kNumEntriesPerFile + j), - RandomString(&rnd, kNumBytesPerEntry))); + rnd.RandomString(kNumBytesPerEntry))); } ASSERT_OK(Flush()); MoveFilesToLevel(1); @@ -1519,9 +1520,9 @@ TEST_P(CompressionFailuresTest, CompressionFailures) { // Write 10 random files for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { - std::string key = RandomString(&rnd, kKeySize); + std::string key = rnd.RandomString(kKeySize); // Ensure good compression ratio - std::string valueUnit = RandomString(&rnd, kValUnitSize); + std::string valueUnit = rnd.RandomString(kValUnitSize); std::string value; for (int k = 0; k < kValSize; k += kValUnitSize) { value += valueUnit; @@ -1623,8 +1624,8 @@ TEST_F(DBTest2, CompressionOptions) { // Write 10 random files for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { - std::string key = RandomString(&rnd, kKeySize); - std::string value = RandomString(&rnd, kValSize); + std::string key = rnd.RandomString(kKeySize); + std::string value = rnd.RandomString(kValSize); key_value_written[key] = value; ASSERT_OK(Put(key, value)); } @@ -1696,7 +1697,7 @@ TEST_F(DBTest2, CompactionStall) { // 4 Files in L0 for (int i = 0; i < 4; i++) { for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(RandomString(&rnd, 10), RandomString(&rnd, 10))); + ASSERT_OK(Put(rnd.RandomString(10), rnd.RandomString(10))); } ASSERT_OK(Flush()); } @@ -1711,7 +1712,7 @@ TEST_F(DBTest2, CompactionStall) { // Another 6 L0 files to trigger compaction again for (int i = 0; i < 6; i++) { for (int j = 0; j < 10; j++) { - ASSERT_OK(Put(RandomString(&rnd, 10), RandomString(&rnd, 10))); + ASSERT_OK(Put(rnd.RandomString(10), rnd.RandomString(10))); } ASSERT_OK(Flush()); } @@ -2311,7 +2312,7 @@ TEST_F(DBTest2, PersistentCache) { std::string str; for (int i = 0; i < num_iter; i++) { if (i % 4 == 0) { // high compression ratio - str = RandomString(&rnd, 1000); + str = rnd.RandomString(1000); } values.push_back(str); ASSERT_OK(Put(1, Key(i), values[i])); @@ -2409,7 +2410,7 @@ TEST_F(DBTest2, ReadAmpBitmap) { Random rnd(301); for (size_t i = 0; i < kNumEntries; i++) { - ASSERT_OK(Put(Key(static_cast(i)), RandomString(&rnd, 100))); + ASSERT_OK(Put(Key(static_cast(i)), rnd.RandomString(100))); } ASSERT_OK(Flush()); @@ -2516,7 +2517,7 @@ TEST_F(DBTest2, ReadAmpBitmapLiveInCacheAfterDBClose) { Random rnd(301); for (int i = 0; i < kNumEntries; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 100))); + ASSERT_OK(Put(Key(i), rnd.RandomString(100))); } ASSERT_OK(Flush()); @@ -2739,13 +2740,13 @@ TEST_F(DBTest2, PausingManualCompaction1) { Random rnd(301); // Generate a file containing 10 keys. for (int i = 0; i < 10; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); // Generate another file containing same keys for (int i = 0; i < 10; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(i), rnd.RandomString(50))); } ASSERT_OK(Flush()); @@ -2818,7 +2819,7 @@ TEST_F(DBTest2, PausingManualCompaction2) { for (int i = 0; i < 2; i++) { // Generate a file containing 10 keys. for (int j = 0; j < 100; j++) { - ASSERT_OK(Put(Key(j), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(j), rnd.RandomString(50))); } ASSERT_OK(Flush()); } @@ -2840,7 +2841,7 @@ TEST_F(DBTest2, PausingManualCompaction3) { for (int i = 0; i < options.num_levels; i++) { for (int j = 0; j < options.num_levels - i + 1; j++) { for (int k = 0; k < 1000; k++) { - ASSERT_OK(Put(Key(k + j * 1000), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(k + j * 1000), rnd.RandomString(50))); } Flush(); } @@ -2894,7 +2895,7 @@ TEST_F(DBTest2, PausingManualCompaction4) { for (int i = 0; i < options.num_levels; i++) { for (int j = 0; j < options.num_levels - i + 1; j++) { for (int k = 0; k < 1000; k++) { - ASSERT_OK(Put(Key(k + j * 1000), RandomString(&rnd, 50))); + ASSERT_OK(Put(Key(k + j * 1000), rnd.RandomString(50))); } Flush(); } @@ -4021,7 +4022,7 @@ TEST_F(DBTest2, DISABLED_IteratorPinnedMemory) { Reopen(options); Random rnd(301); - std::string v = RandomString(&rnd, 400); + std::string v = rnd.RandomString(400); // Since v is the size of a block, each key should take a block // of 400+ bytes. @@ -4749,7 +4750,7 @@ TEST_F(DBTest2, BlockBasedTablePrefixIndexSeekForPrev) { Reopen(options); Random rnd(301); - std::string large_value = RandomString(&rnd, 500); + std::string large_value = rnd.RandomString(500); ASSERT_OK(Put("a1", large_value)); ASSERT_OK(Put("x1", large_value)); @@ -5011,7 +5012,7 @@ TEST_F(DBTest2, AutoPrefixMode1) { Reopen(options); Random rnd(301); - std::string large_value = RandomString(&rnd, 500); + std::string large_value = rnd.RandomString(500); ASSERT_OK(Put("a1", large_value)); ASSERT_OK(Put("x1", large_value)); diff --git a/db/db_test_util.cc b/db/db_test_util.cc index c2c1d44eab..b40eac6728 100644 --- a/db/db_test_util.cc +++ b/db/db_test_util.cc @@ -8,9 +8,11 @@ // found in the LICENSE file. See the AUTHORS file for names of contributors. #include "db/db_test_util.h" + #include "db/forward_iterator.h" #include "rocksdb/env_encryption.h" #include "rocksdb/utilities/object_registry.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -408,7 +410,7 @@ Options DBTestBase::GetOptions( options.use_direct_reads = true; options.use_direct_io_for_flush_and_compaction = true; options.compaction_readahead_size = 2 * 1024 * 1024; - test::SetupSyncPointsToMockDirectIO(); + SetupSyncPointsToMockDirectIO(); break; } #endif // ROCKSDB_LITE @@ -1192,7 +1194,7 @@ int DBTestBase::GetSstFileCount(std::string path) { void DBTestBase::GenerateNewFile(int cf, Random* rnd, int* key_idx, bool nowait) { for (int i = 0; i < KNumKeysByGenerateNewFile; i++) { - ASSERT_OK(Put(cf, Key(*key_idx), RandomString(rnd, (i == 99) ? 1 : 990))); + ASSERT_OK(Put(cf, Key(*key_idx), rnd->RandomString((i == 99) ? 1 : 990))); (*key_idx)++; } if (!nowait) { @@ -1204,7 +1206,7 @@ void DBTestBase::GenerateNewFile(int cf, Random* rnd, int* key_idx, // this will generate non-overlapping files since it keeps increasing key_idx void DBTestBase::GenerateNewFile(Random* rnd, int* key_idx, bool nowait) { for (int i = 0; i < KNumKeysByGenerateNewFile; i++) { - ASSERT_OK(Put(Key(*key_idx), RandomString(rnd, (i == 99) ? 1 : 990))); + ASSERT_OK(Put(Key(*key_idx), rnd->RandomString((i == 99) ? 1 : 990))); (*key_idx)++; } if (!nowait) { @@ -1217,9 +1219,9 @@ const int DBTestBase::kNumKeysByGenerateNewRandomFile = 51; void DBTestBase::GenerateNewRandomFile(Random* rnd, bool nowait) { for (int i = 0; i < kNumKeysByGenerateNewRandomFile; i++) { - ASSERT_OK(Put("key" + RandomString(rnd, 7), RandomString(rnd, 2000))); + ASSERT_OK(Put("key" + rnd->RandomString(7), rnd->RandomString(2000))); } - ASSERT_OK(Put("key" + RandomString(rnd, 7), RandomString(rnd, 200))); + ASSERT_OK(Put("key" + rnd->RandomString(7), rnd->RandomString(200))); if (!nowait) { dbfull()->TEST_WaitForFlushMemTable(); dbfull()->TEST_WaitForCompact(); diff --git a/db/db_test_util.h b/db/db_test_util.h index 2dbf0fd6bb..9a635139c2 100644 --- a/db/db_test_util.h +++ b/db/db_test_util.h @@ -45,7 +45,6 @@ #include "test_util/mock_time_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" -#include "test_util/testutil.h" #include "util/cast_util.h" #include "util/compression.h" #include "util/mutexlock.h" @@ -876,12 +875,6 @@ class DBTestBase : public testing::Test { ~DBTestBase(); - static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; - } - static std::string Key(int i) { char buf[100]; snprintf(buf, sizeof(buf), "key%06d", i); diff --git a/db/db_universal_compaction_test.cc b/db/db_universal_compaction_test.cc index 889e380dde..056af711df 100644 --- a/db/db_universal_compaction_test.cc +++ b/db/db_universal_compaction_test.cc @@ -12,6 +12,7 @@ #if !defined(ROCKSDB_LITE) #include "rocksdb/utilities/table_properties_collectors.h" #include "test_util/sync_point.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -361,7 +362,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionSizeAmplification) { num++) { // Write 110KB (11 values, each 10K) for (int i = 0; i < 11; i++) { - ASSERT_OK(Put(1, Key(key_idx), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(key_idx), rnd.RandomString(10000))); key_idx++; } dbfull()->TEST_WaitForFlushMemTable(handles_[1]); @@ -419,7 +420,7 @@ TEST_P(DBTestUniversalCompaction, DynamicUniversalCompactionSizeAmplification) { num++) { // Write 110KB (11 values, each 10K) for (int i = 0; i < 11; i++) { - ASSERT_OK(Put(1, Key(key_idx), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(key_idx), rnd.RandomString(10000))); key_idx++; } dbfull()->TEST_WaitForFlushMemTable(handles_[1]); @@ -498,7 +499,7 @@ TEST_P(DBTestUniversalCompaction, DynamicUniversalCompactionReadAmplification) { for (int num = 0; num < options.level0_file_num_compaction_trigger; num++) { // Write 110KB (11 values, each 10K) for (int i = 0; i < 11; i++) { - ASSERT_OK(Put(1, Key(key_idx), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(key_idx), rnd.RandomString(10000))); key_idx++; } dbfull()->TEST_WaitForFlushMemTable(handles_[1]); @@ -576,7 +577,7 @@ TEST_P(DBTestUniversalCompaction, CompactFilesOnUniversalCompaction) { ASSERT_EQ(options.compaction_style, kCompactionStyleUniversal); Random rnd(301); for (int key = 1024 * kEntriesPerBuffer; key >= 0; --key) { - ASSERT_OK(Put(1, ToString(key), RandomString(&rnd, kTestValueSize))); + ASSERT_OK(Put(1, ToString(key), rnd.RandomString(kTestValueSize))); } dbfull()->TEST_WaitForFlushMemTable(handles_[1]); dbfull()->TEST_WaitForCompact(); @@ -639,17 +640,17 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionTargetLevel) { // Generate 3 overlapping files Random rnd(301); for (int i = 0; i < 210; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 100))); + ASSERT_OK(Put(Key(i), rnd.RandomString(100))); } ASSERT_OK(Flush()); for (int i = 200; i < 300; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 100))); + ASSERT_OK(Put(Key(i), rnd.RandomString(100))); } ASSERT_OK(Flush()); for (int i = 250; i < 260; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, 100))); + ASSERT_OK(Put(Key(i), rnd.RandomString(100))); } ASSERT_OK(Flush()); @@ -960,7 +961,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionOptions) { for (int num = 0; num < options.level0_file_num_compaction_trigger; num++) { // Write 100KB (100 values, each 1K) for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(1, Key(key_idx), RandomString(&rnd, 990))); + ASSERT_OK(Put(1, Key(key_idx), rnd.RandomString(990))); key_idx++; } dbfull()->TEST_WaitForFlushMemTable(handles_[1]); @@ -998,7 +999,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionStopStyleSimilarSize) { num++) { // Write 100KB (100 values, each 1K) for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(key_idx), RandomString(&rnd, 990))); + ASSERT_OK(Put(Key(key_idx), rnd.RandomString(990))); key_idx++; } dbfull()->TEST_WaitForFlushMemTable(); @@ -1008,7 +1009,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionStopStyleSimilarSize) { // Generate one more file at level-0, which should trigger level-0 // compaction. for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(key_idx), RandomString(&rnd, 990))); + ASSERT_OK(Put(Key(key_idx), rnd.RandomString(990))); key_idx++; } dbfull()->TEST_WaitForCompact(); @@ -1029,7 +1030,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionStopStyleSimilarSize) { num++) { // Write 110KB (11 values, each 10K) for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(key_idx), RandomString(&rnd, 990))); + ASSERT_OK(Put(Key(key_idx), rnd.RandomString(990))); key_idx++; } dbfull()->TEST_WaitForFlushMemTable(); @@ -1039,7 +1040,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionStopStyleSimilarSize) { // Generate one more file at level-0, which should trigger level-0 // compaction. for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(key_idx), RandomString(&rnd, 990))); + ASSERT_OK(Put(Key(key_idx), rnd.RandomString(990))); key_idx++; } dbfull()->TEST_WaitForCompact(); @@ -1050,7 +1051,7 @@ TEST_P(DBTestUniversalCompaction, UniversalCompactionStopStyleSimilarSize) { // Now we have 3 files at level 0, with size 4, 0.4, 2. Generate one // more file at level-0, which should trigger level-0 compaction. for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(key_idx), RandomString(&rnd, 990))); + ASSERT_OK(Put(Key(key_idx), rnd.RandomString(990))); key_idx++; } dbfull()->TEST_WaitForCompact(); @@ -1530,7 +1531,7 @@ TEST_P(DBTestUniversalCompaction, IncreaseUniversalCompactionNumLevels) { for (int i = 0; i <= max_key1; i++) { // each value is 10K - ASSERT_OK(Put(1, Key(i), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(i), rnd.RandomString(10000))); dbfull()->TEST_WaitForFlushMemTable(handles_[1]); dbfull()->TEST_WaitForCompact(); } @@ -1548,7 +1549,7 @@ TEST_P(DBTestUniversalCompaction, IncreaseUniversalCompactionNumLevels) { // Insert more keys for (int i = max_key1 + 1; i <= max_key2; i++) { // each value is 10K - ASSERT_OK(Put(1, Key(i), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(i), rnd.RandomString(10000))); dbfull()->TEST_WaitForFlushMemTable(handles_[1]); dbfull()->TEST_WaitForCompact(); } @@ -1580,7 +1581,7 @@ TEST_P(DBTestUniversalCompaction, IncreaseUniversalCompactionNumLevels) { // Insert more keys for (int i = max_key2 + 1; i <= max_key3; i++) { // each value is 10K - ASSERT_OK(Put(1, Key(i), RandomString(&rnd, 10000))); + ASSERT_OK(Put(1, Key(i), rnd.RandomString(10000))); dbfull()->TEST_WaitForFlushMemTable(handles_[1]); dbfull()->TEST_WaitForCompact(); } diff --git a/db/db_wal_test.cc b/db/db_wal_test.cc index 5412cd4f43..537ee04a03 100644 --- a/db/db_wal_test.cc +++ b/db/db_wal_test.cc @@ -12,8 +12,8 @@ #include "options/options_helper.h" #include "port/port.h" #include "port/stack_trace.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { class DBWALTestBase : public DBTestBase { diff --git a/db/db_with_timestamp_basic_test.cc b/db/db_with_timestamp_basic_test.cc index a2a7313af8..2a62fc5336 100644 --- a/db/db_with_timestamp_basic_test.cc +++ b/db/db_with_timestamp_basic_test.cc @@ -13,10 +13,10 @@ #include "rocksdb/utilities/debug.h" #include "table/block_based/block_based_table_reader.h" #include "table/block_based/block_builder.h" -#include "test_util/fault_injection_test_env.h" #if !defined(ROCKSDB_LITE) #include "test_util/sync_point.h" #endif +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { class DBBasicTestWithTimestampBase : public DBTestBase { diff --git a/db/db_write_test.cc b/db/db_write_test.cc index cc1aaac082..7910db70f8 100644 --- a/db/db_write_test.cc +++ b/db/db_write_test.cc @@ -4,18 +4,20 @@ // (found in the LICENSE.Apache file in the root directory). #include +#include #include #include #include -#include + #include "db/db_test_util.h" #include "db/write_batch_internal.h" #include "db/write_thread.h" #include "port/port.h" #include "port/stack_trace.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" +#include "util/random.h" #include "util/string_util.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { @@ -246,7 +248,7 @@ TEST_P(DBWriteTest, IOErrorOnSwitchMemtable) { mock_env->SetFilesystemActive(false, Status::IOError("Not active")); Status s; for (int i = 0; i < 4 * 512; ++i) { - s = Put(Key(i), RandomString(&rnd, 1024)); + s = Put(Key(i), rnd.RandomString(1024)); if (!s.ok()) { break; } diff --git a/db/error_handler_fs_test.cc b/db/error_handler_fs_test.cc index 912baa1ba6..a944c67215 100644 --- a/db/error_handler_fs_test.cc +++ b/db/error_handler_fs_test.cc @@ -13,11 +13,12 @@ #include "rocksdb/io_status.h" #include "rocksdb/perf_context.h" #include "rocksdb/sst_file_manager.h" -#include "test_util/fault_injection_test_env.h" -#include "test_util/fault_injection_test_fs.h" #if !defined(ROCKSDB_LITE) #include "test_util/sync_point.h" #endif +#include "util/random.h" +#include "utilities/fault_injection_env.h" +#include "utilities/fault_injection_fs.h" namespace ROCKSDB_NAMESPACE { @@ -744,7 +745,7 @@ TEST_F(DBErrorHandlingFSTest, WALWriteError) { WriteBatch batch; for (auto i = 0; i < 100; ++i) { - batch.Put(Key(i), RandomString(&rnd, 1024)); + batch.Put(Key(i), rnd.RandomString(1024)); } WriteOptions wopts; @@ -757,7 +758,7 @@ TEST_F(DBErrorHandlingFSTest, WALWriteError) { int write_error = 0; for (auto i = 100; i < 199; ++i) { - batch.Put(Key(i), RandomString(&rnd, 1024)); + batch.Put(Key(i), rnd.RandomString(1024)); } SyncPoint::GetInstance()->SetCallBack( @@ -820,7 +821,7 @@ TEST_F(DBErrorHandlingFSTest, WALWriteRetryableError) { WriteBatch batch; for (auto i = 0; i < 100; ++i) { - batch.Put(Key(i), RandomString(&rnd, 1024)); + batch.Put(Key(i), rnd.RandomString(1024)); } WriteOptions wopts; @@ -835,7 +836,7 @@ TEST_F(DBErrorHandlingFSTest, WALWriteRetryableError) { int write_error = 0; for (auto i = 100; i < 200; ++i) { - batch.Put(Key(i), RandomString(&rnd, 1024)); + batch.Put(Key(i), rnd.RandomString(1024)); } SyncPoint::GetInstance()->SetCallBack( @@ -871,7 +872,7 @@ TEST_F(DBErrorHandlingFSTest, WALWriteRetryableError) { WriteBatch batch; for (auto i = 200; i < 300; ++i) { - batch.Put(Key(i), RandomString(&rnd, 1024)); + batch.Put(Key(i), rnd.RandomString(1024)); } WriteOptions wopts; @@ -912,7 +913,7 @@ TEST_F(DBErrorHandlingFSTest, MultiCFWALWriteError) { for (auto i = 1; i < 4; ++i) { for (auto j = 0; j < 100; ++j) { - batch.Put(handles_[i], Key(j), RandomString(&rnd, 1024)); + batch.Put(handles_[i], Key(j), rnd.RandomString(1024)); } } @@ -927,7 +928,7 @@ TEST_F(DBErrorHandlingFSTest, MultiCFWALWriteError) { // Write to one CF for (auto i = 100; i < 199; ++i) { - batch.Put(handles_[2], Key(i), RandomString(&rnd, 1024)); + batch.Put(handles_[2], Key(i), rnd.RandomString(1024)); } SyncPoint::GetInstance()->SetCallBack( @@ -1016,7 +1017,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) { WriteBatch batch; for (auto j = 0; j <= 100; ++j) { - batch.Put(Key(j), RandomString(&rnd, 1024)); + batch.Put(Key(j), rnd.RandomString(1024)); } WriteOptions wopts; @@ -1031,7 +1032,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBCompactionError) { // Write to one CF for (auto j = 100; j < 199; ++j) { - batch.Put(Key(j), RandomString(&rnd, 1024)); + batch.Put(Key(j), rnd.RandomString(1024)); } WriteOptions wopts; @@ -1129,7 +1130,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) { WriteBatch batch; for (auto j = 0; j <= 100; ++j) { - batch.Put(Key(j), RandomString(&rnd, 1024)); + batch.Put(Key(j), rnd.RandomString(1024)); } WriteOptions wopts; @@ -1144,7 +1145,7 @@ TEST_F(DBErrorHandlingFSTest, MultiDBVariousErrors) { // Write to one CF for (auto j = 100; j < 199; ++j) { - batch.Put(Key(j), RandomString(&rnd, 1024)); + batch.Put(Key(j), rnd.RandomString(1024)); } WriteOptions wopts; diff --git a/db/external_sst_file_basic_test.cc b/db/external_sst_file_basic_test.cc index 7e62963ec3..26301c5ce2 100644 --- a/db/external_sst_file_basic_test.cc +++ b/db/external_sst_file_basic_test.cc @@ -10,8 +10,9 @@ #include "port/port.h" #include "port/stack_trace.h" #include "rocksdb/sst_file_writer.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/testutil.h" +#include "util/random.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { @@ -27,7 +28,7 @@ class ExternalSSTFileBasicTest } void DestroyAndRecreateExternalSSTFilesDir() { - test::DestroyDir(env_, sst_files_dir_); + DestroyDir(env_, sst_files_dir_); env_->CreateDir(sst_files_dir_); } @@ -160,9 +161,7 @@ class ExternalSSTFileBasicTest write_global_seqno, verify_checksums_before_ingest, true_data); } - ~ExternalSSTFileBasicTest() override { - test::DestroyDir(env_, sst_files_dir_); - } + ~ExternalSSTFileBasicTest() override { DestroyDir(env_, sst_files_dir_); } protected: std::string sst_files_dir_; @@ -1147,7 +1146,7 @@ TEST_F(ExternalSSTFileBasicTest, VerifyChecksumReadahead) { std::string file_name = sst_files_dir_ + "verify_checksum_readahead_test.sst"; ASSERT_OK(sst_file_writer->Open(file_name)); Random rnd(301); - std::string value = DBTestBase::RandomString(&rnd, 4000); + std::string value = rnd.RandomString(4000); for (int i = 0; i < 5000; i++) { ASSERT_OK(sst_file_writer->Put(DBTestBase::Key(i), value)); } diff --git a/db/external_sst_file_test.cc b/db/external_sst_file_test.cc index 649bf7ac2f..cd77574431 100644 --- a/db/external_sst_file_test.cc +++ b/db/external_sst_file_test.cc @@ -14,8 +14,9 @@ #include "port/stack_trace.h" #include "rocksdb/sst_file_reader.h" #include "rocksdb/sst_file_writer.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/testutil.h" +#include "util/random.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { @@ -46,7 +47,7 @@ class ExternSSTFileLinkFailFallbackTest : DBTestBase("/external_sst_file_test"), test_env_(new ExternalSSTTestEnv(env_, true)) { sst_files_dir_ = dbname_ + "/sst_files/"; - test::DestroyDir(env_, sst_files_dir_); + DestroyDir(env_, sst_files_dir_); env_->CreateDir(sst_files_dir_); options_ = CurrentOptions(); options_.disable_auto_compactions = true; @@ -77,7 +78,7 @@ class ExternalSSTFileTest } void DestroyAndRecreateExternalSSTFilesDir() { - test::DestroyDir(env_, sst_files_dir_); + DestroyDir(env_, sst_files_dir_); env_->CreateDir(sst_files_dir_); } @@ -280,7 +281,7 @@ class ExternalSSTFileTest return db_->IngestExternalFile(files, opts); } - ~ExternalSSTFileTest() override { test::DestroyDir(env_, sst_files_dir_); } + ~ExternalSSTFileTest() override { DestroyDir(env_, sst_files_dir_); } protected: int last_file_id_ = 0; @@ -1751,10 +1752,8 @@ TEST_P(ExternalSSTFileTest, IngestFileWithGlobalSeqnoRandomized) { for (int i = 0; i < 500; i++) { std::vector> random_data; for (int j = 0; j < 100; j++) { - std::string k; - std::string v; - test::RandomString(&rnd, rnd.Next() % 20, &k); - test::RandomString(&rnd, rnd.Next() % 50, &v); + std::string k = rnd.RandomString(rnd.Next() % 20); + std::string v = rnd.RandomString(rnd.Next() % 50); random_data.emplace_back(k, v); } @@ -2388,8 +2387,7 @@ TEST_F(ExternalSSTFileTest, IngestFileWrittenWithCompressionDictionary) { Random rnd(301); std::vector> random_data; for (int i = 0; i < kNumEntries; i++) { - std::string val; - test::RandomString(&rnd, kNumBytesPerEntry, &val); + std::string val = rnd.RandomString(kNumBytesPerEntry); random_data.emplace_back(Key(i), std::move(val)); } ASSERT_OK(GenerateAndAddExternalFile(options, std::move(random_data))); @@ -2844,7 +2842,7 @@ TEST_P(ExternalSSTFileTest, DeltaEncodingWhileGlobalSeqnoPresent) { DestroyAndReopen(options); constexpr size_t kValueSize = 8; Random rnd(301); - std::string value(RandomString(&rnd, kValueSize)); + std::string value = rnd.RandomString(kValueSize); // Write some key to make global seqno larger than zero for (int i = 0; i < 10; i++) { @@ -2888,7 +2886,7 @@ TEST_P(ExternalSSTFileTest, Options options = CurrentOptions(); Random rnd(301); - std::string value(RandomString(&rnd, kValueSize)); + std::string value = rnd.RandomString(kValueSize); std::string key0 = "aa"; std::string key1 = "ab"; diff --git a/db/fault_injection_test.cc b/db/fault_injection_test.cc index f4ca3458a9..7e208bbf91 100644 --- a/db/fault_injection_test.cc +++ b/db/fault_injection_test.cc @@ -22,11 +22,12 @@ #include "rocksdb/env.h" #include "rocksdb/table.h" #include "rocksdb/write_batch.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" #include "util/mutexlock.h" +#include "util/random.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { @@ -249,7 +250,8 @@ class FaultInjectionTest // Return the value to associate with the specified key Slice Value(int k, std::string* storage) const { Random r(k); - return test::RandomString(&r, kValueSize, storage); + *storage = r.RandomString(kValueSize); + return Slice(*storage); } void CloseDB() { diff --git a/db/flush_job_test.cc b/db/flush_job_test.cc index 72cceb5222..1f0fdef577 100644 --- a/db/flush_job_test.cc +++ b/db/flush_job_test.cc @@ -3,6 +3,8 @@ // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). +#include "db/flush_job.h" + #include #include #include @@ -11,7 +13,6 @@ #include "db/blob/blob_index.h" #include "db/column_family.h" #include "db/db_impl/db_impl.h" -#include "db/flush_job.h" #include "db/version_set.h" #include "file/writable_file_writer.h" #include "rocksdb/cache.h" @@ -19,6 +20,7 @@ #include "table/mock_table.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" #include "util/string_util.h" namespace ROCKSDB_NAMESPACE { @@ -447,7 +449,7 @@ TEST_F(FlushJobTest, Snapshots) { std::string key(ToString(i)); int insertions = rnd.Uniform(max_inserts_per_keys); for (int j = 0; j < insertions; ++j) { - std::string value(test::RandomHumanReadableString(&rnd, 10)); + std::string value(rnd.HumanReadableString(10)); auto seqno = ++current_seqno; new_mem->Add(SequenceNumber(seqno), kTypeValue, key, value); // a key is visible only if: diff --git a/db/import_column_family_test.cc b/db/import_column_family_test.cc index e17895b46d..6961b3677f 100644 --- a/db/import_column_family_test.cc +++ b/db/import_column_family_test.cc @@ -1,11 +1,13 @@ #ifndef ROCKSDB_LITE #include + #include "db/db_test_util.h" #include "port/port.h" #include "port/stack_trace.h" #include "rocksdb/sst_file_writer.h" #include "test_util/testutil.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -35,14 +37,14 @@ class ImportColumnFamilyTest : public DBTestBase { delete metadata_ptr_; metadata_ptr_ = nullptr; } - test::DestroyDir(env_, sst_files_dir_); - test::DestroyDir(env_, export_files_dir_); + DestroyDir(env_, sst_files_dir_); + DestroyDir(env_, export_files_dir_); } void DestroyAndRecreateExternalSSTFilesDir() { - test::DestroyDir(env_, sst_files_dir_); + DestroyDir(env_, sst_files_dir_); env_->CreateDir(sst_files_dir_); - test::DestroyDir(env_, export_files_dir_); + DestroyDir(env_, export_files_dir_); } LiveFileMetaData LiveFileMetaDataInit(std::string name, std::string path, @@ -411,7 +413,7 @@ TEST_F(ImportColumnFamilyTest, ImportExportedSSTFromAnotherDB) { // Create a new db and import the files. DB* db_copy; - test::DestroyDir(env_, dbname_ + "/db_copy"); + DestroyDir(env_, dbname_ + "/db_copy"); ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy)); ColumnFamilyHandle* cfh = nullptr; ASSERT_OK(db_copy->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo", @@ -427,7 +429,7 @@ TEST_F(ImportColumnFamilyTest, ImportExportedSSTFromAnotherDB) { db_copy->DropColumnFamily(cfh); db_copy->DestroyColumnFamilyHandle(cfh); delete db_copy; - test::DestroyDir(env_, dbname_ + "/db_copy"); + DestroyDir(env_, dbname_ + "/db_copy"); } TEST_F(ImportColumnFamilyTest, LevelFilesOverlappingAtEndpoints) { @@ -450,7 +452,7 @@ TEST_F(ImportColumnFamilyTest, LevelFilesOverlappingAtEndpoints) { snapshots.reserve(kFileBytes / kValueBytes * kNumFiles); for (int i = 0; i < kNumFiles; ++i) { for (int j = 0; j < kFileBytes / kValueBytes; ++j) { - auto value = RandomString(&rnd, kValueBytes); + auto value = rnd.RandomString(kValueBytes); ASSERT_OK(Put(1, "key", value)); snapshots.push_back(db_->GetSnapshot()); } @@ -471,7 +473,7 @@ TEST_F(ImportColumnFamilyTest, LevelFilesOverlappingAtEndpoints) { // Create a new db and import the files. DB* db_copy; - test::DestroyDir(env_, dbname_ + "/db_copy"); + DestroyDir(env_, dbname_ + "/db_copy"); ASSERT_OK(DB::Open(options, dbname_ + "/db_copy", &db_copy)); ColumnFamilyHandle* cfh = nullptr; ASSERT_OK(db_copy->CreateColumnFamilyWithImport(ColumnFamilyOptions(), "yoyo", @@ -486,7 +488,7 @@ TEST_F(ImportColumnFamilyTest, LevelFilesOverlappingAtEndpoints) { db_copy->DropColumnFamily(cfh); db_copy->DestroyColumnFamilyHandle(cfh); delete db_copy; - test::DestroyDir(env_, dbname_ + "/db_copy"); + DestroyDir(env_, dbname_ + "/db_copy"); for (const Snapshot* snapshot : snapshots) { db_->ReleaseSnapshot(snapshot); } diff --git a/db/plain_table_db_test.cc b/db/plain_table_db_test.cc index ea14f9a2a4..dd428da9bb 100644 --- a/db/plain_table_db_test.cc +++ b/db/plain_table_db_test.cc @@ -35,6 +35,7 @@ #include "util/cast_util.h" #include "util/hash.h" #include "util/mutexlock.h" +#include "util/random.h" #include "util/string_util.h" #include "utilities/merge_operators.h" @@ -44,10 +45,10 @@ namespace ROCKSDB_NAMESPACE { class PlainTableKeyDecoderTest : public testing::Test {}; TEST_F(PlainTableKeyDecoderTest, ReadNonMmap) { - std::string tmp; Random rnd(301); const uint32_t kLength = 2222; - Slice contents = test::RandomString(&rnd, kLength, &tmp); + std::string tmp = rnd.RandomString(kLength); + Slice contents(tmp); test::StringSource* string_source = new test::StringSource(contents, 0, false); @@ -1267,12 +1268,6 @@ static std::string Key(int i) { return std::string(buf); } -static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} - TEST_P(PlainTableDBTest, CompactionTrigger) { Options options = CurrentOptions(); options.write_buffer_size = 120 << 10; // 120KB @@ -1287,7 +1282,7 @@ TEST_P(PlainTableDBTest, CompactionTrigger) { std::vector values; // Write 120KB (10 values, each 12K) for (int i = 0; i < 10; i++) { - values.push_back(RandomString(&rnd, 12 << 10)); + values.push_back(rnd.RandomString(12 << 10)); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Put(Key(999), "")); @@ -1298,7 +1293,7 @@ TEST_P(PlainTableDBTest, CompactionTrigger) { //generate one more file in level-0, and should trigger level-0 compaction std::vector values; for (int i = 0; i < 12; i++) { - values.push_back(RandomString(&rnd, 10000)); + values.push_back(rnd.RandomString(10000)); ASSERT_OK(Put(Key(i), values[i])); } ASSERT_OK(Put(Key(999), "")); diff --git a/db_stress_tool/cf_consistency_stress.cc b/db_stress_tool/cf_consistency_stress.cc index c6ba5d6991..acddae1594 100644 --- a/db_stress_tool/cf_consistency_stress.cc +++ b/db_stress_tool/cf_consistency_stress.cc @@ -9,6 +9,7 @@ #ifdef GFLAGS #include "db_stress_tool/db_stress_common.h" +#include "file/file_util.h" namespace ROCKSDB_NAMESPACE { class CfConsistencyStressTest : public StressTest { @@ -307,7 +308,7 @@ class CfConsistencyStressTest : public StressTest { if (db_stress_env->FileExists(checkpoint_dir).ok()) { // If the directory might still exist, try to delete the files one by one. // Likely a trash file is still there. - Status my_s = test::DestroyDir(db_stress_env, checkpoint_dir); + Status my_s = DestroyDir(db_stress_env, checkpoint_dir); if (!my_s.ok()) { fprintf(stderr, "Fail to destory directory before checkpoint: %s", my_s.ToString().c_str()); diff --git a/db_stress_tool/db_stress_common.h b/db_stress_tool/db_stress_common.h index 8c9c9bfa6e..f4654cbb56 100644 --- a/db_stress_tool/db_stress_common.h +++ b/db_stress_tool/db_stress_common.h @@ -26,6 +26,7 @@ #include #include #include + #include #include #include @@ -58,9 +59,7 @@ #include "rocksdb/utilities/transaction.h" #include "rocksdb/utilities/transaction_db.h" #include "rocksdb/write_batch.h" -#ifndef NDEBUG -#include "test_util/fault_injection_test_fs.h" -#endif +#include "test_util/testutil.h" #include "util/coding.h" #include "util/compression.h" #include "util/crc32c.h" @@ -69,9 +68,6 @@ #include "util/random.h" #include "util/string_util.h" #include "utilities/blob_db/blob_db.h" -#include "test_util/testutil.h" -#include "test_util/fault_injection_test_env.h" - #include "utilities/merge_operators.h" using GFLAGS_NAMESPACE::ParseCommandLineFlags; @@ -248,6 +244,9 @@ const int kValueMaxLen = 100; // wrapped posix or hdfs environment extern ROCKSDB_NAMESPACE::DbStressEnvWrapper* db_stress_env; #ifndef NDEBUG +namespace ROCKSDB_NAMESPACE { +class FaultInjectionTestFS; +} // namespace ROCKSDB_NAMESPACE extern std::shared_ptr fault_fs_guard; #endif diff --git a/db_stress_tool/db_stress_driver.cc b/db_stress_tool/db_stress_driver.cc index 0ae8480491..69411aa293 100644 --- a/db_stress_tool/db_stress_driver.cc +++ b/db_stress_tool/db_stress_driver.cc @@ -10,6 +10,7 @@ #ifdef GFLAGS #include "db_stress_tool/db_stress_common.h" +#include "utilities/fault_injection_fs.h" namespace ROCKSDB_NAMESPACE { void ThreadBody(void* v) { diff --git a/db_stress_tool/db_stress_test_base.cc b/db_stress_tool/db_stress_test_base.cc index 481a7bfd7b..7235170401 100644 --- a/db_stress_tool/db_stress_test_base.cc +++ b/db_stress_tool/db_stress_test_base.cc @@ -15,6 +15,7 @@ #include "rocksdb/convenience.h" #include "rocksdb/sst_file_manager.h" #include "util/cast_util.h" +#include "utilities/fault_injection_fs.h" namespace ROCKSDB_NAMESPACE { StressTest::StressTest() @@ -1341,7 +1342,7 @@ Status StressTest::TestCheckpoint(ThreadState* thread, if (db_stress_env->FileExists(checkpoint_dir).ok()) { // If the directory might still exist, try to delete the files one by one. // Likely a trash file is still there. - Status my_s = test::DestroyDir(db_stress_env, checkpoint_dir); + Status my_s = DestroyDir(db_stress_env, checkpoint_dir); if (!my_s.ok()) { fprintf(stderr, "Fail to destory directory before checkpoint: %s", my_s.ToString().c_str()); diff --git a/db_stress_tool/db_stress_tool.cc b/db_stress_tool/db_stress_tool.cc index 498462e56f..3e950726b3 100644 --- a/db_stress_tool/db_stress_tool.cc +++ b/db_stress_tool/db_stress_tool.cc @@ -24,7 +24,7 @@ #include "db_stress_tool/db_stress_common.h" #include "db_stress_tool/db_stress_driver.h" #ifndef NDEBUG -#include "test_util/fault_injection_test_fs.h" +#include "utilities/fault_injection_fs.h" #endif namespace ROCKSDB_NAMESPACE { @@ -47,7 +47,7 @@ int db_stress_tool(int argc, char** argv) { #ifndef NDEBUG if (FLAGS_mock_direct_io) { - test::SetupSyncPointsToMockDirectIO(); + SetupSyncPointsToMockDirectIO(); } #endif if (FLAGS_statistics) { diff --git a/db_stress_tool/no_batched_ops_stress.cc b/db_stress_tool/no_batched_ops_stress.cc index 654f0c9746..269d0886d3 100644 --- a/db_stress_tool/no_batched_ops_stress.cc +++ b/db_stress_tool/no_batched_ops_stress.cc @@ -10,7 +10,7 @@ #ifdef GFLAGS #include "db_stress_tool/db_stress_common.h" #ifndef NDEBUG -#include "test_util/fault_injection_test_fs.h" +#include "utilities/fault_injection_fs.h" #endif // NDEBUG namespace ROCKSDB_NAMESPACE { diff --git a/env/env_test.cc b/env/env_test.cc index 7144224721..73b5c95a69 100644 --- a/env/env_test.cc +++ b/env/env_test.cc @@ -35,14 +35,15 @@ #include "port/malloc.h" #include "port/port.h" #include "rocksdb/env.h" -#include "test_util/fault_injection_test_env.h" -#include "test_util/fault_injection_test_fs.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" #include "util/coding.h" #include "util/mutexlock.h" +#include "util/random.h" #include "util/string_util.h" +#include "utilities/fault_injection_env.h" +#include "utilities/fault_injection_fs.h" namespace ROCKSDB_NAMESPACE { @@ -287,7 +288,7 @@ TEST_F(EnvPosixTest, MemoryMappedFileBuffer) { ASSERT_OK(env_->NewWritableFile(fname, &wfile, soptions)); Random rnd(301); - test::RandomString(&rnd, kFileBytes, &expected_data); + expected_data = rnd.RandomString(kFileBytes); ASSERT_OK(wfile->Append(expected_data)); } @@ -1264,9 +1265,8 @@ TEST_F(EnvPosixTest, MultiReadNonAlignedLargeNum) { std::string fname = test::PerThreadDBPath(env_, "testfile"); const size_t kTotalSize = 81920; - std::string expected_data; Random rnd(301); - test::RandomString(&rnd, kTotalSize, &expected_data); + std::string expected_data = rnd.RandomString(kTotalSize); // Create file. { @@ -1949,7 +1949,7 @@ TEST_P(EnvPosixTestWithParam, PosixRandomRWFileRandomized) { std::string buf; for (int i = 0; i < 10000; i++) { // Genrate random data - test::RandomString(&rnd, 10, &buf); + buf = rnd.RandomString(10); // Pick random offset for write size_t write_off = rnd.Next() % 1000; diff --git a/file/delete_scheduler_test.cc b/file/delete_scheduler_test.cc index 993fba12a7..67eaa50e61 100644 --- a/file/delete_scheduler_test.cc +++ b/file/delete_scheduler_test.cc @@ -3,18 +3,20 @@ // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). +#include "file/delete_scheduler.h" + #include #include #include #include -#include "file/delete_scheduler.h" +#include "env/composite_env_wrapper.h" +#include "file/file_util.h" #include "file/sst_file_manager_impl.h" #include "rocksdb/env.h" #include "rocksdb/options.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" -#include "test_util/testutil.h" #include "util/string_util.h" #ifndef ROCKSDB_LITE @@ -40,12 +42,12 @@ class DeleteSchedulerTest : public testing::Test { ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency({}); ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks(); for (const auto& dummy_files_dir : dummy_files_dirs_) { - test::DestroyDir(env_, dummy_files_dir); + DestroyDir(env_, dummy_files_dir); } } void DestroyAndCreateDir(const std::string& dir) { - ASSERT_OK(test::DestroyDir(env_, dir)); + ASSERT_OK(DestroyDir(env_, dir)); EXPECT_OK(env_->CreateDir(dir)); } diff --git a/file/file_util.cc b/file/file_util.cc index 70178a0bd3..0fda7aa83e 100644 --- a/file/file_util.cc +++ b/file/file_util.cc @@ -187,4 +187,49 @@ IOStatus GenerateOneFileChecksum(FileSystem* fs, const std::string& file_path, return IOStatus::OK(); } +Status DestroyDir(Env* env, const std::string& dir) { + Status s; + if (env->FileExists(dir).IsNotFound()) { + return s; + } + std::vector files_in_dir; + s = env->GetChildren(dir, &files_in_dir); + if (s.ok()) { + for (auto& file_in_dir : files_in_dir) { + if (file_in_dir == "." || file_in_dir == "..") { + continue; + } + std::string path = dir + "/" + file_in_dir; + bool is_dir = false; + s = env->IsDirectory(path, &is_dir); + if (s.ok()) { + if (is_dir) { + s = DestroyDir(env, path); + } else { + s = env->DeleteFile(path); + } + } + if (!s.ok()) { + // IsDirectory, etc. might not report NotFound + if (s.IsNotFound() || env->FileExists(path).IsNotFound()) { + // Allow files to be deleted externally + s = Status::OK(); + } else { + break; + } + } + } + } + + if (s.ok()) { + s = env->DeleteDir(dir); + // DeleteDir might or might not report NotFound + if (!s.ok() && (s.IsNotFound() || env->FileExists(dir).IsNotFound())) { + // Allow to be deleted externally + s = Status::OK(); + } + } + return s; +} + } // namespace ROCKSDB_NAMESPACE diff --git a/file/file_util.h b/file/file_util.h index ac7257e05b..1f77b760a2 100644 --- a/file/file_util.h +++ b/file/file_util.h @@ -53,4 +53,7 @@ inline IOStatus PrepareIOFromReadOptions(const ReadOptions& ro, Env* env, return IOStatus::OK(); } +// Test method to delete the input directory and all of its contents. +// This method is destructive and is meant for use only in tests!!! +Status DestroyDir(Env* env, const std::string& dir); } // namespace ROCKSDB_NAMESPACE diff --git a/file/random_access_file_reader_test.cc b/file/random_access_file_reader_test.cc index 7580cdd728..a8be671a53 100644 --- a/file/random_access_file_reader_test.cc +++ b/file/random_access_file_reader_test.cc @@ -3,19 +3,22 @@ // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). +#include "file/random_access_file_reader.h" + +#include "file/file_util.h" #include "port/port.h" #include "port/stack_trace.h" #include "rocksdb/file_system.h" -#include "file/random_access_file_reader.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { class RandomAccessFileReaderTest : public testing::Test { public: void SetUp() override { - test::SetupSyncPointsToMockDirectIO(); + SetupSyncPointsToMockDirectIO(); env_ = Env::Default(); fs_ = FileSystem::Default(); test_dir_ = test::PerThreadDBPath("random_access_file_reader_test"); @@ -23,9 +26,7 @@ class RandomAccessFileReaderTest : public testing::Test { ComputeAndSetAlignment(); } - void TearDown() override { - EXPECT_OK(test::DestroyDir(env_, test_dir_)); - } + void TearDown() override { EXPECT_OK(DestroyDir(env_, test_dir_)); } void Write(const std::string& fname, const std::string& content) { std::unique_ptr f; @@ -79,8 +80,7 @@ class RandomAccessFileReaderTest : public testing::Test { TEST_F(RandomAccessFileReaderTest, ReadDirectIO) { std::string fname = "read-direct-io"; Random rand(0); - std::string content; - test::RandomString(&rand, static_cast(alignment()), &content); + std::string content = rand.RandomString(static_cast(alignment())); Write(fname, content); FileOptions opts; @@ -104,8 +104,7 @@ TEST_F(RandomAccessFileReaderTest, MultiReadDirectIO) { // Creates a file with 3 pages. std::string fname = "multi-read-direct-io"; Random rand(0); - std::string content; - test::RandomString(&rand, 3 * static_cast(alignment()), &content); + std::string content = rand.RandomString(3 * static_cast(alignment())); Write(fname, content); FileOptions opts; diff --git a/memtable/memtablerep_bench.cc b/memtable/memtablerep_bench.cc index cbe62cc854..0f62030424 100644 --- a/memtable/memtablerep_bench.cc +++ b/memtable/memtablerep_bench.cc @@ -141,7 +141,7 @@ class RandomGenerator { RandomGenerator() { Random rnd(301); auto size = (unsigned)std::max(1048576, FLAGS_item_size); - test::RandomString(&rnd, size, &data_); + data_ = rnd.RandomString(size); pos_ = 0; } diff --git a/src.mk b/src.mk index c4fec346e4..2e438f9df2 100644 --- a/src.mk +++ b/src.mk @@ -212,6 +212,8 @@ LIB_SOURCES = \ utilities/debug.cc \ utilities/env_mirror.cc \ utilities/env_timed.cc \ + utilities/fault_injection_env.cc \ + utilities/fault_injection_fs.cc \ utilities/leveldb_options/leveldb_options.cc \ utilities/memory/memory_util.cc \ utilities/merge_operators/max.cc \ @@ -277,8 +279,6 @@ ANALYZER_LIB_SOURCES = \ MOCK_LIB_SOURCES = \ table/mock_table.cc \ - test_util/fault_injection_test_fs.cc \ - test_util/fault_injection_test_env.cc BENCH_LIB_SOURCES = \ tools/db_bench_tool.cc \ diff --git a/table/block_based/block_based_table_reader_test.cc b/table/block_based/block_based_table_reader_test.cc index 6062b3d4e9..e46e3de11f 100644 --- a/table/block_based/block_based_table_reader_test.cc +++ b/table/block_based/block_based_table_reader_test.cc @@ -4,18 +4,20 @@ // (found in the LICENSE.Apache file in the root directory). #include "table/block_based/block_based_table_reader.h" -#include "rocksdb/file_system.h" -#include "table/block_based/partitioned_index_iterator.h" #include "db/table_properties_collector.h" +#include "file/file_util.h" #include "options/options_helper.h" #include "port/port.h" #include "port/stack_trace.h" +#include "rocksdb/file_system.h" #include "table/block_based/block_based_table_builder.h" #include "table/block_based/block_based_table_factory.h" +#include "table/block_based/partitioned_index_iterator.h" #include "table/format.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -33,7 +35,7 @@ class BlockBasedTableReaderTest std::tie(compression_type_, use_direct_reads_, index_type, no_block_cache) = GetParam(); - test::SetupSyncPointsToMockDirectIO(); + SetupSyncPointsToMockDirectIO(); test_dir_ = test::PerThreadDBPath("block_based_table_reader_test"); env_ = Env::Default(); fs_ = FileSystem::Default(); @@ -46,7 +48,7 @@ class BlockBasedTableReaderTest static_cast(NewBlockBasedTableFactory(opts))); } - void TearDown() override { EXPECT_OK(test::DestroyDir(env_, test_dir_)); } + void TearDown() override { EXPECT_OK(DestroyDir(env_, test_dir_)); } // Creates a table with the specificied key value pairs (kv). void CreateTable(const std::string& table_name, @@ -159,9 +161,9 @@ TEST_P(BlockBasedTableReaderTest, MultiGet) { sprintf(k, "%08u", key); std::string v; if (block % 2) { - v = test::RandomHumanReadableString(&rnd, 256); + v = rnd.HumanReadableString(256); } else { - test::RandomString(&rnd, 256, &v); + v = rnd.RandomString(256); } kv[std::string(k)] = v; key++; @@ -256,8 +258,7 @@ TEST_P(BlockBasedTableReaderTestVerifyChecksum, ChecksumMismatch) { // and internal key size is required to be >= 8 bytes, // so use %08u as the format string. sprintf(k, "%08u", key); - std::string v; - test::RandomString(&rnd, 256, &v); + std::string v = rnd.RandomString(256); kv[std::string(k)] = v; key++; } diff --git a/table/block_based/block_test.cc b/table/block_based/block_test.cc index 7521c1515a..c9f12d54e0 100644 --- a/table/block_based/block_test.cc +++ b/table/block_based/block_test.cc @@ -29,12 +29,6 @@ namespace ROCKSDB_NAMESPACE { -static std::string RandomString(Random *rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} - std::string GenerateInternalKey(int primary_key, int secondary_key, int padding_size, Random *rnd) { char buf[50]; @@ -42,7 +36,7 @@ std::string GenerateInternalKey(int primary_key, int secondary_key, snprintf(buf, sizeof(buf), "%6d%4d", primary_key, secondary_key); std::string k(p); if (padding_size) { - k += RandomString(rnd, padding_size); + k += rnd->RandomString(padding_size); } AppendInternalKeyFooter(&k, 0 /* seqno */, kTypeValue); @@ -67,7 +61,7 @@ void GenerateRandomKVs(std::vector *keys, keys->emplace_back(GenerateInternalKey(i, j, padding_size, &rnd)); // 100 bytes values - values->emplace_back(RandomString(&rnd, 100)); + values->emplace_back(rnd.RandomString(100)); } } } diff --git a/table/block_based/data_block_hash_index_test.cc b/table/block_based/data_block_hash_index_test.cc index 409a5bdc24..94fa7e94f0 100644 --- a/table/block_based/data_block_hash_index_test.cc +++ b/table/block_based/data_block_hash_index_test.cc @@ -3,6 +3,8 @@ // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). +#include "table/block_based/data_block_hash_index.h" + #include #include #include @@ -12,11 +14,11 @@ #include "table/block_based/block.h" #include "table/block_based/block_based_table_reader.h" #include "table/block_based/block_builder.h" -#include "table/block_based/data_block_hash_index.h" #include "table/get_context.h" #include "table/table_builder.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -35,12 +37,6 @@ bool SearchForOffset(DataBlockHashIndex& index, const char* data, return entry == restart_point; } -// Random KV generator similer to block_test -static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} std::string GenerateKey(int primary_key, int secondary_key, int padding_size, Random* rnd) { char buf[50]; @@ -48,7 +44,7 @@ std::string GenerateKey(int primary_key, int secondary_key, int padding_size, snprintf(buf, sizeof(buf), "%6d%4d", primary_key, secondary_key); std::string k(p); if (padding_size) { - k += RandomString(rnd, padding_size); + k += rnd->RandomString(padding_size); } return k; @@ -71,7 +67,7 @@ void GenerateRandomKVs(std::vector* keys, keys->emplace_back(GenerateKey(i, j, padding_size, &rnd)); // 100 bytes values - values->emplace_back(RandomString(&rnd, 100)); + values->emplace_back(rnd.RandomString(100)); } } } diff --git a/table/block_fetcher_test.cc b/table/block_fetcher_test.cc index 6d1cd5ddd8..e3c17b292b 100644 --- a/table/block_fetcher_test.cc +++ b/table/block_fetcher_test.cc @@ -4,7 +4,10 @@ // (found in the LICENSE.Apache file in the root directory). #include "table/block_fetcher.h" + #include "db/table_properties_collector.h" +#include "env/composite_env_wrapper.h" +#include "file/file_util.h" #include "options/options_helper.h" #include "port/port.h" #include "port/stack_trace.h" @@ -14,7 +17,6 @@ #include "table/block_based/block_based_table_reader.h" #include "table/format.h" #include "test_util/testharness.h" -#include "test_util/testutil.h" namespace ROCKSDB_NAMESPACE { namespace { @@ -71,14 +73,14 @@ class BlockFetcherTest : public testing::Test { protected: void SetUp() override { - test::SetupSyncPointsToMockDirectIO(); + SetupSyncPointsToMockDirectIO(); test_dir_ = test::PerThreadDBPath("block_fetcher_test"); env_ = Env::Default(); fs_ = FileSystem::Default(); ASSERT_OK(fs_->CreateDir(test_dir_, IOOptions(), nullptr)); } - void TearDown() override { EXPECT_OK(test::DestroyDir(env_, test_dir_)); } + void TearDown() override { EXPECT_OK(DestroyDir(env_, test_dir_)); } void AssertSameBlock(const std::string& block1, const std::string& block2) { ASSERT_EQ(block1, block2); diff --git a/table/merger_test.cc b/table/merger_test.cc index 466e0eb428..13f2257313 100644 --- a/table/merger_test.cc +++ b/table/merger_test.cc @@ -3,12 +3,13 @@ // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). -#include #include +#include #include "table/merging_iterator.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -24,7 +25,7 @@ class MergerTest : public testing::Test { std::vector ret; for (size_t i = 0; i < len; ++i) { - InternalKey ik(test::RandomHumanReadableString(&rnd_, string_len), 0, + InternalKey ik(rnd_.HumanReadableString(string_len), 0, ValueType::kTypeValue); ret.push_back(ik.Encode().ToString(false)); } @@ -44,8 +45,7 @@ class MergerTest : public testing::Test { } void SeekToRandom() { - InternalKey ik(test::RandomHumanReadableString(&rnd_, 5), 0, - ValueType::kTypeValue); + InternalKey ik(rnd_.HumanReadableString(5), 0, ValueType::kTypeValue); Seek(ik.Encode().ToString(false)); } diff --git a/table/table_test.cc b/table/table_test.cc index 7bc53a5849..3554f34634 100644 --- a/table/table_test.cc +++ b/table/table_test.cc @@ -1227,8 +1227,7 @@ class FileChecksumTestHelper { void AddKVtoKVMap(int num_entries) { Random rnd(test::RandomSeed()); for (int i = 0; i < num_entries; i++) { - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); kv_map_[test::RandomKey(&rnd, 20)] = v; } } @@ -1899,16 +1898,10 @@ TEST_P(BlockBasedTableTest, SkipPrefixBloomFilter) { } } -static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} - void AddInternalKey(TableConstructor* c, const std::string& prefix, std::string value = "v", int /*suffix_len*/ = 800) { static Random rnd(1023); - InternalKey k(prefix + RandomString(&rnd, 800), 0, kTypeValue); + InternalKey k(prefix + rnd.RandomString(800), 0, kTypeValue); c->Add(k.Encode().ToString(), value); } @@ -2481,7 +2474,7 @@ TEST_P(BlockBasedTableTest, IndexSizeStat) { std::vector keys; for (int i = 0; i < 100; ++i) { - keys.push_back(RandomString(&rnd, 10000)); + keys.push_back(rnd.RandomString(10000)); } // Each time we load one more key to the table. the table index block @@ -2525,7 +2518,7 @@ TEST_P(BlockBasedTableTest, NumBlockStat) { for (int i = 0; i < 10; ++i) { // the key/val are slightly smaller than block size, so that each block // holds roughly one key/value pair. - c.Add(RandomString(&rnd, 900), "val"); + c.Add(rnd.RandomString(900), "val"); } std::vector ks; @@ -3607,9 +3600,8 @@ TEST_P(ParameterizedHarnessTest, RandomizedHarnessTest) { for (int num_entries = 0; num_entries < 2000; num_entries += (num_entries < 50 ? 1 : 200)) { for (int e = 0; e < num_entries; e++) { - std::string v; Add(test::RandomKey(&rnd, rnd.Skewed(4)), - test::RandomString(&rnd, rnd.Skewed(5), &v).ToString()); + rnd.RandomString(rnd.Skewed(5))); } Test(&rnd); } @@ -3621,8 +3613,7 @@ TEST_F(DBHarnessTest, RandomizedLongDB) { int num_entries = 100000; for (int e = 0; e < num_entries; e++) { std::string v; - Add(test::RandomKey(&rnd, rnd.Skewed(4)), - test::RandomString(&rnd, rnd.Skewed(5), &v).ToString()); + Add(test::RandomKey(&rnd, rnd.Skewed(4)), rnd.RandomString(rnd.Skewed(5))); } Test(&rnd); @@ -3878,8 +3869,8 @@ TEST_P(IndexBlockRestartIntervalTest, IndexBlockRestartInterval) { TableConstructor c(BytewiseComparator()); static Random rnd(301); for (int i = 0; i < kKeysInTable; i++) { - InternalKey k(RandomString(&rnd, kKeySize), 0, kTypeValue); - c.Add(k.Encode().ToString(), RandomString(&rnd, kValSize)); + InternalKey k(rnd.RandomString(kKeySize), 0, kTypeValue); + c.Add(k.Encode().ToString(), rnd.RandomString(kValSize)); } std::vector keys; @@ -4541,9 +4532,9 @@ TEST_P(BlockBasedTableTest, DataBlockHashIndex) { static Random rnd(1048); for (int i = 0; i < kNumKeys; i++) { // padding one "0" to mark existent keys. - std::string random_key(RandomString(&rnd, kKeySize - 1) + "1"); + std::string random_key(rnd.RandomString(kKeySize - 1) + "1"); InternalKey k(random_key, 0, kTypeValue); - c.Add(k.Encode().ToString(), RandomString(&rnd, kValSize)); + c.Add(k.Encode().ToString(), rnd.RandomString(kValSize)); } std::vector keys; diff --git a/test_util/sync_point.cc b/test_util/sync_point.cc index 345e41d641..afdda872b2 100644 --- a/test_util/sync_point.cc +++ b/test_util/sync_point.cc @@ -4,6 +4,10 @@ // (found in the LICENSE.Apache file in the root directory). #include "test_util/sync_point.h" + +#include +#include + #include "test_util/sync_point_impl.h" int rocksdb_kill_odds = 0; @@ -64,3 +68,22 @@ void SyncPoint::Process(const std::string& point, void* cb_arg) { } // namespace ROCKSDB_NAMESPACE #endif // NDEBUG + +namespace ROCKSDB_NAMESPACE { +void SetupSyncPointsToMockDirectIO() { +#if !defined(NDEBUG) && !defined(OS_MACOSX) && !defined(OS_WIN) && \ + !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD) + ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( + "NewWritableFile:O_DIRECT", [&](void* arg) { + int* val = static_cast(arg); + *val &= ~O_DIRECT; + }); + ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( + "NewRandomAccessFile:O_DIRECT", [&](void* arg) { + int* val = static_cast(arg); + *val &= ~O_DIRECT; + }); + ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); +#endif +} +} // namespace ROCKSDB_NAMESPACE diff --git a/test_util/sync_point.h b/test_util/sync_point.h index 007510a4f9..08d6c037ab 100644 --- a/test_util/sync_point.h +++ b/test_util/sync_point.h @@ -124,6 +124,9 @@ class SyncPoint { Data* impl_; }; +// Sets up sync points to mock direct IO instead of actually issuing direct IO +// to the file system. +void SetupSyncPointsToMockDirectIO(); } // namespace ROCKSDB_NAMESPACE // Use TEST_SYNC_POINT to specify sync points inside code base. diff --git a/test_util/testutil.cc b/test_util/testutil.cc index 0d95e3febc..234c76d81d 100644 --- a/test_util/testutil.cc +++ b/test_util/testutil.cc @@ -11,6 +11,7 @@ #include #include + #include #include #include @@ -23,6 +24,7 @@ #include "file/writable_file_writer.h" #include "port/port.h" #include "test_util/sync_point.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { namespace test { @@ -30,23 +32,6 @@ namespace test { const uint32_t kDefaultFormatVersion = BlockBasedTableOptions().format_version; const uint32_t kLatestFormatVersion = 5u; -Slice RandomString(Random* rnd, int len, std::string* dst) { - dst->resize(len); - for (int i = 0; i < len; i++) { - (*dst)[i] = static_cast(' ' + rnd->Uniform(95)); // ' ' .. '~' - } - return Slice(*dst); -} - -extern std::string RandomHumanReadableString(Random* rnd, int len) { - std::string ret; - ret.resize(len); - for (int i = 0; i < len; ++i) { - ret[i] = static_cast('a' + rnd->Uniform(26)); - } - return ret; -} - std::string RandomKey(Random* rnd, int len, RandomKeyType type) { // Make sure to generate a wide variety of characters so we // test the boundary conditions for short-key optimizations. @@ -78,8 +63,7 @@ extern Slice CompressibleString(Random* rnd, double compressed_fraction, int len, std::string* dst) { int raw = static_cast(len * compressed_fraction); if (raw < 1) raw = 1; - std::string raw_data; - RandomString(rnd, raw, &raw_data); + std::string raw_data = rnd->RandomString(raw); // Duplicate the random data until we have filled "len" bytes dst->clear(); @@ -453,51 +437,6 @@ void RandomInitCFOptions(ColumnFamilyOptions* cf_opt, DBOptions& db_options, &cf_opt->compression_per_level, rnd); } -Status DestroyDir(Env* env, const std::string& dir) { - Status s; - if (env->FileExists(dir).IsNotFound()) { - return s; - } - std::vector files_in_dir; - s = env->GetChildren(dir, &files_in_dir); - if (s.ok()) { - for (auto& file_in_dir : files_in_dir) { - if (file_in_dir == "." || file_in_dir == "..") { - continue; - } - std::string path = dir + "/" + file_in_dir; - bool is_dir = false; - s = env->IsDirectory(path, &is_dir); - if (s.ok()) { - if (is_dir) { - s = DestroyDir(env, path); - } else { - s = env->DeleteFile(path); - } - } - if (!s.ok()) { - // IsDirectory, etc. might not report NotFound - if (s.IsNotFound() || env->FileExists(path).IsNotFound()) { - // Allow files to be deleted externally - s = Status::OK(); - } else { - break; - } - } - } - } - - if (s.ok()) { - s = env->DeleteDir(dir); - // DeleteDir might or might not report NotFound - if (!s.ok() && (s.IsNotFound() || env->FileExists(dir).IsNotFound())) { - // Allow to be deleted externally - s = Status::OK(); - } - } - return s; -} - bool IsDirectIOSupported(Env* env, const std::string& dir) { EnvOptions env_options; env_options.use_mmap_writes = false; @@ -531,22 +470,6 @@ size_t GetLinesCount(const std::string& fname, const std::string& pattern) { return count; } -void SetupSyncPointsToMockDirectIO() { -#if !defined(NDEBUG) && !defined(OS_MACOSX) && !defined(OS_WIN) && \ - !defined(OS_SOLARIS) && !defined(OS_AIX) && !defined(OS_OPENBSD) - ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( - "NewWritableFile:O_DIRECT", [&](void* arg) { - int* val = static_cast(arg); - *val &= ~O_DIRECT; - }); - ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( - "NewRandomAccessFile:O_DIRECT", [&](void* arg) { - int* val = static_cast(arg); - *val &= ~O_DIRECT; - }); - ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); -#endif -} void CorruptFile(const std::string& fname, int offset, int bytes_to_corrupt) { struct stat sbuf; diff --git a/test_util/testutil.h b/test_util/testutil.h index f41a1dec85..4255a48f2d 100644 --- a/test_util/testutil.h +++ b/test_util/testutil.h @@ -26,9 +26,9 @@ #include "table/internal_iterator.h" #include "table/plain/plain_table_factory.h" #include "util/mutexlock.h" -#include "util/random.h" namespace ROCKSDB_NAMESPACE { +class Random; class SequentialFile; class SequentialFileReader; @@ -37,12 +37,6 @@ namespace test { extern const uint32_t kDefaultFormatVersion; extern const uint32_t kLatestFormatVersion; -// Store in *dst a random string of length "len" and return a Slice that -// references the generated data. -extern Slice RandomString(Random* rnd, int len, std::string* dst); - -extern std::string RandomHumanReadableString(Random* rnd, int len); - // Return a random key with the specified length that may contain interesting // characters (e.g. \x00, \xff, etc.). enum RandomKeyType : char { RANDOM, LARGEST, SMALLEST, MIDDLE }; @@ -796,8 +790,6 @@ TableFactory* RandomTableFactory(Random* rnd, int pre_defined = -1); std::string RandomName(Random* rnd, const size_t len); -Status DestroyDir(Env* env, const std::string& dir); - bool IsDirectIOSupported(Env* env, const std::string& dir); // Return the number of lines where a given pattern was found in a file. @@ -808,9 +800,6 @@ size_t GetLinesCount(const std::string& fname, const std::string& pattern); // Tries to set TEST_TMPDIR to a directory supporting direct IO. void ResetTmpDirForDirectIO(); -// Sets up sync points to mock direct IO instead of actually issuing direct IO -// to the file system. -void SetupSyncPointsToMockDirectIO(); void CorruptFile(const std::string& fname, int offset, int bytes_to_corrupt); diff --git a/test_util/testutil_test.cc b/test_util/testutil_test.cc index d055af6678..41f26e3890 100644 --- a/test_util/testutil_test.cc +++ b/test_util/testutil_test.cc @@ -5,6 +5,7 @@ #include "test_util/testutil.h" +#include "file/file_util.h" #include "port/port.h" #include "port/stack_trace.h" #include "test_util/testharness.h" @@ -28,7 +29,7 @@ TEST(TestUtil, DestroyDirRecursively) { ASSERT_OK(env->CreateDir(test_dir + "/dir")); CreateFile(env, test_dir + "/dir/file"); - ASSERT_OK(test::DestroyDir(env, test_dir)); + ASSERT_OK(DestroyDir(env, test_dir)); auto s = env->FileExists(test_dir); ASSERT_TRUE(s.IsNotFound()); } diff --git a/tools/db_repl_stress.cc b/tools/db_repl_stress.cc index 717f5d3d84..794ac1530e 100644 --- a/tools/db_repl_stress.cc +++ b/tools/db_repl_stress.cc @@ -37,20 +37,14 @@ struct DataPumpThread { DB* db; // Assumption DB is Open'ed already. }; -static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} - static void DataPumpThreadBody(void* arg) { DataPumpThread* t = reinterpret_cast(arg); DB* db = t->db; Random rnd(301); size_t i = 0; while (i++ < t->no_records) { - if (!db->Put(WriteOptions(), Slice(RandomString(&rnd, 500)), - Slice(RandomString(&rnd, 500))) + if (!db->Put(WriteOptions(), Slice(rnd.RandomString(500)), + Slice(rnd.RandomString(500))) .ok()) { fprintf(stderr, "Error in put\n"); exit(1); diff --git a/tools/ldb_cmd_test.cc b/tools/ldb_cmd_test.cc index e8aa387a22..fce26aabbd 100644 --- a/tools/ldb_cmd_test.cc +++ b/tools/ldb_cmd_test.cc @@ -6,6 +6,7 @@ #ifndef ROCKSDB_LITE #include "rocksdb/utilities/ldb_cmd.h" + #include "db/version_edit.h" #include "db/version_set.h" #include "env/composite_env_wrapper.h" @@ -16,6 +17,7 @@ #include "test_util/testharness.h" #include "test_util/testutil.h" #include "util/file_checksum_helper.h" +#include "util/random.h" using std::string; using std::vector; @@ -284,32 +286,28 @@ TEST_F(LdbCmdTest, DumpFileChecksumNoChecksum) { for (int i = 0; i < 200; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); for (int i = 100; i < 300; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); for (int i = 200; i < 400; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); for (int i = 300; i < 400; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); @@ -369,32 +367,28 @@ TEST_F(LdbCmdTest, DumpFileChecksumCRC32) { for (int i = 0; i < 100; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); for (int i = 50; i < 150; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); for (int i = 100; i < 200; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); for (int i = 150; i < 250; i++) { char buf[16]; snprintf(buf, sizeof(buf), "%08d", i); - std::string v; - test::RandomString(&rnd, 100, &v); + std::string v = rnd.RandomString(100); ASSERT_OK(db->Put(wopts, buf, v)); } ASSERT_OK(db->Flush(fopts)); diff --git a/util/file_reader_writer_test.cc b/util/file_reader_writer_test.cc index f37bd59310..0f1cc499bd 100644 --- a/util/file_reader_writer_test.cc +++ b/util/file_reader_writer_test.cc @@ -166,8 +166,7 @@ TEST_F(WritableFileWriterTest, IncrementalBuffer) { std::string target; for (int i = 0; i < 20; i++) { uint32_t num = r.Skewed(16) * 100 + r.Uniform(100); - std::string random_string; - test::RandomString(&r, num, &random_string); + std::string random_string = r.RandomString(num); writer->Append(Slice(random_string.c_str(), num)); target.append(random_string.c_str(), num); @@ -288,8 +287,7 @@ TEST_P(ReadaheadRandomAccessFileTest, SourceStrLenGreaterThanReadaheadSize) { for (int k = 0; k < 100; ++k) { size_t strLen = k * GetReadaheadSize() + rng.Uniform(static_cast(GetReadaheadSize())); - std::string str = - test::RandomHumanReadableString(&rng, static_cast(strLen)); + std::string str = rng.HumanReadableString(static_cast(strLen)); ResetSourceStr(str); for (int test = 1; test <= 100; ++test) { size_t offset = rng.Uniform(static_cast(strLen)); @@ -304,8 +302,7 @@ TEST_P(ReadaheadRandomAccessFileTest, ReadExceedsReadaheadSize) { Random rng(7); size_t strLen = 4 * GetReadaheadSize() + rng.Uniform(static_cast(GetReadaheadSize())); - std::string str = - test::RandomHumanReadableString(&rng, static_cast(strLen)); + std::string str = rng.HumanReadableString(static_cast(strLen)); ResetSourceStr(str); for (int test = 1; test <= 100; ++test) { size_t offset = rng.Uniform(static_cast(strLen)); @@ -383,8 +380,7 @@ TEST_P(ReadaheadSequentialFileTest, SourceStrLenGreaterThanReadaheadSize) { for (int k = 0; k < 100; ++k) { size_t strLen = k * GetReadaheadSize() + rng.Uniform(static_cast(GetReadaheadSize())); - std::string str = - test::RandomHumanReadableString(&rng, static_cast(strLen)); + std::string str = rng.HumanReadableString(static_cast(strLen)); ResetSourceStr(str); size_t offset = 0; for (int test = 1; test <= 100; ++test) { @@ -406,8 +402,7 @@ TEST_P(ReadaheadSequentialFileTest, ReadExceedsReadaheadSize) { for (int k = 0; k < 100; ++k) { size_t strLen = k * GetReadaheadSize() + rng.Uniform(static_cast(GetReadaheadSize())); - std::string str = - test::RandomHumanReadableString(&rng, static_cast(strLen)); + std::string str = rng.HumanReadableString(static_cast(strLen)); ResetSourceStr(str); size_t offset = 0; for (int test = 1; test <= 100; ++test) { diff --git a/util/random.cc b/util/random.cc index 38c36defd0..68624ad438 100644 --- a/util/random.cc +++ b/util/random.cc @@ -35,4 +35,22 @@ Random* Random::GetTLSInstance() { return rv; } +std::string Random::HumanReadableString(int len) { + std::string ret; + ret.resize(len); + for (int i = 0; i < len; ++i) { + ret[i] = static_cast('a' + Uniform(26)); + } + return ret; +} + +std::string Random::RandomString(int len) { + std::string ret; + ret.resize(len); + for (int i = 0; i < len; i++) { + ret[i] = static_cast(' ' + Uniform(95)); // ' ' .. '~' + } + return ret; +} + } // namespace ROCKSDB_NAMESPACE diff --git a/util/random.h b/util/random.h index 246d6c2ffa..5f6eaf51ef 100644 --- a/util/random.h +++ b/util/random.h @@ -86,6 +86,12 @@ class Random { return Uniform(1 << Uniform(max_log + 1)); } + // Returns a random string of length "len" + std::string RandomString(int len); + + // Generates a random string of len bytes using human-readable characters + std::string HumanReadableString(int len); + // Returns a Random instance for use by the current thread without // additional locking static Random* GetTLSInstance(); diff --git a/utilities/backupable/backupable_db_test.cc b/utilities/backupable/backupable_db_test.cc index 126f63b794..9e8aeb176e 100644 --- a/utilities/backupable/backupable_db_test.cc +++ b/utilities/backupable/backupable_db_test.cc @@ -446,8 +446,7 @@ class FileManager : public EnvWrapper { } for (uint64_t i = 0; i < bytes_to_corrupt; ++i) { - std::string tmp; - test::RandomString(&rnd_, 1, &tmp); + std::string tmp = rnd_.RandomString(1); file_contents[rnd_.Next() % file_contents.size()] = tmp[0]; } return WriteToFile(fname, file_contents); diff --git a/utilities/blob_db/blob_db_test.cc b/utilities/blob_db/blob_db_test.cc index 6ba672ed99..95533cd6a4 100644 --- a/utilities/blob_db/blob_db_test.cc +++ b/utilities/blob_db/blob_db_test.cc @@ -5,6 +5,8 @@ #ifndef ROCKSDB_LITE +#include "utilities/blob_db/blob_db.h" + #include #include #include @@ -22,14 +24,13 @@ #include "file/sst_file_manager_impl.h" #include "port/port.h" #include "rocksdb/utilities/debug.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "util/cast_util.h" #include "util/random.h" #include "util/string_util.h" -#include "utilities/blob_db/blob_db.h" #include "utilities/blob_db/blob_db_impl.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { namespace blob_db { @@ -142,7 +143,7 @@ class BlobDBTest : public testing::Test { void PutRandomWithTTL(const std::string &key, uint64_t ttl, Random *rnd, std::map *data = nullptr) { int len = rnd->Next() % kMaxBlobSize + 1; - std::string value = test::RandomHumanReadableString(rnd, len); + std::string value = rnd->HumanReadableString(len); ASSERT_OK( blob_db_->PutWithTTL(WriteOptions(), Slice(key), Slice(value), ttl)); if (data != nullptr) { @@ -153,7 +154,7 @@ class BlobDBTest : public testing::Test { void PutRandomUntil(const std::string &key, uint64_t expiration, Random *rnd, std::map *data = nullptr) { int len = rnd->Next() % kMaxBlobSize + 1; - std::string value = test::RandomHumanReadableString(rnd, len); + std::string value = rnd->HumanReadableString(len); ASSERT_OK(blob_db_->PutUntil(WriteOptions(), Slice(key), Slice(value), expiration)); if (data != nullptr) { @@ -169,7 +170,7 @@ class BlobDBTest : public testing::Test { void PutRandom(DB *db, const std::string &key, Random *rnd, std::map *data = nullptr) { int len = rnd->Next() % kMaxBlobSize + 1; - std::string value = test::RandomHumanReadableString(rnd, len); + std::string value = rnd->HumanReadableString(len); ASSERT_OK(db->Put(WriteOptions(), Slice(key), Slice(value))); if (data != nullptr) { (*data)[key] = value; @@ -180,7 +181,7 @@ class BlobDBTest : public testing::Test { const std::string &key, Random *rnd, WriteBatch *batch, std::map *data = nullptr) { int len = rnd->Next() % kMaxBlobSize + 1; - std::string value = test::RandomHumanReadableString(rnd, len); + std::string value = rnd->HumanReadableString(len); ASSERT_OK(batch->Put(key, value)); if (data != nullptr) { (*data)[key] = value; @@ -1079,7 +1080,7 @@ TEST_F(BlobDBTest, InlineSmallValues) { uint64_t expiration = rnd.Next() % kMaxExpiration; int len = is_small_value ? 50 : 200; std::string key = "key" + ToString(i); - std::string value = test::RandomHumanReadableString(&rnd, len); + std::string value = rnd.HumanReadableString(len); std::string blob_index; data[key] = value; SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; @@ -1186,8 +1187,7 @@ TEST_F(BlobDBTest, UserCompactionFilter) { oss << "key" << std::setw(4) << std::setfill('0') << i; const std::string key(oss.str()); - const std::string value( - test::RandomHumanReadableString(&rnd, (int)value_size)); + const std::string value = rnd.HumanReadableString((int)value_size); const SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; ASSERT_OK(Put(key, value)); @@ -1264,8 +1264,7 @@ TEST_F(BlobDBTest, UserCompactionFilter_BlobIOError) { oss << "key" << std::setw(4) << std::setfill('0') << i; const std::string key(oss.str()); - const std::string value( - test::RandomHumanReadableString(&rnd, kValueSize)); + const std::string value = rnd.HumanReadableString(kValueSize); const SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; ASSERT_OK(Put(key, value)); @@ -1319,7 +1318,7 @@ TEST_F(BlobDBTest, FilterExpiredBlobIndex) { uint64_t expiration = rnd.Next() % kMaxExpiration; int len = is_small_value ? 10 : 200; std::string key = "key" + ToString(rnd.Next() % kNumKeys); - std::string value = test::RandomHumanReadableString(&rnd, len); + std::string value = rnd.HumanReadableString(len); if (!has_ttl) { if (is_small_value) { std::string blob_entry; @@ -1440,7 +1439,7 @@ TEST_F(BlobDBTest, FilterForFIFOEviction) { // Insert some small values that will be inlined. for (int i = 0; i < 1000; i++) { std::string key = "key" + ToString(i); - std::string value = test::RandomHumanReadableString(&rnd, 50); + std::string value = rnd.HumanReadableString(50); uint64_t ttl = rnd.Next() % 120 + 1; ASSERT_OK(PutWithTTL(key, value, ttl, &data)); if (ttl >= 60) { @@ -1548,8 +1547,7 @@ TEST_F(BlobDBTest, GarbageCollection) { oss << "key" << std::setw(4) << std::setfill('0') << i; const std::string key(oss.str()); - const std::string value( - test::RandomHumanReadableString(&rnd, kLargeValueSize)); + const std::string value = rnd.HumanReadableString(kLargeValueSize); const SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; ASSERT_OK(Put(key, value)); @@ -1566,8 +1564,7 @@ TEST_F(BlobDBTest, GarbageCollection) { // First, add a large TTL value will be written to its own TTL blob file. { const std::string key("key2000"); - const std::string value( - test::RandomHumanReadableString(&rnd, kLargeValueSize)); + const std::string value = rnd.HumanReadableString(kLargeValueSize); const SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; ASSERT_OK(PutUntil(key, value, kExpiration)); @@ -1583,8 +1580,7 @@ TEST_F(BlobDBTest, GarbageCollection) { // Now add a small TTL value (which will be inlined). { const std::string key("key3000"); - const std::string value( - test::RandomHumanReadableString(&rnd, kSmallValueSize)); + const std::string value = rnd.HumanReadableString(kSmallValueSize); const SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; ASSERT_OK(PutUntil(key, value, kExpiration)); @@ -1600,8 +1596,7 @@ TEST_F(BlobDBTest, GarbageCollection) { // value). { const std::string key("key4000"); - const std::string value( - test::RandomHumanReadableString(&rnd, kSmallValueSize)); + const std::string value = rnd.HumanReadableString(kSmallValueSize); const SequenceNumber sequence = blob_db_->GetLatestSequenceNumber() + 1; ASSERT_OK(Put(key, value)); diff --git a/utilities/checkpoint/checkpoint_test.cc b/utilities/checkpoint/checkpoint_test.cc index eb6b0f12b6..823a169bdb 100644 --- a/utilities/checkpoint/checkpoint_test.cc +++ b/utilities/checkpoint/checkpoint_test.cc @@ -9,6 +9,7 @@ // Syncpoint prevents us building and running tests in release #ifndef ROCKSDB_LITE +#include "rocksdb/utilities/checkpoint.h" #ifndef OS_WIN #include @@ -16,17 +17,18 @@ #include #include #include + #include "db/db_impl/db_impl.h" +#include "file/file_util.h" #include "port/port.h" #include "port/stack_trace.h" #include "rocksdb/db.h" #include "rocksdb/env.h" -#include "rocksdb/utilities/checkpoint.h" #include "rocksdb/utilities/transaction_db.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "utilities/fault_injection_env.h" namespace ROCKSDB_NAMESPACE { class CheckpointTest : public testing::Test { @@ -69,7 +71,7 @@ class CheckpointTest : public testing::Test { env_->DeleteDir(snapshot_tmp_name); Reopen(options); export_path_ = test::PerThreadDBPath("/export"); - test::DestroyDir(env_, export_path_); + DestroyDir(env_, export_path_); cfh_reverse_comp_ = nullptr; metadata_ = nullptr; } @@ -94,7 +96,7 @@ class CheckpointTest : public testing::Test { options.db_paths.emplace_back(dbname_ + "_4", 0); EXPECT_OK(DestroyDB(dbname_, options)); EXPECT_OK(DestroyDB(snapshot_name_, options)); - test::DestroyDir(env_, export_path_); + DestroyDir(env_, export_path_); } // Return the current option configuration. @@ -347,7 +349,7 @@ TEST_F(CheckpointTest, ExportColumnFamilyWithLinks) { export_path_, &metadata_)); verify_files_exported(*metadata_, 1); ASSERT_EQ(metadata_->db_comparator_name, options.comparator->Name()); - test::DestroyDir(env_, export_path_); + DestroyDir(env_, export_path_); delete metadata_; metadata_ = nullptr; @@ -358,7 +360,7 @@ TEST_F(CheckpointTest, ExportColumnFamilyWithLinks) { export_path_, &metadata_)); verify_files_exported(*metadata_, 2); ASSERT_EQ(metadata_->db_comparator_name, options.comparator->Name()); - test::DestroyDir(env_, export_path_); + DestroyDir(env_, export_path_); delete metadata_; metadata_ = nullptr; delete checkpoint; @@ -404,7 +406,7 @@ TEST_F(CheckpointTest, ExportColumnFamilyNegativeTest) { ASSERT_EQ(checkpoint->ExportColumnFamily(db_->DefaultColumnFamily(), export_path_, &metadata_), Status::InvalidArgument("Specified export_dir exists")); - test::DestroyDir(env_, export_path_); + DestroyDir(env_, export_path_); // Export with invalid directory specification export_path_ = ""; diff --git a/test_util/fault_injection_test_env.cc b/utilities/fault_injection_env.cc similarity index 99% rename from test_util/fault_injection_test_env.cc rename to utilities/fault_injection_env.cc index d9c2167b42..06ce6b352e 100644 --- a/test_util/fault_injection_test_env.cc +++ b/utilities/fault_injection_env.cc @@ -11,10 +11,12 @@ // the last "sync". It then checks for data loss errors by purposely dropping // file data (or entire files) not protected by a "sync". -#include "test_util/fault_injection_test_env.h" +#include "utilities/fault_injection_env.h" + #include #include +#include "util/random.h" namespace ROCKSDB_NAMESPACE { // Assume a filename, and not a directory name like "/foo/bar/" diff --git a/test_util/fault_injection_test_env.h b/utilities/fault_injection_env.h similarity index 98% rename from test_util/fault_injection_test_env.h rename to utilities/fault_injection_env.h index 9cc33a8d35..0de73cbe26 100644 --- a/test_util/fault_injection_test_env.h +++ b/utilities/fault_injection_env.h @@ -17,16 +17,12 @@ #include #include -#include "db/version_set.h" -#include "env/mock_env.h" #include "file/filename.h" -#include "rocksdb/db.h" #include "rocksdb/env.h" #include "util/mutexlock.h" -#include "util/random.h" namespace ROCKSDB_NAMESPACE { - +class Random; class TestWritableFile; class FaultInjectionTestEnv; diff --git a/test_util/fault_injection_test_fs.cc b/utilities/fault_injection_fs.cc similarity index 99% rename from test_util/fault_injection_test_fs.cc rename to utilities/fault_injection_fs.cc index f08ab5ef91..5ee901523a 100644 --- a/test_util/fault_injection_test_fs.cc +++ b/utilities/fault_injection_fs.cc @@ -14,11 +14,15 @@ // FileSystem related operations, by specify the "IOStatus Error", a specific // error can be returned when file system is not activated. -#include "test_util/fault_injection_test_fs.h" +#include "utilities/fault_injection_fs.h" + #include #include + +#include "env/composite_env_wrapper.h" #include "port/lang.h" #include "port/stack_trace.h" +#include "util/random.h" namespace ROCKSDB_NAMESPACE { @@ -501,8 +505,7 @@ IOStatus FaultInjectionTestFS::InjectError(ErrorOperation op, // The randomly generated string could be identical to the // original one, so retry do { - str = DBTestBase::RandomString(&ctx->rand, - static_cast(len)); + str = ctx->rand.RandomString(static_cast(len)); } while (str == std::string(scratch + offset, len)); memcpy(scratch + offset, str.data(), len); break; diff --git a/test_util/fault_injection_test_fs.h b/utilities/fault_injection_fs.h similarity index 99% rename from test_util/fault_injection_test_fs.h rename to utilities/fault_injection_fs.h index 1ac0d62692..07b7efdad0 100644 --- a/test_util/fault_injection_test_fs.h +++ b/utilities/fault_injection_fs.h @@ -21,15 +21,11 @@ #include #include -#include "db/db_test_util.h" -#include "db/version_set.h" -#include "env/mock_env.h" #include "file/filename.h" #include "include/rocksdb/file_system.h" -#include "rocksdb/db.h" -#include "rocksdb/env.h" #include "util/mutexlock.h" #include "util/random.h" +#include "util/thread_local.h" namespace ROCKSDB_NAMESPACE { diff --git a/utilities/memory/memory_test.cc b/utilities/memory/memory_test.cc index 9e253df44a..9149003625 100644 --- a/utilities/memory/memory_test.cc +++ b/utilities/memory/memory_test.cc @@ -13,6 +13,7 @@ #include "table/block_based/block_based_table_factory.h" #include "test_util/testharness.h" #include "test_util/testutil.h" +#include "util/random.h" #include "util/string_util.h" namespace ROCKSDB_NAMESPACE { @@ -25,12 +26,6 @@ class MemoryTest : public testing::Test { std::string GetDBName(int id) { return kDbDir + "db_" + ToString(id); } - std::string RandomString(int len) { - std::string r; - test::RandomString(&rnd_, len, &r); - return r; - } - void UpdateUsagesHistory(const std::vector& dbs) { std::map usage_by_type; ASSERT_OK(GetApproximateMemoryUsageByType(dbs, &usage_by_type)); @@ -122,9 +117,9 @@ TEST_F(MemoryTest, SharedBlockCacheTotal) { for (int p = 0; p < opt.min_write_buffer_number_to_merge / 2; ++p) { for (int i = 0; i < kNumDBs; ++i) { for (int j = 0; j < 100; ++j) { - keys_by_db[i].emplace_back(RandomString(kKeySize)); + keys_by_db[i].emplace_back(rnd_.RandomString(kKeySize)); dbs[i]->Put(WriteOptions(), keys_by_db[i].back(), - RandomString(kValueSize)); + rnd_.RandomString(kValueSize)); } dbs[i]->Flush(FlushOptions()); } @@ -181,8 +176,8 @@ TEST_F(MemoryTest, MemTableAndTableReadersTotal) { for (int p = 0; p < opt.min_write_buffer_number_to_merge / 2; ++p) { for (int i = 0; i < kNumDBs; ++i) { for (auto* handle : vec_handles[i]) { - dbs[i]->Put(WriteOptions(), handle, RandomString(kKeySize), - RandomString(kValueSize)); + dbs[i]->Put(WriteOptions(), handle, rnd_.RandomString(kKeySize), + rnd_.RandomString(kValueSize)); UpdateUsagesHistory(dbs); } } @@ -208,7 +203,7 @@ TEST_F(MemoryTest, MemTableAndTableReadersTotal) { for (int j = 0; j < 100; ++j) { std::string value; - dbs[i]->Get(ReadOptions(), RandomString(kKeySize), &value); + dbs[i]->Get(ReadOptions(), rnd_.RandomString(kKeySize), &value); } UpdateUsagesHistory(dbs); diff --git a/utilities/option_change_migration/option_change_migration_test.cc b/utilities/option_change_migration/option_change_migration_test.cc index 5bc883ff75..a03cabac98 100644 --- a/utilities/option_change_migration/option_change_migration_test.cc +++ b/utilities/option_change_migration/option_change_migration_test.cc @@ -8,9 +8,13 @@ // found in the LICENSE file. See the AUTHORS file for names of contributors. #include "rocksdb/utilities/option_change_migration.h" + #include + #include "db/db_test_util.h" #include "port/stack_trace.h" +#include "util/random.h" + namespace ROCKSDB_NAMESPACE { class DBOptionChangeMigrationTests @@ -200,7 +204,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate3) { Random rnd(301); for (int num = 0; num < 20; num++) { for (int i = 0; i < 50; i++) { - ASSERT_OK(Put(Key(num * 100 + i), RandomString(&rnd, 900))); + ASSERT_OK(Put(Key(num * 100 + i), rnd.RandomString(900))); } Flush(); dbfull()->TEST_WaitForCompact(); @@ -274,7 +278,7 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) { Random rnd(301); for (int num = 0; num < 20; num++) { for (int i = 0; i < 50; i++) { - ASSERT_OK(Put(Key(num * 100 + i), RandomString(&rnd, 900))); + ASSERT_OK(Put(Key(num * 100 + i), rnd.RandomString(900))); } Flush(); dbfull()->TEST_WaitForCompact(); @@ -370,7 +374,7 @@ TEST_F(DBOptionChangeMigrationTest, CompactedSrcToUniversal) { Random rnd(301); for (int num = 0; num < 20; num++) { for (int i = 0; i < 50; i++) { - ASSERT_OK(Put(Key(num * 100 + i), RandomString(&rnd, 900))); + ASSERT_OK(Put(Key(num * 100 + i), rnd.RandomString(900))); } } Flush(); diff --git a/utilities/persistent_cache/persistent_cache_test.h b/utilities/persistent_cache/persistent_cache_test.h index 47611ecd30..394c649643 100644 --- a/utilities/persistent_cache/persistent_cache_test.h +++ b/utilities/persistent_cache/persistent_cache_test.h @@ -24,6 +24,7 @@ #include "rocksdb/cache.h" #include "table/block_based/block_builder.h" #include "test_util/testharness.h" +#include "util/random.h" #include "utilities/persistent_cache/volatile_tier_impl.h" namespace ROCKSDB_NAMESPACE { @@ -255,7 +256,7 @@ class PersistentCacheDBTest : public DBTestBase { std::string str; for (int i = 0; i < num_iter; i++) { if (i % 4 == 0) { // high compression ratio - str = RandomString(&rnd, 1000); + str = rnd.RandomString(1000); } values->push_back(str); ASSERT_OK(Put(1, Key(i), (*values)[i])); diff --git a/utilities/transactions/transaction_lock_mgr_test.cc b/utilities/transactions/transaction_lock_mgr_test.cc index f42caed86e..e67b453ca1 100644 --- a/utilities/transactions/transaction_lock_mgr_test.cc +++ b/utilities/transactions/transaction_lock_mgr_test.cc @@ -6,6 +6,8 @@ #ifndef ROCKSDB_LITE #include "utilities/transactions/transaction_lock_mgr.h" + +#include "file/file_util.h" #include "port/port.h" #include "port/stack_trace.h" #include "rocksdb/utilities/transaction_db.h" @@ -36,7 +38,7 @@ class TransactionLockMgrTest : public testing::Test { void TearDown() override { delete db_; - EXPECT_OK(test::DestroyDir(env_, db_dir_)); + EXPECT_OK(DestroyDir(env_, db_dir_)); } PessimisticTransaction* NewTxn( diff --git a/utilities/transactions/transaction_test.cc b/utilities/transactions/transaction_test.cc index f153b9a14b..30058a757e 100644 --- a/utilities/transactions/transaction_test.cc +++ b/utilities/transactions/transaction_test.cc @@ -13,25 +13,24 @@ #include #include "db/db_impl/db_impl.h" +#include "port/port.h" #include "rocksdb/db.h" #include "rocksdb/options.h" #include "rocksdb/perf_context.h" #include "rocksdb/utilities/transaction.h" #include "rocksdb/utilities/transaction_db.h" #include "table/mock_table.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" #include "test_util/transaction_test_util.h" #include "util/random.h" #include "util/string_util.h" +#include "utilities/fault_injection_env.h" #include "utilities/merge_operators.h" #include "utilities/merge_operators/string_append/stringappend.h" #include "utilities/transactions/pessimistic_transaction_db.h" -#include "port/port.h" - using std::string; namespace ROCKSDB_NAMESPACE { diff --git a/utilities/transactions/transaction_test.h b/utilities/transactions/transaction_test.h index 4fc0422c70..2f3ab2ba87 100644 --- a/utilities/transactions/transaction_test.h +++ b/utilities/transactions/transaction_test.h @@ -12,25 +12,24 @@ #include #include "db/db_impl/db_impl.h" +#include "port/port.h" #include "rocksdb/db.h" #include "rocksdb/options.h" #include "rocksdb/utilities/transaction.h" #include "rocksdb/utilities/transaction_db.h" #include "table/mock_table.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" #include "test_util/transaction_test_util.h" #include "util/random.h" #include "util/string_util.h" +#include "utilities/fault_injection_env.h" #include "utilities/merge_operators.h" #include "utilities/merge_operators/string_append/stringappend.h" #include "utilities/transactions/pessimistic_transaction_db.h" #include "utilities/transactions/write_unprepared_txn_db.h" -#include "port/port.h" - namespace ROCKSDB_NAMESPACE { // Return true if the ith bit is set in combination represented by comb diff --git a/utilities/transactions/write_prepared_transaction_test.cc b/utilities/transactions/write_prepared_transaction_test.cc index 8adca08e3b..a999c71d42 100644 --- a/utilities/transactions/write_prepared_transaction_test.cc +++ b/utilities/transactions/write_prepared_transaction_test.cc @@ -5,8 +5,6 @@ #ifndef ROCKSDB_LITE -#include "utilities/transactions/transaction_test.h" - #include #include #include @@ -16,6 +14,7 @@ #include "db/db_impl/db_impl.h" #include "db/dbformat.h" +#include "port/port.h" #include "rocksdb/db.h" #include "rocksdb/options.h" #include "rocksdb/types.h" @@ -23,7 +22,6 @@ #include "rocksdb/utilities/transaction.h" #include "rocksdb/utilities/transaction_db.h" #include "table/mock_table.h" -#include "test_util/fault_injection_test_env.h" #include "test_util/sync_point.h" #include "test_util/testharness.h" #include "test_util/testutil.h" @@ -31,13 +29,13 @@ #include "util/mutexlock.h" #include "util/random.h" #include "util/string_util.h" +#include "utilities/fault_injection_env.h" #include "utilities/merge_operators.h" #include "utilities/merge_operators/string_append/stringappend.h" #include "utilities/transactions/pessimistic_transaction_db.h" +#include "utilities/transactions/transaction_test.h" #include "utilities/transactions/write_prepared_txn_db.h" -#include "port/port.h" - using std::string; namespace ROCKSDB_NAMESPACE { @@ -277,8 +275,8 @@ TEST(WriteBatchWithIndex, SubBatchCnt) { for (size_t k = 0; k < 10; k++) { // 10 key per batch size_t ki = static_cast(rnd.Uniform(TOTAL_KEYS)); Slice key = Slice(keys[ki]); - std::string buffer; - Slice value = Slice(test::RandomString(&rnd, 16, &buffer)); + std::string tmp = rnd.RandomString(16); + Slice value = Slice(tmp); rndbatch.Put(key, value); } SubBatchCounter batch_counter(comparators);