From cff58e8d75a6eefebf05b3b843b4e120e02e3a13 Mon Sep 17 00:00:00 2001 From: Zhichao Cao Date: Fri, 29 Mar 2019 14:02:11 -0700 Subject: [PATCH 1/2] Fix the potential DB crash caused by accidentally call EndTrace before StartTrace --- db/db_impl.cc | 9 +++++++-- db/db_test2.cc | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/db/db_impl.cc b/db/db_impl.cc index becc8e8e224..bede0247191 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -3654,8 +3654,13 @@ Status DBImpl::StartTrace(const TraceOptions& trace_options, Status DBImpl::EndTrace() { InstrumentedMutexLock lock(&trace_mutex_); - Status s = tracer_->Close(); - tracer_.reset(); + Status s; + if (tracer_.get() != nullptr) { + s = tracer_->Close(); + tracer_.reset(); + } else { + return Status::IOError("No trace file to close"); + } return s; } diff --git a/db/db_test2.cc b/db/db_test2.cc index b62a1d5773b..99bf9bb7642 100644 --- a/db/db_test2.cc +++ b/db/db_test2.cc @@ -2874,6 +2874,8 @@ TEST_F(DBTest2, TraceAndReplay) { Random rnd(301); Iterator* single_iter = nullptr; + ASSERT_TRUE(db_->EndTrace().IsIOError()); + std::string trace_filename = dbname_ + "/rocksdb.trace"; std::unique_ptr trace_writer; ASSERT_OK(NewFileTraceWriter(env_, env_opts, trace_filename, &trace_writer)); From 3261f104f78b2c855de68652228f551c824060a5 Mon Sep 17 00:00:00 2001 From: Zhichao Cao Date: Tue, 2 Apr 2019 15:02:35 -0700 Subject: [PATCH 2/2] Updated the unique pointer --- db/db_impl.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/db_impl.cc b/db/db_impl.cc index bede0247191..4ae2ed4d530 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -3655,7 +3655,7 @@ Status DBImpl::StartTrace(const TraceOptions& trace_options, Status DBImpl::EndTrace() { InstrumentedMutexLock lock(&trace_mutex_); Status s; - if (tracer_.get() != nullptr) { + if (tracer_ != nullptr) { s = tracer_->Close(); tracer_.reset(); } else {