1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
module Celluloid
module Supervision
# TODO: Do not hard-code. Allow configurable values.
INSTANCE_RETRY_WAIT = 3
INSTANCE_RETRY_LIMIT = 5
module Error
class NoPublicService < Celluloid::Error; end
end
class Configuration
module Error
class AlreadyDefined < Celluloid::Error; end
class InvalidSupervisor < Celluloid::Error; end
class InvalidValues < Celluloid::Error; end
class Incomplete < Celluloid::Error; end
class Invalid < Celluloid::Error; end
end
# Using class variable so that parameters can be added by plugins.
@@parameters = {
mandatory: [:type],
optional: %i[
as
args
block
],
# TODO: Move these into Behaviors.
plugins: [
# de :size, # Supervision::Pool
# de :routers, # Supervision::Coordinator
# de :supervises # Supervision::Tree
],
meta: %i[
registry
branch
method
]
}
@@arity = {
type: :args
}
@@aliases = {
name: :as,
kind: :type,
# de :pool => :size, # TODO: Move into Behaviors.
# de :supervise => :supervises
}
@@defaults = {}
class << self
def save_defaults
@@defaults = {
parameters: @@parameters.each_with_object({}) { |(k, v), p| p[k] = v.dup; },
aliases: @@aliases.dup,
arity: @@arity.dup
}
end
def resync_parameters
@@parameters = @@defaults[:parameters].each_with_object({}) { |(k, v), p| p[k] = v.dup; }
@@aliases = @@defaults[:aliases].dup
@@arity = @@defaults[:arity].dup
end
def parameters(*args)
args.inject([]) { |parameters, p| parameters += @@parameters[p]; parameters }
end
def parameter!(key, value)
@@parameters[key] << value unless @@parameters[key].include? value
end
def arity
@@arity
end
def arity!(key, value)
@@arity[key] = value
end
def aliases
@@aliases
end
def alias!(aliased, original)
@@aliases[aliased] = original
end
end
save_defaults
resync_parameters
# This was originally added for `#pool` and `PoolManager
# `:before_initialize` was added to allow detecting `:size => N`
# and turning that into a pool. Other uses could be for `coordinator`
# appointing a `router` by detecting `:routers => N`, and many other uses.
################ These are applied inside Supervision::Member ################
REMOVE_AT_EXPORT = %i[
configuration
behavior
].freeze
INJECTIONS = %i[
configuration
before_initialization
after_initialization
before_start
before_restart
].freeze
end
end
end
|