Rev 3382: Remove locking from generators in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Sun Apr 27 08:02:12 BST 2008


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 3382
revision-id:pqm at pqm.ubuntu.com-20080427070204-4t5flfqnnmr6bmiw
parent: pqm at pqm.ubuntu.com-20080425215735-sa37dllaxjo2o7do
parent: aaron at aaronbentley.com-20080426164057-s3kl8d43lvf40x9p
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Sun 2008-04-27 08:02:04 +0100
message:
  Remove locking from generators
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
  bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
  bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
  bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
  bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
    ------------------------------------------------------------
    revno: 3381.1.4
    revision-id:aaron at aaronbentley.com-20080426164057-s3kl8d43lvf40x9p
    parent: aaron at aaronbentley.com-20080426163447-zaj22oysskneh5og
    committer: Aaron Bentley <aaron at aaronbentley.com>
    branch nick: fetch-locking
    timestamp: Sat 2008-04-26 12:40:57 -0400
    message:
      Add NEWS entry
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
    ------------------------------------------------------------
    revno: 3381.1.3
    revision-id:aaron at aaronbentley.com-20080426163447-zaj22oysskneh5og
    parent: aaron at aaronbentley.com-20080426060728-dso3gzg3nuilqqto
    committer: Aaron Bentley <aaron at aaronbentley.com>
    branch nick: fetch-locking
    timestamp: Sat 2008-04-26 12:34:47 -0400
    message:
      Stop locking in get_data_stream_for_search
    modified:
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
      bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
    ------------------------------------------------------------
    revno: 3381.1.2
    revision-id:aaron at aaronbentley.com-20080426060728-dso3gzg3nuilqqto
    parent: aaron at aaronbentley.com-20080425231410-nk29f2kt9ah2a1vq
    committer: Aaron Bentley <aaron at aaronbentley.com>
    branch nick: fetch-locking
    timestamp: Sat 2008-04-26 02:07:28 -0400
    message:
      Cleanup
    modified:
      bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
      bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
    ------------------------------------------------------------
    revno: 3381.1.1
    revision-id:aaron at aaronbentley.com-20080425231410-nk29f2kt9ah2a1vq
    parent: pqm at pqm.ubuntu.com-20080425215735-sa37dllaxjo2o7do
    committer: Aaron Bentley <aaron at aaronbentley.com>
    branch nick: fetch-locking
    timestamp: Fri 2008-04-25 19:14:10 -0400
    message:
      Fix lock-taking iterators
    modified:
      bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
=== modified file 'NEWS'
--- a/NEWS	2008-04-24 21:49:53 +0000
+++ b/NEWS	2008-04-26 16:40:57 +0000
@@ -55,6 +55,11 @@
 
   API BREAKS:
 
+    * Repository.get_data_stream, Repository.get_data_stream_for_search(),
+      Repository.get_deltas_for_revsions(), Repository.revision_trees(),
+      Repository.item_keys_introduced_by() no longer take read locks.
+      (Aaron Bentley)
+
 
 bzr 1.4rc1 2008-04-11
 ---------------------

=== modified file 'bzrlib/fetch.py'
--- a/bzrlib/fetch.py	2008-04-09 20:13:46 +0000
+++ b/bzrlib/fetch.py	2008-04-26 06:07:28 +0000
@@ -112,9 +112,11 @@
                 else:
                     self.to_repository.commit_write_group()
             finally:
-                if self.nested_pb is not None:
-                    self.nested_pb.finished()
-                self.to_repository.unlock()
+                try:
+                    if self.nested_pb is not None:
+                        self.nested_pb.finished()
+                finally:
+                    self.to_repository.unlock()
         finally:
             self.from_repository.unlock()
 

=== modified file 'bzrlib/repofmt/knitrepo.py'
--- a/bzrlib/repofmt/knitrepo.py	2008-04-04 00:06:58 +0000
+++ b/bzrlib/repofmt/knitrepo.py	2008-04-25 23:14:10 +0000
@@ -161,7 +161,6 @@
             raise errors.NoSuchRevision(self, revision_id)
 
     @symbol_versioning.deprecated_method(symbol_versioning.one_two)
-    @needs_read_lock
     def get_data_stream(self, revision_ids):
         """See Repository.get_data_stream.
         
@@ -170,7 +169,6 @@
         search_result = self.revision_ids_to_search_result(set(revision_ids))
         return self.get_data_stream_for_search(search_result)
 
-    @needs_read_lock
     def get_data_stream_for_search(self, search):
         """See Repository.get_data_stream_for_search."""
         item_keys = self.item_keys_introduced_by(search.get_keys())

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2008-04-16 14:54:19 +0000
+++ b/bzrlib/repository.py	2008-04-26 16:34:47 +0000
@@ -1110,7 +1110,6 @@
         rev_tmp.seek(0)
         return rev_tmp.getvalue()
 
-    @needs_read_lock
     def get_deltas_for_revisions(self, revisions):
         """Produce a generator of revision deltas.
         
@@ -1447,7 +1446,6 @@
         # maybe this generator should explicitly have the contract that it
         # should not be iterated until the previously yielded item has been
         # processed?
-        self.lock_read()
         inv_w = self.get_inventory_weave()
 
         # file ids that changed
@@ -1476,7 +1474,6 @@
                 pass
             else:
                 revisions_with_signatures.add(rev_id)
-        self.unlock()
         yield ("signatures", None, revisions_with_signatures)
 
         # revisions
@@ -1682,7 +1679,6 @@
             inv = self.get_revision_inventory(revision_id)
             return RevisionTree(self, inv, revision_id)
 
-    @needs_read_lock
     def revision_trees(self, revision_ids):
         """Return Tree for a revision on this branch.
 

=== modified file 'bzrlib/smart/repository.py'
--- a/bzrlib/smart/repository.py	2008-03-28 07:37:07 +0000
+++ b/bzrlib/smart/repository.py	2008-04-26 16:34:47 +0000
@@ -412,14 +412,8 @@
         pack = ContainerSerialiser()
         buffer.write(pack.begin())
         try:
-            try:
-                for name_tuple, bytes in stream:
-                    buffer.write(pack.bytes_record(bytes, [name_tuple]))
-            except:
-                # Undo the lock_read that happens once the iterator from
-                # get_data_stream is started.
-                repository.unlock()
-                raise
+            for name_tuple, bytes in stream:
+                buffer.write(pack.bytes_record(bytes, [name_tuple]))
         except errors.RevisionNotPresent, e:
             return FailedSmartServerResponse(('NoSuchRevision', e.revision_id))
         buffer.write(pack.end())

=== modified file 'bzrlib/tests/interrepository_implementations/test_interrepository.py'
--- a/bzrlib/tests/interrepository_implementations/test_interrepository.py	2008-03-24 14:40:52 +0000
+++ b/bzrlib/tests/interrepository_implementations/test_interrepository.py	2008-04-26 06:07:28 +0000
@@ -236,6 +236,7 @@
         # for during pull operations
         inv = source.get_inventory('a')
         source.lock_write()
+        self.addCleanup(source.unlock)
         source.start_write_group()
         inv['id'].revision = 'b'
         inv.revision_id = 'b'
@@ -249,7 +250,6 @@
         rev.parent_ids = ['a']
         source.add_revision('b', rev)
         source.commit_write_group()
-        source.unlock()
         self.assertRaises(errors.RevisionNotPresent, target.fetch, source)
         self.assertFalse(target.has_revision('b'))
 

=== modified file 'bzrlib/tests/repository_implementations/test_repository.py'
--- a/bzrlib/tests/repository_implementations/test_repository.py	2008-04-10 04:22:38 +0000
+++ b/bzrlib/tests/repository_implementations/test_repository.py	2008-04-26 16:34:47 +0000
@@ -404,6 +404,8 @@
         tree.add('foo', 'file1')
         tree.commit('message', rev_id='rev_id')
         repo = tree.branch.repository
+        repo.lock_read()
+        self.addCleanup(repo.unlock)
         try:
             stream = self.applyDeprecated(one_two, repo.get_data_stream,
                 ['rev_id'])
@@ -424,6 +426,8 @@
         # Get a data stream (a file-like object) for that revision
         search = graph.SearchResult(set(['rev_id']), set([NULL_REVISION]), 1,
             set(['rev_id']))
+        repo.lock_read()
+        self.addCleanup(repo.unlock)
         try:
             stream = repo.get_data_stream_for_search(search)
         except NotImplementedError:
@@ -468,6 +472,8 @@
         dest_repo = self.make_repository('dest')
         search = dest_repo.search_missing_revision_ids(source_repo,
             revision_id='rev_id')
+        source_repo.lock_read()
+        self.addCleanup(source_repo.unlock)
         try:
             stream = source_repo.get_data_stream_for_search(search)
         except NotImplementedError, e:
@@ -550,6 +556,8 @@
         tree.add('foo', 'file1')
         tree.commit('message', rev_id='rev_id')
         repo = tree.branch.repository
+        repo.lock_read()
+        self.addCleanup(repo.unlock)
 
         # Item keys will be in this order, for maximum convenience for
         # generating data to insert into knit repository:

=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py	2008-02-19 03:58:32 +0000
+++ b/bzrlib/tests/test_repository.py	2008-04-26 16:34:47 +0000
@@ -781,6 +781,8 @@
         empty_repo = self.make_repository('empty-repo')
         search = graph.SearchResult(set(['rev1a', 'rev2', 'rev3']),
             set(), 3, ['rev1a', 'rev2', 'rev3'])
+        broken_repo.lock_read()
+        self.addCleanup(broken_repo.unlock)
         stream = broken_repo.get_data_stream_for_search(search)
         empty_repo.lock_write()
         self.addCleanup(empty_repo.unlock)




More information about the bazaar-commits mailing list