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 <bhalevy@scylladb.com> Message-Id: <20211024164138.1100304-1-bhalevy@scylladb.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user