Class: Tarantool::EMDB::OneShardWrite

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) ⇒ OneShardWrite

Returns a new instance of OneShardWrite.



98
99
100
101
102
103
104
# File 'lib/tarantool/em_db.rb', line 98

def initialize(replicas, response, feed)
  @replicas_origin = replicas
  @replicas = replicas.dup
  @i = replicas.size
  @response = response
  @feed = feed
end

Instance Method Details

#call(result = INITIAL) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/tarantool/em_db.rb', line 113

def call(result=INITIAL)
  result = _parse_iproto(result)  unless result == INITIAL
  case result
  when INITIAL, ::IProto::ConnectionError, ::Tarantool::NonMaster
    rotate!  if Exception === result
    rotate!  until @i <= 0 || (repl = @replicas[0]).could_be_connected?
    if @i <= 0
      EM.next_tick Curry1.new(@feed, NoMasterError.new("no available master connections"))
      return
    end
    repl.send_request(@response.request_type, @response.body, self)
  when Exception
    @feed.call result
  else
    @replicas_origin.replace @replicas
    @feed.call @response.parse_response(result)
  end
end

#rotate!Object



106
107
108
109
110
111
# File 'lib/tarantool/em_db.rb', line 106

def rotate!
  if @i > 0
    @i -= 1
    @replicas.rotate!
  end
end