[ovs-dev] [PATCH 2/2] fedora: Handle upgrades from rhel package.
Aaron Conole
aconole at redhat.com
Fri May 3 20:05:21 UTC 2019
Guru Shetty <guru at ovn.org> writes:
> On Fri, 3 May 2019 at 11:36, Aaron Conole <aconole at redhat.com> wrote:
>
> Gurucharan Shetty <guru at ovn.org> writes:
>
> > Currently we have rhel/openvswitch.spec.in that provides
> > sysv scripts. The fedora package provides systemd scripts.
> > If one upgrades openvswitch package from sysv to systemd,
> > you will end up in a situation where old OVS daemons are
> > running, but systemd does not know about it. One "restart"
> > is needed for systemd to see the old daemons. Another "restart"
> > or "force-reload-kmod" is needed to actually use the new
> > daemons.
>
> Is this true? I thought the restart would actually run the restart
> action and that would spawn new instances of the daemons. It seems like
> a strange behavior.
>
> systemd openvswitch scripts when installed, hasn't been started yet in its history. So they do not know that
> any daemon has been started. So a "stop" will not stop old daemons.
The restart does, though - right? IIRC, the ExecStop= will be called
and terminate the old daemons first. I just want to make sure that it's
documented if process will be terminated (via the ExecStop= action) so
that any audit log can be explained. As it is written, the behavior
isn't clear whether the untracked daemons are stopped.
> > This commit, just takes care of the first restart. The "real"
> > restart/force-reload-kmod will still have to be done outside
> > the package installation.
> >
> > Signed-off-by: Gurucharan Shetty <guru at ovn.org>
> > ---
>
> I'm still not clear on the reasoning to only do the 'restart' on
> upgrade from the sysv style. If we're going through the trouble to
> auto-enable it seems confusing that the service gets enabled but not
> started, but only sometimes. Maybe it's best that if this autoenable
> flag is set, the daemons are also spawned.
>
> The "restart" being done here is only to make systemd aware of old daemons. The old rhel rpm did not
> restart/force-reload-kmod old daemons either.
> So this just brings fedora rpm to parity with rhel rpm. There is pre-built infrastructure that handle restart vs
> force-reload-kmod for rhel based openvswitch rpms. If we respawn daemons, it will cause them to get
> confused.
I think the idea is to bring RHEL to match Fedora, though. Not the
other way around. Fedora is upstream for RHEL.
I still don't understand why on upgrade we will always enable ovs (even
if the user didn't want it), but not also always start it. After all, a
system reboot will cause it to start. Does it make sense to skip the
reboot step and just allow ovs to start?
> > rhel/openvswitch-fedora.spec.in | 14 ++++++++++++++
> > 1 file changed, 14 insertions(+)
> >
> > diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
> > index e8165f9..d41d11c 100644
> > --- a/rhel/openvswitch-fedora.spec.in
> > +++ b/rhel/openvswitch-fedora.spec.in
> > @@ -364,6 +364,12 @@ getent passwd openvswitch >/dev/null || \
> > usermod -a -G hugetlbfs openvswitch
> > %endif
> > %endif
> > +
> > +%if %{with autoenable}
> > + if [ -x "/etc/init.d/openvswitch" ]; then
> > + touch %{_tmppath}/ovs-upgrade-from-sysv
> > + fi
> > +%endif
> > exit 0
> >
> > %post
> > @@ -397,6 +403,14 @@ fi
> > %if %{with autoenable}
> > systemctl daemon-reload
> > systemctl enable openvswitch
> > + # Handle upgrades to this package from the OVS repo's rhel packages.
> > + # One "restart" is needed for newer systemd files to see the old running
> > + # daemons. Another "restart" (outside the package postinst script) is
> > + # needed to actually run new daemons.
> > + if [ -e "%{_tmppath}/ovs-upgrade-from-sysv" ]; then
> > + systemctl restart openvswitch
> > + rm "%{_tmppath}/ovs-upgrade-from-sysv"
> > + fi
> > %endif
> >
> > %post selinux-policy
More information about the dev
mailing list