From c8159eca52a67bfd0878de6cedff4996587be21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Dziepak?= Date: Thu, 31 Mar 2016 16:42:56 +0100 Subject: [PATCH] commitlog: make sure that segment destructor doesn't throw MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Paweł Dziepak --- db/commitlog/commitlog.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/db/commitlog/commitlog.cc b/db/commitlog/commitlog.cc index d4dcd8ba7b..91f09dbd8a 100644 --- a/db/commitlog/commitlog.cc +++ b/db/commitlog/commitlog.cc @@ -384,6 +384,7 @@ class db::commitlog::segment: public enable_lw_shared_from_this { descriptor _desc; file _file; + sstring _file_name; uint64_t _file_pos = 0; uint64_t _flush_pos = 0; @@ -453,7 +454,8 @@ public: static constexpr size_t default_size = align_up(128 * 1024, alignment); segment(::shared_ptr m, const descriptor& d, file && f, bool active) - : _segment_manager(std::move(m)), _desc(std::move(d)), _file(std::move(f)), _sync_time( + : _segment_manager(std::move(m)), _desc(std::move(d)), _file(std::move(f)), + _file_name(_segment_manager->cfg.commit_log_location + "/" + _desc.filename()), _sync_time( clock_type::now()), _queue(0) { ++_segment_manager->totals.segments_created; @@ -465,8 +467,11 @@ public: ++_segment_manager->totals.segments_destroyed; _segment_manager->totals.total_size_on_disk -= size_on_disk(); _segment_manager->totals.total_size -= (size_on_disk() + _buffer.size()); - commit_io_check(::unlink, - (_segment_manager->cfg.commit_log_location + "/" + _desc.filename()).c_str()); + try { + commit_io_check(::unlink, _file_name.c_str()); + } catch (...) { + logger.error("Could not delete segment {}: {}", *this, std::current_exception()); + } } else { logger.warn("Segment {} is dirty and is left on disk.", *this); }