Parent

Included Modules

Files

Class/Module Index [+]

Quicksearch

Tarantool::BlockDB

Public Instance Methods

_one_shard_read(replicas, request_type, body) click to toggle source
# File lib/tarantool/block_db.rb, line 34
def _one_shard_read(replicas, request_type, body)
  for conn in replicas
    if conn.could_be_connected?
      begin
        res = _parse_iproto(conn.send_request(request_type, body))
        raise res  if Exception === res
        return res
      rescue ::IProto::ConnectionError
        # pass
      end
    end
  end
  raise ConnectionError, "no available connections"
end
_one_shard_write(replicas, request_type, body) click to toggle source
# File lib/tarantool/block_db.rb, line 49
def _one_shard_write(replicas, request_type, body)
  i = replicas.size
  while i > 0
    conn = replicas[0]
    if conn.could_be_connected?
      begin
        res = _parse_iproto(conn.send_request(request_type, body))
        raise res  if Exception === res
        return res
      rescue ::IProto::ConnectionError, ::Tarantool::NonMaster
        # pass
      end
    end
    replicas.rotate!
    i -= 1
  end
  raise NoMasterError, "no available master connections"
end
_send_request(shard_numbers, read_write, response) click to toggle source
# File lib/tarantool/block_db.rb, line 6
def _send_request(shard_numbers, read_write, response)
  if @closed
    response.cb.call ::IProto::Disconnected.new("Tarantool is closed")
  else
    response.call_callback begin
      shard_numbers = shard_numbers[0]  if Array === shard_numbers && shard_numbers.size == 1
      if Array === shard_numbers
        _send_to_several_shards(shard_numbers, read_write, response)
      else
        _send_to_one_shard(shard_numbers, read_write, response)
      end
    end
  end
end
_send_to_one_shard(shard_number, read_write, response) click to toggle source
# File lib/tarantool/block_db.rb, line 21
def _send_to_one_shard(shard_number, read_write, response)
  response.parse_response(
    if (replicas = _shard(shard_number)).size == 1
      _parse_iproto(replicas[0].send_request(response.request_type, response.body))
    elsif read_write == :read
      replicas = replicas.shuffle  if @replica_strategy == :round_robin
      _one_shard_read(replicas, response.request_type, response.body)
    else
      _one_shard_write(replicas, response.request_type, response.body)
    end
  )
end
_send_to_several_shards(shard_numbers, read_write, response) click to toggle source
# File lib/tarantool/block_db.rb, line 68
def _send_to_several_shards(shard_numbers, read_write, response)
  results = []
  unless read_write == :replace
    for shard in shard_numbers
      res = _send_to_one_shard(shard, read_write, response)
      Array === res ? results.concat(res) : results << res
    end
  else
    for shard in shard_numbers
      begin
        res = _send_to_one_shard(shard, read_write, response)
        Array === res ? results.concat(res) : results << res
      rescue ::Tarantool::TupleDoesntExists => e
        results << e
      end
    end

    if results.all?{|r| ::Tarantool::TupleDoesntExists === r}
      raise results.first
    else
      results.delete_if{|r| ::Tarantool::TupleDoesntExists === r}
    end
  end
  if Integer === results.first
    results = results.inject(0){|s, i| s + i}
  end
  results
end
primary_interface() click to toggle source
# File lib/tarantool/block_db.rb, line 97
def primary_interface
  :synchronous
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.