Ejemplo n.º 1
0
        /// <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);
        }
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
        /// <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);
        }