class RocketJob::Subscribers::Worker

Attributes

supervisor[R]

Public Class Methods

new(supervisor) click to toggle source
# File lib/rocket_job/subscribers/worker.rb, line 8
def initialize(supervisor)
  @supervisor = supervisor
end

Public Instance Methods

kill(server_id:, worker_id:, wait_timeout: 3) click to toggle source
# File lib/rocket_job/subscribers/worker.rb, line 12
def kill(server_id:, worker_id:, wait_timeout: 3)
  return unless my_server?(server_id)

  worker = locate_worker(worker_id)
  return unless worker

  worker.shutdown!
  worker.join(wait_timeout)
  worker.kill

  logger.info "Killed"
end
stop(server_id:, worker_id:) click to toggle source
# File lib/rocket_job/subscribers/worker.rb, line 25
def stop(server_id:, worker_id:)
  return unless my_server?(server_id)

  worker = locate_worker(worker_id)
  return unless worker

  worker.shutdown!
  logger.info "Stopped Worker: #{worker_id}"
end
thread_dump(server_id:, worker_id:) click to toggle source
# File lib/rocket_job/subscribers/worker.rb, line 35
def thread_dump(server_id:, worker_id:)
  return unless my_server?(server_id)

  worker = locate_worker(worker_id)
  return unless worker

  logger.info "Thread dump Worker: #{worker_id}"
  logger.backtrace(thread: worker.thread) if worker.thread && worker.alive?
end

Private Instance Methods

locate_worker(worker_id) click to toggle source
# File lib/rocket_job/subscribers/worker.rb, line 51
def locate_worker(worker_id)
  return unless worker_id

  worker = supervisor.worker_pool.find(worker_id)
  return unless worker&.alive?

  worker
end
my_server?(server_id) click to toggle source
# File lib/rocket_job/subscribers/worker.rb, line 47
def my_server?(server_id)
  server_id == supervisor.server.id
end