Skip to content

Commit 989c9fe

Browse files
committed
actor: minor supervision example improvements
1 parent 01911e8 commit 989c9fe

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

doc/actor/supervision_tree.in.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
class Master < Concurrent::Actor::RestartingContext
33
def initialize
4-
# for listener to be child of master
4+
# create listener a supervised child of master
55
@listener = Listener.spawn(name: 'listener1', supervise: true)
66
end
77

@@ -17,7 +17,7 @@ def on_message(msg)
1717
end
1818
end
1919

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
2121
def on_event(event)
2222
event_name, _ = event
2323
case event_name
@@ -50,12 +50,15 @@ def on_message(msg)
5050
master = Master.spawn(name: 'master', supervise: true)
5151
listener = master.ask!(:listener)
5252
listener.ask!(:number)
53+
# crash the listener which is supervised by master, it's restarted automatically reporting a different number
54+
listener.tell(:crash)
55+
listener.ask!(:number)
5356

5457
master << :crash
5558

5659
sleep 0.1
5760

58-
# ask for listener again, old one is terminated
61+
# ask for listener again, old one is terminated with master and replaced with new one
5962
listener.ask!(:terminated?)
6063
listener = master.ask!(:listener)
6164
listener.ask!(:number)

doc/actor/supervision_tree.out.rb

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,26 @@ def on_message(msg)
4848
end
4949

5050
master = Master.spawn(name: 'master', supervise: true)
51-
# => #<Concurrent::Actor::Reference:0x7ff3aa0d1380 /master (Master)>
51+
# => #<Concurrent::Actor::Reference:0x7fd443366568 /master (Master)>
5252
listener = master.ask!(:listener)
53-
# => #<Concurrent::Actor::Reference:0x7ff3aa8776e8 /master/listener1 (Listener)>
54-
listener.ask!(:number) # => 73
53+
# => #<Concurrent::Actor::Reference:0x7fd44335cf68 /master/listener1 (Listener)>
54+
listener.ask!(:number) # => 20
55+
56+
listener.tell(:crash)
57+
# => #<Concurrent::Actor::Reference:0x7fd44335cf68 /master/listener1 (Listener)>
58+
listener.ask!(:number) # => 41
5559

5660
master << :crash
57-
# => #<Concurrent::Actor::Reference:0x7ff3aa0d1380 /master (Master)>
61+
# => #<Concurrent::Actor::Reference:0x7fd443366568 /master (Master)>
5862

59-
sleep 0.1 # => 1
63+
sleep 0.1 # => 0
6064

6165
# ask for listener again, old one is terminated
6266
listener.ask!(:terminated?) # => true
6367
listener = master.ask!(:listener)
64-
# => #<Concurrent::Actor::Reference:0x7ff3ab147110 /master/listener1 (Listener)>
65-
listener.ask!(:number) # => 48
68+
# => #<Concurrent::Actor::Reference:0x7fd4433357b0 /master/listener1 (Listener)>
69+
listener.ask!(:number) # => 12
6670

67-
master.ask!(:terminate!) # => [true, true]
71+
master.ask!(:terminate!) # => [[true], true]
6872

6973
sleep 0.1 # => 0

0 commit comments

Comments
 (0)