Sha256: 9b8b912f9d801b8dd41427b8463e9124d2f77f51b795b5c24aba8f45a85716c7

Contents?: true

Size: 1.41 KB

Versions: 71

Compression:

Stored size: 1.41 KB

Contents

module Celluloid
  # Supervisors are actors that watch over other actors and restart them if
  # they crash
  class Supervisor
    include Celluloid
    trap_exit :restart_actor

    # Retrieve the actor this supervisor is supervising
    attr_reader :actor

    def self.supervise(klass, *args, &block)
      new(nil, klass, *args, &block)
    end

    def self.supervise_as(name, klass, *args, &block)
      new(name, klass, *args, &block)
    end

    def initialize(name, klass, *args, &block)
      @name, @klass, @args, @block = name, klass, args, block
      @started = false

      start_actor
    end

    def start_actor(start_attempts = 3, sleep_interval = 30)
      failures = 0

      begin
        @actor = @klass.new_link(*@args, &@block)
      rescue => ex
        failures += 1
        if failures >= start_attempts
          failures = 0

          Logger.warn("#{@klass} is crashing on initialize too quickly, sleeping for #{sleep_interval} seconds")
          sleep sleep_interval
        end
        retry
      end

      @started = true
      Actor[@name] = @actor if @name
    end

    # When actors die, regardless of the reason, restart them
    def restart_actor(actor, reason)
      start_actor if @started
    end

    def inspect
      str = "#<#{self.class}(#{@klass}):0x#{object_id.to_s(16)}"
      str << " " << @args.map { |arg| arg.inspect }.join(' ') unless @args.empty?
      str << ">"
    end
  end
end

Version data entries

71 entries across 71 versions & 2 rubygems

Version Path
engineyard-serverside-1.5.23.ruby19.16 lib/vendor/celluloid/lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.15 lib/vendor/celluloid/lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.14 lib/vendor/celluloid/lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.13 lib/vendor/celluloid/lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.12 lib/vendor/celluloid/lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.11 lib/vendor/celluloid/lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.10 lib/vendor/celluloid/lib/celluloid/supervisor.rb
celluloid-0.7.2 lib/celluloid/supervisor.rb
engineyard-serverside-1.5.23.ruby19.9 lib/vendor/celluloid/lib/celluloid/supervisor.rb
celluloid-0.7.1 lib/celluloid/supervisor.rb
celluloid-0.7.0 lib/celluloid/supervisor.rb