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 <xemul@scylladb.com>
This commit is contained in:
Pavel Emelyanov
2023-09-18 20:41:32 +03:00
parent 7f03ef07c8
commit e34220ebb7
4 changed files with 12 additions and 5 deletions

View File

@@ -90,10 +90,12 @@ public:
}
};
view_update_generator::view_update_generator(replica::database& db, sharded<service::storage_proxy>& proxy)
view_update_generator::view_update_generator(replica::database& db, sharded<service::storage_proxy>& proxy, abort_source& as)
: _db(db)
, _proxy(proxy)
, _progress_tracker(std::make_unique<progress_tracker>()) {
, _progress_tracker(std::make_unique<progress_tracker>())
, _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();

View File

@@ -64,8 +64,10 @@ private:
metrics::metric_groups _metrics;
class progress_tracker;
std::unique_ptr<progress_tracker> _progress_tracker;
optimized_optional<abort_source::subscription> _early_abort_subscription;
void do_abort() noexcept;
public:
view_update_generator(replica::database& db, sharded<service::storage_proxy>& proxy);
view_update_generator(replica::database& db, sharded<service::storage_proxy>& proxy, abort_source& as);
~view_update_generator();
future<> start();

View File

@@ -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();

View File

@@ -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();