engineyard-serverside 1.5.23.ruby19.16 → 1.5.24

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 (181) hide show
  1. data/lib/engineyard-serverside.rb +19 -17
  2. data/lib/engineyard-serverside/cli.rb +38 -30
  3. data/lib/engineyard-serverside/configuration.rb +4 -28
  4. data/lib/engineyard-serverside/deploy.rb +10 -7
  5. data/lib/engineyard-serverside/lockfile_parser.rb +2 -2
  6. data/lib/engineyard-serverside/logged_output.rb +2 -0
  7. data/lib/engineyard-serverside/server.rb +2 -27
  8. data/lib/engineyard-serverside/task.rb +14 -10
  9. data/lib/engineyard-serverside/version.rb +1 -1
  10. data/lib/vendor/dataflow/HISTORY +52 -0
  11. data/lib/vendor/dataflow/LICENSE +19 -0
  12. data/lib/vendor/dataflow/README.textile +290 -0
  13. data/lib/vendor/dataflow/Rakefile +36 -0
  14. data/lib/vendor/dataflow/examples/barrier.rb +9 -0
  15. data/lib/vendor/dataflow/examples/data_driven.rb +17 -0
  16. data/lib/vendor/dataflow/examples/dataflow_http_gets.rb +13 -0
  17. data/lib/vendor/dataflow/examples/flow.rb +20 -0
  18. data/lib/vendor/dataflow/examples/future_http_gets.rb +12 -0
  19. data/lib/vendor/dataflow/examples/future_queue.rb +11 -0
  20. data/lib/vendor/dataflow/examples/instance_variables.rb +15 -0
  21. data/lib/vendor/dataflow/examples/laziness.rb +9 -0
  22. data/lib/vendor/dataflow/examples/local_variables.rb +11 -0
  23. data/lib/vendor/dataflow/examples/messages.rb +26 -0
  24. data/lib/vendor/dataflow/examples/port_http_gets.rb +13 -0
  25. data/lib/vendor/dataflow/examples/port_send.rb +10 -0
  26. data/lib/vendor/dataflow/examples/ring.rb +21 -0
  27. data/lib/vendor/dataflow/spec/actor_spec.rb +28 -0
  28. data/lib/vendor/dataflow/spec/anonymous_variables_spec.rb +21 -0
  29. data/lib/vendor/dataflow/spec/barrier_spec.rb +25 -0
  30. data/lib/vendor/dataflow/spec/by_need_spec.rb +55 -0
  31. data/lib/vendor/dataflow/spec/dataflow_spec.rb +151 -0
  32. data/lib/vendor/dataflow/spec/equality_spec.rb +40 -0
  33. data/lib/vendor/dataflow/spec/flow_spec.rb +25 -0
  34. data/lib/vendor/dataflow/spec/forker_spec.rb +28 -0
  35. data/lib/vendor/dataflow/spec/future_queue_spec.rb +31 -0
  36. data/lib/vendor/dataflow/spec/inspect_spec.rb +19 -0
  37. data/lib/vendor/dataflow/spec/need_later_spec.rb +12 -0
  38. data/lib/vendor/dataflow/spec/port_spec.rb +26 -0
  39. data/lib/vendor/dataflow/spec/spec.opts +1 -0
  40. data/lib/vendor/dataflow/spec/spec_helper.rb +10 -0
  41. data/lib/vendor/escape/Readme +21 -0
  42. data/lib/vendor/escape/doc_include/template/qualitysmith.rb +631 -0
  43. data/lib/vendor/json_pure/CHANGES +166 -0
  44. data/lib/vendor/json_pure/COPYING +58 -0
  45. data/lib/vendor/json_pure/GPL +340 -0
  46. data/lib/vendor/json_pure/README +358 -0
  47. data/lib/vendor/json_pure/Rakefile +292 -0
  48. data/lib/vendor/json_pure/TODO +1 -0
  49. data/lib/vendor/json_pure/VERSION +1 -0
  50. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +52 -0
  51. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
  52. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
  53. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
  54. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
  55. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
  56. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
  57. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +261 -0
  58. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
  59. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
  60. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
  61. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
  62. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
  63. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
  64. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +262 -0
  65. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
  66. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
  67. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +82 -0
  68. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +34 -0
  69. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
  70. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
  71. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +81 -0
  72. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
  73. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
  74. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +82 -0
  75. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
  76. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
  77. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +82 -0
  78. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
  79. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
  80. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +82 -0
  81. data/lib/vendor/json_pure/benchmarks/generator2_benchmark.rb +222 -0
  82. data/lib/vendor/json_pure/benchmarks/generator_benchmark.rb +224 -0
  83. data/lib/vendor/json_pure/benchmarks/ohai.json +1216 -0
  84. data/lib/vendor/json_pure/benchmarks/ohai.ruby +1 -0
  85. data/lib/vendor/json_pure/benchmarks/parser2_benchmark.rb +251 -0
  86. data/lib/vendor/json_pure/benchmarks/parser_benchmark.rb +259 -0
  87. data/lib/vendor/json_pure/bin/edit_json.rb +9 -0
  88. data/lib/vendor/json_pure/bin/prettify_json.rb +75 -0
  89. data/lib/vendor/json_pure/data/example.json +1 -0
  90. data/lib/vendor/json_pure/data/index.html +38 -0
  91. data/lib/vendor/json_pure/data/prototype.js +4184 -0
  92. data/lib/vendor/json_pure/ext/json/ext/generator/extconf.rb +16 -0
  93. data/lib/vendor/json_pure/ext/json/ext/generator/generator.c +1323 -0
  94. data/lib/vendor/json_pure/ext/json/ext/generator/generator.h +170 -0
  95. data/lib/vendor/json_pure/ext/json/ext/parser/extconf.rb +15 -0
  96. data/lib/vendor/json_pure/ext/json/ext/parser/parser.c +1935 -0
  97. data/lib/vendor/json_pure/ext/json/ext/parser/parser.h +71 -0
  98. data/lib/vendor/json_pure/ext/json/ext/parser/parser.rl +792 -0
  99. data/lib/vendor/json_pure/install.rb +26 -0
  100. data/lib/vendor/json_pure/tests/fixtures/fail1.json +1 -0
  101. data/lib/vendor/json_pure/tests/fixtures/fail10.json +1 -0
  102. data/lib/vendor/json_pure/tests/fixtures/fail11.json +1 -0
  103. data/lib/vendor/json_pure/tests/fixtures/fail12.json +1 -0
  104. data/lib/vendor/json_pure/tests/fixtures/fail13.json +1 -0
  105. data/lib/vendor/json_pure/tests/fixtures/fail14.json +1 -0
  106. data/lib/vendor/json_pure/tests/fixtures/fail18.json +1 -0
  107. data/lib/vendor/json_pure/tests/fixtures/fail19.json +1 -0
  108. data/lib/vendor/json_pure/tests/fixtures/fail2.json +1 -0
  109. data/lib/vendor/json_pure/tests/fixtures/fail20.json +1 -0
  110. data/lib/vendor/json_pure/tests/fixtures/fail21.json +1 -0
  111. data/lib/vendor/json_pure/tests/fixtures/fail22.json +1 -0
  112. data/lib/vendor/json_pure/tests/fixtures/fail23.json +1 -0
  113. data/lib/vendor/json_pure/tests/fixtures/fail24.json +1 -0
  114. data/lib/vendor/json_pure/tests/fixtures/fail25.json +1 -0
  115. data/lib/vendor/json_pure/tests/fixtures/fail27.json +2 -0
  116. data/lib/vendor/json_pure/tests/fixtures/fail28.json +2 -0
  117. data/lib/vendor/json_pure/tests/fixtures/fail3.json +1 -0
  118. data/lib/vendor/json_pure/tests/fixtures/fail4.json +1 -0
  119. data/lib/vendor/json_pure/tests/fixtures/fail5.json +1 -0
  120. data/lib/vendor/json_pure/tests/fixtures/fail6.json +1 -0
  121. data/lib/vendor/json_pure/tests/fixtures/fail7.json +1 -0
  122. data/lib/vendor/json_pure/tests/fixtures/fail8.json +1 -0
  123. data/lib/vendor/json_pure/tests/fixtures/fail9.json +1 -0
  124. data/lib/vendor/json_pure/tests/fixtures/pass1.json +56 -0
  125. data/lib/vendor/json_pure/tests/fixtures/pass15.json +1 -0
  126. data/lib/vendor/json_pure/tests/fixtures/pass16.json +1 -0
  127. data/lib/vendor/json_pure/tests/fixtures/pass17.json +1 -0
  128. data/lib/vendor/json_pure/tests/fixtures/pass2.json +1 -0
  129. data/lib/vendor/json_pure/tests/fixtures/pass26.json +1 -0
  130. data/lib/vendor/json_pure/tests/fixtures/pass3.json +6 -0
  131. data/lib/vendor/json_pure/tests/test_json.rb +361 -0
  132. data/lib/vendor/json_pure/tests/test_json_addition.rb +162 -0
  133. data/lib/vendor/json_pure/tests/test_json_encoding.rb +68 -0
  134. data/lib/vendor/json_pure/tests/test_json_fixtures.rb +34 -0
  135. data/lib/vendor/json_pure/tests/test_json_generate.rb +122 -0
  136. data/lib/vendor/json_pure/tests/test_json_rails.rb +144 -0
  137. data/lib/vendor/json_pure/tests/test_json_unicode.rb +76 -0
  138. data/lib/vendor/json_pure/tools/fuzz.rb +139 -0
  139. data/lib/vendor/json_pure/tools/server.rb +61 -0
  140. data/lib/vendor/open4/lib/open4.rb +51 -80
  141. data/lib/vendor/thor/CHANGELOG.rdoc +89 -0
  142. data/lib/vendor/thor/LICENSE +20 -0
  143. data/lib/vendor/thor/README.rdoc +297 -0
  144. data/lib/vendor/thor/Thorfile +69 -0
  145. data/lib/vendor/thor/bin/rake2thor +86 -0
  146. data/lib/vendor/thor/bin/thor +6 -0
  147. data/lib/vendor/thor/thor.gemspec +120 -0
  148. data/spec/basic_deploy_spec.rb +1 -1
  149. data/spec/bundler_deploy_spec.rb +1 -1
  150. data/spec/nodejs_deploy_spec.rb +5 -2
  151. data/spec/rails31_deploy_spec.rb +3 -3
  152. data/spec/services_deploy_spec.rb +1 -1
  153. data/spec/support/integration.rb +1 -2
  154. metadata +165 -44
  155. data/lib/engineyard-serverside/future.rb +0 -29
  156. data/lib/engineyard-serverside/futures/celluloid.rb +0 -25
  157. data/lib/engineyard-serverside/futures/dataflow.rb +0 -31
  158. data/lib/vendor/celluloid/lib/celluloid.rb +0 -261
  159. data/lib/vendor/celluloid/lib/celluloid/actor.rb +0 -242
  160. data/lib/vendor/celluloid/lib/celluloid/actor_pool.rb +0 -54
  161. data/lib/vendor/celluloid/lib/celluloid/actor_proxy.rb +0 -75
  162. data/lib/vendor/celluloid/lib/celluloid/application.rb +0 -78
  163. data/lib/vendor/celluloid/lib/celluloid/calls.rb +0 -94
  164. data/lib/vendor/celluloid/lib/celluloid/core_ext.rb +0 -14
  165. data/lib/vendor/celluloid/lib/celluloid/events.rb +0 -14
  166. data/lib/vendor/celluloid/lib/celluloid/fiber.rb +0 -33
  167. data/lib/vendor/celluloid/lib/celluloid/fsm.rb +0 -141
  168. data/lib/vendor/celluloid/lib/celluloid/future.rb +0 -60
  169. data/lib/vendor/celluloid/lib/celluloid/links.rb +0 -61
  170. data/lib/vendor/celluloid/lib/celluloid/logger.rb +0 -32
  171. data/lib/vendor/celluloid/lib/celluloid/mailbox.rb +0 -124
  172. data/lib/vendor/celluloid/lib/celluloid/receivers.rb +0 -66
  173. data/lib/vendor/celluloid/lib/celluloid/registry.rb +0 -33
  174. data/lib/vendor/celluloid/lib/celluloid/responses.rb +0 -26
  175. data/lib/vendor/celluloid/lib/celluloid/rspec.rb +0 -2
  176. data/lib/vendor/celluloid/lib/celluloid/signals.rb +0 -50
  177. data/lib/vendor/celluloid/lib/celluloid/supervisor.rb +0 -57
  178. data/lib/vendor/celluloid/lib/celluloid/task.rb +0 -73
  179. data/lib/vendor/celluloid/lib/celluloid/tcp_server.rb +0 -33
  180. data/lib/vendor/celluloid/lib/celluloid/timers.rb +0 -109
  181. data/lib/vendor/celluloid/lib/celluloid/version.rb +0 -4
@@ -1,54 +0,0 @@
1
- require 'thread'
2
-
3
- module Celluloid
4
- class Actor
5
- # Maintain a thread pool of actors FOR SPEED!!
6
- class Pool
7
- @pool = []
8
- @lock = Mutex.new
9
- @max_idle = 16
10
-
11
- class << self
12
- attr_accessor :max_idle
13
-
14
- def get(&block)
15
- @lock.synchronize do
16
- if @pool.empty?
17
- thread = create
18
- else
19
- thread = @pool.shift
20
- end
21
-
22
- thread[:queue] << block
23
- thread
24
- end
25
- end
26
-
27
- def put(thread)
28
- @lock.synchronize do
29
- if @pool.size >= @max_idle
30
- thread[:queue] << nil
31
- else
32
- @pool << thread
33
- end
34
- end
35
- end
36
-
37
- def create
38
- queue = Queue.new
39
- thread = Thread.new do
40
- begin
41
- while func = queue.pop
42
- func.call
43
- end
44
- rescue Exception => ex
45
- Logger.crash("#{self} internal failure", ex)
46
- end
47
- end
48
- thread[:queue] = queue
49
- thread
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,75 +0,0 @@
1
- module Celluloid
2
- # A proxy object returned from Celluloid::Actor.spawn/spawn_link which
3
- # dispatches calls and casts to normal Ruby objects which are running inside
4
- # of their own threads.
5
- class ActorProxy
6
- attr_reader :mailbox
7
-
8
- def initialize(mailbox, klass = "Object")
9
- @mailbox, @klass = mailbox, klass
10
- end
11
-
12
- def send(meth, *args, &block)
13
- Actor.call @mailbox, :send, meth, *args, &block
14
- end
15
-
16
- def class
17
- Actor.call @mailbox, :send, :class
18
- end
19
-
20
- def respond_to?(meth)
21
- Actor.call @mailbox, :respond_to?, meth
22
- end
23
-
24
- def methods(include_ancestors = true)
25
- Actor.call @mailbox, :methods, include_ancestors
26
- end
27
-
28
- def alive?
29
- @mailbox.alive?
30
- end
31
-
32
- def to_s
33
- Actor.call @mailbox, :to_s
34
- end
35
-
36
- def inspect
37
- Actor.call @mailbox, :inspect
38
- rescue DeadActorError
39
- "#<Celluloid::Actor(#{@klass}) dead>"
40
- end
41
-
42
- # Create a Celluloid::Future which calls a given method
43
- def future(method_name, *args, &block)
44
- Future.new { Actor.call @mailbox, method_name, *args, &block }
45
- end
46
-
47
- # Terminate the associated actor
48
- def terminate
49
- raise DeadActorError, "actor already terminated" unless alive?
50
-
51
- begin
52
- send :terminate
53
- rescue DeadActorError
54
- # In certain cases this is thrown during termination. This is likely
55
- # a bug in Celluloid's internals, but it shouldn't affect the caller.
56
- # FIXME: track this down and fix it, or at the very least log it
57
- end
58
-
59
- # Always return nil until a dependable exit value can be obtained
60
- nil
61
- end
62
-
63
- # method_missing black magic to call bang predicate methods asynchronously
64
- def method_missing(meth, *args, &block)
65
- # bang methods are async calls
66
- if meth.to_s.match(/!$/)
67
- unbanged_meth = meth.to_s.sub(/!$/, '')
68
- Actor.async @mailbox, unbanged_meth, *args, &block
69
- return
70
- end
71
-
72
- Actor.call @mailbox, meth, *args, &block
73
- end
74
- end
75
- end
@@ -1,78 +0,0 @@
1
- module Celluloid
2
- # Applications describe and manage networks of Celluloid actors
3
- class Application
4
- include Celluloid
5
- trap_exit :restart_supervisor
6
-
7
- class << self
8
- # Actors or sub-applications to be supervised
9
- def supervisables
10
- @supervisables ||= []
11
- end
12
-
13
- # Start this application (and watch it with a supervisor)
14
- alias_method :run!, :supervise
15
-
16
- # Run the application in the foreground with a simple watchdog
17
- def run
18
- loop do
19
- supervisor = run!
20
-
21
- # Take five, toplevel supervisor
22
- sleep 5 while supervisor.alive?
23
-
24
- Logger.error "!!! Celluloid::Application #{self} crashed. Restarting..."
25
- end
26
- end
27
-
28
- # Register an actor class or a sub-application class to be launched and
29
- # supervised while this application is running. Available options are:
30
- #
31
- # * as: register this application in the Celluloid::Actor[] directory
32
- # * args: start the actor with the given arguments
33
- def supervise(klass, options = {})
34
- supervisables << Supervisable.new(klass, options)
35
- end
36
- end
37
-
38
- # Start the application
39
- def initialize
40
- @supervisors = {}
41
-
42
- # This is some serious lolcode, but like... start the supervisors for
43
- # this application
44
- self.class.supervisables.each do |supervisable|
45
- supervisor = supervisable.supervise
46
- @supervisors[supervisor] = supervisable
47
- end
48
- end
49
-
50
- # Restart a crashed supervisor
51
- def restart_supervisor(supervisor, reason)
52
- supervisable = @supervisors.delete supervisor
53
- raise "a supervisable went missing. This shouldn't be!" unless supervisable
54
-
55
- supervisor = supervisable.supervise
56
- @supervisors[supervisor] = supervisable
57
- end
58
-
59
- # A subcomponent of an application to be supervised
60
- class Supervisable
61
- attr_reader :klass, :as, :args
62
-
63
- def initialize(klass, options = {})
64
- @klass = klass
65
-
66
- # Stringify keys :/
67
- options = options.inject({}) { |h,(k,v)| h[k.to_s] = v; h }
68
-
69
- @as = options['as']
70
- @args = options['args'] || []
71
- end
72
-
73
- def supervise
74
- Supervisor.new_link(@as, @klass, *@args)
75
- end
76
- end
77
- end
78
- end
@@ -1,94 +0,0 @@
1
- module Celluloid
2
- # Calls represent requests to an actor
3
- class Call
4
- attr_reader :id, :caller, :method, :arguments, :block
5
-
6
- def initialize(caller, method, arguments, block)
7
- @id = object_id # memoize object ID for serialization
8
- @caller, @method, @arguments, @block = caller, method, arguments, block
9
- end
10
-
11
- def check_signature(obj)
12
- unless obj.respond_to? @method
13
- raise NoMethodError, "undefined method `#{@method}' for #{obj.inspect}"
14
- end
15
-
16
- arity = obj.method(@method).arity
17
- if arity >= 0
18
- if arguments.size != arity
19
- raise ArgumentError, "wrong number of arguments (#{arguments.size} for #{arity})"
20
- end
21
- elsif arity < -1
22
- mandatory_args = -arity - 1
23
- if arguments.size < mandatory_args
24
- raise ArgumentError, "wrong number of arguments (#{arguments.size} for #{mandatory_args})"
25
- end
26
- end
27
- end
28
- end
29
-
30
- # Synchronous calls wait for a response
31
- class SyncCall < Call
32
- def dispatch(obj)
33
- begin
34
- check_signature(obj)
35
- rescue Exception => ex
36
- respond ErrorResponse.new(@id, AbortError.new(ex))
37
- return
38
- end
39
-
40
- begin
41
- result = obj.send @method, *@arguments, &@block
42
- rescue Exception => exception
43
- # Exceptions that occur during synchronous calls are reraised in the
44
- # context of the caller
45
- respond ErrorResponse.new(@id, exception)
46
-
47
- if exception.is_a? AbortError
48
- # Aborting indicates a protocol error on the part of the caller
49
- # It should crash the caller, but the exception isn't reraised
50
- return
51
- else
52
- # Otherwise, it's a bug in this actor and should be reraised
53
- raise exception
54
- end
55
- end
56
-
57
- respond SuccessResponse.new(@id, result)
58
- end
59
-
60
- def cleanup
61
- exception = DeadActorError.new("attempted to call a dead actor")
62
- respond ErrorResponse.new(@id, exception)
63
- end
64
-
65
- #######
66
- private
67
- #######
68
-
69
- def respond(message)
70
- @caller << message
71
- rescue MailboxError
72
- # It's possible the caller exited or crashed before we could send a
73
- # response to them.
74
- end
75
- end
76
-
77
- # Asynchronous calls don't wait for a response
78
- class AsyncCall < Call
79
- def dispatch(obj)
80
- begin
81
- check_signature(obj)
82
- rescue Exception => ex
83
- Logger.crash("#{obj.class}: async call failed!", ex)
84
- return
85
- end
86
-
87
- obj.send(@method, *@arguments, &@block)
88
- rescue AbortError => ex
89
- # Swallow aborted async calls, as they indicate the caller made a mistake
90
- Logger.crash("#{obj.class}: async call aborted!", ex)
91
- end
92
- end
93
- end
94
-
@@ -1,14 +0,0 @@
1
- require 'celluloid/fiber'
2
-
3
- # Monkeypatch Thread to allow lazy access to its Celluloid::Mailbox
4
- class Thread
5
- # Retrieve the mailbox for the current thread or lazily initialize it
6
- def self.mailbox
7
- current[:mailbox] ||= Celluloid::Mailbox.new
8
- end
9
- end
10
-
11
- class Fiber
12
- # Celluloid::Task associated with this Fiber
13
- attr_accessor :task
14
- end
@@ -1,14 +0,0 @@
1
- module Celluloid
2
- # Exceptional system events which need to be processed out of band
3
- class SystemEvent < Exception; end
4
-
5
- # An actor has exited for the given reason
6
- class ExitEvent < SystemEvent
7
- attr_reader :actor, :reason
8
-
9
- def initialize(actor, reason = nil)
10
- @actor, @reason = actor, reason
11
- super reason.to_s
12
- end
13
- end
14
- end
@@ -1,33 +0,0 @@
1
- # Fibers are hard... let's go shopping!
2
- begin
3
- require 'fiber'
4
- rescue LoadError => ex
5
- if defined? JRUBY_VERSION
6
- if RUBY_VERSION < "1.9.2"
7
- raise LoadError, "Celluloid requires JRuby 1.9 mode. Please pass the --1.9 flag or set JRUBY_OPTS=--1.9"
8
- end
9
-
10
- # Fibers are broken on JRuby 1.6.5. This works around the issue
11
- if JRUBY_VERSION == "1.6.5"
12
- require 'jruby'
13
- org.jruby.ext.fiber.FiberExtLibrary.new.load(JRuby.runtime, false)
14
- class org::jruby::ext::fiber::ThreadFiber
15
- field_accessor :state
16
- end
17
-
18
- class Fiber
19
- def alive?
20
- JRuby.reference(self).state != org.jruby.ext.fiber.ThreadFiberState::FINISHED
21
- end
22
- end
23
- else
24
- # Just in case subsequent JRuby releases have broken fibers :/
25
- raise ex
26
- end
27
- elsif defined? Rubinius
28
- # If we're on Rubinius, we can still work in 1.8 mode
29
- Fiber = Rubinius::Fiber
30
- else
31
- raise ex
32
- end
33
- end
@@ -1,141 +0,0 @@
1
- module Celluloid
2
- # Turn concurrent objects into finite state machines
3
- # Inspired by Erlang's gen_fsm. See http://www.erlang.org/doc/man/gen_fsm.html
4
- module FSM
5
- DEFAULT_STATE = :default # Default state name unless one is explicitly set
6
-
7
- # Included hook to extend class methods
8
- def self.included(klass)
9
- klass.send :include, Celluloid
10
- klass.send :extend, ClassMethods
11
- end
12
-
13
- module ClassMethods
14
- # Ensure FSMs transition into the default state after they're initialized
15
- def new(*args, &block)
16
- fsm = super
17
- fsm.transition default_state
18
- fsm
19
- end
20
-
21
- # Ensure FSMs transition into the default state after they're initialized
22
- def new_link(*args, &block)
23
- fsm = super
24
- fsm.transition default_state
25
- fsm
26
- end
27
-
28
- # Obtain or set the default state
29
- # Passing a state name sets the default state
30
- def default_state(new_default = nil)
31
- if new_default
32
- @default_state = new_default.to_sym
33
- else
34
- defined?(@default_state) ? @default_state : DEFAULT_STATE
35
- end
36
- end
37
-
38
- # Obtain the valid states for this FSM
39
- def states
40
- @states ||= {}
41
- end
42
-
43
- # Declare an FSM state and optionally provide a callback block to fire
44
- # Options:
45
- # * to: a state or array of states this state can transition to
46
- def state(*args, &block)
47
- if args.last.is_a? Hash
48
- options = args.pop.inject({}) { |h,(k,v)| h[k.to_s] = v; h }
49
- else
50
- options = {}
51
- end
52
-
53
- args.each do |name|
54
- name = name.to_sym
55
- states[name] = State.new(name, options['to'], &block)
56
- end
57
- end
58
- end
59
-
60
- # Obtain the current state of the FSM
61
- def current_state
62
- defined?(@state) ? @state : @state = self.class.default_state
63
- end
64
- alias_method :state, :current_state
65
-
66
- # Transition to another state
67
- # Options:
68
- # * delay: don't transition immediately, wait the given number of seconds.
69
- # This will return a Celluloid::Timer object you can use to
70
- # cancel the pending state transition.
71
- #
72
- # Note: making additional state transitions will cancel delayed transitions
73
- def transition(state_name, options = {})
74
- state_name = state_name.to_sym
75
- current_state = self.class.states[@state]
76
-
77
- return if current_state && current_state.name == state_name
78
-
79
- if current_state and not current_state.valid_transition? state_name
80
- valid = current_state.transitions.map(&:to_s).join(", ")
81
- raise ArgumentError, "#{self.class} can't change state from '#{@state}' to '#{state_name}', only to: #{valid}"
82
- end
83
-
84
- new_state = self.class.states[state_name]
85
-
86
- if !new_state and state_name == self.class.default_state
87
- # FIXME This probably isn't thread safe... or wise
88
- new_state = self.class.states[state_name] = State.new(state_name)
89
- end
90
-
91
- if new_state
92
- if options[:delay]
93
- @delayed_transition.cancel if @delayed_transition
94
-
95
- @delayed_transition = after(options[:delay]) do
96
- transition! new_state.name
97
- new_state.call(self)
98
- end
99
-
100
- return @delayed_transition
101
- end
102
-
103
- if defined?(@delayed_transition) and @delayed_transition
104
- @delayed_transition.cancel
105
- @delayed_transition = nil
106
- end
107
-
108
- transition! new_state.name
109
- new_state.call(self)
110
- else
111
- raise ArgumentError, "invalid state for #{self.class}: #{state_name}"
112
- end
113
- end
114
-
115
- # Immediate state transition with no sanity checks. "Dangerous!"
116
- def transition!(state_name)
117
- @state = state_name
118
- end
119
-
120
- # FSM states as declared by Celluloid::FSM.state
121
- class State
122
- attr_reader :name, :transitions
123
-
124
- def initialize(name, transitions = nil, &block)
125
- @name, @block = name, block
126
- @transitions = Array(transitions).map { |t| t.to_sym } if transitions
127
- end
128
-
129
- def call(obj)
130
- obj.instance_eval(&@block) if @block
131
- end
132
-
133
- def valid_transition?(new_state)
134
- # All transitions are allowed unless expressly
135
- return true unless @transitions
136
-
137
- @transitions.include? new_state.to_sym
138
- end
139
- end
140
- end
141
- end