
On Thu, Apr 23, 2015 at 08:58:28AM -0400, Fabian Deutsch wrote:
Hey,
the logic which is run on vdsm upgrades is located in the specfile, and thus run when the rpm get's an update. This is fine as long as rpm is involved (like when rpm or yum or dnf is used), but it becomes - and already is - an issue for flows where the upgrade happens without rpm, like on oVirt Node.
On oVirt Node the image for booting the host is getting replaced, we currently mimic the upgrade process of the specfile. But this error prone - we had a lot of bugs around this area (remember the problems with the hooks?), and we need to watch out for changes in the upgrade logic.
To simplify and especially unify the logic between Node and normal hosts, I'd like to discuss if the upgrade logic can be moved to a separate service or included in one of the existsing services.
The simplest approach to me would be top create a new service which is started before libvirtd and vdsmd/supervdsmd to run some logic if an upgrade of vdsm is detected. This habit - to do the upgrade logic during boot - is actually not new and systemd provides some helpers (ConditionNeedsUpdate=) around this to ease the implementation.
Thoughts?
The problem is real: we have too much logic on %post and %postun scripts, and end up with upgrade bugs litterally on every release. However, for non-node installation we still need to allow configuration after upgrade, but before next boot. This means that everything in %post should be converted into vdsm-tool "configurators". https://gerrit.ovirt.org/#/c/39823/3/vdsm.spec.in is one small step in that direction. When Vdsm starts up, it performs several "upgrade" modules, which are used to upgrade vdsm-specific configurations. These too should operate properly also when run much after boot. Hence, I'm not sure about the benefit of adding an early systemd service, but I may be missing something.