Rev 3669: Remove FixedMemoryGraphIndex in http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/btree

John Arbash Meinel john at arbash-meinel.com
Fri Aug 22 03:03:34 BST 2008


At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/btree

------------------------------------------------------------
revno: 3669
revision-id: john at arbash-meinel.com-20080822020328-4q21ldih7c3ne64g
parent: john at arbash-meinel.com-20080821225821-sio6j57zwk7kvqe2
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: btree
timestamp: Thu 2008-08-21 21:03:28 -0500
message:
  Remove FixedMemoryGraphIndex
modified:
  bzrlib/btree_index.py          index.py-20080624222253-p0x5f92uyh5hw734-7
-------------- next part --------------
=== modified file 'bzrlib/btree_index.py'
--- a/bzrlib/btree_index.py	2008-08-21 21:58:57 +0000
+++ b/bzrlib/btree_index.py	2008-08-22 02:03:28 +0000
@@ -1105,103 +1105,6 @@
             pass
 
 
-class FixedMemoryGraphIndex(index.GraphIndex):
-    """A variant of GraphIndex which spools to disk during parsing.
-
-    This is useful for avoiding particularly high memory use which can occur
-    with very large GraphIndices. As it imposes a performance overhead due
-    to generating disk-based b+tree's, it is not suitable for general use.
-
-    Also, only iter_all_entries is implemented.
-    """
-
-    def __init__(self, transport, name, size):
-        index.GraphIndex.__init__(self, transport, name, size)
-        self._locs = None
-        self._key_details = None
-
-    def _resolve_locs(self, references):
-        """Return the resolved key references for references.
-
-        References are resolved by looking up the location of the key in the
-        _keys_by_offset map and substituting the key name, preserving ordering.
-
-        :param references: An iterable of iterables of key locations. e.g.
-            [[123, 456], [123]]
-        :return: A tuple of tuples of keys.
-        """
-        key_offsets = {}
-        needed_refs = set()
-        node_refs = []
-        for ref_list in references:
-            for ref in ref_list:
-                needed_refs.add(ref[:1])
-        for node in self._locs.iter_entries(needed_refs):
-            key_offsets[node[1][0]] = tuple(node[2].split(' '))
-        for ref_list in references:
-            node_refs.append(tuple([key_offsets[ref[0]] for ref in ref_list]))
-        return tuple(node_refs)
-
-    def iter_all_entries(self):
-        if self._locs is None:
-            self._scan_index()
-        if self.node_ref_lists:
-            for node in self._key_details.iter_all_entries():
-                refs = self._resolve_locs(node[3])
-                yield (self,) + node[1:3] + (refs,)
-        else:
-            for node in self._key_details.iter_all_entries():
-                yield (self,) + node[1:3]
-
-    def _scan_index(self):
-        stream = self._transport.get(self._name)
-        self._read_prefix(stream)
-        self._expected_elements = 3 + self._key_length
-        line_count = 0
-        self._locs = BTreeBuilder(key_elements=1, reference_lists=0)
-        self._key_details = BTreeBuilder(key_elements=self._key_length,
-            reference_lists=self.node_ref_lists)
-        # raw data keyed by offset
-        self._keys_by_offset = {}
-        # ready-to-return key:value or key:value, node_ref_lists
-        self._nodes = {}
-        self._nodes_by_key = {}
-        trailers = 0
-        pos = stream.tell()
-        lines = stream.read().split('\n')
-        del lines[-1]
-        key = None
-        first_key = None
-        trailers = 0
-        for line in lines:
-            if line == '':
-                # must be at the end
-                if self._size:
-                    if not (self._size == pos + 1):
-                        raise AssertionError("%s %s" % (self._size, pos))
-                trailers += 1
-                continue
-            elements = line.split('\0')
-            if len(elements) != self._expected_elements:
-                raise errors.BadIndexData(self)
-            # keys are tuples
-            key = tuple(elements[:self._key_length])
-            if first_key is None:
-                first_key = key
-            absent, references, value = elements[-3:]
-            ref_lists = []
-            for ref_string in references.split('\t'):
-                ref_lists.append(tuple([
-                    (str(int(ref)),) + ('X',) * (self._key_length - 1) for
-                    ref in ref_string.split('\r') if ref]))
-            ref_lists = tuple(ref_lists)
-            self._locs.add_node((str(pos),), ' '.join(key))
-            pos += len(line) + 1 # +1 for the \n
-            if absent:
-                continue
-            self._key_details.add_node(key, value, ref_lists)
-
-
 try:
     from bzrlib import _parse_btree_c as _parse_btree
 except ImportError:



More information about the bazaar-commits mailing list