class Ignite::Cache

Attributes

cache_id[R]
client[R]
name[R]

Public Class Methods

new(client, name) click to toggle source
# File lib/ignite/cache.rb, line 5
def initialize(client, name)
  @client = client
  @name = name
  @cache_id = hash_code(name)
end

Public Instance Methods

clear() click to toggle source
# File lib/ignite/cache.rb, line 156
def clear
  req = Request.new(OP_CACHE_CLEAR)
  req.int cache_id
  req.byte 0

  client.send_request(req)
  nil
end
clear_key(key) click to toggle source
# File lib/ignite/cache.rb, line 165
def clear_key(key)
  req = Request.new(OP_CACHE_CLEAR_KEY)
  req.int cache_id
  req.byte 0
  req.data_object key

  client.send_request(req)
  nil
end
clear_keys(keys) click to toggle source
# File lib/ignite/cache.rb, line 175
def clear_keys(keys)
  req = Request.new(OP_CACHE_CLEAR_KEYS)
  req.int cache_id
  req.byte 0
  req.int keys.size
  keys.each do |key|
    req.data_object key
  end

  client.send_request(req)
  nil
end
contains_key(key)
Alias for: key?
contains_keys(keys)
Alias for: keys?
destroy() click to toggle source
# File lib/ignite/cache.rb, line 287
def destroy
  req = Request.new(OP_CACHE_DESTROY)
  req.int cache_id
  client.send_request(req)
  nil
end
get(key) click to toggle source
# File lib/ignite/cache.rb, line 11
def get(key)
  req = Request.new(OP_CACHE_GET)
  req.int cache_id
  req.byte 0
  req.data_object key

  res = client.send_request(req)
  res.read_data_object
end
get_all(keys) click to toggle source
# File lib/ignite/cache.rb, line 21
def get_all(keys)
  req = Request.new(OP_CACHE_GET_ALL)
  req.int cache_id
  req.byte 0
  req.int keys.size
  keys.each do |key|
    req.data_object key
  end

  res = client.send_request(req)
  result = {}
  res.read_int.times do
    result[res.read_data_object] = res.read_data_object
  end
  result
end
get_and_put(key, value) click to toggle source
# File lib/ignite/cache.rb, line 86
def get_and_put(key, value)
  req = Request.new(OP_CACHE_GET_AND_PUT)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object value

  client.send_request(req).read_data_object
end
get_and_put_if_absent(key, value) click to toggle source
# File lib/ignite/cache.rb, line 125
def get_and_put_if_absent(key, value)
  req = Request.new(OP_CACHE_GET_AND_PUT_IF_ABSENT)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object value

  client.send_request(req).read_data_object
end
get_and_remove(key) click to toggle source
# File lib/ignite/cache.rb, line 106
def get_and_remove(key)
  req = Request.new(OP_CACHE_GET_AND_REMOVE)
  req.int cache_id
  req.byte 0
  req.data_object key

  client.send_request(req).read_data_object
end
get_and_replace(key, value) click to toggle source
# File lib/ignite/cache.rb, line 96
def get_and_replace(key, value)
  req = Request.new(OP_CACHE_GET_AND_REPLACE)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object value

  client.send_request(req).read_data_object
end
get_or_create() click to toggle source
# File lib/ignite/cache.rb, line 280
def get_or_create
  req = Request.new(OP_CACHE_GET_OR_CREATE_WITH_NAME)
  req.string name
  client.send_request(req)
  self
end
get_size()
Alias for: size
key?(key) click to toggle source
# File lib/ignite/cache.rb, line 63
def key?(key)
  req = Request.new(OP_CACHE_CONTAINS_KEY)
  req.int cache_id
  req.byte 0
  req.data_object key

  client.send_request(req).read_bool
end
Also aliased as: contains_key
keys?(keys) click to toggle source
# File lib/ignite/cache.rb, line 73
def keys?(keys)
  req = Request.new(OP_CACHE_CONTAINS_KEYS)
  req.int cache_id
  req.byte 0
  req.int keys.size
  keys.each do |key|
    req.data_object key
  end

  client.send_request(req).read_bool
end
Also aliased as: contains_keys
put(key, value) click to toggle source
# File lib/ignite/cache.rb, line 38
def put(key, value)
  req = Request.new(OP_CACHE_PUT)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object value

  client.send_request(req)
  nil
end
put_all(objects) click to toggle source
# File lib/ignite/cache.rb, line 49
def put_all(objects)
  req = Request.new(OP_CACHE_PUT_ALL)
  req.int cache_id
  req.byte 0
  req.int objects.size
  objects.each do |key, value|
    req.data_object key
    req.data_object value
  end

  client.send_request(req)
  nil
end
put_if_absent(key, value) click to toggle source
# File lib/ignite/cache.rb, line 115
def put_if_absent(key, value)
  req = Request.new(OP_CACHE_PUT_IF_ABSENT)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object value

  client.send_request(req).read_bool
end
remove_all() click to toggle source
# File lib/ignite/cache.rb, line 232
def remove_all
  req = Request.new(OP_CACHE_REMOVE_ALL)
  req.int cache_id
  req.byte 0

  client.send_request(req)
  nil
end
remove_if_equals(key, compare) click to toggle source
# File lib/ignite/cache.rb, line 197
def remove_if_equals(key, compare)
  req = Request.new(OP_CACHE_REMOVE_IF_EQUALS)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object compare

  client.send_request(req).read_bool
end
remove_key(key) click to toggle source
# File lib/ignite/cache.rb, line 188
def remove_key(key)
  req = Request.new(OP_CACHE_REMOVE_KEY)
  req.int cache_id
  req.byte 0
  req.data_object key

  client.send_request(req).read_bool
end
remove_keys(keys) click to toggle source
# File lib/ignite/cache.rb, line 219
def remove_keys(keys)
  req = Request.new(OP_CACHE_REMOVE_KEYS)
  req.int cache_id
  req.byte 0
  req.int keys.size
  keys.each do |key|
    req.data_object key
  end

  client.send_request(req)
  nil
end
replace(key, value) click to toggle source
# File lib/ignite/cache.rb, line 135
def replace(key, value)
  req = Request.new(OP_CACHE_REPLACE)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object value

  client.send_request(req).read_bool
end
replace_if_equals(key, compare, value) click to toggle source
# File lib/ignite/cache.rb, line 145
def replace_if_equals(key, compare, value)
  req = Request.new(OP_CACHE_REPLACE_IF_EQUALS)
  req.int cache_id
  req.byte 0
  req.data_object key
  req.data_object compare
  req.data_object value

  client.send_request(req).read_bool
end
scan(page_size: 1000) { |read_data_object, read_data_object| ... } click to toggle source
# File lib/ignite/cache.rb, line 241
def scan(page_size: 1000)
  return to_enum(:scan, page_size: page_size) unless block_given?

  # TODO filter
  filter = nil

  req = Request.new(OP_QUERY_SCAN)
  req.int cache_id
  req.byte 0
  req.data_object filter
  req.byte 0 unless filter.nil?
  req.int page_size
  req.int(-1)
  req.bool false

  res = client.send_request(req)
  cursor_id = res.read_long
  row_count = res.read_int
  row_count.times do
    yield res.read_data_object, res.read_data_object
  end
  more_results = res.read_bool

  while more_results
    req = Request.new(OP_QUERY_SCAN_CURSOR_GET_PAGE)
    req.long cursor_id

    # docs for OP_QUERY_SCAN_CURSOR_GET_PAGE response are incorrect
    # 1. no cursor_id
    # 2. row_count is int, not log
    res = client.send_request(req)
    row_count = res.read_int
    row_count.times do
      yield res.read_data_object, res.read_data_object
    end
    more_results = res.read_bool
  end
end
size() click to toggle source

TODO add arguments

# File lib/ignite/cache.rb, line 208
def size
  req = Request.new(OP_CACHE_GET_SIZE)
  req.int cache_id
  req.byte 0
  req.int 0
  req.byte 0

  client.send_request(req).read_long
end
Also aliased as: get_size

Private Instance Methods

hash_code(string) click to toggle source

same as Python ignite.apache.org/docs/latest/binary-client-protocol/data-format#hash-code

# File lib/ignite/cache.rb, line 298
def hash_code(string)
  result = 0
  string.each_byte do |char|
    result = (((31 * result + char.ord) ^ 0x80000000) & 0xffffffff) - 0x80000000
  end
  result
end