Class: StrokeDB::Chunk
Instance Attribute Summary collapse
-
#cut_level ⇒ Object
Returns the value of attribute cut_level.
-
#next_chunk ⇒ Object
Returns the value of attribute next_chunk.
-
#next_chunk_uuid ⇒ Object
Returns the value of attribute next_chunk_uuid.
-
#prev_chunk ⇒ Object
Returns the value of attribute prev_chunk.
-
#skiplist ⇒ Object
Returns the value of attribute skiplist.
-
#store_uuid ⇒ Object
Returns the value of attribute store_uuid.
-
#timestamp ⇒ Object
Returns the value of attribute timestamp.
-
#uuid ⇒ Object
Returns the value of attribute uuid.
Class Method Summary collapse
-
.from_raw(raw) {|chunk| ... } ⇒ Object
TODO: lazify.
Instance Method Summary collapse
- #delete(uuid) ⇒ Object
- #each(&block) ⇒ Object
- #eql?(chunk) ⇒ Boolean
- #find(uuid, default = nil) ⇒ Object
- #find_nearest(uuid, default = nil) ⇒ Object
-
#find_next_node(node) ⇒ Object
Finds next node across separate chunks.
- #find_node(uuid) ⇒ Object
- #first_node ⇒ Object
- #first_uuid ⇒ Object
-
#initialize(cut_level) ⇒ Chunk
constructor
A new instance of Chunk.
- #insert(uuid, raw_doc, __cheaters_level = nil, __timestamp = nil) ⇒ Object
- #size ⇒ Object
- #to_raw ⇒ Object
Constructor Details
Instance Attribute Details
#cut_level ⇒ Object
Returns the value of attribute cut_level.
3 4 5 |
# File 'lib/stores/skiplist_store/chunk.rb', line 3 def cut_level @cut_level end |
#next_chunk ⇒ Object
Returns the value of attribute next_chunk.
3 4 5 |
# File 'lib/stores/skiplist_store/chunk.rb', line 3 def next_chunk @next_chunk end |
#next_chunk_uuid ⇒ Object
Returns the value of attribute next_chunk_uuid.
4 5 6 |
# File 'lib/stores/skiplist_store/chunk.rb', line 4 def next_chunk_uuid @next_chunk_uuid end |
#prev_chunk ⇒ Object
Returns the value of attribute prev_chunk.
3 4 5 |
# File 'lib/stores/skiplist_store/chunk.rb', line 3 def prev_chunk @prev_chunk end |
#skiplist ⇒ Object
Returns the value of attribute skiplist.
3 4 5 |
# File 'lib/stores/skiplist_store/chunk.rb', line 3 def skiplist @skiplist end |
#store_uuid ⇒ Object
Returns the value of attribute store_uuid.
5 6 7 |
# File 'lib/stores/skiplist_store/chunk.rb', line 5 def store_uuid @store_uuid end |
#timestamp ⇒ Object
Returns the value of attribute timestamp.
3 4 5 |
# File 'lib/stores/skiplist_store/chunk.rb', line 3 def @timestamp end |
#uuid ⇒ Object
Returns the value of attribute uuid.
3 4 5 |
# File 'lib/stores/skiplist_store/chunk.rb', line 3 def uuid @uuid end |
Class Method Details
.from_raw(raw) {|chunk| ... } ⇒ Object
TODO: lazify
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/stores/skiplist_store/chunk.rb', line 75 def self.from_raw(raw) chunk = Chunk.new(raw['cut_level']) chunk.uuid = raw['uuid'] chunk.next_chunk_uuid = raw['next_uuid'] chunk. = raw['timestamp'] chunk.store_uuid = raw['store_uuid'] chunk.skiplist.raw_insert(raw['nodes']) do |rn| [rn['key'], rn['value'], rn['forward'].size, rn['timestamp']] end yield(chunk) if block_given? chunk end |
Instance Method Details
#delete(uuid) ⇒ Object
24 25 26 |
# File 'lib/stores/skiplist_store/chunk.rb', line 24 def delete(uuid) skiplist.delete(uuid) end |
#each(&block) ⇒ Object
68 69 70 |
# File 'lib/stores/skiplist_store/chunk.rb', line 68 def each(&block) skiplist.each &block end |
#eql?(chunk) ⇒ Boolean
114 115 116 |
# File 'lib/stores/skiplist_store/chunk.rb', line 114 def eql?(chunk) chunk.uuid == @uuid && chunk.skiplist.eql?(@skiplist) end |
#find(uuid, default = nil) ⇒ Object
28 29 30 |
# File 'lib/stores/skiplist_store/chunk.rb', line 28 def find(uuid, default = nil) skiplist.find(uuid, default) end |
#find_nearest(uuid, default = nil) ⇒ Object
36 37 38 |
# File 'lib/stores/skiplist_store/chunk.rb', line 36 def find_nearest(uuid, default = nil) skiplist.find_nearest(uuid, default) end |
#find_next_node(node) ⇒ Object
Finds next node across separate chunks
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/stores/skiplist_store/chunk.rb', line 41 def find_next_node(node) chunk = self node2 = node.next if node2.is_a?(Skiplist::TailNode) chunk = chunk.next_chunk unless chunk.nil? node2 = chunk.first_node else node2 = nil end end node2 end |
#find_node(uuid) ⇒ Object
32 33 34 |
# File 'lib/stores/skiplist_store/chunk.rb', line 32 def find_node(uuid) skiplist.find_node(uuid) end |
#first_node ⇒ Object
60 61 62 |
# File 'lib/stores/skiplist_store/chunk.rb', line 60 def first_node skiplist.first_node end |
#first_uuid ⇒ Object
56 57 58 |
# File 'lib/stores/skiplist_store/chunk.rb', line 56 def first_uuid skiplist.first_node.key end |
#insert(uuid, raw_doc, __cheaters_level = nil, __timestamp = nil) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/stores/skiplist_store/chunk.rb', line 10 def insert(uuid, raw_doc, __cheaters_level = nil, = nil) @uuid ||= uuid __cheaters_level ||= $DEBUG_CHEATERS_LEVEL a, new_list = skiplist.insert(uuid, raw_doc, __cheaters_level, ) if new_list tmp = Chunk.new(@cut_level) tmp.skiplist = new_list tmp.next_chunk = @next_chunk if @next_chunk @next_chunk = tmp @next_chunk.uuid = uuid end [self, @next_chunk] end |
#size ⇒ Object
64 65 66 |
# File 'lib/stores/skiplist_store/chunk.rb', line 64 def size skiplist.size end |
#to_raw ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/stores/skiplist_store/chunk.rb', line 88 def to_raw # enumerate nodes skiplist.each_with_index do |node, i| node._serialized_index = i end # now we know keys' positions right in the nodes nodes = skiplist.map do |node| { 'key' => node.key, 'forward' => node.forward.map{|n| n._serialized_index || 0 }, 'value' => node.value, 'timestamp' => node. } end { 'nodes' => nodes, 'cut_level' => @cut_level, 'uuid' => @uuid, # TODO: may not be needed 'next_uuid' => next_chunk ? next_chunk.uuid : nil, 'timestamp' => @timestamp, 'store_uuid' => @store_uuid } end |