Sha256: 511252b7d60be496ebdbb7faa0f98d0f7ffdb0bc232775f893511da02f71f8a4

Contents?: true

Size: 1.39 KB

Versions: 25

Compression:

Stored size: 1.39 KB

Contents

module Backburner
  module Workers
    class Forking < Worker
      # Used to prepare job queues before processing jobs.
      # Setup beanstalk tube_names and watch all specified tubes for jobs.
      #
      # @raise [Beaneater::NotConnected] If beanstalk fails to connect.
      # @example
      #   @worker.prepare
      #
      def prepare
        self.tube_names.map! { |name| expand_tube_name(name)  }.uniq!
        log_info "Working #{tube_names.size} queues: [ #{tube_names.join(', ')} ]"
        self.connection.tubes.watch!(*self.tube_names)
      end

      # Starts processing new jobs indefinitely.
      # Primary way to consume and process jobs in specified tubes.
      #
      # @example
      #   @worker.start
      #
      def start
        prepare
        loop { fork_one_job }
      end

      # Need to re-establish the connection to the server(s) after forking
      # Waits for a job, works the job, and exits
      def fork_one_job
        pid = Process.fork do
          work_one_job
          coolest_exit
        end
        Process.wait(pid)
      end

      def on_reconnect(conn)
        @connection = conn
        prepare
      end

      # Exit with Kernel.exit! to avoid at_exit callbacks that should belongs to
      # parent process
      # We will use exitcode 99 that means the fork reached the garbage number
      def coolest_exit
        Kernel.exit! 99
      end

    end
  end
end

Version data entries

25 entries across 25 versions & 2 rubygems

Version Path
backburner-1.6.1 lib/backburner/workers/forking.rb
backburner-1.6.0 lib/backburner/workers/forking.rb
backburner-allq-1.0.18 lib/backburner/workers/forking.rb
backburner-allq-1.0.17 lib/backburner/workers/forking.rb
backburner-allq-1.0.16 lib/backburner/workers/forking.rb
backburner-allq-1.0.14 lib/backburner/workers/forking.rb
backburner-allq-1.0.13 lib/backburner/workers/forking.rb
backburner-allq-1.0.12 lib/backburner/workers/forking.rb
backburner-allq-1.0.11 lib/backburner/workers/forking.rb
backburner-allq-1.0.9 lib/backburner/workers/forking.rb
backburner-allq-1.0.8 lib/backburner/workers/forking.rb
backburner-allq-1.0.7 lib/backburner/workers/forking.rb
backburner-allq-1.0.5 lib/backburner/workers/forking.rb
backburner-allq-1.0.4 lib/backburner/workers/forking.rb
backburner-allq-1.0.3 lib/backburner/workers/forking.rb
backburner-allq-1.0.2 lib/backburner/workers/forking.rb
backburner-allq-1.0.1 lib/backburner/workers/forking.rb
backburner-allq-1.0.0 lib/backburner/workers/forking.rb
backburner-1.5.0 lib/backburner/workers/forking.rb
backburner-1.4.1 lib/backburner/workers/forking.rb