Skip to content

Commit 8b780c1

Browse files
authoredFeb 22, 2017
Merge pull request asynkron#62 from cpx86/supervisor-methods
Added supervision methods to ISupervisor
2 parents a04f841 + b7223e8 commit 8b780c1

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed
 

‎src/Proto.Actor/LocalContext.cs

+24
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,30 @@ public void EscalateFailure(PID who, Exception reason)
267267
Parent.SendSystemMessage(new Failure(who, reason, _restartStatistics));
268268
}
269269

270+
public void RestartChildren(params PID[] pids)
271+
{
272+
for (int i = 0; i < pids.Length; i++)
273+
{
274+
pids[i].SendSystemMessage(Restart.Instance);
275+
}
276+
}
277+
278+
public void StopChildren(params PID[] pids)
279+
{
280+
for (int i = 0; i < pids.Length; i++)
281+
{
282+
pids[i].SendSystemMessage(Stop.Instance);
283+
}
284+
}
285+
286+
public void ResumeChildren(params PID[] pids)
287+
{
288+
for (int i = 0; i < pids.Length; i++)
289+
{
290+
pids[i].SendSystemMessage(ResumeMailbox.Instance);
291+
}
292+
}
293+
270294
internal static Task DefaultReceive(IContext context)
271295
{
272296
var c = (Context)context;

‎src/Proto.Actor/Supervision.cs

+8-5
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ public interface ISupervisor
2222
{
2323
IReadOnlyCollection<PID> Children { get; }
2424
void EscalateFailure(PID who, Exception reason);
25+
void RestartChildren(params PID[] pids);
26+
void StopChildren(params PID[] pids);
27+
void ResumeChildren(params PID[] pids);
2528
}
2629

2730
public static class Supervision
2831
{
2932
public static ISupervisorStrategy DefaultStrategy { get; } =
30-
new OneForOneStrategy((who, reason) => SupervisorDirective.Restart,10, TimeSpan.FromSeconds(10));
33+
new OneForOneStrategy((who, reason) => SupervisorDirective.Restart, 10, TimeSpan.FromSeconds(10));
3134
}
3235

3336
public interface ISupervisorStrategy
@@ -83,25 +86,25 @@ public void HandleFailure(ISupervisor supervisor, PID child, RestartStatistics c
8386
{
8487
case SupervisorDirective.Resume:
8588
//resume the failing child
86-
child.SendSystemMessage(ResumeMailbox.Instance);
89+
supervisor.ResumeChildren(child);
8790
break;
8891
case SupervisorDirective.Restart:
8992
//restart the failing child
9093
if (crs.RequestRestartPermission(_maxNrOfRetries, _withinTimeSpan))
9194
{
9295
Console.WriteLine($"Restarting {child.ToShortString()} Reason {reason}");
93-
child.SendSystemMessage(Restart.Instance);
96+
supervisor.RestartChildren(child);
9497
}
9598
else
9699
{
97100
Console.WriteLine($"Stopping {child.ToShortString()} Reason { reason}");
98-
child.Stop();
101+
supervisor.StopChildren(child);
99102
}
100103
break;
101104
case SupervisorDirective.Stop:
102105
//stop the failing child
103106
Console.WriteLine($"Stopping {child.ToShortString()} Reason {reason}");
104-
child.Stop();
107+
supervisor.StopChildren(child);
105108
break;
106109
case SupervisorDirective.Escalate:
107110
supervisor.EscalateFailure(child, reason);

0 commit comments

Comments
 (0)