celluloid 0.18.0.pre → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +258 -39
  3. data/CONDUCT.md +13 -0
  4. data/CONTRIBUTING.md +39 -0
  5. data/README.md +54 -165
  6. data/REFACTOR.md +1 -0
  7. data/architecture.md +120 -0
  8. data/examples/basic_usage.rb +1 -1
  9. data/examples/configurations.rb +78 -0
  10. data/examples/futures.rb +1 -1
  11. data/examples/ring.rb +5 -4
  12. data/examples/simple_pmap.rb +1 -1
  13. data/examples/stack.rb +2 -2
  14. data/examples/supervisors_and_registry.rb +82 -0
  15. data/examples/timers.rb +2 -2
  16. data/lib/celluloid.rb +72 -47
  17. data/lib/celluloid/actor.rb +27 -17
  18. data/lib/celluloid/actor/system.rb +13 -29
  19. data/lib/celluloid/autostart.rb +5 -5
  20. data/lib/celluloid/call/async.rb +2 -0
  21. data/lib/celluloid/call/sync.rb +10 -3
  22. data/lib/celluloid/calls.rb +5 -12
  23. data/lib/celluloid/cell.rb +5 -9
  24. data/lib/celluloid/condition.rb +3 -3
  25. data/lib/celluloid/core_ext.rb +0 -2
  26. data/lib/celluloid/debug.rb +3 -0
  27. data/lib/celluloid/exceptions.rb +2 -2
  28. data/lib/celluloid/future.rb +7 -9
  29. data/lib/celluloid/group.rb +12 -8
  30. data/lib/celluloid/group/pool.rb +1 -3
  31. data/lib/celluloid/group/spawner.rb +2 -6
  32. data/lib/celluloid/internals/call_chain.rb +15 -0
  33. data/lib/celluloid/internals/cpu_counter.rb +62 -0
  34. data/lib/celluloid/internals/handlers.rb +42 -0
  35. data/lib/celluloid/internals/links.rb +38 -0
  36. data/lib/celluloid/internals/logger.rb +104 -0
  37. data/lib/celluloid/internals/method.rb +34 -0
  38. data/lib/celluloid/internals/properties.rb +32 -0
  39. data/lib/celluloid/internals/receivers.rb +64 -0
  40. data/lib/celluloid/internals/registry.rb +102 -0
  41. data/lib/celluloid/internals/responses.rb +46 -0
  42. data/lib/celluloid/internals/signals.rb +24 -0
  43. data/lib/celluloid/internals/stack.rb +74 -0
  44. data/lib/celluloid/internals/stack/dump.rb +12 -0
  45. data/lib/celluloid/internals/stack/states.rb +72 -0
  46. data/lib/celluloid/internals/stack/summary.rb +12 -0
  47. data/lib/celluloid/internals/task_set.rb +51 -0
  48. data/lib/celluloid/internals/thread_handle.rb +52 -0
  49. data/lib/celluloid/internals/uuid.rb +40 -0
  50. data/lib/celluloid/logging/incident.rb +21 -0
  51. data/lib/celluloid/logging/incident_logger.rb +147 -0
  52. data/lib/celluloid/logging/incident_reporter.rb +49 -0
  53. data/lib/celluloid/logging/log_event.rb +20 -0
  54. data/lib/celluloid/logging/ring_buffer.rb +64 -0
  55. data/lib/celluloid/mailbox.rb +22 -9
  56. data/lib/celluloid/mailbox/evented.rb +13 -5
  57. data/lib/celluloid/notifications.rb +95 -0
  58. data/lib/celluloid/pool.rb +6 -0
  59. data/lib/celluloid/probe.rb +81 -0
  60. data/lib/celluloid/proxy/abstract.rb +9 -9
  61. data/lib/celluloid/proxy/async.rb +1 -1
  62. data/lib/celluloid/proxy/block.rb +2 -2
  63. data/lib/celluloid/proxy/cell.rb +1 -1
  64. data/lib/celluloid/proxy/future.rb +2 -4
  65. data/lib/celluloid/proxy/sync.rb +1 -3
  66. data/lib/celluloid/rspec.rb +22 -33
  67. data/lib/celluloid/supervision.rb +17 -0
  68. data/lib/celluloid/supervision/configuration.rb +169 -0
  69. data/lib/celluloid/supervision/configuration/injections.rb +8 -0
  70. data/lib/celluloid/supervision/configuration/instance.rb +113 -0
  71. data/lib/celluloid/supervision/constants.rb +123 -0
  72. data/lib/celluloid/supervision/container.rb +144 -0
  73. data/lib/celluloid/supervision/container/behavior.rb +89 -0
  74. data/lib/celluloid/supervision/container/behavior/pool.rb +71 -0
  75. data/lib/celluloid/supervision/container/behavior/tree.rb +23 -0
  76. data/lib/celluloid/supervision/container/injections.rb +8 -0
  77. data/lib/celluloid/supervision/container/instance.rb +116 -0
  78. data/lib/celluloid/supervision/container/pool.rb +210 -0
  79. data/lib/celluloid/supervision/service.rb +27 -0
  80. data/lib/celluloid/supervision/supervise.rb +34 -0
  81. data/lib/celluloid/supervision/validation.rb +40 -0
  82. data/lib/celluloid/supervision/version.rb +5 -0
  83. data/lib/celluloid/system_events.rb +11 -6
  84. data/lib/celluloid/task.rb +25 -12
  85. data/lib/celluloid/task/fibered.rb +2 -0
  86. data/lib/celluloid/task/threaded.rb +3 -3
  87. data/lib/celluloid/test.rb +5 -2
  88. data/lib/celluloid/thread.rb +0 -2
  89. data/lib/celluloid/version.rb +1 -1
  90. data/spec/celluloid/block_spec.rb +29 -32
  91. data/spec/celluloid/calls_spec.rb +5 -15
  92. data/spec/celluloid/future_spec.rb +2 -2
  93. data/spec/celluloid/internals/cpu_counter_spec.rb +129 -0
  94. data/spec/celluloid/internals/links_spec.rb +43 -0
  95. data/spec/celluloid/internals/properties_spec.rb +40 -0
  96. data/spec/celluloid/internals/registry_spec.rb +62 -0
  97. data/spec/celluloid/internals/stack/dump_spec.rb +4 -0
  98. data/spec/celluloid/internals/stack/summary_spec.rb +4 -0
  99. data/spec/celluloid/internals/thread_handle_spec.rb +60 -0
  100. data/spec/celluloid/internals/uuid_spec.rb +9 -0
  101. data/spec/celluloid/logging/ring_buffer_spec.rb +36 -0
  102. data/spec/celluloid/mailbox/evented_spec.rb +11 -22
  103. data/spec/celluloid/misc/leak_spec.rb +3 -4
  104. data/spec/celluloid/notifications_spec.rb +140 -0
  105. data/spec/celluloid/probe_spec.rb +102 -0
  106. data/spec/celluloid/proxy_spec.rb +30 -30
  107. data/spec/celluloid/supervision/behavior_spec.rb +74 -0
  108. data/spec/celluloid/supervision/configuration_spec.rb +181 -0
  109. data/spec/celluloid/supervision/container_spec.rb +72 -0
  110. data/spec/celluloid/supervision/instance_spec.rb +13 -0
  111. data/spec/celluloid/supervision/root_spec.rb +28 -0
  112. data/spec/celluloid/supervision/supervisor_spec.rb +93 -0
  113. data/spec/celluloid/task/fibered_spec.rb +1 -3
  114. data/spec/celluloid/task/threaded_spec.rb +1 -3
  115. data/spec/shared/actor_examples.rb +58 -33
  116. data/spec/shared/group_examples.rb +2 -2
  117. data/spec/shared/mailbox_examples.rb +1 -1
  118. data/spec/shared/stack_examples.rb +87 -0
  119. data/spec/shared/task_examples.rb +2 -3
  120. data/spec/spec_helper.rb +2 -4
  121. data/spec/support/configure_rspec.rb +2 -3
  122. data/spec/support/coverage.rb +2 -4
  123. data/spec/support/crash_checking.rb +2 -2
  124. data/spec/support/examples/actor_class.rb +3 -8
  125. data/spec/support/examples/call_class.rb +2 -2
  126. data/spec/support/examples/container_class.rb +35 -0
  127. data/spec/support/examples/evented_mailbox_class.rb +1 -2
  128. data/spec/support/examples/stack_classes.rb +58 -0
  129. data/spec/support/examples/stack_methods.rb +23 -0
  130. data/spec/support/examples/subordinate_class.rb +19 -0
  131. data/spec/support/logging.rb +2 -34
  132. data/spec/support/loose_threads.rb +3 -16
  133. data/spec/support/reset_class_variables.rb +5 -1
  134. data/spec/support/stubbing.rb +1 -1
  135. metadata +91 -323
  136. data/culture/CONDUCT.md +0 -38
  137. data/culture/GSoC/1010-why_we_will_participate.md +0 -17
  138. data/culture/GSoC/1020-how_mentors_stay_engaged.md +0 -7
  139. data/culture/GSoC/1030-keeping_students_on_schedule.md +0 -9
  140. data/culture/GSoC/1040-getting_students_involved.md +0 -5
  141. data/culture/GSoC/1050-student_involvement_after.md +0 -5
  142. data/culture/GSoC/README.md +0 -16
  143. data/culture/Gemfile +0 -9
  144. data/culture/LICENSE.txt +0 -22
  145. data/culture/README.md +0 -22
  146. data/culture/Rakefile +0 -5
  147. data/culture/SYNC.md +0 -70
  148. data/culture/celluloid-culture.gemspec +0 -18
  149. data/culture/gems/README.md +0 -39
  150. data/culture/gems/dependencies.yml +0 -93
  151. data/culture/gems/loader.rb +0 -101
  152. data/culture/rubocop/README.md +0 -38
  153. data/culture/rubocop/lint.yml +0 -8
  154. data/culture/rubocop/metrics.yml +0 -15
  155. data/culture/rubocop/perf.yml +0 -0
  156. data/culture/rubocop/rubocop.yml +0 -5
  157. data/culture/rubocop/style.yml +0 -61
  158. data/culture/spec/gems_spec.rb +0 -2
  159. data/culture/spec/spec_helper.rb +0 -0
  160. data/culture/spec/sync_spec.rb +0 -2
  161. data/culture/sync.rb +0 -56
  162. data/culture/tasks/rspec.rake +0 -5
  163. data/culture/tasks/rubocop.rake +0 -2
  164. data/lib/celluloid/actor/manager.rb +0 -7
  165. data/lib/celluloid/backported.rb +0 -2
  166. data/lib/celluloid/current.rb +0 -2
  167. data/lib/celluloid/deprecate.rb +0 -34
  168. data/lib/celluloid/fiber.rb +0 -32
  169. data/lib/celluloid/managed.rb +0 -3
  170. data/lib/celluloid/notices.rb +0 -15
  171. data/spec/deprecate/actor_system_spec.rb +0 -72
  172. data/spec/deprecate/block_spec.rb +0 -52
  173. data/spec/deprecate/calls_spec.rb +0 -39
  174. data/spec/deprecate/evented_mailbox_spec.rb +0 -34
  175. data/spec/deprecate/future_spec.rb +0 -32
  176. data/spec/deprecate/internal_pool_spec.rb +0 -4
  177. data/spec/support/env.rb +0 -21
data/examples/futures.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.push File.expand_path("../../lib", __FILE__)
3
+ $LOAD_PATH.push File.expand_path("../lib", __dir__)
4
4
  require "celluloid/autostart"
5
5
  require "digest/sha2"
6
6
 
data/examples/ring.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.push File.expand_path("../../lib", __FILE__)
3
+ $LOAD_PATH.push File.expand_path("../lib", __dir__)
4
4
  require "celluloid/autostart"
5
5
 
6
6
  class Ring
@@ -28,7 +28,7 @@ class Ring
28
28
 
29
29
  # Go around the ring the given number of times
30
30
  def run(n)
31
- fail ArgumentError, "I can't go around a negative number of times" if n < 0
31
+ raise ArgumentError, "I can't go around a negative number of times" if n < 0
32
32
 
33
33
  async.around n
34
34
  wait :done
@@ -48,14 +48,15 @@ if $PROGRAM_NAME == __FILE__
48
48
  require "benchmark"
49
49
  SIZE = 512
50
50
  TIMES = 10
51
+ ring = nil
51
52
 
52
53
  puts "*** Creating a #{SIZE} node ring..."
53
54
  puts Benchmark.measure {
54
- $ring = Ring.new(SIZE)
55
+ ring = Ring.new(SIZE)
55
56
  }
56
57
 
57
58
  puts "*** Sending a message around #{TIMES} times"
58
59
  puts Benchmark.measure {
59
- $ring.run(TIMES)
60
+ ring.run(TIMES)
60
61
  }
61
62
  end
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.push File.expand_path("../../lib", __FILE__)
3
+ $LOAD_PATH.push File.expand_path("../lib", __dir__)
4
4
  require "celluloid/autostart"
5
5
 
6
6
  module Enumerable
data/examples/stack.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.push File.expand_path("../../lib", __FILE__)
3
+ $LOAD_PATH.push File.expand_path("../lib", __dir__)
4
4
  require "celluloid/autostart"
5
5
 
6
6
  # This example builds on basic_usage.rb to show two things about #async: the
@@ -17,7 +17,7 @@ class Stack
17
17
  def push(x)
18
18
  @ary.push x
19
19
  end
20
- alias_method :<<, :push
20
+ alias << push
21
21
 
22
22
  def pop
23
23
  @ary.pop
@@ -0,0 +1,82 @@
1
+ require "celluloid/autostart"
2
+
3
+ class MyActor
4
+ include Celluloid
5
+ attr_reader :state
6
+
7
+ def initialize
8
+ @state = :clean
9
+ end
10
+
11
+ def broken_method
12
+ @state = :dirty
13
+ oh_crap_im_totally_broken
14
+ end
15
+ end
16
+
17
+ #
18
+ # Using the Supervisor API directly
19
+ #
20
+
21
+ puts "*** Demonstrating using the Supervisor API directly"
22
+
23
+ # Calling supervise directly returns the supervisor
24
+ supervisor = MyActor.supervise
25
+
26
+ # We can get to the current version of an actor by calling
27
+ # Celluloid::Supervisor#actors. This prints ':clean'
28
+ puts "We should be in a clean state now: #{supervisor.actors.first.state}"
29
+ puts "Brace yourself for a crash message..."
30
+
31
+ # If we call a method that crashes an actor, it will print out a debug message,
32
+ # then restart an actor in a clean state
33
+ begin
34
+ supervisor.actors.first.broken_method
35
+ rescue NameError
36
+ puts "Uhoh, we crashed the actor..."
37
+ end
38
+
39
+ puts "The supervisor should automatically restart the actor"
40
+
41
+ # By now we'll be back in a :clean state!
42
+ begin
43
+ puts "We should now be in a clean state again: #{supervisor.actors.first.state}"
44
+ rescue Celluloid::DeadActorError
45
+ # Perhaps we got ahold of the actor before the supervisor restarted it
46
+ retry
47
+ end
48
+
49
+ #
50
+ # Using the Actor Registry
51
+ # This is the preferred approach and will make using DCell easier
52
+ #
53
+
54
+ puts "*** Demonstrating using the actor registry"
55
+
56
+ # We can give our actor a name and thus avoid interacting with the supervisor
57
+ MyActor.supervise as: :my_actor
58
+
59
+ # Same as above, just getting the actor from a different place
60
+ puts "We should be in a clean state now: #{Celluloid::Actor[:my_actor].state}"
61
+ puts "Brace yourself for a crash message..."
62
+
63
+ # If we call a method that crashes an actor, it will print out a debug message,
64
+ # then restart an actor in a clean state
65
+ begin
66
+ Celluloid::Actor[:my_actor].broken_method
67
+ rescue NameError
68
+ puts "Uhoh, we crashed the actor..."
69
+ end
70
+
71
+ puts "The supervisor should automatically restart the actor"
72
+
73
+ # By now we'll be back in a :clean state!
74
+ begin
75
+ puts "We should now be in a clean state again: #{Celluloid::Actor[:my_actor].state}"
76
+ rescue Celluloid::DeadActorError
77
+ # Perhaps we got ahold of the actor before the supervisor restarted it
78
+ # Don't want to catch Celluloid::DeadActorError all over the place? If this
79
+ # code were in a supervised Celluloid::Actor itself, the supervisor would
80
+ # catch Celluloid::DeadActorError and automatically restart this actor
81
+ retry
82
+ end
data/examples/timers.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH.push File.expand_path("../../lib", __FILE__)
4
- require "celluloid/current"
3
+ $LOAD_PATH.push File.expand_path("../lib", __dir__)
4
+ require "celluloid"
5
5
 
6
6
  class TimerExample
7
7
  include Celluloid
data/lib/celluloid.rb CHANGED
@@ -1,17 +1,17 @@
1
+ # TODO: eliminate use of global variables
2
+ require "English"
3
+
1
4
  require "logger"
2
- require "thread"
3
- require "timeout"
4
5
  require "set"
6
+ require "timeout"
5
7
 
8
+ # !!! DO NOT INTRODUCE ADDITIONAL GLOBAL VARIABLES !!!
9
+ # rubocop:disable Style/GlobalVars
6
10
  $CELLULOID_DEBUG = false
7
- $CELLULOID_MANAGED ||= false
11
+ $CELLULOID_MONITORING = false
12
+ # rubocop:enable Style/GlobalVars
8
13
 
9
14
  require "celluloid/version"
10
- require "celluloid/notices"
11
-
12
- $CELLULOID_BACKPORTED = false if defined?(CELLULOID_FUTURE) && CELLULOID_FUTURE
13
- $CELLULOID_BACKPORTED = (ENV["CELLULOID_BACKPORTED"] != "false") unless defined?($CELLULOID_BACKPORTED)
14
- Celluloid::Notices.backported if $CELLULOID_BACKPORTED
15
15
 
16
16
  module Celluloid
17
17
  # Expose all instance methods as singleton methods
@@ -21,7 +21,7 @@ module Celluloid
21
21
  LINKING_TIMEOUT = 5
22
22
 
23
23
  # Warning message added to Celluloid objects accessed outside their actors
24
- BARE_OBJECT_WARNING_MESSAGE = "WARNING: BARE CELLULOID OBJECT "
24
+ BARE_OBJECT_WARNING_MESSAGE = "WARNING: BARE CELLULOID OBJECT ".freeze
25
25
 
26
26
  class << self
27
27
  attr_writer :actor_system # Default Actor System
@@ -33,9 +33,11 @@ module Celluloid
33
33
 
34
34
  def actor_system
35
35
  if Thread.current.celluloid?
36
- Thread.current[:celluloid_actor_system] || fail(Error, "actor system not running")
36
+ Thread.current[:celluloid_actor_system] || raise(Error, "actor system not running")
37
37
  else
38
- Thread.current[:celluloid_actor_system] || @actor_system || fail(Error, "Celluloid is not yet started; use Celluloid.boot")
38
+ Thread.current[:celluloid_actor_system] ||
39
+ @actor_system ||
40
+ raise(Error, "Celluloid is not yet started; use Celluloid.boot")
39
41
  end
40
42
  end
41
43
 
@@ -54,15 +56,23 @@ module Celluloid
54
56
  klass.property :exclusive_actor, default: false
55
57
  klass.property :exclusive_methods, multi: true
56
58
  klass.property :execute_block_on_receiver,
57
- default: [:after, :every, :receive],
59
+ default: %i[after every receive],
58
60
  multi: true
59
61
 
60
62
  klass.property :finalizer
61
63
  klass.property :exit_handler_name
62
64
 
63
65
  singleton = class << klass; self; end
64
- singleton.send(:remove_method, :trap_exit) rescue nil
65
- singleton.send(:remove_method, :exclusive) rescue nil
66
+ begin
67
+ singleton.send(:remove_method, :trap_exit)
68
+ rescue
69
+ nil
70
+ end
71
+ begin
72
+ singleton.send(:remove_method, :exclusive)
73
+ rescue
74
+ nil
75
+ end
66
76
 
67
77
  singleton.send(:define_method, :trap_exit) do |*args|
68
78
  exit_handler_name(*args)
@@ -96,20 +106,20 @@ module Celluloid
96
106
  def cores
97
107
  Internals::CPUCounter.cores
98
108
  end
99
- alias_method :cpus, :cores
100
- alias_method :ncpus, :cores
109
+ alias cpus cores
110
+ alias ncpus cores
101
111
 
102
112
  # Perform a stack dump of all actors to the given output object
103
113
  def stack_dump(output = STDERR)
104
114
  actor_system.stack_dump.print(output)
105
115
  end
106
- alias_method :dump, :stack_dump
116
+ alias dump stack_dump
107
117
 
108
118
  # Perform a stack summary of all actors to the given output object
109
119
  def stack_summary(output = STDERR)
110
120
  actor_system.stack_summary.print(output)
111
121
  end
112
- alias_method :summarize, :stack_summary
122
+ alias summarize stack_summary
113
123
 
114
124
  def public_registry
115
125
  actor_system.public_registry
@@ -157,14 +167,16 @@ module Celluloid
157
167
 
158
168
  def running?
159
169
  actor_system && actor_system.running?
170
+ rescue Error
171
+ false
160
172
  end
161
173
 
162
- #de TODO Anticipate outside process finalizer that would by-pass this.
174
+ # de TODO Anticipate outside process finalizer that would by-pass this.
163
175
  def register_shutdown
164
176
  return if defined?(@shutdown_registered) && @shutdown_registered
165
177
  # Terminate all actors at exit, unless the exit is abnormal.
166
178
  at_exit do
167
- Celluloid.shutdown unless $!
179
+ Celluloid.shutdown unless $ERROR_INFO
168
180
  end
169
181
  @shutdown_registered = true
170
182
  end
@@ -172,6 +184,7 @@ module Celluloid
172
184
  # Shut down all running actors
173
185
  def shutdown
174
186
  actor_system.shutdown
187
+ @actor_system = nil
175
188
  end
176
189
 
177
190
  def version
@@ -186,18 +199,18 @@ module Celluloid
186
199
  proxy._send_(:initialize, *args, &block)
187
200
  proxy
188
201
  end
189
- alias_method :spawn, :new
202
+ alias spawn new
190
203
 
191
204
  # Create a new actor and link to the current one
192
205
  def new_link(*args, &block)
193
- fail NotActorError, "can't link outside actor context" unless Celluloid.actor?
206
+ raise NotActorError, "can't link outside actor context" unless Celluloid.actor?
194
207
 
195
208
  proxy = Cell.new(allocate, behavior_options, actor_options).proxy
196
209
  Actor.link(proxy)
197
210
  proxy._send_(:initialize, *args, &block)
198
211
  proxy
199
212
  end
200
- alias_method :spawn_link, :new_link
213
+ alias spawn_link new_link
201
214
 
202
215
  # Run an actor in the foreground
203
216
  def run(*args, &block)
@@ -215,7 +228,7 @@ module Celluloid
215
228
  mailbox_class: mailbox_class,
216
229
  mailbox_size: mailbox_size,
217
230
  task_class: task_class,
218
- exclusive: exclusive_actor,
231
+ exclusive: exclusive_actor
219
232
  }
220
233
  end
221
234
 
@@ -225,7 +238,7 @@ module Celluloid
225
238
  exclusive_methods: exclusive_methods,
226
239
  exit_handler_name: exit_handler_name,
227
240
  finalizer: finalizer,
228
- receiver_block_executions: execute_block_on_receiver,
241
+ receiver_block_executions: execute_block_on_receiver
229
242
  }
230
243
  end
231
244
 
@@ -253,7 +266,7 @@ module Celluloid
253
266
  def bare_object
254
267
  self
255
268
  end
256
- alias_method :wrapped_object, :bare_object
269
+ alias wrapped_object bare_object
257
270
 
258
271
  # Are we being invoked in a different thread from our owner?
259
272
  def leaked?
@@ -269,18 +282,18 @@ module Celluloid
269
282
  def registered_name
270
283
  Actor.registered_name
271
284
  end
272
- alias_method :name, :registered_name
285
+ alias name registered_name
273
286
 
274
287
  def inspect
275
288
  return "..." if Celluloid.detect_recursion
276
289
 
277
290
  str = "#<"
278
291
 
279
- if leaked?
280
- str << Celluloid::BARE_OBJECT_WARNING_MESSAGE
281
- else
282
- str << "Celluloid::Proxy::Cell"
283
- end
292
+ str << if leaked?
293
+ Celluloid::BARE_OBJECT_WARNING_MESSAGE
294
+ else
295
+ "Celluloid::Proxy::Cell"
296
+ end
284
297
 
285
298
  str << "(#{self.class}:0x#{object_id.to_s(16)})"
286
299
  str << " " unless instance_variables.empty?
@@ -308,9 +321,10 @@ module Celluloid
308
321
  cause = case cause
309
322
  when String then RuntimeError.new(cause)
310
323
  when Exception then cause
311
- else fail TypeError, "Exception object/String expected, but #{cause.class} received"
312
- end
313
- fail AbortError.new(cause)
324
+ else raise TypeError, "Exception object/String expected, but #{cause.class} received"
325
+ end
326
+
327
+ raise AbortError, cause
314
328
  end
315
329
 
316
330
  # Terminate this actor
@@ -447,14 +461,13 @@ module Celluloid
447
461
  end
448
462
  end
449
463
 
450
- if defined?(JRUBY_VERSION) && JRUBY_VERSION == "1.7.3"
451
- fail "Celluloid is broken on JRuby 1.7.3. Please upgrade to 1.7.4+"
452
- end
453
-
454
464
  require "celluloid/exceptions"
455
465
 
456
466
  Celluloid.logger = Logger.new(STDERR).tap do |logger|
467
+ # !!! DO NOT INTRODUCE ADDITIONAL GLOBAL VARIABLES !!!
468
+ # rubocop:disable Style/GlobalVars
457
469
  logger.level = Logger::INFO unless $CELLULOID_DEBUG
470
+ # rubocop:enable Style/GlobalVars
458
471
  end
459
472
 
460
473
  Celluloid.shutdown_timeout = 10
@@ -473,8 +486,6 @@ require "celluloid/proxies"
473
486
  require "celluloid/mailbox"
474
487
  require "celluloid/mailbox/evented"
475
488
 
476
- require "celluloid/essentials"
477
-
478
489
  require "celluloid/group"
479
490
  require "celluloid/group/spawner"
480
491
  require "celluloid/group/pool" # TODO: Find way to only load this if being used.
@@ -487,13 +498,27 @@ require "celluloid/actor"
487
498
  require "celluloid/cell"
488
499
  require "celluloid/future"
489
500
 
501
+ require "celluloid/internals/call_chain"
502
+ require "celluloid/internals/cpu_counter"
503
+ require "celluloid/internals/handlers"
504
+ require "celluloid/internals/links"
505
+ require "celluloid/internals/logger"
506
+ require "celluloid/internals/method"
507
+ require "celluloid/internals/properties"
508
+ require "celluloid/internals/receivers"
509
+ require "celluloid/internals/registry"
510
+ require "celluloid/internals/responses"
511
+ require "celluloid/internals/signals"
512
+ require "celluloid/internals/stack"
513
+ require "celluloid/internals/task_set"
514
+ require "celluloid/internals/thread_handle"
515
+ require "celluloid/internals/uuid"
516
+
517
+ require "celluloid/notifications"
518
+ require "celluloid/supervision"
519
+
520
+ require "celluloid/logging"
490
521
  require "celluloid/actor/system"
491
- require "celluloid/actor/manager"
492
-
493
- require "celluloid/deprecate" unless $CELLULOID_BACKPORTED == false
494
-
495
- $CELLULOID_MONITORING = false
496
- Celluloid::Notices.output
497
522
 
498
523
  # Configure default systemwide settings
499
524
 
@@ -16,14 +16,14 @@ module Celluloid
16
16
  # Obtain the current actor
17
17
  def current
18
18
  actor = Thread.current[:celluloid_actor]
19
- fail NotActorError, "not in actor scope" unless actor
19
+ raise NotActorError, "not in actor scope" unless actor
20
20
  actor.behavior_proxy
21
21
  end
22
22
 
23
23
  # Obtain the name of the current actor
24
24
  def registered_name
25
25
  actor = Thread.current[:celluloid_actor]
26
- fail NotActorError, "not in actor scope" unless actor
26
+ raise NotActorError, "not in actor scope" unless actor
27
27
  actor.name
28
28
  end
29
29
 
@@ -52,13 +52,13 @@ module Celluloid
52
52
 
53
53
  # Watch for exit events from another actor
54
54
  def monitor(actor)
55
- fail NotActorError, "can't link outside actor context" unless Celluloid.actor?
55
+ raise NotActorError, "can't link outside actor context" unless Celluloid.actor?
56
56
  Thread.current[:celluloid_actor].linking_request(actor, :link)
57
57
  end
58
58
 
59
59
  # Stop waiting for exit events from another actor
60
60
  def unmonitor(actor)
61
- fail NotActorError, "can't link outside actor context" unless Celluloid.actor?
61
+ raise NotActorError, "can't link outside actor context" unless Celluloid.actor?
62
62
  Thread.current[:celluloid_actor].linking_request(actor, :unlink)
63
63
  end
64
64
 
@@ -132,8 +132,11 @@ module Celluloid
132
132
  end
133
133
 
134
134
  @proxy = Proxy::Actor.new(@mailbox, @thread)
135
+
136
+ # !!! DO NOT INTRODUCE ADDITIONAL GLOBAL VARIABLES !!!
137
+ # rubocop:disable Style/GlobalVars
135
138
  Celluloid::Probe.actor_created(self) if $CELLULOID_MONITORING
136
- Celluloid::Actor::Manager.actor_created(self) if $CELLULOID_MANAGED
139
+ # rubocop:enable Style/GlobalVars
137
140
  end
138
141
 
139
142
  def behavior_proxy
@@ -187,25 +190,28 @@ module Celluloid
187
190
  begin
188
191
  message = @mailbox.receive(remaining) do |msg|
189
192
  msg.is_a?(LinkingResponse) &&
190
- msg.actor.mailbox.address == receiver.mailbox.address &&
191
- msg.type == type
193
+ msg.actor.mailbox.address == receiver.mailbox.address &&
194
+ msg.type == type
192
195
  end
193
196
  rescue TaskTimeout
194
197
  next # IO reactor did something, no message in queue yet.
195
198
  end
196
199
 
197
200
  if message.instance_of? LinkingResponse
201
+ # !!! DO NOT INTRODUCE ADDITIONAL GLOBAL VARIABLES !!!
202
+ # rubocop:disable Style/GlobalVars
198
203
  Celluloid::Probe.actors_linked(self, receiver) if $CELLULOID_MONITORING
204
+ # rubocop:enable Style/GlobalVars
199
205
  system_events.each { |ev| @mailbox << ev }
200
206
  return
201
207
  elsif message.is_a? SystemEvent
202
208
  # Queue up pending system events to be processed after we've successfully linked
203
209
  system_events << message
204
- else fail "Unexpected message type: #{message.class}. Expected LinkingResponse, NilClass, SystemEvent."
210
+ else raise "Unexpected message type: #{message.class}. Expected LinkingResponse, NilClass, SystemEvent."
205
211
  end
206
212
  end
207
213
 
208
- fail TaskTimeout, "linking timeout of #{LINKING_TIMEOUT} seconds exceeded with receiver: #{receiver}"
214
+ raise TaskTimeout, "linking timeout of #{LINKING_TIMEOUT} seconds exceeded with receiver: #{receiver}"
209
215
  end
210
216
  end
211
217
 
@@ -218,7 +224,7 @@ module Celluloid
218
224
  def wait(name)
219
225
  @signals.wait name
220
226
  end
221
-
227
+
222
228
  # Register a new handler for a given pattern
223
229
  def handle(*patterns, &block)
224
230
  @handlers.handle(*patterns, &block)
@@ -226,7 +232,7 @@ module Celluloid
226
232
 
227
233
  # Receive an asynchronous message
228
234
  def receive(timeout = nil, &block)
229
- while true
235
+ loop do
230
236
  message = @receivers.receive(timeout, &block)
231
237
  return message unless message.is_a?(SystemEvent)
232
238
 
@@ -280,16 +286,16 @@ module Celluloid
280
286
 
281
287
  # Handle standard low-priority messages
282
288
  def handle_message(message)
283
- unless @handlers.handle_message(message)
284
- unless @receivers.handle_message(message)
285
- Internals::Logger.debug "Discarded message (unhandled): #{message}" if $CELLULOID_DEBUG
286
- end
287
- end
289
+ # !!! DO NOT INTRODUCE ADDITIONAL GLOBAL VARIABLES !!!
290
+ # rubocop:disable Metrics/LineLength, Style/GlobalVars
291
+ Internals::Logger.debug "Discarded message (unhandled): #{message}" if !@handlers.handle_message(message) && !@receivers.handle_message(message) && $CELLULOID_DEBUG
292
+ # rubocop:enable Metrics/LineLength, Style/GlobalVars
293
+
288
294
  message
289
295
  end
290
296
 
291
297
  def default_exit_handler(event)
292
- fail event.reason if event.reason
298
+ raise event.reason if event.reason
293
299
  end
294
300
 
295
301
  # Handle any exceptions that occur within a running actor
@@ -312,7 +318,11 @@ module Celluloid
312
318
 
313
319
  # Clean up after this actor
314
320
  def cleanup(exit_event)
321
+ # !!! DO NOT INTRODUCE ADDITIONAL GLOBAL VARIABLES !!!
322
+ # rubocop:disable Style/GlobalVars
315
323
  Celluloid::Probe.actor_died(self) if $CELLULOID_MONITORING
324
+ # rubocop:enable Style/GlobalVars
325
+
316
326
  @mailbox.shutdown
317
327
  @links.each do |actor|
318
328
  actor.mailbox << exit_event if actor.mailbox.alive?