From: Islam AbdelRahman Date: Tue, 13 Dec 2016 22:03:15 +0000 (-0800) Subject: break Flush wait for dropped CF X-Git-Tag: rocksdb-4.13.5~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=69cd43e4333ce2e03458bbaf369c2ad6e12d8fe1;p=rocksdb.git 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 --- diff --git a/db/db_impl.cc b/db/db_impl.cc index 67658e93..70127b16 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()) {