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