From e34220ebb79828454d534282f39136508e9494e5 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Mon, 18 Sep 2023 20:41:32 +0300 Subject: [PATCH] view_update_generator: Add early abort subscription Subscribe v.u.g. to the main's stop_signal. For now a no-op callback. Signed-off-by: Pavel Emelyanov --- db/view/view_update_generator.cc | 9 +++++++-- db/view/view_update_generator.hh | 4 +++- main.cc | 2 +- test/lib/cql_test_env.cc | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/db/view/view_update_generator.cc b/db/view/view_update_generator.cc index ec50f31583..23c894cfe2 100644 --- a/db/view/view_update_generator.cc +++ b/db/view/view_update_generator.cc @@ -90,10 +90,12 @@ public: } }; -view_update_generator::view_update_generator(replica::database& db, sharded& proxy) +view_update_generator::view_update_generator(replica::database& db, sharded& proxy, abort_source& as) : _db(db) , _proxy(proxy) - , _progress_tracker(std::make_unique()) { + , _progress_tracker(std::make_unique()) + , _early_abort_subscription(as.subscribe([this] () noexcept { do_abort(); })) +{ setup_metrics(); discover_staging_sstables(); _db.plug_view_update_generator(*this); @@ -213,6 +215,9 @@ future<> view_update_generator::start() { return make_ready_future<>(); } +void view_update_generator::do_abort() noexcept { +} + future<> view_update_generator::stop() { _db.unplug_view_update_generator(); _as.request_abort(); diff --git a/db/view/view_update_generator.hh b/db/view/view_update_generator.hh index 74591c9b87..7efaac5bfa 100644 --- a/db/view/view_update_generator.hh +++ b/db/view/view_update_generator.hh @@ -64,8 +64,10 @@ private: metrics::metric_groups _metrics; class progress_tracker; std::unique_ptr _progress_tracker; + optimized_optional _early_abort_subscription; + void do_abort() noexcept; public: - view_update_generator(replica::database& db, sharded& proxy); + view_update_generator(replica::database& db, sharded& proxy, abort_source& as); ~view_update_generator(); future<> start(); diff --git a/main.cc b/main.cc index 8e36bb4040..bb96f51f6c 100644 --- a/main.cc +++ b/main.cc @@ -1433,7 +1433,7 @@ To start the scylla server proper, simply invoke as: scylla server (or just scyl replica::distributed_loader::init_non_system_keyspaces(db, proxy, sys_ks).get(); supervisor::notify("starting view update generator"); - view_update_generator.start(std::ref(db), std::ref(proxy)).get(); + view_update_generator.start(std::ref(db), std::ref(proxy), std::ref(stop_signal.as_sharded_abort_source())).get(); supervisor::notify("starting commit log"); auto cl = db.local().commitlog(); diff --git a/test/lib/cql_test_env.cc b/test/lib/cql_test_env.cc index b7fea8adb9..fe96b6ab9b 100644 --- a/test/lib/cql_test_env.cc +++ b/test/lib/cql_test_env.cc @@ -781,7 +781,7 @@ private: _group0_registry.invoke_on_all(&service::raft_group_registry::drain_on_shutdown).get(); }); - _view_update_generator.start(std::ref(_db), std::ref(_proxy)).get(); + _view_update_generator.start(std::ref(_db), std::ref(_proxy), std::ref(abort_sources)).get(); _view_update_generator.invoke_on_all(&db::view::view_update_generator::start).get(); auto stop_view_update_generator = defer([this] { _view_update_generator.stop().get();