module RailsKvsDriver::Session

Public Instance Methods

session(driver_config, &block) click to toggle source

connect kvs and exec block. This function pools the connecting driver.

@example

config = {
  :host           => 'localhost', # host of KVS.
  :port           => 6379,        # port of KVS.
  :namespace      => 'Example',   # namespace of avoid a conflict with key
  :timeout_sec    => 5,           # timeout seconds.
  :pool_size      => 5,           # connection pool size.
  :config_key     => :none        # this key is option.(defaults=:none)
                                  #  when set this key.
                                  #  will refer to a connection-pool based on config_key,
                                  #  even if driver setting is the same without this key.
}
result = Driver.session(config) do |kvs|
  kvs['example'] = 'abc'
  kvs['example']
end

puts result  # => 'abc'

@param driver_config [Hash] driver_config. @param &block [{|driver_instance| something… }] exec block. @return [Object] status

# File lib/rails_kvs_driver/session.rb, line 43
def session(driver_config, &block)
  driver_config = validate_driver_config!(driver_config)
  driver_connection_pool(self, driver_config).with do |kvs_instance|
    block.call(self.new(kvs_instance, driver_config))
  end
end

Private Instance Methods

driver_connection_pool(driver_class, driver_config) click to toggle source

get driver connection pool if doesn’t exist pool, it’s made newly.

@param driver_class [RailsKvsDriver::Base] driver_class @param driver_config [Hash] driver_config @return [ConnectionPool] connection pool of driver

# File lib/rails_kvs_driver/session.rb, line 58
def driver_connection_pool(driver_class, driver_config)
  pool = search_driver_connection_pool(driver_class, driver_config)
  return (pool.nil?) ? set_driver_connection_pool(driver_class, driver_config) : pool
end
equal_driver_config?(config1, config2) click to toggle source

compare driver config.

@param config1 [Hash] driver config @param config2 [Hash] driver config

# File lib/rails_kvs_driver/session.rb, line 100
def equal_driver_config?(config1, config2)
  return false unless config1[:host]        == config2[:host]
  return false unless config1[:port]        == config2[:port]
  return false unless config1[:timeout_sec] == config2[:timeout_sec]
  return false unless config1[:pool_size]   == config2[:pool_size]
  return false unless config1[:config_key]  == config2[:config_key]
  return true
end
search_driver_connection_pool(driver_class, driver_config) click to toggle source

search driver connection pool

@param driver_class [RailsKvsDriver::Base] driver_class @param driver_config [Hash] driver_config @return [ConnectionPool] connection pool of driver, or nil

# File lib/rails_kvs_driver/session.rb, line 86
def search_driver_connection_pool(driver_class, driver_config)
  if RailsKvsDriver::KVS_CONNECTION_POOL.has_key?(driver_class.name)
    RailsKvsDriver::KVS_CONNECTION_POOL[driver_class.name].each do |pool_set|
      return pool_set[:pool] if equal_driver_config?(pool_set[:config], driver_config)
    end
  end

  return nil
end
set_driver_connection_pool(driver_class, driver_config) click to toggle source

set driver connection pool

@param driver_class [RailsKvsDriver::Base] driver_class @param driver_config [Hash] driver_config @return [ConnectionPool] connection pool of driver

# File lib/rails_kvs_driver/session.rb, line 68
def set_driver_connection_pool(driver_class, driver_config)
  conf = {
      size:     driver_config[:pool_size],
      timeout:  driver_config[:timeout_sec]
  }
  pool = ConnectionPool.new(conf) { driver_class.connect(driver_config) }

  RailsKvsDriver::KVS_CONNECTION_POOL[driver_class.name] ||= Array.new
  RailsKvsDriver::KVS_CONNECTION_POOL[driver_class.name].push({config: driver_config, pool: pool})

  return pool
end