Bodhi2 and it's much faster updates flow
Now that we have had bodhi2 in production use for a while, I thought I would talk some about it's backend and how it manages updates pushes. First, for a bit of background, lets mention how bodhi1 did things:
- release engineers would gather a list of pending updates and look over them.
- release engineers would sign those updates
- release engineers would tell bodhi1 to push them. Typically in freezes (alpha, beta, final) the branched updates-testing ones were pushed, then all the stable releases (both testing and stable). Outside of freezes, all branches were pushed at the same time (both testing and stable).
- bodhi1 would start going through the list one by one and mashing the packages into repos.
- At the end when all branches were done it would go through them one by one and gather updateinfo and other data it needed to inject.
- It would then create rpm-ostree/atomic updates for each branch that has one one by one.
- Then it would wait for all of them to be synced to the master mirrors.
- Then it would go through them one by one and update bugs and note things in the bodhi updates.
- release engineers gather a list of pending updates and look them over.
- release engineers sign updates
- release engineers tell bodhi2 to push them.
- bodhi2 looks at all the pending updates: Are any of them security? It will do all those branches that have security updates first.
- Threads are fired off for each branch that is to be done (first all security holding ones, then all the rest).
- In each of those threads, subthreads are fired off to: mash updates (using createrepo_c instead of createrepo that bodhi1 used), gather updateinfo, create digests, ie, anything that can be done and wait to be collected together at the end is done.
- When one branch is done, atomic trees are updated, it's synced out and all work is completed on it (updating bugs, etc).