module Einhorn::WorkerPool

Public Class Methods

ack_count() click to toggle source
# File lib/einhorn/worker_pool.rb, line 76
def self.ack_count
  acked_unsignaled_modern_workers.length
end
ack_target() click to toggle source
# File lib/einhorn/worker_pool.rb, line 80
def self.ack_target
  Einhorn::State.config[:number]
end
acked_modern_workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 33
def self.acked_modern_workers
  acked_modern_workers_with_state.map {|pid, _| pid}
end
acked_modern_workers_with_state() click to toggle source
# File lib/einhorn/worker_pool.rb, line 25
def self.acked_modern_workers_with_state
  modern_workers_with_state.select {|pid, spec| spec[:acked]}
end
acked_unsignaled_modern_workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 43
def self.acked_unsignaled_modern_workers
  acked_modern_workers_with_state.select do |_, spec|
    spec[:signaled].length == 0
  end.map {|pid, _| pid}
end
missing_worker_count() click to toggle source

Use the number of modern workers, rather than unsignaled modern workers. This means if e.g. we do bunch of decs and then incs, any workers which haven't died yet will count towards our number of workers. Since workers really should be dying shortly after they are USR2'd, that indicates a bad state and we shouldn't make it worse by spinning up more processes. Once they die, order will be restored.

# File lib/einhorn/worker_pool.rb, line 72
def self.missing_worker_count
  ack_target - modern_workers.length
end
modern_workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 29
def self.modern_workers
  modern_workers_with_state.map {|pid, _| pid}
end
modern_workers_with_state() click to toggle source
# File lib/einhorn/worker_pool.rb, line 19
def self.modern_workers_with_state
  workers_with_state.select do |pid, spec|
    spec[:version] == Einhorn::State.version
  end
end
old_workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 88
def self.old_workers
  unsignaled_workers - modern_workers
end
unacked_unsignaled_modern_workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 61
def self.unacked_unsignaled_modern_workers
  unacked_unsignaled_modern_workers_with_state.map {|pid, _| pid}
end
unacked_unsignaled_modern_workers_with_state() click to toggle source
# File lib/einhorn/worker_pool.rb, line 55
def self.unacked_unsignaled_modern_workers_with_state
  modern_workers_with_state.select {|pid, spec|
    !spec[:acked] && spec[:signaled].length == 0
  }
end
unsignaled_count() click to toggle source
# File lib/einhorn/worker_pool.rb, line 84
def self.unsignaled_count
  unsignaled_modern_workers_with_state.length
end
unsignaled_modern_workers_with_priority() click to toggle source
# File lib/einhorn/worker_pool.rb, line 49
def self.unsignaled_modern_workers_with_priority
  unsignaled_modern_workers_with_state.sort_by do |pid, spec|
    spec[:acked] ? 1 : 0
  end.map {|pid, _| pid}
end
unsignaled_modern_workers_with_state() click to toggle source
# File lib/einhorn/worker_pool.rb, line 37
def self.unsignaled_modern_workers_with_state
  modern_workers_with_state.select do |_, spec|
    spec[:signaled].length == 0
  end
end
unsignaled_workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 13
def self.unsignaled_workers
  workers_with_state.select do |pid, spec|
    spec[:signaled].length == 0
  end.map {|pid, _| pid}
end
workers() click to toggle source
# File lib/einhorn/worker_pool.rb, line 9
def self.workers
  workers_with_state.map {|pid, _| pid}
end
workers_with_state() click to toggle source
# File lib/einhorn/worker_pool.rb, line 3
def self.workers_with_state
  Einhorn::State.children.select do |pid, spec|
    spec[:type] == :worker
  end
end