Failure to fetch to old format via Smart Server

Bug #382525 reported by John A Meinel
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Bazaar
Confirmed
Medium
Unassigned

Bug Description

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I'm trying to write a fairly simple test case to expose some issues with
our code and ghost handling.

Specifically, my recent gc-stacking patch broke the ability to push
bzr.dev via the smart server.

So I tried to add this test:
=== modified file 'bzrlib/tests/per_repository/test_fetch.py'
- --- bzrlib/tests/per_repository/test_fetch.py 2009-05-23 04:55:52 +0000
+++ bzrlib/tests/per_repository/test_fetch.py 2009-06-01 17:38:34 +0000
@@ -300,6 +300,48 @@
         repo.fetch(tree.branch.repository)
         repo.fetch(tree.branch.repository)

+ def make_simple_branch_with_ghost(self):
+ builder = self.make_branch_builder('source')
+ builder.start_series()
+ builder.build_snapshot('A-id', None, [
+ ('add', ('', 'root-id', 'directory', None)),
+ ('add', ('file', 'file-id', 'file', 'content\n'))])
+ builder.build_snapshot('B-id', ['A-id', 'ghost-id'], [])
+ builder.finish_series()
+ source_b = builder.get_branch()
+ source_b.lock_read()
+ self.addCleanup(source_b.unlock)
+ return source_b
+
+ def test_fetch_with_ghost(self):
+ source_b = self.make_simple_branch_with_ghost()
+ target = self.make_repository('target')
+ target.lock_write()
+ self.addCleanup(target.unlock)
+ target.fetch(source_b.repository, revision_id='B-id')
+
+ def test_fetch_into_smart_with_ghost(self):
+ trans = self.make_smart_server('target')
+ source_b = self.make_simple_branch_with_ghost()
+ target = self.make_repository('target')
+ # Re-open the repository over the smart protocol
+ target = repository.Repository.open(trans.base)
+ target.lock_write()
+ self.addCleanup(target.unlock)
+ target.fetch(source_b.repository, revision_id='B-id')

However, when I go to run that I get:
ERROR: test_fetch_into_smart_with_ghost
(bzrlib.tests.per_repository.test_fetch.TestFetchSameReposit
ory)

vvvv[log from
bzrlib.tests.per_repository.test_fetch.TestFetchSameRepository.test_fetch_into_smart_w
ith_ghost(RepositoryFormat6)]
...
>
>
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\tests\per_repository\test_fetch.py", line 331, in
> test_fetch_into_smart_with_ghost
> target.fetch(source_b.repository, revision_id='B-id')
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\remote.py", line 1211, in fetch
> find_ghosts=find_ghosts, fetch_spec=fetch_spec)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\decorators.py", line 192, in write_locked
> result = unbound(self, *args, **kwargs)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\repository.py", line 3116, in fetch
> pb=pb, find_ghosts=find_ghosts)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\fetch.py", line 82, in __init__
> self.__fetch()
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\fetch.py", line 108, in __fetch
> self._fetch_everything_for_search(search)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\fetch.py", line 155, in _fetch_everything_for_sear
> ch
> self.sink.finished()
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\repository.py", line 4135, in finished
> self.target_repo.reconcile()
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\remote.py", line 1387, in reconcile
> self._ensure_real()
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\remote.py", line 699, in _ensure_real
> self.bzrdir._real_bzrdir.open_repository())
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\remote.py", line 964, in _set_real_repository
> self._real_repository.lock_write(self._lock_token)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\repository.py", line 1246, in lock_write
> result = self.control_files.lock_write(token=token)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\lockable_files.py", line 279, in lock_write
> token_from_lock = self._lock.lock_write(token=token)
> File "C:\Users\jameinel\dev\bzr\alt_work\bzrlib\lockable_files.py", line 398, in lock_write
> raise errors.TokenLockingNotSupported(self)
> TokenLockingNotSupported: The object <bzrlib.lockable_files.TransportLock object at 0x046C9810> does
> not support token specifying a token when locking.

(sorry about the ugly formatting)

Anyway, it would seem that Smart Server + fetch + Knit formats is
broken, and we never knew it, because we never had a per-format test of
fetching and the smart server.

I don't feel like fixing this for my current patch, so I'll probably
just blacklist specific versions.

I'll note that it looks like an even simpler failing test would be:

def test_can_ensure_real_locked_repo(self):
  trans = self.make_smart_server('repo')
  self.make_repository('repo')
  # Open repo via smart server
  repo = repository.Repository.open(trans.base)
  repo.lock_write()
  self.addCleanup(repo.unlock)
  repo._ensure_real() # Boom

Any thoughts?

John
=:->

  affects bzr
  status confirmed
  importance high
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkokKrEACgkQJdeBCYSNAANItACfWdJ2anbnzkKdpmDH8XN99nQr
rY0AoM++pNH1Rl2rtpJA1mCxdkY6roNs
=9KVO
-----END PGP SIGNATURE-----

Jelmer Vernooij (jelmer)
tags: added: hpss
tags: added: knits
Jelmer Vernooij (jelmer)
Changed in bzr:
importance: High → Medium
Jelmer Vernooij (jelmer)
tags: added: check-for-breezy
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.