Ejemplo n.º 1
0
 private void MemberUp(Member member)
 {
     if (!member.Address.Equals(_cluster.SelfAddress))
     {
         _clusterNodes = _clusterNodes.Add(member.Address);
         TakeOverResponsibility(member.Address);
         Unreachable.Remove(member.Address);
     }
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public ClusterHeartbeatSenderState HeartbeatRsp(UniqueAddress from)
 {
     if (ActiveReceivers.Contains(from))
     {
         FailureDetector.Heartbeat(from.Address);
         if (Unreachable.Contains(from))
         {
             //back from unreachable, ok to stop heartbeating to it
             if (!Ring.MyReceivers.Value.Contains(from))
             {
                 FailureDetector.Remove(from.Address);
             }
             return(Copy(unreachable: Unreachable.Remove(from)));
         }
         return(this);
     }
     return(this);
 }