Rev 2836: Signature index management looking sane for packs. in http://people.ubuntu.com/~robertc/baz2.0/repository
Robert Collins
robertc at robertcollins.net
Wed Oct 17 04:43:36 BST 2007
At http://people.ubuntu.com/~robertc/baz2.0/repository
------------------------------------------------------------
revno: 2836
revision-id: robertc at robertcollins.net-20071017034325-f0p1xs64ya20b8h7
parent: robertc at robertcollins.net-20071017033004-ahzli9m9pmpoqwji
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Wed 2007-10-17 13:43:25 +1000
message:
Signature index management looking sane for packs.
modified:
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2007-10-17 03:30:04 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2007-10-17 03:43:25 +0000
@@ -473,6 +473,7 @@
self._new_pack = None
# aggregated revision index data
self.revision_index = AggregateIndex()
+ self.signature_index = AggregateIndex()
def add_pack_to_memory(self, pack):
"""Make a Pack object available to the repository to satisfy queries.
@@ -483,6 +484,7 @@
assert pack.name not in self._packs
self._packs[pack.name] = pack
self.revision_index.add_index(pack.revision_index, pack)
+ self.signature_index.add_index(pack.signature_index, pack)
if self.repo._inv_all_indices is not None:
# inv 'knit' has been used : update it.
self.repo._inv_all_indices.insert_index(0,
@@ -492,10 +494,6 @@
# text 'knits' have been used : update it.
self.repo._text_all_indices.insert_index(0,
pack.text_index)
- if self.repo._signature_all_indices is not None:
- # sigatures 'knit' accessed : update it.
- self.repo._signature_all_indices.insert_index(0,
- pack.signature_index)
def _add_text_to_weave(self, file_id, revision_id, new_lines, parents,
nostore_sha, random_revid):
@@ -570,16 +568,6 @@
self._execute_pack_operations(pack_operations)
return True
- def refresh_signature_indices(self):
- index_map, index_list = self._packs_list_to_pack_map_and_index_list(
- self.all_packs(), 'signature_index')
- if self.repo._signature_all_indices is not None:
- # signature 'knit' accessed : update it.
- # XXX: API break - clearly a 'replace' method would be good?
- self.repo._signature_all_indices._indices[:] = index_list
- # reset the knit access writer
- self.repo._signature_knit_access.set_writer(None, None, (None, None))
-
def refresh_inventory_index(self):
"""Refresh the inventory access index mappings."""
index_map, index_list = self._packs_list_to_pack_map_and_index_list(
@@ -1081,6 +1069,7 @@
self._names.pop(pack.name)
self._packs.pop(pack.name)
self.revision_index.remove_index(pack.revision_index, pack)
+ self.signature_index.remove_index(pack.signature_index, pack)
def reset(self):
"""Clear all cached data."""
@@ -1089,8 +1078,7 @@
self.revision_index.clear()
# cached signature data
self.repo._signature_knit = None
- self.repo._signature_all_indices = None
- self.repo._signature_knit_access = None
+ self.signature_index.clear()
# no access object.
self.repo._text_knit_access = None
# no write-knit
@@ -1239,6 +1227,8 @@
# allow writing: queue writes to a new index
self.revision_index.add_writable_index(self._new_pack.revision_index,
self._new_pack)
+ self.signature_index.add_writable_index(self._new_pack.signature_index,
+ self._new_pack)
self.repo._open_pack_tuple = (self._upload_transport, self._new_pack.random_name)
@@ -1252,6 +1242,7 @@
self._new_pack.abort()
pack = self._new_pack
self.revision_index.remove_index(pack.revision_index, pack)
+ self.signature_index.remove_index(pack.signature_index, pack)
self._new_pack = None
self.reset()
@@ -1260,6 +1251,7 @@
pack = self._new_pack
# remove the pack's write indices from the aggregate indices.
self.revision_index.remove_index(pack.revision_index, pack)
+ self.signature_index.remove_index(pack.signature_index, pack)
# get all the data to disk and read to use
self._new_pack.finish()
self.allocate(self._new_pack)
@@ -1272,7 +1264,6 @@
# now setup the maps we need to access data again.
self.refresh_text_index()
self.refresh_inventory_index()
- self.refresh_signature_indices()
else:
self._new_pack.abort()
# forget what names there are - XXX should just refresh them and apply
@@ -1328,27 +1319,18 @@
"""Get the signature versioned file object."""
if getattr(self.repo, '_signature_knit', None) is not None:
return self.repo._signature_knit
- 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._packs._new_pack.signature_index)
- pack_map[self.repo._packs._new_pack.signature_index] = self.repo._open_pack_tuple
- writer = self.repo._packs._new_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.
- self.repo._signature_all_indices = CombinedGraphIndex(indices)
- knit_index = KnitGraphIndex(self.repo._signature_all_indices,
+ self.repo._packs.ensure_loaded()
+ add_callback = self.repo._packs.signature_index.add_callback
+ # setup knit specific objects
+ knit_index = KnitGraphIndex(
+ self.repo._packs.signature_index.combined_index,
add_callback=add_callback, parents=False)
- knit_access = _PackAccess(pack_map, writer)
- self.repo._signature_knit_access = knit_access
self.repo._signature_knit = knit.KnitVersionedFile(
'signatures', self.transport.clone('..'),
self.repo.control_files._file_mode,
create=False, access_mode=self.repo._access_mode(),
index=knit_index, delta=False, factory=knit.KnitPlainFactory(),
- access_method=knit_access)
+ access_method=self.repo._packs.signature_index.knit_access)
return self.repo._signature_knit
def setup(self):
@@ -1358,11 +1340,8 @@
self.repo._revision_knit._index._add_callback = \
self.repo._packs.revision_index.add_callback
if self.repo._signature_knit is not None:
- 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._new_pack._writer,
- self.repo._packs._new_pack.signature_index, self.repo._open_pack_tuple)
+ self.repo._signature_knit._index._add_callback = \
+ self.repo._packs.signature_index.add_callback
class GraphKnitTextStore(VersionedFileStore):
=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py 2007-10-17 03:30:04 +0000
+++ b/bzrlib/tests/test_repository.py 2007-10-17 03:43:25 +0000
@@ -823,7 +823,7 @@
finally:
r1.unlock()
finally:
- pass # r2.unlock()
+ r2.unlock()
def test_concurrent_writer_second_preserves_dropping_a_pack(self):
format = self.get_format()
More information about the bazaar-commits
mailing list