class Tarantool::EMDB
Constants
- INITIAL
- IPROTO_CONNECTION_TYPE
Public Instance Methods
_send_request(shard_numbers, read_write, response)
click to toggle source
# File lib/tarantool/em_db.rb, line 23 def _send_request(shard_numbers, read_write, response) if @closed exc = ::IProto::Disconnected.new("Tarantool is closed") if EM.reactor_running? EM.next_tick Curry1.new(response.cb, exc) else response.cb.call exc end else feed = FeedResponse.new(response) 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, feed) else _send_to_one_shard(shard_numbers, read_write, response, feed) end end end
_send_to_one_shard(shard_number, read_write, response, feed)
click to toggle source
# File lib/tarantool/em_db.rb, line 42 def _send_to_one_shard(shard_number, read_write, response, feed) if (replicas = _shard(shard_number)).size == 1 replicas[0].send_request(response.request_type, response.body, OneReplica.new(response, feed)) elsif read_write == :read case @replica_strategy when :round_robin replicas = replicas.shuffle when :prefer_slave replicas = replicas[1..-1].shuffle << replicas[0] end EM.next_tick OneShardRead.new(replicas, response, feed) else EM.next_tick OneShardWrite.new(replicas, response, feed) end end
_send_to_several_shards(shard_numbers, read_write, response, feed)
click to toggle source
# File lib/tarantool/em_db.rb, line 204 def _send_to_several_shards(shard_numbers, read_write, response, feed) concat = read_write != :replace ? Concatter.new(shard_numbers.size, feed) : ConcatterReplace.new(shard_numbers.size, feed) for shard in shard_numbers _send_to_one_shard(shard, read_write, response, concat) end end