Class: PEROBS::BTreeNodeCache
- Inherits:
-
Object
- Object
- PEROBS::BTreeNodeCache
- Defined in:
- lib/perobs/BTreeNodeCache.rb
Instance Method Summary collapse
- #_collect(address, ruby_object_id) ⇒ Object
-
#clear ⇒ Object
Remove all nodes from the cache.
-
#delete(address) ⇒ Object
Remove a node from the cache.
-
#flush(now = false) ⇒ Object
Flush all dirty nodes into the backing store.
- #get(address) ⇒ Object
-
#initialize(tree) ⇒ BTreeNodeCache
constructor
A new instance of BTreeNodeCache.
- #insert(node, modified = true) ⇒ Object
- #set_root(node) ⇒ Object
Constructor Details
#initialize(tree) ⇒ BTreeNodeCache
Returns a new instance of BTreeNodeCache.
34 35 36 37 |
# File 'lib/perobs/BTreeNodeCache.rb', line 34 def initialize(tree) @tree = tree clear end |
Instance Method Details
#_collect(address, ruby_object_id) ⇒ Object
78 79 80 |
# File 'lib/perobs/BTreeNodeCache.rb', line 78 def _collect(address, ruby_object_id) # Just a dummy for now end |
#clear ⇒ Object
Remove all nodes from the cache.
100 101 102 103 104 |
# File 'lib/perobs/BTreeNodeCache.rb', line 100 def clear @top_nodes = {} @ephemeral_nodes = {} @modified_nodes = {} end |
#delete(address) ⇒ Object
Remove a node from the cache.
84 85 86 87 88 |
# File 'lib/perobs/BTreeNodeCache.rb', line 84 def delete(address) @ephemeral_nodes.delete(address) @top_nodes.delete(address) @modified_nodes.delete(address) end |
#flush(now = false) ⇒ Object
Flush all dirty nodes into the backing store.
91 92 93 94 95 96 97 |
# File 'lib/perobs/BTreeNodeCache.rb', line 91 def flush(now = false) if now || @modified_nodes.size > 1024 @modified_nodes.each_value { |node| node.write_node } @modified_nodes = {} end @ephemeral_nodes = {} end |
#get(address) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/perobs/BTreeNodeCache.rb', line 39 def get(address) if (node = @modified_nodes[address]) return node end if (node = @top_nodes[address]) return node end if (node = @ephemeral_nodes[address]) return node end BTreeNode::load(@tree, address) end |
#insert(node, modified = true) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/perobs/BTreeNodeCache.rb', line 62 def insert(node, modified = true) unless node PEROBS.log.fatal "nil cannot be cached" end node = node.get_node if node.is_a?(BTreeNodeLink) if modified @modified_nodes[node.node_address] = node end @ephemeral_nodes[node.node_address] = node if !@top_nodes.include?(node) && node.is_top? @top_nodes[node.node_address] = node end end |
#set_root(node) ⇒ Object
55 56 57 58 59 60 |
# File 'lib/perobs/BTreeNodeCache.rb', line 55 def set_root(node) node = node.get_node if node.is_a?(BTreeNodeLink) @top_nodes = {} @top_nodes[node.node_address] = node end |