1
1
2
2
class Master < Concurrent ::Actor ::RestartingContext
3
3
def initialize
4
- # for listener to be child of master
4
+ # create listener a supervised child of master
5
5
@listener = Listener . spawn ( name : 'listener1' , supervise : true )
6
6
end
7
7
@@ -17,7 +17,7 @@ def on_message(msg)
17
17
end
18
18
end
19
19
20
- # TODO turn this into Behaviour and make it default part of RestartingContext
20
+ # TODO this should be a part of a behaviour, it ensures that children are restarted/paused etc. when theirs parents are
21
21
def on_event ( event )
22
22
event_name , _ = event
23
23
case event_name
@@ -48,25 +48,25 @@ def on_message(msg)
48
48
end
49
49
50
50
master = Master . spawn ( name : 'master' , supervise : true )
51
- # => #<Concurrent::Actor::Reference:0x7fd443366568 /master (Master)>
51
+ # => #<Concurrent::Actor::Reference:0x7fa595899fa8 /master (Master)>
52
52
listener = master . ask! ( :listener )
53
- # => #<Concurrent::Actor::Reference:0x7fd44335cf68 /master/listener1 (Listener)>
54
- listener . ask! ( :number ) # => 20
55
-
53
+ # => #<Concurrent::Actor::Reference:0x7fa5958909d0 /master/listener1 (Listener)>
54
+ listener . ask! ( :number ) # => 12
55
+ # crash the listener which is supervised by master, it's restarted automatically reporting a different number
56
56
listener . tell ( :crash )
57
- # => #<Concurrent::Actor::Reference:0x7fd44335cf68 /master/listener1 (Listener)>
58
- listener . ask! ( :number ) # => 41
57
+ # => #<Concurrent::Actor::Reference:0x7fa5958909d0 /master/listener1 (Listener)>
58
+ listener . ask! ( :number ) # => 65
59
59
60
60
master << :crash
61
- # => #<Concurrent::Actor::Reference:0x7fd443366568 /master (Master)>
61
+ # => #<Concurrent::Actor::Reference:0x7fa595899fa8 /master (Master)>
62
62
63
63
sleep 0.1 # => 0
64
64
65
- # ask for listener again, old one is terminated
65
+ # ask for listener again, old one is terminated with master and replaced with new one
66
66
listener . ask! ( :terminated? ) # => true
67
67
listener = master . ask! ( :listener )
68
- # => #<Concurrent::Actor::Reference:0x7fd4433357b0 /master/listener1 (Listener)>
69
- listener . ask! ( :number ) # => 12
68
+ # => #<Concurrent::Actor::Reference:0x7fa5970d5608 /master/listener1 (Listener)>
69
+ listener . ask! ( :number ) # => 77
70
70
71
71
master . ask! ( :terminate! ) # => [[true], true]
72
72
0 commit comments