/// <summary> /// TBD /// </summary> /// <param name="message">TBD</param> protected override void OnReceive(object message) { switch (message) { case ClusterEvent.CurrentClusterState state: _clusterNodes = state.Members.Select(m => m.Address).Where(a => a != _cluster.SelfAddress).ToImmutableHashSet(); foreach (var node in _clusterNodes) { TakeOverResponsibility(node); } Unreachable.ExceptWith(_clusterNodes); return; case ClusterEvent.MemberUp up: MemberUp(up.Member); return; case ClusterEvent.MemberWeaklyUp weaklyUp: MemberUp(weaklyUp.Member); return; case ClusterEvent.MemberRemoved removed: MemberRemoved(removed.Member, removed.PreviousStatus); return; case ClusterEvent.IMemberEvent _: return; // not interesting } base.OnReceive(message); }
protected override void OnReceive(object message) { var watchRemote = message as WatchRemote; if (watchRemote != null && _clusterNodes.Contains(watchRemote.Watchee.Path.Address)) { return; // cluster managed node, don't propagate to super; } var state = message as ClusterEvent.CurrentClusterState; if (state != null) { _clusterNodes = state.Members.Select(m => m.Address).Where(a => a != _cluster.SelfAddress).ToImmutableHashSet(); foreach (var node in _clusterNodes) { TakeOverResponsibility(node); } Unreachable.ExceptWith(_clusterNodes); return; } var memberUp = message as ClusterEvent.MemberUp; if (memberUp != null) { if (memberUp.Member.Address != _cluster.SelfAddress) { _clusterNodes = _clusterNodes.Add(memberUp.Member.Address); TakeOverResponsibility(memberUp.Member.Address); Unreachable.Remove(memberUp.Member.Address); } return; } var memberRemoved = message as ClusterEvent.MemberRemoved; if (memberRemoved != null) { if (memberRemoved.Member.Address != _cluster.SelfAddress) { _clusterNodes = _clusterNodes.Remove(memberRemoved.Member.Address); if (memberRemoved.PreviousStatus == MemberStatus.Down) { Quarantine(memberRemoved.Member.Address, memberRemoved.Member.UniqueAddress.Uid); } PublishAddressTerminated(memberRemoved.Member.Address); } return; } if (message is ClusterEvent.IMemberEvent) { return; // not interesting } base.OnReceive(message); }
/// <summary> /// TBD /// </summary> /// <param name="message">TBD</param> protected override void OnReceive(object message) { var state = message as ClusterEvent.CurrentClusterState; if (state != null) { _clusterNodes = state.Members.Select(m => m.Address).Where(a => a != _cluster.SelfAddress).ToImmutableHashSet(); foreach (var node in _clusterNodes) { TakeOverResponsibility(node); } Unreachable.ExceptWith(_clusterNodes); return; } var memberUp = message as ClusterEvent.MemberUp; if (memberUp != null) { MemberUp(memberUp.Member); return; } var memberRemoved = message as ClusterEvent.MemberRemoved; if (memberRemoved != null) { MemberRemoved(memberRemoved.Member, memberRemoved.PreviousStatus); return; } if (message is ClusterEvent.IMemberEvent) { return; // not interesting } base.OnReceive(message); }