From 91c7ac1fb2e2338c9785632096cfcac79a6d80f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Jadwiszczak?= Date: Thu, 2 Apr 2026 09:54:54 +0200 Subject: [PATCH] view_building_worker: execute drain() once Future changes will require that the view building worker is drained only once per its lifetime. --- db/view/view_building_worker.cc | 8 ++++++++ db/view/view_building_worker.hh | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/db/view/view_building_worker.cc b/db/view/view_building_worker.cc index 813707f348..3235797c12 100644 --- a/db/view/view_building_worker.cc +++ b/db/view/view_building_worker.cc @@ -143,6 +143,14 @@ dht::token_range view_building_worker::get_tablet_token_range(table_id table_id, } future<> view_building_worker::drain() { + auto drain_started = std::exchange(_drain_started, started_drain::yes); + if (drain_started == started_drain::no) { + _drain_finished = shared_future(do_drain()); + } + return _drain_finished.get_future(); +} + +future<> view_building_worker::do_drain() { if (!_as.abort_requested()) { _as.request_abort(); } diff --git a/db/view/view_building_worker.hh b/db/view/view_building_worker.hh index 66718d8c67..f420f0d882 100644 --- a/db/view/view_building_worker.hh +++ b/db/view/view_building_worker.hh @@ -177,6 +177,11 @@ private: void init_messaging_service(); future<> uninit_messaging_service(); future> work_on_tasks(raft::term_t term, std::vector ids); + + using started_drain = bool_class; + started_drain _drain_started = started_drain::no; + shared_future<> _drain_finished; + future<> do_drain(); }; }