class PEROBS::BTreeNodeCache
Public Class Methods
new(tree)
click to toggle source
# File lib/perobs/BTreeNodeCache.rb, line 34 def initialize(tree) @tree = tree clear end
Public Instance Methods
_collect(address, ruby_object_id)
click to toggle source
# File lib/perobs/BTreeNodeCache.rb, line 78 def _collect(address, ruby_object_id) # Just a dummy for now end
clear()
click to toggle source
Remove all nodes from the cache.
# File lib/perobs/BTreeNodeCache.rb, line 100 def clear @top_nodes = {} @ephemeral_nodes = {} @modified_nodes = {} end
delete(address)
click to toggle source
Remove a node from the cache. @param address [Integer] address of node to remove.
# 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)
click to toggle source
Flush all dirty nodes into the backing store.
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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