From: Yueh-Hsuan Chiang Date: Thu, 19 Jun 2014 21:53:03 +0000 (-0700) Subject: Fixed a potential write hang X-Git-Tag: rocksdb-3.2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4f5ccfd1796d34f80121b2a6772a230fc6e6ba1d;p=rocksdb.git Fixed a potential write hang Summary: Currently, when something badly happen in the DB::Write() while the write-queue contains more than one element, the current design seems to forget to clean up the queue as well as wake-up all the writers, this potentially makes rocksdb hang on writes. Test Plan: make all check Reviewers: sdong, ljin, igor, haobo Reviewed By: haobo Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D19167 --- diff --git a/db/db_impl.cc b/db/db_impl.cc index a9706ab6..290b67f1 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -3862,19 +3862,19 @@ Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { } if (status.ok()) { PERF_TIMER_START(write_memtable_time); + status = WriteBatchInternal::InsertInto( updates, column_family_memtables_.get(), false, 0, this, false); + // A non-OK status here indicates iteration failure (either in-memory + // writebatch corruption (very bad), or the client specified invalid + // column family). This will later on trigger bg_error_. + // + // Note that existing logic was not sound. Any partial failure writing + // into the memtable would result in a state that some write ops might + // have succeeded in memtable but Status reports error for all writes. + PERF_TIMER_STOP(write_memtable_time); - if (!status.ok()) { - // Iteration failed (either in-memory writebatch corruption (very - // bad), or the client specified invalid column family). Return - // failure. - // Note that existing logic was not sound. Any partial failure writing - // into the memtable would result in a state that some write ops might - // have succeeded in memtable but Status reports error for all writes. - return status; - } SetTickerCount(options_.statistics.get(), SEQUENCE_NUMBER, last_sequence); }