class Aerospike::Info
Polymorphic value classes used to efficiently serialize objects into the wire protocol.
Public Class Methods
parse_multiple_response(buf_length, buffer)
click to toggle source
# File lib/aerospike/info.rb, line 57 def self.parse_multiple_response(buf_length, buffer) res = {} buffer.read(0, buf_length).split("\n").each do |vstr| k, v = vstr.split("\t") res[k] = v end res end
request(conn, *commands)
click to toggle source
# File lib/aerospike/info.rb, line 26 def self.request(conn, *commands) buffer = Buffer.get # If conservative estimate may be exceeded, get exact estimate # to preserve memory and resize buffer. offset = 8 commands.each do |command| offset += command.bytesize + 1 end buffer.resize(offset) offset = 8 # Skip size field. # The command format is: <name1>\n<name2>\n... commands.each do |command| buffer.write_binary(command, offset) offset += command.bytesize buffer.write_byte("\n", offset) offset += 1 end begin buf_length = send_command(conn, offset, buffer) parse_multiple_response(buf_length, buffer) ensure Buffer.put(buffer) end end
send_command(conn, offset, buffer)
click to toggle source
# File lib/aerospike/info.rb, line 68 def self.send_command(conn, offset, buffer) # Write size field. size = (offset - 8) | (2 << 56) | (1 << 48) buffer.write_int64(size, 0) conn.write(buffer, offset) # Read - reuse input buffer. conn.read(buffer, 8) size = buffer.read_int64(0) length = size & 0xFFFFFFFFFFFF buffer.resize(length) conn.read(buffer, length) length rescue => e Aerospike.logger.error(e) conn.close if conn raise e end