** Description changed:

- When bzr < 1.13.2 (and bzr 1.14rc1) push a stacked branch they do not
- take care to push all the parent inventories for the transferred
- revisions.  This means that a smart server serving that branch often
- cannot calculate inventory deltas for the branch (because smart server
- does not/cannot open fallback repositories).  Prior to 1.13 the server
- did not have a verb to stream revisions out of a repository, so that's
- why this bug has appeared now.
- 
- bzr.dev and 1.14rc2 have been fixed to push up complete branches always,
- and bzr.dev has a fix for the server to make unfixed clients that use
- the Repository.insert_stream* HPSS verbs send the missing records.  (See
- also bug 368418 about the server fix in bzr.dev)
- 
- So upgrading clients to 1.14rc2 or newer fixes this bug.  Alternatively
- upgrading the server to bzr.dev r4307 and using 1.13 or newer clients to
- push via HPSS fixes this too.
- 
  Workarounds
  ----------------
  
- There are multiple workarounds for dealing with an affected branch.  In
- rough order of preference:
+ If you can write to the branch:
  
-  - Use the 'foo.py' script Robert has attached to this bug to repair the 
affected branch (by fetching the missing parts from the stacked-on repository)
-  - Delete the affected branch and repush it with a fixed client (1.14rc2 or 
newer)
-  - Use non-smart URLs to access an affected branch, e.g. sftp:// or 
nosmart+bzr+ssh://.  This works because the client can access the stacked-on 
repository, and the missing data is present there.
+  - Use the fixer script attached to this bug to repair the affected branch 
(by fetching the missing parts from the stacked-on repository). Run it as 
'fix-branch.py bzr+ssh://bazaar.launchpad.net/~user/project/branch'. You must 
have write access to the branch to do this.
+  - Alternatively just delete the affected branch and repush it with a fixed 
client (1.14rc2 or newer)
  
+ If you cannot write to the branch:
+ 
+  - Use non-smart URLs to access an affected branch, e.g. sftp:// or
+ nosmart+bzr+ssh://.  This works because the client can access the
+ stacked-on repository, and the missing data is present there, but will
+ be slower as it disables streaming fetch.
+ 
+ Details
+ -------
+ 
+ When bzr introduced stacking the data pushed to a stacking branch was
+ too minimal. This lack was discovered when streaming fetch from stacked
+ branches was enabled. The server needs to be able to generate a delta of
+ the data in its graph to decide what to send the client, and the ACF
+ record sent to the client is an indicator that it was failing to do this
+ correctly.
+ 
+ Resolution
+ ----------
+ 
+ Use bzr.dev newer than r4037 (or bzr 1.15 or newer) on the server and
+ bzr 1.13 or newer as clients with bzr+ssh or bzr+http urls. If the
+ server cannot run 1.15, use bzr 1.13.2 or 1.14rc2 or newer on the
+ client. Do not use older bzr versions.
+ 
+ bzr.dev and 1.14rc2 have been fixed on the client side to always include
+ enough data, and bzr.dev (and thus bzr 1.15) include a fix for the
+ server to make bzr 1.13 clients that use the Repository.insert_stream*
+ HPSS verbs send the missing records.  (See also bug 368418 about the
+ server fix in bzr.dev)
  
  Symptom
  -------
  
  When pulling affected branches, you get a traceback like this:
  
- This manifests as exceptions from the server involving
- 'AbsentContentFactory'.
- 
- e.g. The exception below occurred while pulling lp:~rivenx/rivenx/domes
- using bzr.dev r4237.
- 
  bzr: ERROR: bzrlib.errors.ErrorFromSmartServer: Error received from
  smart server: ('error', "'AbsentContentFactory' object has no attribute
  'get_bytes_as'")
  
  Traceback (most recent call last):
-   File "/Library/Python/2.6/site-packages/bzrlib/commands.py", line 727, in 
exception_to_return_code
-     return the_callable(*args, **kwargs)
-   File "/Library/Python/2.6/site-packages/bzrlib/commands.py", line 922, in 
run_bzr
-     ret = run(*run_argv)
-   File "/Library/Python/2.6/site-packages/bzrlib/commands.py", line 559, in 
run_argv_aliases
-     return self.run(**all_cmd_args)
-   File "/Library/Python/2.6/site-packages/bzrlib/builtins.py", line 1103, in 
run
-     source_branch=br_from)
-   File "/Library/Python/2.6/site-packages/bzrlib/bzrdir.py", line 1139, in 
sprout
-     result_repo.fetch(source_repository, revision_id=revision_id)
-   File "/Library/Python/2.6/site-packages/bzrlib/repository.py", line 1465, 
in fetch
-     find_ghosts=find_ghosts, fetch_spec=fetch_spec)
+ ...
    File "/Library/Python/2.6/site-packages/bzrlib/decorators.py", line 192, in 
write_locked
      result = unbound(self, *args, **kwargs)
    File "/Library/Python/2.6/site-packages/bzrlib/repository.py", line 2991, 
in fetch
      pb=pb, find_ghosts=find_ghosts)
    File "/Library/Python/2.6/site-packages/bzrlib/fetch.py", line 84, in 
__init__
      self.__fetch()
    File "/Library/Python/2.6/site-packages/bzrlib/fetch.py", line 110, in 
__fetch
      self._fetch_everything_for_search(search)
    File "/Library/Python/2.6/site-packages/bzrlib/fetch.py", line 138, in 
_fetch_everything_for_search
      stream, from_format, [])
    File "/Library/Python/2.6/site-packages/bzrlib/repository.py", line 3791, 
in insert_stream
      return self._locked_insert_stream(stream, src_format)
    File "/Library/Python/2.6/site-packages/bzrlib/repository.py", line 3819, 
in _locked_insert_stream
      for substream_type, substream in stream:
    File "/Library/Python/2.6/site-packages/bzrlib/remote.py", line 1709, in 
missing_parents_chain
      for kind, substream in stream:
    File "/Library/Python/2.6/site-packages/bzrlib/smart/repository.py", line 
447, in record_stream
      for bytes in byte_stream:
    File "/Library/Python/2.6/site-packages/bzrlib/smart/message.py", line 336, 
in read_streamed_body
      _translate_error(self._body_error_args)
    File "/Library/Python/2.6/site-packages/bzrlib/smart/message.py", line 355, 
in _translate_error
      raise errors.ErrorFromSmartServer(error_tuple)
  ErrorFromSmartServer: Error received from smart server: ('error', 
"'AbsentContentFactory' object has no attribute 'get_bytes_as'")
- 
- bzr 1.14dev on python 2.6.1 (darwin)
- arguments: ['/usr/local/bin/bzr', 'branch', 'lp:~rivenx/rivenx/domes']
- encoding: 'UTF-8', fsenc: 'utf-8', lang: 'en_US.UTF-8'
- plugins:
-   bzrtools             
/Library/Python/2.6/site-packages/bzrlib/plugins/bzrtools [1.13]
-   keychain_credential_store 
/Volumes/Crossroads/bahamut/.bazaar/plugins/keychain_credential_store [0.1dev]
-   launchpad            
/Library/Python/2.6/site-packages/bzrlib/plugins/launchpad [unknown]
-   netrc_credential_store 
/Library/Python/2.6/site-packages/bzrlib/plugins/netrc_credential_store 
[unknown]
-   svn                  /Volumes/Crossroads/bahamut/.bazaar/plugins/svn 
[0.5.4dev]
- *** Bazaar has encountered an internal error.
-     Please report a bug at https://bugs.launchpad.net/bzr/+filebug
-     including this traceback, and a description of what you
-     were doing when the error occurred.

** Tags added: lp-needs
** Tags removed: lp-cp

-- 
ErrorFromSmartServer - AbsentContentFactory object has no attribute 
'get_bytes_as' exception while pulling from Launchpad
https://bugs.launchpad.net/bugs/354036
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to