From 5f513ed28b6048338ce0b1a913df567514927684 Mon Sep 17 00:00:00 2001 From: Benny Halevy Date: Sun, 24 Oct 2021 19:41:38 +0300 Subject: [PATCH] view_builder: consumer: flush_fragments: close reader on error Make sure to close the reader created by flush_fragments if an exception occurs before it's moved to `populate_views`. Note that it is also ok to close the reader _after_ it has been moved, in case populate_views itself throws after closing the reader that was moved it. For conveience flat_mutation_reader::close supports close-after-move. Fixes #9479 Signed-off-by: Benny Halevy Message-Id: <20211024164138.1100304-1-bhalevy@scylladb.com> --- db/view/view.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/db/view/view.cc b/db/view/view.cc index 76ac795bb0..d62316e9a3 100644 --- a/db/view/view.cc +++ b/db/view/view.cc @@ -2013,12 +2013,14 @@ public: auto base_schema = _step.base->schema(); auto views = with_base_info_snapshot(_views_to_build); auto reader = make_flat_mutation_reader_from_fragments(_step.reader.schema(), _builder._permit, std::move(_fragments)); + auto close_reader = defer([&reader] { reader.close().get(); }); reader.upgrade_schema(base_schema); _step.base->populate_views( std::move(views), _step.current_token(), std::move(reader), _now).get(); + close_reader.cancel(); _fragments.clear(); _fragments_memory_usage = 0; }