diff --git a/db/view/view.cc b/db/view/view.cc index 605066e4c9..239f778f9b 100644 --- a/db/view/view.cc +++ b/db/view/view.cc @@ -1473,8 +1473,11 @@ future<> view_builder::start(service::migration_manager& mm) { return make_ready_future<>(); } -future<> view_builder::stop() { - vlogger.info("Stopping view builder"); +future<> view_builder::drain() { + if (_as.abort_requested()) { + return make_ready_future(); + } + vlogger.info("Draining view builder"); _as.request_abort(); return _started.then([this] { return _mnotifier.unregister_listener(this).then([this] { @@ -1494,6 +1497,11 @@ future<> view_builder::stop() { }); } +future<> view_builder::stop() { + vlogger.info("Stopping view builder"); + return drain(); +} + view_builder::build_step& view_builder::get_or_create_build_step(utils::UUID base_id) { auto it = _base_to_build_step.find(base_id); if (it == _base_to_build_step.end()) { diff --git a/db/view/view_builder.hh b/db/view/view_builder.hh index dd4f6721b6..23922d38f5 100644 --- a/db/view/view_builder.hh +++ b/db/view/view_builder.hh @@ -205,6 +205,11 @@ public: */ future<> start(service::migration_manager&); + /** + * Drains view building in order to prepare it for shutdown. + */ + future<> drain(); + /** * Stops the view building process. */