From 9aa8eaddeda8aaf290efeb603aeeb29102fb15c9 Mon Sep 17 00:00:00 2001 From: Leon Hartley Date: Sun, 4 Feb 2024 13:14:33 +0000 Subject: [PATCH] expect MemberUp before actioning other cluster events --- .../remote/cluster/singleton/manager/mod.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/coerce/src/remote/cluster/singleton/manager/mod.rs b/coerce/src/remote/cluster/singleton/manager/mod.rs index a2a89bc..a4227a3 100644 --- a/coerce/src/remote/cluster/singleton/manager/mod.rs +++ b/coerce/src/remote/cluster/singleton/manager/mod.rs @@ -34,6 +34,7 @@ pub struct Manager { selector: NodeSelector, sys: RemoteActorSystem, proxy: LocalActorRef>, + cluster_up: bool, } impl Manager { @@ -57,6 +58,7 @@ impl Manager { selector, sys, proxy, + cluster_up: false, } } } @@ -263,6 +265,8 @@ impl Handler> for Manager { leader_id: leader, nodes, }) => { + self.cluster_up = true; + for node in nodes { if node.id == self.node_id || !self.selector.includes(node.as_ref()) { continue; @@ -285,6 +289,10 @@ impl Handler> for Manager { } ClusterEvent::LeaderChanged(leader) => { + if !self.cluster_up { + return; + } + self.on_leader_changed(*leader, ctx).await; } @@ -306,11 +314,13 @@ impl Handler> for Manager { ClusterEvent::NodeRemoved(node) => { self.managers.remove(&node.id); - if let State::Starting { acknowledged_nodes } = &mut self.state { - acknowledged_nodes.remove(&node.id); + if self.cluster_up { + if let State::Starting { acknowledged_nodes } = &mut self.state { + acknowledged_nodes.remove(&node.id); - if acknowledged_nodes.len() == self.managers.len() { - self.on_all_managers_acknowledged(ctx).await; + if acknowledged_nodes.len() == self.managers.len() { + self.on_all_managers_acknowledged(ctx).await; + } } } }