class DruidDB::Node::Broker

Constants

QUERY_PATH

Attributes

config[R]
zk[R]

Public Class Methods

new(config, zk) click to toggle source
# File lib/druiddb/node/broker.rb, line 7
def initialize(config, zk)
  @config = config
  @zk = zk
end

Public Instance Methods

connection() click to toggle source
# File lib/druiddb/node/broker.rb, line 12
def connection
  broker = zk.registry["#{config.discovery_path}/druid:broker"].first
  raise DruidDB::ConnectionError, 'no druid brokers available' if broker.nil?
  zk.registry["#{config.discovery_path}/druid:broker"].rotate! # round-robin load balancing
  DruidDB::Connection.new(host: broker[:host], port: broker[:port])
end
query(query_object) click to toggle source
# File lib/druiddb/node/broker.rb, line 19
def query(query_object)
  begin
    response = connection.post(QUERY_PATH, query_object)
  rescue DruidDB::ConnectionError
    # TODO: Log
    # TODO: This sucks, make it better
    (zk.registry["#{config.discovery_path}/druid:broker"].size - 1).times do
      response = connection.post(QUERY_PATH, query_object)
      break if response.code.to_i == 200
    end
  end
  raise QueryError unless response.code.to_i == 200
  JSON.parse(response.body)
end