From 69cd43e4333ce2e03458bbaf369c2ad6e12d8fe1 Mon Sep 17 00:00:00 2001 From: Islam AbdelRahman Date: Tue, 13 Dec 2016 14:03:15 -0800 Subject: [PATCH] break Flush wait for dropped CF Summary: In FlushJob we dont do the Flush if the CF is dropped https://github.com/facebook/rocksdb/blob/master/db/flush_job.cc#L184-L188 but inside WaitForFlushMemTable we keep waiting forever even if the CF is dropped. Closes https://github.com/facebook/rocksdb/pull/1664 Differential Revision: D4321032 Pulled By: IslamAbdelRahman fbshipit-source-id: 6e2b25d --- db/db_impl.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/db/db_impl.cc b/db/db_impl.cc index 67658e938..70127b168 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -2956,6 +2956,12 @@ Status DBImpl::WaitForFlushMemTable(ColumnFamilyData* cfd) { if (shutting_down_.load(std::memory_order_acquire)) { return Status::ShutdownInProgress(); } + if (cfd->IsDropped()) { + // FlushJob cannot flush a dropped CF, if we did not break here + // we will loop forever since cfd->imm()->NumNotFlushed() will never + // drop to zero + return Status::InvalidArgument("Cannot flush a dropped CF"); + } bg_cv_.Wait(); } if (!bg_error_.ok()) {