Skip to content

Commit

Permalink
Actor can revive by ReachableMember event.
Browse files Browse the repository at this point in the history
  • Loading branch information
veblush committed Jul 1, 2016
1 parent 00c04cf commit 3480739
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions core/Akka.Cluster.Utility/ClusterActorDiscovery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public ClusterActorDiscovery(Cluster cluster)
_log = Context.GetLogger();

Receive<ClusterEvent.MemberUp>(m => Handle(m));
Receive<ClusterEvent.ReachableMember>(m => Handle(m));
Receive<ClusterEvent.UnreachableMember>(m => Handle(m));
Receive<ClusterActorDiscoveryMessage.RegisterCluster>(m => Handle(m));
Receive<ClusterActorDiscoveryMessage.UnregisterCluster>(m => Handle(m));
Expand All @@ -70,6 +71,7 @@ protected override void PreStart()
_cluster?.Subscribe(Self, new[]
{
typeof(ClusterEvent.MemberUp),
typeof(ClusterEvent.ReachableMember),
typeof(ClusterEvent.UnreachableMember)
});
}
Expand All @@ -80,17 +82,22 @@ protected override void PostStop()
}

private void Handle(ClusterEvent.MemberUp m)
{
SetOnline(m.Member);
}

private void SetOnline(Member member)
{
if (_cluster != null)
{
if (_cluster.SelfUniqueAddress == m.Member.UniqueAddress)
if (_cluster.SelfUniqueAddress == member.UniqueAddress)
{
var roles = string.Join(", ", _cluster.SelfRoles);
_log.Info($"Cluster.Up: {_cluster.SelfUniqueAddress} Role={roles}");
}
else
{
var remoteDiscoveryActor = Context.ActorSelection(m.Member.Address + "/user/" + _name);
var remoteDiscoveryActor = Context.ActorSelection(member.Address + "/user/" + _name);
remoteDiscoveryActor.Tell(
new ClusterActorDiscoveryMessage.RegisterCluster(
_cluster.SelfUniqueAddress,
Expand All @@ -100,6 +107,12 @@ private void Handle(ClusterEvent.MemberUp m)
}
}

private void Handle(ClusterEvent.ReachableMember m)
{
_log.Info($"Cluster.Rechable: {m.Member.Address} Role={string.Join(",", m.Member.Roles)}");
SetOnline(m.Member);
}

private void Handle(ClusterEvent.UnreachableMember m)
{
_log.Info($"Cluster.Unreachable: {m.Member.Address} Role={string.Join(",", m.Member.Roles)}");
Expand Down

0 comments on commit 3480739

Please sign in to comment.