Rev 2823: Hand over signature index creation to NewPack. in http://people.ubuntu.com/~robertc/baz2.0/repository
Robert Collins
robertc at robertcollins.net
Mon Oct 15 06:49:42 BST 2007
At http://people.ubuntu.com/~robertc/baz2.0/repository
------------------------------------------------------------
revno: 2823
revision-id: robertc at robertcollins.net-20071015054929-exva5uc992w35qep
parent: robertc at robertcollins.net-20071015053607-y3r9wtrhne469282
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Mon 2007-10-15 15:49:29 +1000
message:
Hand over signature index creation to NewPack.
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-10-15 05:36:07 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2007-10-15 05:49:29 +0000
@@ -98,7 +98,8 @@
ExistingPack and NewPack are used.
"""
- def __init__(self, revision_index, inventory_index, text_index):
+ def __init__(self, revision_index, inventory_index, text_index,
+ signature_index):
"""Create a pack instance.
:param revision_index: A GraphIndex for determining what revisions are
@@ -107,12 +108,15 @@
present in the Pack and accessing the locations of their
texts/deltas.
:param text_index: A GraphIndex for determining what file texts
- are present in the pack and accessing the locations of their
- texts/deltas (via (fileid, revisionid) tuples).
+ are present in the pack and accessing the locations of their
+ texts/deltas (via (fileid, revisionid) tuples).
+ :param revision_index: A GraphIndex for determining what signatures are
+ present in the Pack and accessing the locations of their texts.
"""
self.revision_index = revision_index
self.inventory_index = inventory_index
self.text_index = text_index
+ self.signature_index = signature_index
def get_revision_count(self):
return self.revision_index.key_count()
@@ -139,9 +143,8 @@
def __init__(self, transport, name, revision_index, inventory_index,
text_index, signature_index):
- Pack.__init__(self, revision_index, inventory_index, text_index)
- self.text_index = text_index
- self.signature_index = signature_index
+ Pack.__init__(self, revision_index, inventory_index, text_index,
+ signature_index)
self.name = name
self.transport = transport
assert None not in (revision_index, inventory_index, text_index,
@@ -189,6 +192,9 @@
# Texts: compression and per file graph, for all fileids - so two
# reference lists and two elements in the key tuple.
InMemoryGraphIndex(reference_lists=2, key_elements=2),
+ # Signatures: Just blobs to store, no compression, no parents
+ # listing.
+ InMemoryGraphIndex(reference_lists=0),
)
# where should the new pack be opened
self.upload_transport = upload_transport
@@ -225,6 +231,8 @@
self.inventory_index_name, 'inventory')
self._write_index(new_name, self.text_index, 2,
self.text_index_name, 'file texts')
+ self._write_index(new_name, self.signature_index, 3,
+ self.signature_index_name, 'revision signatures')
def _write_index(self, new_name, index, index_offset, name_getter, label):
"""Write out an index.
@@ -378,7 +386,8 @@
self._execute_pack_operations(pack_operations)
return True
- def flush_revision_signature_indices(self, new_name, revision_index_length):
+ def flush_revision_signature_indices(self, new_name, revision_index_length,
+ signature_index_length):
"""Write out pending indices."""
# write a revision index (might be empty)
new_index_name = self._new_pack.revision_index_name(new_name)
@@ -402,9 +411,6 @@
# write a signatures index (might be empty)
new_index_name = self._new_pack.signature_index_name(new_name)
- signature_index_length = self._index_transport.put_file(
- new_index_name, self.repo._signature_write_index.finish())
- self.repo._signature_write_index = None
sig_index = GraphIndex(self._index_transport, new_index_name,
signature_index_length)
if self.repo._signature_all_indices is not None:
@@ -415,8 +421,7 @@
del self.repo._signature_all_indices._indices[1]
# reset the knit access writer
self.repo._signature_knit_access.set_writer(None, None, (None, None))
- return (rev_index, sig_index,
- signature_index_length)
+ return rev_index, sig_index,
def flush_inventory_index(self, new_name, inventory_index_length):
"""Write the index out to new_name."""
@@ -512,8 +517,6 @@
del buffer[:]
writer = pack.ContainerWriter(write_data)
writer.begin()
- # open new indices
- signature_index = InMemoryGraphIndex(reference_lists=0)
# select revisions
if revision_ids:
revision_keys = [(revision_id,) for revision_id in revision_ids]
@@ -596,11 +599,11 @@
signature_nodes = self._index_contents(signature_index_map,
signature_filter)
# copy signature keys and adjust values
- self._copy_nodes(signature_nodes, signature_index_map, writer, signature_index)
+ self._copy_nodes(signature_nodes, signature_index_map, writer, new_pack.signature_index)
if 'fetch' in debug.debug_flags:
mutter('%s: create_pack: revision signatures copied: %s%s %d items t+%6.3fs',
time.ctime(), self._upload_transport.base, random_name,
- signature_index.key_count(),
+ new_pack.signature_index.key_count(),
time.time() - new_pack.start_time)
# finish the pack
writer.end()
@@ -613,35 +616,23 @@
if 0 == sum((new_pack.get_revision_count(),
new_pack.inventory_index.key_count(),
new_pack.text_index.key_count(),
- signature_index.key_count(),
+ new_pack.signature_index.key_count(),
)):
self._upload_transport.delete(random_name)
return None
# write indices
- index_transport = self._index_transport
new_pack.finish()
- revision_index_length = new_pack.index_sizes[0]
- inventory_index_length = new_pack.index_sizes[1]
- text_index_length = new_pack.index_sizes[2]
-
- signature_index_name = new_pack.signature_index_name(new_name)
- signature_index_length = index_transport.put_file(signature_index_name,
- signature_index.finish())
- if 'fetch' in debug.debug_flags:
- # XXX: size might be interesting?
- mutter('%s: create_pack: wrote revision signatures index: %s%s t+%6.3fs',
- time.ctime(), self._upload_transport.base, random_name,
- time.time() - new_pack.start_time)
# add to name
- self.allocate(new_name, revision_index_length, inventory_index_length,
- text_index_length, signature_index_length)
+ self.allocate(new_name, new_pack.index_sizes[0],
+ new_pack.index_sizes[1], new_pack.index_sizes[2],
+ new_pack.index_sizes[3])
# rename into place. XXX: should rename each index too rather than just
# uploading blind under the chosen name.
write_stream.close()
self._upload_transport.rename(random_name, '../packs/' + new_name + '.pack')
result = ExistingPack(self._upload_transport.clone('../packs/'), new_name,
new_pack.revision_index, new_pack.inventory_index, new_pack.text_index,
- signature_index)
+ new_pack.signature_index)
if 'fetch' in debug.debug_flags:
# XXX: size might be interesting?
mutter('%s: create_pack: pack renamed into place: %s%s->%s%s t+%6.3fs',
@@ -997,7 +988,6 @@
self.repo._revision_knit_access = None
# cached signature data
self.repo._signature_knit = None
- self.repo._signature_write_index = None
self.repo._signature_all_indices = None
self.repo._signature_knit_access = None
# no access object.
@@ -1143,10 +1133,9 @@
self.flush_text_index(new_name, self._new_pack.index_sizes[2])
inv_index = \
self.flush_inventory_index(new_name, self._new_pack.index_sizes[1])
- rev_index, \
- sig_index, signature_index_length = \
+ rev_index, sig_index = \
self.flush_revision_signature_indices(new_name,
- self._new_pack.index_sizes[0])
+ self._new_pack.index_sizes[0], self._new_pack.index_sizes[3])
new_pack = ExistingPack(self._upload_transport.clone('../packs/'),
new_name, rev_index, inv_index, txt_index, sig_index)
self._write_stream.close()
@@ -1160,7 +1149,7 @@
# occuring during the write of that file.
self.allocate(new_name, self._new_pack.index_sizes[0],
self._new_pack.index_sizes[1], self._new_pack.index_sizes[2],
- signature_index_length)
+ self._new_pack.index_sizes[3])
self.repo._open_pack_tuple = None
self._new_pack = None
if not self.autopack():
@@ -1235,10 +1224,10 @@
pack_map, indices = self.repo._packs._make_index_map('.six')
if self.repo.is_in_write_group():
# allow writing: queue writes to a new index
- indices.insert(0, self.repo._signature_write_index)
- pack_map[self.repo._signature_write_index] = self.repo._open_pack_tuple
- writer = self.repo._packs._open_pack_writer, self.repo._signature_write_index
- add_callback = self.repo._signature_write_index.add_nodes
+ indices.insert(0, self.repo._packs._new_pack.signature_index)
+ pack_map[self.repo._packs._new_pack.signature_index] = self.repo._open_pack_tuple
+ writer = self.repo._packs._open_pack_writer, self.repo._packs._new_pack.signature_index
+ add_callback = self.repo._packs._new_pack.signature_index.add_nodes
else:
writer = None
add_callback = None # no data-adding permitted.
@@ -1256,17 +1245,15 @@
return self.repo._signature_knit
def data_inserted(self):
- if (getattr(self.repo._packs, '_new_pack', None) and
- self.repo._packs._new_pack.revision_index.key_count()):
+ if self.repo._packs._new_pack is None:
+ return False
+ if self.repo._packs._new_pack.revision_index.key_count():
return True
- if (getattr(self.repo, '_signature_write_index', None) and
- self.repo._signature_write_index.key_count()):
+ if self.repo._packs._new_pack.signature_index.key_count():
return True
return False
def setup(self):
- # setup in-memory indices to accumulate data.
- self.repo._signature_write_index = InMemoryGraphIndex(0)
# if knit indices have been handed out, add a mutable
# index to them
if self.repo._revision_knit is not None:
@@ -1276,11 +1263,11 @@
self.repo._packs._open_pack_writer,
self.repo._packs._new_pack.revision_index, self.repo._open_pack_tuple)
if self.repo._signature_knit is not None:
- self.repo._signature_all_indices.insert_index(0, self.repo._signature_write_index)
- self.repo._signature_knit._index._add_callback = self.repo._signature_write_index.add_nodes
+ self.repo._signature_all_indices.insert_index(0, self.repo._packs._new_pack.signature_index)
+ self.repo._signature_knit._index._add_callback = self.repo._packs._new_pack.signature_index.add_nodes
self.repo._signature_knit_access.set_writer(
self.repo._packs._open_pack_writer,
- self.repo._signature_write_index, self.repo._open_pack_tuple)
+ self.repo._packs._new_pack.signature_index, self.repo._open_pack_tuple)
class GraphKnitTextStore(VersionedFileStore):
More information about the bazaar-commits
mailing list