Summary:
This reverts commit 4f1534bdb0
.
This commit caused failures and deadlocks in
MultiThreadedDBTest.MultiThreaded/69 and others.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7070
Reviewed By: riversand963
Differential Revision: D22358778
Pulled By: pdillinger
fbshipit-source-id: faf8f2cb469a7063a113921c8e9c64a9f7610dac
This commit is contained in:
parent
4f1534bdb0
commit
52d59e0c93
@ -41,8 +41,7 @@ class DBBlobIndexTest : public DBTestBase {
|
|||||||
Tier::kImmutableMemtables,
|
Tier::kImmutableMemtables,
|
||||||
Tier::kL0SstFile, Tier::kLnSstFile};
|
Tier::kL0SstFile, Tier::kLnSstFile};
|
||||||
|
|
||||||
DBBlobIndexTest()
|
DBBlobIndexTest() : DBTestBase("/db_blob_index_test") {}
|
||||||
: DBTestBase("/db_blob_index_test", /*env_do_fsync=*/true) {}
|
|
||||||
|
|
||||||
ColumnFamilyHandle* cfh() { return dbfull()->DefaultColumnFamily(); }
|
ColumnFamilyHandle* cfh() { return dbfull()->DefaultColumnFamily(); }
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBBasicTest : public DBTestBase {
|
class DBBasicTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBBasicTest() : DBTestBase("/db_basic_test", /*env_do_fsync=*/true) {}
|
DBBasicTest() : DBTestBase("/db_basic_test") {}
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBBasicTest, OpenWhenOpen) {
|
TEST_F(DBBasicTest, OpenWhenOpen) {
|
||||||
@ -2352,7 +2352,7 @@ class DBBasicTestMultiGet : public DBTestBase {
|
|||||||
DBBasicTestMultiGet(std::string test_dir, int num_cfs, bool compressed_cache,
|
DBBasicTestMultiGet(std::string test_dir, int num_cfs, bool compressed_cache,
|
||||||
bool uncompressed_cache, bool _compression_enabled,
|
bool uncompressed_cache, bool _compression_enabled,
|
||||||
bool _fill_cache, uint32_t compression_parallel_threads)
|
bool _fill_cache, uint32_t compression_parallel_threads)
|
||||||
: DBTestBase(test_dir, /*env_do_fsync=*/true) {
|
: DBTestBase(test_dir) {
|
||||||
compression_enabled_ = _compression_enabled;
|
compression_enabled_ = _compression_enabled;
|
||||||
fill_cache_ = _fill_cache;
|
fill_cache_ = _fill_cache;
|
||||||
|
|
||||||
|
@ -32,8 +32,7 @@ class DBBlockCacheTest : public DBTestBase {
|
|||||||
const size_t kNumBlocks = 10;
|
const size_t kNumBlocks = 10;
|
||||||
const size_t kValueSize = 100;
|
const size_t kValueSize = 100;
|
||||||
|
|
||||||
DBBlockCacheTest()
|
DBBlockCacheTest() : DBTestBase("/db_block_cache_test") {}
|
||||||
: DBTestBase("/db_block_cache_test", /*env_do_fsync=*/true) {}
|
|
||||||
|
|
||||||
BlockBasedTableOptions GetTableOptions() {
|
BlockBasedTableOptions GetTableOptions() {
|
||||||
BlockBasedTableOptions table_options;
|
BlockBasedTableOptions table_options;
|
||||||
|
@ -23,8 +23,7 @@ using BFP = BloomFilterPolicy;
|
|||||||
|
|
||||||
class DBBloomFilterTest : public DBTestBase {
|
class DBBloomFilterTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBBloomFilterTest()
|
DBBloomFilterTest() : DBTestBase("/db_bloom_filter_test") {}
|
||||||
: DBTestBase("/db_bloom_filter_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class DBBloomFilterTestWithParam : public DBTestBase,
|
class DBBloomFilterTestWithParam : public DBTestBase,
|
||||||
@ -37,8 +36,7 @@ class DBBloomFilterTestWithParam : public DBTestBase,
|
|||||||
uint32_t format_version_;
|
uint32_t format_version_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DBBloomFilterTestWithParam()
|
DBBloomFilterTestWithParam() : DBTestBase("/db_bloom_filter_tests") {}
|
||||||
: DBTestBase("/db_bloom_filter_tests", /*env_do_fsync=*/true) {}
|
|
||||||
|
|
||||||
~DBBloomFilterTestWithParam() override {}
|
~DBBloomFilterTestWithParam() override {}
|
||||||
|
|
||||||
@ -1041,7 +1039,7 @@ class DBBloomFilterTestVaryPrefixAndFormatVer
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
DBBloomFilterTestVaryPrefixAndFormatVer()
|
DBBloomFilterTestVaryPrefixAndFormatVer()
|
||||||
: DBTestBase("/db_bloom_filter_tests", /*env_do_fsync=*/true) {}
|
: DBTestBase("/db_bloom_filter_tests") {}
|
||||||
|
|
||||||
~DBBloomFilterTestVaryPrefixAndFormatVer() override {}
|
~DBBloomFilterTestVaryPrefixAndFormatVer() override {}
|
||||||
|
|
||||||
|
@ -21,8 +21,7 @@ static std::string NEW_VALUE = "NewValue";
|
|||||||
|
|
||||||
class DBTestCompactionFilter : public DBTestBase {
|
class DBTestCompactionFilter : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTestCompactionFilter()
|
DBTestCompactionFilter() : DBTestBase("/db_compaction_filter_test") {}
|
||||||
: DBTestBase("/db_compaction_filter_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Param variant of DBTestBase::ChangeCompactOptions
|
// Param variant of DBTestBase::ChangeCompactOptions
|
||||||
|
@ -25,16 +25,14 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBCompactionTest : public DBTestBase {
|
class DBCompactionTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBCompactionTest()
|
DBCompactionTest() : DBTestBase("/db_compaction_test") {}
|
||||||
: DBTestBase("/db_compaction_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class DBCompactionTestWithParam
|
class DBCompactionTestWithParam
|
||||||
: public DBTestBase,
|
: public DBTestBase,
|
||||||
public testing::WithParamInterface<std::tuple<uint32_t, bool>> {
|
public testing::WithParamInterface<std::tuple<uint32_t, bool>> {
|
||||||
public:
|
public:
|
||||||
DBCompactionTestWithParam()
|
DBCompactionTestWithParam() : DBTestBase("/db_compaction_test") {
|
||||||
: DBTestBase("/db_compaction_test", /*env_do_fsync=*/true) {
|
|
||||||
max_subcompactions_ = std::get<0>(GetParam());
|
max_subcompactions_ = std::get<0>(GetParam());
|
||||||
exclusive_manual_compaction_ = std::get<1>(GetParam());
|
exclusive_manual_compaction_ = std::get<1>(GetParam());
|
||||||
}
|
}
|
||||||
@ -4755,8 +4753,7 @@ INSTANTIATE_TEST_CASE_P(DBCompactionDirectIOTest, DBCompactionDirectIOTest,
|
|||||||
class CompactionPriTest : public DBTestBase,
|
class CompactionPriTest : public DBTestBase,
|
||||||
public testing::WithParamInterface<uint32_t> {
|
public testing::WithParamInterface<uint32_t> {
|
||||||
public:
|
public:
|
||||||
CompactionPriTest()
|
CompactionPriTest() : DBTestBase("/compaction_pri_test") {
|
||||||
: DBTestBase("/compaction_pri_test", /*env_do_fsync=*/true) {
|
|
||||||
compaction_pri_ = GetParam();
|
compaction_pri_ = GetParam();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +19,7 @@
|
|||||||
namespace ROCKSDB_NAMESPACE {
|
namespace ROCKSDB_NAMESPACE {
|
||||||
class DBTestDynamicLevel : public DBTestBase {
|
class DBTestDynamicLevel : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTestDynamicLevel()
|
DBTestDynamicLevel() : DBTestBase("/db_dynamic_level_test") {}
|
||||||
: DBTestBase("/db_dynamic_level_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase) {
|
TEST_F(DBTestDynamicLevel, DynamicLevelMaxBytesBase) {
|
||||||
|
@ -16,8 +16,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBEncryptionTest : public DBTestBase {
|
class DBEncryptionTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBEncryptionTest()
|
DBEncryptionTest() : DBTestBase("/db_encryption_test") {}
|
||||||
: DBTestBase("/db_encryption_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
|
@ -22,7 +22,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBFlushTest : public DBTestBase {
|
class DBFlushTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBFlushTest() : DBTestBase("/db_flush_test", /*env_do_fsync=*/true) {}
|
DBFlushTest() : DBTestBase("/db_flush_test") {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class DBFlushDirectIOTest : public DBFlushTest,
|
class DBFlushDirectIOTest : public DBFlushTest,
|
||||||
|
@ -19,7 +19,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
class DBSecondaryTest : public DBTestBase {
|
class DBSecondaryTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBSecondaryTest()
|
DBSecondaryTest()
|
||||||
: DBTestBase("/db_secondary_test", /*env_do_fsync=*/true),
|
: DBTestBase("/db_secondary_test"),
|
||||||
secondary_path_(),
|
secondary_path_(),
|
||||||
handles_secondary_(),
|
handles_secondary_(),
|
||||||
db_secondary_(nullptr) {
|
db_secondary_(nullptr) {
|
||||||
|
@ -13,8 +13,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBTestInPlaceUpdate : public DBTestBase {
|
class DBTestInPlaceUpdate : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTestInPlaceUpdate()
|
DBTestInPlaceUpdate() : DBTestBase("/db_inplace_update_test") {}
|
||||||
: DBTestBase("/db_inplace_update_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBTestInPlaceUpdate, InPlaceUpdate) {
|
TEST_F(DBTestInPlaceUpdate, InPlaceUpdate) {
|
||||||
|
@ -14,8 +14,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBIOFailureTest : public DBTestBase {
|
class DBIOFailureTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBIOFailureTest()
|
DBIOFailureTest() : DBTestBase("/db_io_failure_test") {}
|
||||||
: DBTestBase("/db_io_failure_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
|
@ -33,7 +33,7 @@ class DummyReadCallback : public ReadCallback {
|
|||||||
class DBIteratorTest : public DBTestBase,
|
class DBIteratorTest : public DBTestBase,
|
||||||
public testing::WithParamInterface<bool> {
|
public testing::WithParamInterface<bool> {
|
||||||
public:
|
public:
|
||||||
DBIteratorTest() : DBTestBase("/db_iterator_test", /*env_do_fsync=*/true) {}
|
DBIteratorTest() : DBTestBase("/db_iterator_test") {}
|
||||||
|
|
||||||
Iterator* NewIterator(const ReadOptions& read_options,
|
Iterator* NewIterator(const ReadOptions& read_options,
|
||||||
ColumnFamilyHandle* column_family = nullptr) {
|
ColumnFamilyHandle* column_family = nullptr) {
|
||||||
|
@ -19,8 +19,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBTestXactLogIterator : public DBTestBase {
|
class DBTestXactLogIterator : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTestXactLogIterator()
|
DBTestXactLogIterator() : DBTestBase("/db_log_iter_test") {}
|
||||||
: DBTestBase("/db_log_iter_test", /*env_do_fsync=*/true) {}
|
|
||||||
|
|
||||||
std::unique_ptr<TransactionLogIterator> OpenTransactionLogIter(
|
std::unique_ptr<TransactionLogIterator> OpenTransactionLogIter(
|
||||||
const SequenceNumber seq) {
|
const SequenceNumber seq) {
|
||||||
|
@ -17,7 +17,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBMemTableTest : public DBTestBase {
|
class DBMemTableTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBMemTableTest() : DBTestBase("/db_memtable_test", /*env_do_fsync=*/true) {}
|
DBMemTableTest() : DBTestBase("/db_memtable_test") {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class MockMemTableRep : public MemTableRep {
|
class MockMemTableRep : public MemTableRep {
|
||||||
|
@ -21,8 +21,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBMergeOperandTest : public DBTestBase {
|
class DBMergeOperandTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBMergeOperandTest()
|
DBMergeOperandTest() : DBTestBase("/db_merge_operand_test") {}
|
||||||
: DBTestBase("/db_merge_operand_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBMergeOperandTest, GetMergeOperandsBasic) {
|
TEST_F(DBMergeOperandTest, GetMergeOperandsBasic) {
|
||||||
|
@ -35,8 +35,7 @@ class TestReadCallback : public ReadCallback {
|
|||||||
// Test merge operator functionality.
|
// Test merge operator functionality.
|
||||||
class DBMergeOperatorTest : public DBTestBase {
|
class DBMergeOperatorTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBMergeOperatorTest()
|
DBMergeOperatorTest() : DBTestBase("/db_merge_operator_test") {}
|
||||||
: DBTestBase("/db_merge_operator_test", /*env_do_fsync=*/true) {}
|
|
||||||
|
|
||||||
std::string GetWithReadCallback(SnapshotChecker* snapshot_checker,
|
std::string GetWithReadCallback(SnapshotChecker* snapshot_checker,
|
||||||
const Slice& key,
|
const Slice& key,
|
||||||
|
@ -27,7 +27,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBOptionsTest : public DBTestBase {
|
class DBOptionsTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBOptionsTest() : DBTestBase("/db_options_test", /*env_do_fsync=*/true) {}
|
DBOptionsTest() : DBTestBase("/db_options_test") {}
|
||||||
|
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
std::unordered_map<std::string, std::string> GetMutableDBOptionsMap(
|
std::unordered_map<std::string, std::string> GetMutableDBOptionsMap(
|
||||||
|
@ -26,8 +26,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBPropertiesTest : public DBTestBase {
|
class DBPropertiesTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBPropertiesTest()
|
DBPropertiesTest() : DBTestBase("/db_properties_test") {}
|
||||||
: DBTestBase("/db_properties_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
|
@ -13,7 +13,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBRangeDelTest : public DBTestBase {
|
class DBRangeDelTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBRangeDelTest() : DBTestBase("/db_range_del_test", /*env_do_fsync=*/true) {}
|
DBRangeDelTest() : DBTestBase("/db_range_del_test") {}
|
||||||
|
|
||||||
std::string GetNumericStr(int key) {
|
std::string GetNumericStr(int key) {
|
||||||
uint64_t uint64_key = static_cast<uint64_t>(key);
|
uint64_t uint64_key = static_cast<uint64_t>(key);
|
||||||
|
@ -17,7 +17,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBSSTTest : public DBTestBase {
|
class DBSSTTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBSSTTest() : DBTestBase("/db_sst_test", /*env_do_fsync=*/true) {}
|
DBSSTTest() : DBTestBase("/db_sst_test") {}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
|
@ -14,8 +14,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBStatisticsTest : public DBTestBase {
|
class DBStatisticsTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBStatisticsTest()
|
DBStatisticsTest() : DBTestBase("/db_statistics_test") {}
|
||||||
: DBTestBase("/db_statistics_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBStatisticsTest, CompressionStatsTest) {
|
TEST_F(DBStatisticsTest, CompressionStatsTest) {
|
||||||
|
@ -48,8 +48,7 @@ void VerifyTableProperties(DB* db, uint64_t expected_entries_size) {
|
|||||||
class DBTablePropertiesTest : public DBTestBase,
|
class DBTablePropertiesTest : public DBTestBase,
|
||||||
public testing::WithParamInterface<std::string> {
|
public testing::WithParamInterface<std::string> {
|
||||||
public:
|
public:
|
||||||
DBTablePropertiesTest()
|
DBTablePropertiesTest() : DBTestBase("/db_table_properties_test") {}
|
||||||
: DBTestBase("/db_table_properties_test", /*env_do_fsync=*/true) {}
|
|
||||||
TablePropertiesCollection TestGetPropertiesOfTablesInRange(
|
TablePropertiesCollection TestGetPropertiesOfTablesInRange(
|
||||||
std::vector<Range> ranges, std::size_t* num_properties = nullptr,
|
std::vector<Range> ranges, std::size_t* num_properties = nullptr,
|
||||||
std::size_t* num_files = nullptr);
|
std::size_t* num_files = nullptr);
|
||||||
|
@ -20,8 +20,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBTestTailingIterator : public DBTestBase {
|
class DBTestTailingIterator : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTestTailingIterator()
|
DBTestTailingIterator() : DBTestBase("/db_tailing_iterator_test") {}
|
||||||
: DBTestBase("/db_tailing_iterator_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBTestTailingIterator, TailingIteratorSingle) {
|
TEST_F(DBTestTailingIterator, TailingIteratorSingle) {
|
||||||
|
@ -70,12 +70,9 @@
|
|||||||
|
|
||||||
namespace ROCKSDB_NAMESPACE {
|
namespace ROCKSDB_NAMESPACE {
|
||||||
|
|
||||||
// Note that whole DBTest and its child classes disable fsync on files
|
|
||||||
// and directories for speed.
|
|
||||||
// If fsync needs to be covered in a test, put it in other places.
|
|
||||||
class DBTest : public DBTestBase {
|
class DBTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTest() : DBTestBase("/db_test", /*env_do_fsync=*/false) {}
|
DBTest() : DBTestBase("/db_test") {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class DBTestWithParam
|
class DBTestWithParam
|
||||||
@ -1793,6 +1790,7 @@ TEST_F(DBTest, Snapshot) {
|
|||||||
TEST_F(DBTest, HiddenValuesAreRemoved) {
|
TEST_F(DBTest, HiddenValuesAreRemoved) {
|
||||||
anon::OptionsOverride options_override;
|
anon::OptionsOverride options_override;
|
||||||
options_override.skip_policy = kSkipNoSnapshot;
|
options_override.skip_policy = kSkipNoSnapshot;
|
||||||
|
env_->skip_fsync_ = true;
|
||||||
do {
|
do {
|
||||||
Options options = CurrentOptions(options_override);
|
Options options = CurrentOptions(options_override);
|
||||||
CreateAndReopenWithCF({"pikachu"}, options);
|
CreateAndReopenWithCF({"pikachu"}, options);
|
||||||
@ -3997,6 +3995,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
|
|||||||
const uint64_t k128KB = 1 << 17;
|
const uint64_t k128KB = 1 << 17;
|
||||||
const uint64_t k5KB = 5 * 1024;
|
const uint64_t k5KB = 5 * 1024;
|
||||||
Options options;
|
Options options;
|
||||||
|
env_->skip_fsync_ = true;
|
||||||
options.env = env_;
|
options.env = env_;
|
||||||
options.create_if_missing = true;
|
options.create_if_missing = true;
|
||||||
options.compression = kNoCompression;
|
options.compression = kNoCompression;
|
||||||
@ -5143,6 +5142,7 @@ TEST_F(DBTest, DynamicUniversalCompactionOptions) {
|
|||||||
|
|
||||||
TEST_F(DBTest, FileCreationRandomFailure) {
|
TEST_F(DBTest, FileCreationRandomFailure) {
|
||||||
Options options;
|
Options options;
|
||||||
|
env_->skip_fsync_ = true;
|
||||||
options.env = env_;
|
options.env = env_;
|
||||||
options.create_if_missing = true;
|
options.create_if_missing = true;
|
||||||
options.write_buffer_size = 100000; // Small write buffer
|
options.write_buffer_size = 100000; // Small write buffer
|
||||||
@ -5502,6 +5502,7 @@ TEST_F(DBTest, MergeTestTime) {
|
|||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
TEST_P(DBTestWithParam, MergeCompactionTimeTest) {
|
TEST_P(DBTestWithParam, MergeCompactionTimeTest) {
|
||||||
SetPerfLevel(kEnableTime);
|
SetPerfLevel(kEnableTime);
|
||||||
|
env_->skip_fsync_ = true;
|
||||||
Options options = CurrentOptions();
|
Options options = CurrentOptions();
|
||||||
options.compaction_filter_factory = std::make_shared<KeepFilterFactory>();
|
options.compaction_filter_factory = std::make_shared<KeepFilterFactory>();
|
||||||
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
|
||||||
|
@ -22,7 +22,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBTest2 : public DBTestBase {
|
class DBTest2 : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTest2() : DBTestBase("/db_test2", /*env_do_fsync=*/true) {}
|
DBTest2() : DBTestBase("/db_test2") {}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
@ -92,8 +92,7 @@ class TestReadOnlyWithCompressedCache
|
|||||||
public testing::WithParamInterface<std::tuple<int, bool>> {
|
public testing::WithParamInterface<std::tuple<int, bool>> {
|
||||||
public:
|
public:
|
||||||
TestReadOnlyWithCompressedCache()
|
TestReadOnlyWithCompressedCache()
|
||||||
: DBTestBase("/test_readonly_with_compressed_cache",
|
: DBTestBase("/test_readonly_with_compressed_cache") {
|
||||||
/*env_do_fsync=*/true) {
|
|
||||||
max_open_files_ = std::get<0>(GetParam());
|
max_open_files_ = std::get<0>(GetParam());
|
||||||
use_mmap_ = std::get<1>(GetParam());
|
use_mmap_ = std::get<1>(GetParam());
|
||||||
}
|
}
|
||||||
@ -184,7 +183,7 @@ class PrefixFullBloomWithReverseComparator
|
|||||||
public ::testing::WithParamInterface<bool> {
|
public ::testing::WithParamInterface<bool> {
|
||||||
public:
|
public:
|
||||||
PrefixFullBloomWithReverseComparator()
|
PrefixFullBloomWithReverseComparator()
|
||||||
: DBTestBase("/prefix_bloom_reverse", /*env_do_fsync=*/true) {}
|
: DBTestBase("/prefix_bloom_reverse") {}
|
||||||
void SetUp() override { if_cache_filter_ = GetParam(); }
|
void SetUp() override { if_cache_filter_ = GetParam(); }
|
||||||
bool if_cache_filter_;
|
bool if_cache_filter_;
|
||||||
};
|
};
|
||||||
@ -324,7 +323,7 @@ class DBTestSharedWriteBufferAcrossCFs
|
|||||||
public testing::WithParamInterface<std::tuple<bool, bool>> {
|
public testing::WithParamInterface<std::tuple<bool, bool>> {
|
||||||
public:
|
public:
|
||||||
DBTestSharedWriteBufferAcrossCFs()
|
DBTestSharedWriteBufferAcrossCFs()
|
||||||
: DBTestBase("/db_test_shared_write_buffer", /*env_do_fsync=*/true) {}
|
: DBTestBase("/db_test_shared_write_buffer") {}
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
use_old_interface_ = std::get<0>(GetParam());
|
use_old_interface_ = std::get<0>(GetParam());
|
||||||
cost_cache_ = std::get<1>(GetParam());
|
cost_cache_ = std::get<1>(GetParam());
|
||||||
@ -1791,8 +1790,7 @@ class PinL0IndexAndFilterBlocksTest
|
|||||||
: public DBTestBase,
|
: public DBTestBase,
|
||||||
public testing::WithParamInterface<std::tuple<bool, bool>> {
|
public testing::WithParamInterface<std::tuple<bool, bool>> {
|
||||||
public:
|
public:
|
||||||
PinL0IndexAndFilterBlocksTest()
|
PinL0IndexAndFilterBlocksTest() : DBTestBase("/db_pin_l0_index_bloom_test") {}
|
||||||
: DBTestBase("/db_pin_l0_index_bloom_test", /*env_do_fsync=*/true) {}
|
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
infinite_max_files_ = std::get<0>(GetParam());
|
infinite_max_files_ = std::get<0>(GetParam());
|
||||||
disallow_preload_ = std::get<1>(GetParam());
|
disallow_preload_ = std::get<1>(GetParam());
|
||||||
|
@ -56,7 +56,7 @@ SpecialEnv::SpecialEnv(Env* base)
|
|||||||
ROT13BlockCipher rot13Cipher_(16);
|
ROT13BlockCipher rot13Cipher_(16);
|
||||||
#endif // ROCKSDB_LITE
|
#endif // ROCKSDB_LITE
|
||||||
|
|
||||||
DBTestBase::DBTestBase(const std::string path, bool env_do_fsync)
|
DBTestBase::DBTestBase(const std::string path)
|
||||||
: mem_env_(nullptr), encrypted_env_(nullptr), option_config_(kDefault) {
|
: mem_env_(nullptr), encrypted_env_(nullptr), option_config_(kDefault) {
|
||||||
Env* base_env = Env::Default();
|
Env* base_env = Env::Default();
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
@ -83,7 +83,6 @@ DBTestBase::DBTestBase(const std::string path, bool env_do_fsync)
|
|||||||
: (mem_env_ ? mem_env_ : base_env));
|
: (mem_env_ ? mem_env_ : base_env));
|
||||||
env_->SetBackgroundThreads(1, Env::LOW);
|
env_->SetBackgroundThreads(1, Env::LOW);
|
||||||
env_->SetBackgroundThreads(1, Env::HIGH);
|
env_->SetBackgroundThreads(1, Env::HIGH);
|
||||||
env_->skip_fsync_ = !env_do_fsync;
|
|
||||||
dbname_ = test::PerThreadDBPath(env_, path);
|
dbname_ = test::PerThreadDBPath(env_, path);
|
||||||
alternative_wal_dir_ = dbname_ + "/wal";
|
alternative_wal_dir_ = dbname_ + "/wal";
|
||||||
alternative_db_log_dir_ = dbname_ + "/db_log_dir";
|
alternative_db_log_dir_ = dbname_ + "/db_log_dir";
|
||||||
|
@ -872,10 +872,7 @@ class DBTestBase : public testing::Test {
|
|||||||
// requires.
|
// requires.
|
||||||
kSkipMmapReads;
|
kSkipMmapReads;
|
||||||
|
|
||||||
// `env_do_fsync` decides whether the special Env would do real
|
explicit DBTestBase(const std::string path);
|
||||||
// fsync for files and directories. Skipping fsync can speed up
|
|
||||||
// tests, but won't cover the exact fsync logic.
|
|
||||||
DBTestBase(const std::string path, bool env_do_fsync);
|
|
||||||
|
|
||||||
~DBTestBase();
|
~DBTestBase();
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ class DBTestUniversalCompactionBase
|
|||||||
: public DBTestBase,
|
: public DBTestBase,
|
||||||
public ::testing::WithParamInterface<std::tuple<int, bool>> {
|
public ::testing::WithParamInterface<std::tuple<int, bool>> {
|
||||||
public:
|
public:
|
||||||
explicit DBTestUniversalCompactionBase(const std::string& path)
|
explicit DBTestUniversalCompactionBase(
|
||||||
: DBTestBase(path, /*env_do_fsync=*/true) {}
|
const std::string& path) : DBTestBase(path) {}
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
num_levels_ = std::get<0>(GetParam());
|
num_levels_ = std::get<0>(GetParam());
|
||||||
exclusive_manual_compaction_ = std::get<1>(GetParam());
|
exclusive_manual_compaction_ = std::get<1>(GetParam());
|
||||||
@ -43,8 +43,7 @@ class DBTestUniversalCompaction : public DBTestUniversalCompactionBase {
|
|||||||
|
|
||||||
class DBTestUniversalCompaction2 : public DBTestBase {
|
class DBTestUniversalCompaction2 : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBTestUniversalCompaction2()
|
DBTestUniversalCompaction2() : DBTestBase("/db_universal_compaction_test2") {}
|
||||||
: DBTestBase("/db_universal_compaction_test2", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
namespace ROCKSDB_NAMESPACE {
|
namespace ROCKSDB_NAMESPACE {
|
||||||
class DBWALTest : public DBTestBase {
|
class DBWALTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBWALTest() : DBTestBase("/db_wal_test", /*env_do_fsync=*/true) {}
|
DBWALTest() : DBTestBase("/db_wal_test") {}
|
||||||
|
|
||||||
#if defined(ROCKSDB_PLATFORM_POSIX)
|
#if defined(ROCKSDB_PLATFORM_POSIX)
|
||||||
uint64_t GetAllocatedFileSize(std::string file_name) {
|
uint64_t GetAllocatedFileSize(std::string file_name) {
|
||||||
@ -86,8 +86,7 @@ class EnrichedSpecialEnv : public SpecialEnv {
|
|||||||
|
|
||||||
class DBWALTestWithEnrichedEnv : public DBTestBase {
|
class DBWALTestWithEnrichedEnv : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBWALTestWithEnrichedEnv()
|
DBWALTestWithEnrichedEnv() : DBTestBase("/db_wal_test") {
|
||||||
: DBTestBase("/db_wal_test", /*env_do_fsync=*/true) {
|
|
||||||
enriched_env_ = new EnrichedSpecialEnv(env_->target());
|
enriched_env_ = new EnrichedSpecialEnv(env_->target());
|
||||||
auto options = CurrentOptions();
|
auto options = CurrentOptions();
|
||||||
options.env = enriched_env_;
|
options.env = enriched_env_;
|
||||||
|
@ -22,7 +22,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
class DBBasicTestWithTimestampBase : public DBTestBase {
|
class DBBasicTestWithTimestampBase : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
explicit DBBasicTestWithTimestampBase(const std::string& dbname)
|
explicit DBBasicTestWithTimestampBase(const std::string& dbname)
|
||||||
: DBTestBase(dbname, /*env_do_fsync=*/true) {}
|
: DBTestBase(dbname) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static std::string Key1(uint64_t k) {
|
static std::string Key1(uint64_t k) {
|
||||||
|
@ -31,7 +31,7 @@ std::string Timestamp(uint64_t ts) {
|
|||||||
class TimestampCompatibleCompactionTest : public DBTestBase {
|
class TimestampCompatibleCompactionTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
TimestampCompatibleCompactionTest()
|
TimestampCompatibleCompactionTest()
|
||||||
: DBTestBase("/ts_compatible_compaction_test", /*env_do_fsync=*/true) {}
|
: DBTestBase("/ts_compatible_compaction_test") {}
|
||||||
|
|
||||||
std::string Get(const std::string& key, uint64_t ts) {
|
std::string Get(const std::string& key, uint64_t ts) {
|
||||||
ReadOptions read_opts;
|
ReadOptions read_opts;
|
||||||
|
@ -22,7 +22,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
// Test variations of WriteImpl.
|
// Test variations of WriteImpl.
|
||||||
class DBWriteTest : public DBTestBase, public testing::WithParamInterface<int> {
|
class DBWriteTest : public DBTestBase, public testing::WithParamInterface<int> {
|
||||||
public:
|
public:
|
||||||
DBWriteTest() : DBTestBase("/db_write_test", /*env_do_fsync=*/true) {}
|
DBWriteTest() : DBTestBase("/db_write_test") {}
|
||||||
|
|
||||||
Options GetOptions() { return DBTestBase::GetOptions(GetParam()); }
|
Options GetOptions() { return DBTestBase::GetOptions(GetParam()); }
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ class DeleteFileTest : public DBTestBase {
|
|||||||
const std::string wal_dir_;
|
const std::string wal_dir_;
|
||||||
|
|
||||||
DeleteFileTest()
|
DeleteFileTest()
|
||||||
: DBTestBase("/deletefile_test", /*env_do_fsync=*/true),
|
: DBTestBase("/deletefile_test"),
|
||||||
numlevels_(7),
|
numlevels_(7),
|
||||||
wal_dir_(dbname_ + "/wal_files") {}
|
wal_dir_(dbname_ + "/wal_files") {}
|
||||||
|
|
||||||
|
@ -23,8 +23,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class DBErrorHandlingFSTest : public DBTestBase {
|
class DBErrorHandlingFSTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBErrorHandlingFSTest()
|
DBErrorHandlingFSTest() : DBTestBase("/db_error_handling_fs_test") {}
|
||||||
: DBTestBase("/db_error_handling_fs_test", /*env_do_fsync=*/true) {}
|
|
||||||
|
|
||||||
std::string GetManifestNameFromLiveFiles() {
|
std::string GetManifestNameFromLiveFiles() {
|
||||||
std::vector<std::string> live_files;
|
std::vector<std::string> live_files;
|
||||||
|
@ -20,8 +20,7 @@ class ExternalSSTFileBasicTest
|
|||||||
: public DBTestBase,
|
: public DBTestBase,
|
||||||
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
||||||
public:
|
public:
|
||||||
ExternalSSTFileBasicTest()
|
ExternalSSTFileBasicTest() : DBTestBase("/external_sst_file_basic_test") {
|
||||||
: DBTestBase("/external_sst_file_basic_test", /*env_do_fsync=*/true) {
|
|
||||||
sst_files_dir_ = dbname_ + "/sst_files/";
|
sst_files_dir_ = dbname_ + "/sst_files/";
|
||||||
fault_injection_test_env_.reset(new FaultInjectionTestEnv(Env::Default()));
|
fault_injection_test_env_.reset(new FaultInjectionTestEnv(Env::Default()));
|
||||||
DestroyAndRecreateExternalSSTFilesDir();
|
DestroyAndRecreateExternalSSTFilesDir();
|
||||||
|
@ -43,7 +43,7 @@ class ExternSSTFileLinkFailFallbackTest
|
|||||||
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
||||||
public:
|
public:
|
||||||
ExternSSTFileLinkFailFallbackTest()
|
ExternSSTFileLinkFailFallbackTest()
|
||||||
: DBTestBase("/external_sst_file_test", /*env_do_fsync=*/true),
|
: DBTestBase("/external_sst_file_test"),
|
||||||
test_env_(new ExternalSSTTestEnv(env_, true)) {
|
test_env_(new ExternalSSTTestEnv(env_, true)) {
|
||||||
sst_files_dir_ = dbname_ + "/sst_files/";
|
sst_files_dir_ = dbname_ + "/sst_files/";
|
||||||
test::DestroyDir(env_, sst_files_dir_);
|
test::DestroyDir(env_, sst_files_dir_);
|
||||||
@ -71,8 +71,7 @@ class ExternalSSTFileTest
|
|||||||
: public DBTestBase,
|
: public DBTestBase,
|
||||||
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
public ::testing::WithParamInterface<std::tuple<bool, bool>> {
|
||||||
public:
|
public:
|
||||||
ExternalSSTFileTest()
|
ExternalSSTFileTest() : DBTestBase("/external_sst_file_test") {
|
||||||
: DBTestBase("/external_sst_file_test", /*env_do_fsync=*/true) {
|
|
||||||
sst_files_dir_ = dbname_ + "/sst_files/";
|
sst_files_dir_ = dbname_ + "/sst_files/";
|
||||||
DestroyAndRecreateExternalSSTFilesDir();
|
DestroyAndRecreateExternalSSTFilesDir();
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class ImportColumnFamilyTest : public DBTestBase {
|
class ImportColumnFamilyTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
ImportColumnFamilyTest()
|
ImportColumnFamilyTest() : DBTestBase("/import_column_family_test") {
|
||||||
: DBTestBase("/import_column_family_test", /*env_do_fsync=*/true) {
|
|
||||||
sst_files_dir_ = dbname_ + "/sst_files/";
|
sst_files_dir_ = dbname_ + "/sst_files/";
|
||||||
DestroyAndRecreateExternalSSTFilesDir();
|
DestroyAndRecreateExternalSSTFilesDir();
|
||||||
export_files_dir_ = test::PerThreadDBPath(env_, "export");
|
export_files_dir_ = test::PerThreadDBPath(env_, "export");
|
||||||
|
@ -41,7 +41,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class EventListenerTest : public DBTestBase {
|
class EventListenerTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
EventListenerTest() : DBTestBase("/listener_test", /*env_do_fsync=*/true) {}
|
EventListenerTest() : DBTestBase("/listener_test") {}
|
||||||
|
|
||||||
static std::string BlobStr(uint64_t blob_file_number, uint64_t offset,
|
static std::string BlobStr(uint64_t blob_file_number, uint64_t offset,
|
||||||
uint64_t size) {
|
uint64_t size) {
|
||||||
|
@ -38,8 +38,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
class ObsoleteFilesTest : public DBTestBase {
|
class ObsoleteFilesTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
ObsoleteFilesTest()
|
ObsoleteFilesTest()
|
||||||
: DBTestBase("/obsolete_files_test", /*env_do_fsync=*/true),
|
: DBTestBase("/obsolete_files_test"), wal_dir_(dbname_ + "/wal_files") {}
|
||||||
wal_dir_(dbname_ + "/wal_files") {}
|
|
||||||
|
|
||||||
void AddKeys(int numkeys, int startkey) {
|
void AddKeys(int numkeys, int startkey) {
|
||||||
WriteOptions options;
|
WriteOptions options;
|
||||||
|
@ -22,7 +22,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
class RepairTest : public DBTestBase {
|
class RepairTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
RepairTest() : DBTestBase("/repair_test", /*env_do_fsync=*/true) {}
|
RepairTest() : DBTestBase("/repair_test") {}
|
||||||
|
|
||||||
std::string GetFirstSstPath() {
|
std::string GetFirstSstPath() {
|
||||||
uint64_t manifest_size;
|
uint64_t manifest_size;
|
||||||
|
@ -28,8 +28,7 @@ namespace ROCKSDB_NAMESPACE {
|
|||||||
|
|
||||||
class StatsHistoryTest : public DBTestBase {
|
class StatsHistoryTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
StatsHistoryTest()
|
StatsHistoryTest() : DBTestBase("/stats_history_test") {}
|
||||||
: DBTestBase("/stats_history_test", /*env_do_fsync=*/true) {}
|
|
||||||
};
|
};
|
||||||
#ifndef ROCKSDB_LITE
|
#ifndef ROCKSDB_LITE
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class DBOptionChangeMigrationTests
|
|||||||
std::tuple<int, int, bool, int, int, bool>> {
|
std::tuple<int, int, bool, int, int, bool>> {
|
||||||
public:
|
public:
|
||||||
DBOptionChangeMigrationTests()
|
DBOptionChangeMigrationTests()
|
||||||
: DBTestBase("/db_option_change_migration_test", /*env_do_fsync=*/true) {
|
: DBTestBase("/db_option_change_migration_test") {
|
||||||
level1_ = std::get<0>(GetParam());
|
level1_ = std::get<0>(GetParam());
|
||||||
compaction_style1_ = std::get<1>(GetParam());
|
compaction_style1_ = std::get<1>(GetParam());
|
||||||
is_dynamic1_ = std::get<2>(GetParam());
|
is_dynamic1_ = std::get<2>(GetParam());
|
||||||
@ -350,8 +350,7 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
class DBOptionChangeMigrationTest : public DBTestBase {
|
class DBOptionChangeMigrationTest : public DBTestBase {
|
||||||
public:
|
public:
|
||||||
DBOptionChangeMigrationTest()
|
DBOptionChangeMigrationTest()
|
||||||
: DBTestBase("/db_option_change_migration_test2", /*env_do_fsync=*/true) {
|
: DBTestBase("/db_option_change_migration_test2") {}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DBOptionChangeMigrationTest, CompactedSrcToUniversal) {
|
TEST_F(DBOptionChangeMigrationTest, CompactedSrcToUniversal) {
|
||||||
|
@ -295,8 +295,7 @@ TEST_F(PersistentCacheTierTest, FactoryTest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PersistentCacheDBTest::PersistentCacheDBTest()
|
PersistentCacheDBTest::PersistentCacheDBTest() : DBTestBase("/cache_test") {
|
||||||
: DBTestBase("/cache_test", /*env_do_fsync=*/true) {
|
|
||||||
#ifdef OS_LINUX
|
#ifdef OS_LINUX
|
||||||
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
||||||
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
|
||||||
|
@ -21,7 +21,7 @@ class SimCacheTest : public DBTestBase {
|
|||||||
const size_t kNumBlocks = 5;
|
const size_t kNumBlocks = 5;
|
||||||
const size_t kValueSize = 1000;
|
const size_t kValueSize = 1000;
|
||||||
|
|
||||||
SimCacheTest() : DBTestBase("/sim_cache_test", /*env_do_fsync=*/true) {}
|
SimCacheTest() : DBTestBase("/sim_cache_test") {}
|
||||||
|
|
||||||
BlockBasedTableOptions GetTableOptions() {
|
BlockBasedTableOptions GetTableOptions() {
|
||||||
BlockBasedTableOptions table_options;
|
BlockBasedTableOptions table_options;
|
||||||
|
Loading…
Reference in New Issue
Block a user