Class: Tarantool::EMDB::OneShardRead

Inherits:
Object
  • Object
show all
Includes:
ParseIProto
Defined in:
lib/tarantool/em_db.rb

Constant Summary

Constants included from Util::Packer

Util::Packer::INT16, Util::Packer::INT32, Util::Packer::INT64, Util::Packer::INT8, Util::Packer::MAX_INT16, Util::Packer::MAX_INT32, Util::Packer::MAX_INT64, Util::Packer::MAX_INT8, Util::Packer::MAX_SINT16, Util::Packer::MAX_SINT32, Util::Packer::MAX_SINT64, Util::Packer::MAX_SINT8, Util::Packer::MIN_INT, Util::Packer::MIN_SINT16, Util::Packer::MIN_SINT32, Util::Packer::MIN_SINT64, Util::Packer::MIN_SINT8, Util::Packer::SINT16, Util::Packer::SINT32, Util::Packer::SINT64, Util::Packer::SINT8

Instance Method Summary collapse

Methods included from ParseIProto

#_parse_iproto

Constructor Details

#initialize(replicas, response, feed) ⇒ OneShardRead

Returns a new instance of OneShardRead.



76
77
78
79
80
81
# File 'lib/tarantool/em_db.rb', line 76

def initialize(replicas, response, feed)
  @replicas = replicas
  @i = -1
  @response = response
  @feed = feed
end

Instance Method Details

#call(result = INITIAL) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/tarantool/em_db.rb', line 83

def call(result=INITIAL)
  result = _parse_iproto(result)  unless result == INITIAL
  case result
  when INITIAL, ::IProto::ConnectionError
    begin
      if (@i += 1) >= @replicas.size
        EM.next_tick Curry1.new(@feed, ConnectionError.new("no available connections"))
        return
      end
    end until (repl = @replicas[@i]).could_be_connected?
    repl.send_request(@response.request_type, @response.body, self)
  when Exception
    @feed.call result
  else
    @feed.call @response.parse_response_for_cb(result)
  end
end