From bf0a91b56606f73627a40aa76b80e78fa394b58d Mon Sep 17 00:00:00 2001 From: Calle Wilund Date: Mon, 24 May 2021 13:41:45 +0000 Subject: [PATCH] commitlog: Flush all segments if we only have one. Handle test cases with borked config so we don't deadlock in cases where we only have one segment in a commitlog --- db/commitlog/commitlog.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/db/commitlog/commitlog.cc b/db/commitlog/commitlog.cc index dbf1d47f16..d57e53ba0d 100644 --- a/db/commitlog/commitlog.cc +++ b/db/commitlog/commitlog.cc @@ -1385,7 +1385,8 @@ void db::commitlog::segment_manager::flush_segments(uint64_t size_to_remove) { // Now get a set of used CF ids: std::unordered_set ids; - std::for_each(_segments.begin(), _segments.end() - 1, [&ids](sseg_ptr& s) { + auto e = std::find_if(_segments.begin(), _segments.end(), std::mem_fn(&segment::is_still_allocating)); + std::for_each(_segments.begin(), e, [&ids](sseg_ptr& s) { for (auto& id : s->_cf_dirty | boost::adaptors::map_keys) { ids.insert(id); }