diff mbox series

[ovs-dev] rhel, utils: don't affect traffic on controller upgrade

Message ID 20210917132750.4114-1-odivlad@gmail.com
State Accepted
Headers show
Series [ovs-dev] rhel, utils: don't affect traffic on controller upgrade | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes fail github build: failed

Commit Message

Vladislav Odintsov Sept. 17, 2021, 1:27 p.m. UTC
Currently upgrade of ovn-host rpm package affects active
traffic. This is because systemctl try-restart
ovn-controller is invoked during rpm package upgrade.
It calls ovn-ctl stop_controller and then start_controller.

Adding ovn-ctl stop_controller --restart to %postun
upgrade case right before systemctl try-restart. Also,
upgrade ovn-ctl script to support --restart argument in it.

Ideally this should be done by systemd when restart is
called, but it's impossible to pass restart command to
systemd.

Signed-off-by: Vladislav Odintsov <odivlad@gmail.com>
---
 rhel/ovn-fedora.spec.in |  8 ++++++++
 utilities/ovn-ctl       | 10 ++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

Comments

Numan Siddique Sept. 17, 2021, 8:02 p.m. UTC | #1
On Fri, Sep 17, 2021 at 9:28 AM Vladislav Odintsov <odivlad@gmail.com> wrote:
>
> Currently upgrade of ovn-host rpm package affects active
> traffic. This is because systemctl try-restart
> ovn-controller is invoked during rpm package upgrade.
> It calls ovn-ctl stop_controller and then start_controller.
>
> Adding ovn-ctl stop_controller --restart to %postun
> upgrade case right before systemctl try-restart. Also,
> upgrade ovn-ctl script to support --restart argument in it.
>
> Ideally this should be done by systemd when restart is
> called, but it's impossible to pass restart command to
> systemd.
>
> Signed-off-by: Vladislav Odintsov <odivlad@gmail.com>

Thanks for the patch.  I applied this patch.

I did try to find a better way to fix it.  Seems to me this is the only way.

Numan

> ---
>  rhel/ovn-fedora.spec.in |  8 ++++++++
>  utilities/ovn-ctl       | 10 ++++++++--
>  2 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/rhel/ovn-fedora.spec.in b/rhel/ovn-fedora.spec.in
> index 6716dd0d2..5fe0f990f 100644
> --- a/rhel/ovn-fedora.spec.in
> +++ b/rhel/ovn-fedora.spec.in
> @@ -400,6 +400,14 @@ fi
>  %endif
>
>  %postun host
> +if [ "$1" -ge "1" ] ; then
> +    # Package upgrade, not uninstall
> +    # We perform lightweight stop here not to affect active traffic during
> +    # ovn-controller upgrade.
> +    # Ideally this would be held by systemd, but it's impossible
> +    # to pass custom restart command to systemd service.
> +    %{_datadir}/ovn/scripts/ovn-ctl stop_controller --restart
> +fi
>  %if 0%{?systemd_postun_with_restart:1}
>      %systemd_postun_with_restart ovn-controller.service
>  %else
> diff --git a/utilities/ovn-ctl b/utilities/ovn-ctl
> index ff61f21d0..b30eb209d 100755
> --- a/utilities/ovn-ctl
> +++ b/utilities/ovn-ctl
> @@ -584,7 +584,11 @@ stop_ic () {
>  }
>
>  stop_controller () {
> -    OVS_RUNDIR=${OVS_RUNDIR} stop_ovn_daemon ovn-controller "" "" "$@"
> +    set "ovn-controller" "" ""
> +    if test X"$RESTART" = Xyes; then
> +        set "$@" "--restart"
> +    fi
> +    OVS_RUNDIR=${OVS_RUNDIR} stop_ovn_daemon "$@"
>  }
>
>  stop_controller_vtep () {
> @@ -606,7 +610,8 @@ restart_ic () {
>  }
>
>  restart_controller () {
> -    stop_controller --restart
> +    RESTART=yes
> +    stop_controller
>      start_controller
>  }
>
> @@ -651,6 +656,7 @@ restart_ic_sb_ovsdb () {
>
>  set_defaults () {
>      OVN_MANAGE_OVSDB=yes
> +    RESTART=no
>
>      OVS_RUNDIR=${OVS_RUNDIR:-${rundir}}
>      OVN_RUNDIR=${OVN_RUNDIR:-${ovn_rundir}}
> --
> 2.30.0
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
diff mbox series

Patch

diff --git a/rhel/ovn-fedora.spec.in b/rhel/ovn-fedora.spec.in
index 6716dd0d2..5fe0f990f 100644
--- a/rhel/ovn-fedora.spec.in
+++ b/rhel/ovn-fedora.spec.in
@@ -400,6 +400,14 @@  fi
 %endif
 
 %postun host
+if [ "$1" -ge "1" ] ; then
+    # Package upgrade, not uninstall
+    # We perform lightweight stop here not to affect active traffic during
+    # ovn-controller upgrade.
+    # Ideally this would be held by systemd, but it's impossible
+    # to pass custom restart command to systemd service.
+    %{_datadir}/ovn/scripts/ovn-ctl stop_controller --restart
+fi
 %if 0%{?systemd_postun_with_restart:1}
     %systemd_postun_with_restart ovn-controller.service
 %else
diff --git a/utilities/ovn-ctl b/utilities/ovn-ctl
index ff61f21d0..b30eb209d 100755
--- a/utilities/ovn-ctl
+++ b/utilities/ovn-ctl
@@ -584,7 +584,11 @@  stop_ic () {
 }
 
 stop_controller () {
-    OVS_RUNDIR=${OVS_RUNDIR} stop_ovn_daemon ovn-controller "" "" "$@"
+    set "ovn-controller" "" ""
+    if test X"$RESTART" = Xyes; then
+        set "$@" "--restart"
+    fi
+    OVS_RUNDIR=${OVS_RUNDIR} stop_ovn_daemon "$@"
 }
 
 stop_controller_vtep () {
@@ -606,7 +610,8 @@  restart_ic () {
 }
 
 restart_controller () {
-    stop_controller --restart
+    RESTART=yes
+    stop_controller
     start_controller
 }
 
@@ -651,6 +656,7 @@  restart_ic_sb_ovsdb () {
 
 set_defaults () {
     OVN_MANAGE_OVSDB=yes
+    RESTART=no
 
     OVS_RUNDIR=${OVS_RUNDIR:-${rundir}}
     OVN_RUNDIR=${OVN_RUNDIR:-${ovn_rundir}}