> OK. I was just trying to point out that there needs to be about 1-2 day
> period (releng knows best) between the 0 day push and the actual
> announcement. Maybe that's why we usually have 4 days between Go and the
> announcement? I don't know whether there's a releng process for it or not,
> but since QA wants to track 0 day updates more reliably, it would make sense
> to also have a similar process in releng space to ensure the updates are
> ready for everyone when the announcement goes out. I'd like to avoid the
> system-upgrade sad story next time.

I've tried to find out some of the technical details of this. Mirrormanager 
publishes the current hash of repomd.xml, and also hashes of usually up to two 
older repomd.xml files. You can see it here:
https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64
It's the <hash> tag in <file> and <alternates> tags.

Here's a nice graph showing how often our mirrors distribute current, or older 
content:
https://adrian.fedorapeople.org/f22-updates-repomd-propagation.svg

The time restraints are defined here:
https://github.com/fedora-infra/mirrormanager2/blob/master/mirrormanager2/lib/model.py#L314
If the current push is older than 2 days, there should be no alternate hashes 
older than 3 days. If the current push is younger, there can be one hash 
arbitrarily old, but no further hashes older than 3 days. I hope I read the 
code correctly (the docstring doesn't seem to match it exactly).

However, it also depends on how often metalink is regenerated, the old items 
will not disappear on their own. I learned that all metalinks are regenerated 
based on any of these fedmsg events:
org.fedoraproject.prod.bodhi.updates.fedora.sync
org.fedoraproject.prod.compose.rawhide.rsync.complete
org.fedoraproject.prod.compose.branched.rsync.complete
So if there is no new push (in any repository), metalinks are not regenerated 
and old hashes are not dropped. Theoretically releng could send out one of 
those fedmsg events artificially to trigger metalink regeneration, if needed.

Currently, there are no means to generate a new metalink with alternative 
hashes disabled, or removing those alternatives from the metalink intentionally 
at some point of time afterwards. That would require patching our tools. This 
would of course lead to a larger load on our master mirror and those mirrors 
which managed to get synced quickly, because that would disqualify any other 
mirrors which are not completely current. But it could get handy in some 
situations, unfortunately the tools do not allow it at the moment.

The second part of the story is dnf. In dnf, metadata_expire= option defines 
how often metalink is pulled again and new metadata are downloaded if the 
cached metadata hash differs from the current hash in the metalink. However, if 
the top-listed repository is not completely up-to-date (it contains current-1 
or current-2 metadata), but its hash is listed among alternate hashes in the 
metalink, dnf is fine with that and does not attempt to query different repos 
to retrieve the very current metadata. That means that as long as the metalink 
contains some older hashes, and some repository offers that older metadata, 
some users might not get latest metadata. The default value for metadata_expire 
is 6 hours for stable updates.

So, the outcome of this exercise is:
If we want to be sure the latest updates are available to _all_ our users, we 
need to wait until there are no older metadata hashes in the metalink and then 
6 more hours. There will be no older metadata hashes in the metalink when 3 
days pass since the push of the important update, *once* there is a new push 
after that time (which will regenerate the metalink), or if releng send out a 
fake event manually.

This is, uh, a) quite a long time and b) complex. I'll be very glad if you can 
point out anything that I've described or understood wrong.
--
test mailing list
test@lists.fedoraproject.org
To unsubscribe:
http://lists.fedoraproject.org/admin/lists/test@lists.fedoraproject.org

Reply via email to