Rev 2756: Reduce object creation volume during commit. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Mon Sep 10 00:45:14 BST 2007


At http://people.ubuntu.com/~robertc/baz2.0/repository

------------------------------------------------------------
revno: 2756
revision-id: robertc at robertcollins.net-20070909234505-g3tr3qizeqxzcr2k
parent: robertc at robertcollins.net-20070909230147-uqkvnsc986bpxwj1
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Mon 2007-09-10 09:45:05 +1000
message:
  Reduce object creation volume during commit.
modified:
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py	2007-09-05 06:32:54 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-09-09 23:45:05 +0000
@@ -975,7 +975,7 @@
             self.repo._text_write_index.key_count()):
             return True
 
-    def _ensure_all_index(self):
+    def _ensure_all_index(self, for_write=None):
         """Create the combined index for all texts."""
         if getattr(self.repo, '_text_all_indices', None) is not None:
             return
@@ -988,9 +988,10 @@
             index_name = self.name_to_text_index_name(name)
             indices.append(GraphIndex(self.transport, index_name))
             self.repo._text_pack_map[indices[-1]] = (self.repo._pack_tuple(name))
-        if self.repo.is_in_write_group():
+        if for_write or self.repo.is_in_write_group():
             # allow writing: queue writes to a new index
             indices.insert(0, self.repo._text_write_index)
+        self._setup_knit_access(self.repo.is_in_write_group())
         self.repo._text_all_indices = CombinedGraphIndex(indices)
 
     def flush(self, new_name, new_pack):
@@ -1000,6 +1001,7 @@
         new_pack.text_index_length = self.transport.put_file(
             new_index_name, self.repo._text_write_index.finish())
         self.repo._text_write_index = None
+        self._setup_knit_access(False)
         if self.repo._text_all_indices is not None:
             # text 'knits' have been used, replace the mutated memory index
             # with the new on-disk one. XXX: is this really a good idea?
@@ -1019,21 +1021,18 @@
         if self.repo.is_in_write_group():
             add_callback = self.repo._text_write_index.add_nodes
             self.repo._text_pack_map[self.repo._text_write_index] = self.repo._open_pack_tuple
-            writer = self.repo._open_pack_writer, self.repo._text_write_index
         else:
             add_callback = None # no data-adding permitted.
-            writer = None
 
         file_id_index = GraphIndexPrefixAdapter(self.repo._text_all_indices,
             (file_id, ), 1, add_nodes_callback=add_callback)
         knit_index = KnitGraphIndex(file_id_index,
             add_callback=file_id_index.add_nodes,
             deltas=True, parents=True)
-        knit_access = _PackAccess(self.repo._text_pack_map, writer)
-        return knit.KnitVersionedFile('text:' + file_id, self.weavestore._transport,
-            self.weavestore._file_mode,
+        return knit.KnitVersionedFile('text:' + file_id, None,
+            None,
             index=knit_index,
-            access_method=knit_access)
+            access_method=self.repo._text_knit_access)
 
     get_weave = get_weave_or_empty
 
@@ -1053,6 +1052,8 @@
         """Clear all cached data."""
         # remove any accumlating index of text data
         self.repo._text_write_index = None
+        # no access object.
+        self.repo._text_knit_access = None
         # remove all constructed text data indices
         self.repo._text_all_indices = None
         # and the pack map
@@ -1066,6 +1067,17 @@
         # group to be able to be written to, simply because it makes this
         # code cleaner - we don't need to track all 'open' knits and 
         # adjust them.
+        # prepare to do writes.
+        self._ensure_all_index(True)
+        self._setup_knit_access(True)
+    
+    def _setup_knit_access(self, for_write):
+        if for_write:
+            writer = (self.repo._open_pack_writer, self.repo._text_write_index)
+        else:
+            writer = None
+        self.repo._text_knit_access = _PackAccess(
+            self.repo._text_pack_map, writer)
 
 
 class InventoryKnitThunk(object):



More information about the bazaar-commits mailing list