mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-03 13:37:04 +00:00
gms: gossiper: coroutinize do_before_change_notifications
Signed-off-by: Pavel Solodovnikov <pa.solodovnikov@scylladb.com>
This commit is contained in:
@@ -1711,11 +1711,10 @@ void gossiper::apply_new_states(inet_address addr, endpoint_state& local_state,
|
||||
}
|
||||
}
|
||||
|
||||
// Runs inside seastar::async context
|
||||
void gossiper::do_before_change_notifications(inet_address addr, const endpoint_state& ep_state, const application_state& ap_state, const versioned_value& new_value) {
|
||||
_subscribers.for_each([addr, ep_state, ap_state, new_value] (shared_ptr<i_endpoint_state_change_subscriber> subscriber) {
|
||||
future<> gossiper::do_before_change_notifications(inet_address addr, const endpoint_state& ep_state, const application_state& ap_state, const versioned_value& new_value) {
|
||||
co_await _subscribers.for_each([addr, ep_state, ap_state, new_value] (shared_ptr<i_endpoint_state_change_subscriber> subscriber) {
|
||||
return subscriber->before_change(addr, ep_state, ap_state, new_value);
|
||||
}).get();
|
||||
});
|
||||
}
|
||||
|
||||
// Runs inside seastar::async context
|
||||
@@ -2054,7 +2053,7 @@ future<> gossiper::add_local_application_state(std::list<std::pair<application_s
|
||||
auto& value = p.second;
|
||||
// Fire "before change" notifications:
|
||||
// Not explicit, but apparently we allow this to defer (inside out implicit seastar::async)
|
||||
gossiper.do_before_change_notifications(ep_addr, ep_state_before, state, value);
|
||||
gossiper.do_before_change_notifications(ep_addr, ep_state_before, state, value).get();
|
||||
}
|
||||
|
||||
es = gossiper.get_endpoint_state_for_endpoint_ptr(ep_addr);
|
||||
|
||||
@@ -430,7 +430,7 @@ private:
|
||||
void apply_new_states(inet_address addr, endpoint_state& local_state, const endpoint_state& remote_state);
|
||||
|
||||
// notify that a local application state is going to change (doesn't get triggered for remote changes)
|
||||
void do_before_change_notifications(inet_address addr, const endpoint_state& ep_state, const application_state& ap_state, const versioned_value& new_value);
|
||||
future<> do_before_change_notifications(inet_address addr, const endpoint_state& ep_state, const application_state& ap_state, const versioned_value& new_value);
|
||||
|
||||
// notify that an application state has changed
|
||||
void do_on_change_notifications(inet_address addr, const application_state& state, const versioned_value& value);
|
||||
|
||||
Reference in New Issue
Block a user