From 0ff0b625a11544951bb2a4060aed424f15babf25 Mon Sep 17 00:00:00 2001 From: Andrew Kryczka Date: Mon, 8 Mar 2021 14:46:09 -0800 Subject: [PATCH] Deflake DBTest2.PartitionedIndexUserToInternalKey on ppc64le (#8044) Summary: For some reason I still cannot figure out, the manual flush in this test was sometimes producing a third tiny file. I saw it a bunch of times on ppc64le, but even running a qemu system with that architecture (and playing with various other options) could not repro. However we did get an instrumented Travis run to confirm the problem is indeed a third tiny file - https://travis-ci.org/github/facebook/rocksdb/jobs/761986592. We can avoid it by filling memtables less full and using manual flush. Pull Request resolved: https://github.com/facebook/rocksdb/pull/8044 Reviewed By: akankshamahajan15 Differential Revision: D26892635 Pulled By: ajkr fbshipit-source-id: 775c04176931cf01d07cc78fb82cfe3a11beebcf --- db/db_test2.cc | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/db/db_test2.cc b/db/db_test2.cc index c158c742e..9241a04ef 100644 --- a/db/db_test2.cc +++ b/db/db_test2.cc @@ -154,8 +154,14 @@ class PartitionedIndexTestListener : public EventListener { }; TEST_F(DBTest2, PartitionedIndexUserToInternalKey) { + const int kValueSize = 10500; + const int kNumEntriesPerFile = 1000; + const int kNumFiles = 3; + const int kNumDistinctKeys = 30; + BlockBasedTableOptions table_options; Options options = CurrentOptions(); + options.disable_auto_compactions = true; table_options.index_type = BlockBasedTableOptions::kTwoLevelIndexSearch; PartitionedIndexTestListener* listener = new PartitionedIndexTestListener(); options.table_factory.reset(NewBlockBasedTableFactory(table_options)); @@ -164,14 +170,15 @@ TEST_F(DBTest2, PartitionedIndexUserToInternalKey) { Reopen(options); Random rnd(301); - for (int i = 0; i < 3000; i++) { - int j = i % 30; - std::string value = rnd.RandomString(10500); - ASSERT_OK(Put("keykey_" + std::to_string(j), value)); - snapshots.push_back(db_->GetSnapshot()); + for (int i = 0; i < kNumFiles; i++) { + for (int j = 0; j < kNumEntriesPerFile; j++) { + int key_id = (i * kNumEntriesPerFile + j) % kNumDistinctKeys; + std::string value = rnd.RandomString(kValueSize); + ASSERT_OK(Put("keykey_" + std::to_string(key_id), value)); + snapshots.push_back(db_->GetSnapshot()); + } + ASSERT_OK(Flush()); } - ASSERT_OK(Flush()); - dbfull()->TEST_WaitForFlushMemTable(); for (auto s : snapshots) { db_->ReleaseSnapshot(s);