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