From b58a1a035bac3afc11cfe0274d0572b476a35e63 Mon Sep 17 00:00:00 2001 From: Yanqin Jin Date: Fri, 13 May 2022 12:31:30 -0700 Subject: [PATCH] Revert "Bugfix/fix manual flush blocking bug (#9893)" (#9992) Summary: This reverts commit 6d2577e5672a7abe7b41a67f1cccce3a6601b30e. A proposal for resolving our current internal test failures. A fix is being planned. More context can be found: https://github.com/facebook/rocksdb/pull/9893#issuecomment-1126230634 TSAN error: https://github.com/facebook/rocksdb/pull/9893#issuecomment-1126233132 Pull Request resolved: https://github.com/facebook/rocksdb/pull/9992 Reviewed By: siying Differential Revision: D36379154 Pulled By: riversand963 fbshipit-source-id: b240261e766eff099513799cf5631832093f4cd2 --- db/db_impl/db_impl_compaction_flush.cc | 6 ++-- db/db_test.cc | 45 -------------------------- 2 files changed, 2 insertions(+), 49 deletions(-) diff --git a/db/db_impl/db_impl_compaction_flush.cc b/db/db_impl/db_impl_compaction_flush.cc index 92043350f..7ce128b07 100644 --- a/db/db_impl/db_impl_compaction_flush.cc +++ b/db/db_impl/db_impl_compaction_flush.cc @@ -1705,11 +1705,9 @@ Status DBImpl::Flush(const FlushOptions& flush_options, Status s; if (immutable_db_options_.atomic_flush) { s = AtomicFlushMemTables({cfh->cfd()}, flush_options, - FlushReason::kManualFlush, - write_controller().IsStopped()); + FlushReason::kManualFlush); } else { - s = FlushMemTable(cfh->cfd(), flush_options, FlushReason::kManualFlush, - write_controller().IsStopped()); + s = FlushMemTable(cfh->cfd(), flush_options, FlushReason::kManualFlush); } ROCKS_LOG_INFO(immutable_db_options_.info_log, diff --git a/db/db_test.cc b/db/db_test.cc index c8e394394..f3039f187 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -7036,51 +7036,6 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) { } } -TEST_F(DBTest, ManualFlushWithStoppedWritesTest) { - Options options = CurrentOptions(); - - // Setting a small write buffer size. This will block writes - // rather quickly until a flush is made. - constexpr unsigned int memtableSize = 1000; - options.db_write_buffer_size = memtableSize; - options.max_background_flushes = 1; - Reopen(options); - - std::atomic done(false); - - // Will suppress future flushes. - // This simulates a situation where the writes will be stopped for any reason. - ASSERT_OK(dbfull()->PauseBackgroundWork()); - - port::Thread backgroundWriter([&]() { - Random rnd(301); - // These writes won't finish. - ASSERT_OK(Put("k1", rnd.RandomString(memtableSize / 2))); - ASSERT_OK(Put("k2", rnd.RandomString(memtableSize / 2))); - ASSERT_OK(Put("k3", rnd.RandomString(memtableSize / 2))); - ASSERT_OK(Put("k4", rnd.RandomString(memtableSize / 2))); - done.store(true); - }); - - env_->SleepForMicroseconds(1000000 / 2); - // make sure thread is stuck waiting for flush. - ASSERT_FALSE(done.load()); - - FlushOptions flushOptions; - flushOptions.wait = false; - flushOptions.allow_write_stall = true; - - // This is the main goal of the test. This manual flush should not deadlock - // as we use wait=false, and even allow_write_stall=true for extra safety. - ASSERT_OK(dbfull()->Flush(flushOptions)); - - // This will re-allow background flushes. - ASSERT_OK(dbfull()->ContinueBackgroundWork()); - - backgroundWriter.join(); - ASSERT_TRUE(done.load()); -} - #endif } // namespace ROCKSDB_NAMESPACE -- GitLab