[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#624716: [britney2] Does not properly undo failed migrations

Package: release.debian.org
Severity: important
User: release.debian.org@packages.debian.org
Usertag: britney

Filing as a bug so it's documented somewhere more formal and doesn't get

On Sun, 2011-04-10 at 10:29 +0000, Cron Daemon wrote:
> Traceback (most recent call last):
>   File "/srv/release.debian.org/britney/code/b2/britney.py", line 2841, in <module>
>     Britney().main()
>   File "/srv/release.debian.org/britney/code/b2/britney.py", line 2836, in main
>     self.upgrade_testing()
>   File "/srv/release.debian.org/britney/code/b2/britney.py", line 2548, in upgrade_testing
>     self.do_all()
>   File "/srv/release.debian.org/britney/code/b2/britney.py", line 2447, in do_all
>     (nuninst_end, extra, tundo) = self.iter_packages(upgrade_me, selected, nuninst=nuninst_end)
>   File "/srv/release.debian.org/britney/code/b2/britney.py", line 2243, in iter_packages
>     pkg_name, suite, affected, undo = self.doop_source(pkg)
>   File "/srv/release.debian.org/britney/code/b2/britney.py", line 2039, in doop_source
>     if binaries[parch][0][binary][SOURCE] != pkg_name: continue
> KeyError: 'fixincludes'

(and the docvert-openoffice.org and openoffice.org-dmaths crashes from
mid-March, which I suspect are other occurrences of the same issue;
possibly also related to #618805)

>From a bit of debugging, this appears to be an issue with cases where a
particular binary package has either moved source packages (as in the
"fixincludes" case, from gcc-4.5 to gcc-4.6) or moved from being
arch-dependent to arch:all, and the package is considered during
multiple phases of the b2 run (either as part of an "easy" and then
during the main run, or in the main run and then in a "hint").

When deciding whether to migrate a package, britney removes all of the
current binary packages - making an "undo" list - and then adds the
binary packages from the new version.  If the new version is not
accepted then the "undo" list is used to revert things to the previous
state.  However, in the "fixincludes" case at least, that reversion
seems not to be applied correctly.  The run in which the above error
occurred included an "easy" for gcc-4.5, gcc-4.6 and a few other
packages, which failed; when the main run came to consider gcc-4.5 again
the sources dict still listed "fixincludes" as being built from gcc-4.5
but the binaries dict included the information for gcc-4.5/unstable,
meaning that it was missing the "fixincludes" package.

This appears to be "fixable" by disabling the use of the pre_process
dict, but at the expense of making the run slower.



Reply to: