Class: VoldemortClient

Inherits:
Object
  • Object
show all
Defined in:
lib/voldemort-rb.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(db_name, *hosts, &block) ⇒ VoldemortClient

Returns a new instance of VoldemortClient.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/voldemort-rb.rb', line 15

def initialize(db_name, *hosts, &block)
  self.conflict_resolver = block unless !block
  self.connection = TCPConnection.new(db_name, hosts) # implement and modifiy if you don't want to use TCP protobuf.
  self.connection.bootstrap
  
  case(self.connection.key_serializer_type)
    when 'json'
      self.key_serializer = VoldemortJsonBinarySerializer.new(self.connection.key_serializer_schemas)
    else
      self.key_serializer = VoldemortPassThroughSerializer.new({})
  end
  
  case(self.connection.value_serializer_type)
    when 'json'
      self.value_serializer = VoldemortJsonBinarySerializer.new(self.connection.value_serializer_schemas)
    else
      self.value_serializer = VoldemortPassThroughSerializer.new({})
  end
end

Instance Attribute Details

#conflict_resolverObject

Returns the value of attribute conflict_resolver.



11
12
13
# File 'lib/voldemort-rb.rb', line 11

def conflict_resolver
  @conflict_resolver
end

#connectionObject

Returns the value of attribute connection.



10
11
12
# File 'lib/voldemort-rb.rb', line 10

def connection
  @connection
end

#key_serializerObject

Returns the value of attribute key_serializer.



12
13
14
# File 'lib/voldemort-rb.rb', line 12

def key_serializer
  @key_serializer
end

#value_serializerObject

Returns the value of attribute value_serializer.



13
14
15
# File 'lib/voldemort-rb.rb', line 13

def value_serializer
  @value_serializer
end

Instance Method Details

#delete(key) ⇒ Object



64
65
66
# File 'lib/voldemort-rb.rb', line 64

def delete(key)
  self.connection.delete(key_serializer.to_bytes(key))
end

#get(key) ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/voldemort-rb.rb', line 35

def get(key)
  versions = self.connection.get(key_serializer.to_bytes(key))
  version  = self.resolve_conflicts(versions.versioned)
  if version
    value_serializer.to_object(version.value)
  else
    nil
  end
end

#get_all(keys) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/voldemort-rb.rb', line 45

def get_all(keys)
  serialized_keys = []
  
  keys.each do |key|
    serialized_keys << key_serializer.to_bytes(key)
  end
  
  all_version = self.connection.get_all(keys)
  values = {}
  all_version.values.collect do |v|
    values[v.key] = value_serializer.to_object(self.resolve_conflicts(v.versions).value)
  end
  values
end

#put(key, value, version = nil) ⇒ Object



60
61
62
# File 'lib/voldemort-rb.rb', line 60

def put(key, value, version = nil)
  self.connection.put(key_serializer.to_bytes(key), value_serializer.to_bytes(value))
end

#resolve_conflicts(versions) ⇒ Object



68
69
70
71
72
# File 'lib/voldemort-rb.rb', line 68

def resolve_conflicts(versions)
  return self.conflict_resolver.call(versions) if self.conflict_resolver
  # by default just return the version that has the most recent timestamp.
  versions.max { |a, b| a.version.timestamp <=> b.version.timestamp }
end