Parent

Included Modules

Chef::Expander::VNode

Attributes

supervise_interval[R]
vnode_number[R]

Public Class Methods

new(vnode_number, supervisor, opts={}) click to toggle source
# File lib/chef/expander/vnode.rb, line 37
def initialize(vnode_number, supervisor, opts={})
  @vnode_number = vnode_number.to_i
  @supervisor   = supervisor
  @queue    = nil
  @stopped  = false
  @supervise_interval = opts[:supervise_interval] || 30
end

Public Instance Methods

abort_on_multiple_subscribe() click to toggle source
# File lib/chef/expander/vnode.rb, line 69
def abort_on_multiple_subscribe
  queue.status do |message_count, subscriber_count|
    if subscriber_count.to_i > 1
      log.error { "Detected extra consumers (#{subscriber_count} total) on queue #{queue_name}, cancelling subscription" }
      stop
    end
  end
end
control_queue_name() click to toggle source
# File lib/chef/expander/vnode.rb, line 100
def control_queue_name
  "#{queue_name}-control"
end
queue() click to toggle source
# File lib/chef/expander/vnode.rb, line 89
def queue
  @queue ||= begin
    log.debug { "declaring queue #{queue_name}" }
    MQ.queue(queue_name, :passive => false, :durable => true)
  end
end
queue_name() click to toggle source
# File lib/chef/expander/vnode.rb, line 96
def queue_name
  "vnode-#{@vnode_number}"
end
start() click to toggle source
# File lib/chef/expander/vnode.rb, line 45
def start
  @supervisor.vnode_added(self)

  subscription_confirmed = Proc.new do
    abort_on_multiple_subscribe
    supervise_consumer_count
  end

  queue.subscribe(:ack => true, :confirm => subscription_confirmed) do |headers, payload|
    log.debug {"got #{payload} size(#{payload.size} bytes) on queue #{queue_name}"}
    solrizer = Solrizer.new(payload) { headers.ack }
    solrizer.run
  end

rescue MQ::Error => e
  log.error {"Failed to start subscriber on #{queue_name} #{e.class.name}: #{e.message}"}
end
stop() click to toggle source
# File lib/chef/expander/vnode.rb, line 78
def stop
  log.debug {"Cancelling subscription on queue #{queue_name.inspect}"}
  queue.unsubscribe if queue.subscribed?
  @supervisor.vnode_removed(self)
  @stopped = true
end
stopped?() click to toggle source
# File lib/chef/expander/vnode.rb, line 85
def stopped?
  @stopped
end
supervise_consumer_count() click to toggle source
# File lib/chef/expander/vnode.rb, line 63
def supervise_consumer_count
  EM.add_periodic_timer(supervise_interval) do
    abort_on_multiple_subscribe
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.