primary_interface()
click to toggle source
# File lib/tarantool/block_db.rb, line 97 def primary_interface :synchronous end
DB
# 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
# 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
# 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
# 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
# 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
Generated with the Darkfish Rdoc Generator 2.