The bug is in KnitVersionedFiles.insert_record_stream, or at least its
interaction with add_records(..., missing_compression_parents=True). It
doesn't pass all the buffered records in one batch, but in several (one
per key being depended on). This in turn breaks an assumption in
add_records, so that depending on ordering of keys it's possible for it
to think a key has a missing parent, when in fact it just has a buffered
parent (because that parent, or one of that parents' parents, etc., has
a missing parent). Probably this bug is so finicky in part because it
depends on the order a Python dict is iterated, which in turn is perhaps
partly dependent on the order records are received from the source.
The simple fix is to accumulate all buffered_index_entries into one list
before calling add_records at the end of insert_record_stream.
This wouldn't affect 2a repositories, so that's another reason for
people to upgrade...
I think this bug has been lurking for a long time, although it requires
stacking and HPSS to provoke, as well as some bad luck with how Python
orders a dict. Hmm, perhaps before this was masked because we weren't
using 'unordered' fetches as often?
** Changed in: bzr
Status: Confirmed => Fix Committed
--
exceptions.AssertionError: second push failed to complete a fetch set
https://bugs.launchpad.net/bugs/437626
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs