From 332d16e6b223d1520dd2b0b96c984c0c1835deec Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Wed, 23 Oct 2024 16:15:15 -0400 Subject: [PATCH] Restart ovn-controller gracefully on PreStop Otherwise, it will clean up chassis and other relevant records and cause unnecessary router failovers. --- pkg/ovncontroller/daemonset.go | 2 +- templates/ovncontroller/bin/functions | 5 ++++ .../ovncontroller/bin/stop-ovn-controller.sh | 25 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100755 templates/ovncontroller/bin/stop-ovn-controller.sh diff --git a/pkg/ovncontroller/daemonset.go b/pkg/ovncontroller/daemonset.go index b4613ab7..0453fb7d 100644 --- a/pkg/ovncontroller/daemonset.go +++ b/pkg/ovncontroller/daemonset.go @@ -75,7 +75,7 @@ func CreateOVNDaemonSet( Lifecycle: &corev1.Lifecycle{ PreStop: &corev1.LifecycleHandler{ Exec: &corev1.ExecAction{ - Command: []string{"/usr/share/ovn/scripts/ovn-ctl", "stop_controller"}, + Command: []string{"/usr/local/bin/container-scripts/stop-ovn-controller.sh"}, }, }, }, diff --git a/templates/ovncontroller/bin/functions b/templates/ovncontroller/bin/functions index 8b4d7388..149d2f31 100755 --- a/templates/ovncontroller/bin/functions +++ b/templates/ovncontroller/bin/functions @@ -27,6 +27,11 @@ ovs_dir=/var/lib/openvswitch FLOWS_RESTORE_SCRIPT=$ovs_dir/flows-script FLOWS_RESTORE_DIR=$ovs_dir/saved-flows SAFE_TO_STOP_OVSDB_SERVER_SEMAPHORE=$ovs_dir/is_safe_to_stop_ovsdb_server +OVN_CONTROLLER_CLEANUP_CHASSIS_FLAG=$ovs_dir/cleanup_chassis + +function ovn_controller_is_restarting() { + return ! [ -f $OVN_CONTROLLER_CLEANUP_CHASSIS_FLAG ] +} function cleanup_ovsdb_server_semaphore() { rm -f $SAFE_TO_STOP_OVSDB_SERVER_SEMAPHORE 2>&1 > /dev/null diff --git a/templates/ovncontroller/bin/stop-ovn-controller.sh b/templates/ovncontroller/bin/stop-ovn-controller.sh new file mode 100755 index 00000000..d134a08a --- /dev/null +++ b/templates/ovncontroller/bin/stop-ovn-controller.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Copyright 2024 Red Hat Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +set -ex +source $(dirname $0)/functions + +OPTS= +if ovn_controller_is_restarting; then + OPTS+="--restart" +fi + +/usr/share/ovn/scripts/ovn-ctl stop_controller $OPTS