Blob Blame History Raw
From fb707d72eb7600493dd41cf51018d87cb8788510 Mon Sep 17 00:00:00 2001
From: Numan Siddique <numans@ovn.org>
Date: Wed, 9 Sep 2020 12:49:39 +0530
Subject: [PATCH 1/3] ovn-ctl: Handle cluster db upgrades for run_(nb/sb)_ovsdb

when ovn-ctl run_(nb_sb)_ovsdb is called, the ovsdb-server is started without
passing --detach and --monoitor and the process is exec'd.

For cluster mode, upgrade_cluster is never called and hence the dbs are not upraded
to new schema. CMS has to handle the db upgrade separately.

This patch handles the db upgrade by starting ovsdb-server in background and then
waits on ovsdb-server to complete.

Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1868392
Acked-by: Mark Michelson <mmichels@redhat.com>
Signed-off-by: Numan Siddique <numans@ovn.org>

(cherry-picked from upstream master commit 67e2f386cc838d0b0f9b4b5da7fe611e1113b70c)

Change-Id: I2834e214f0692a2d8b3b1bc3bf9f0cb80478050c
---
 utilities/ovn-ctl | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/utilities/ovn-ctl b/utilities/ovn-ctl
index af095ea1b..c44201ccf 100755
--- a/utilities/ovn-ctl
+++ b/utilities/ovn-ctl
@@ -288,7 +288,21 @@ $cluster_remote_port
         set "$@" --sync-from=`cat $active_conf_file`
     fi
 
-    start_wrapped_daemon "$wrapper" ovsdb-$db "" "$@" "$file"
+    local run_ovsdb_in_bg="no"
+    local process_id=
+    if test X$detach = Xno && test $mode = cluster && test -z "$cluster_remote_addr" ; then
+        # When detach is no (for run_nb_ovsdb/run_sb_ovsdb commands)
+        # we want to run ovsdb-server in background rather than running it in
+        # foreground so that the OVN dbs are upgraded for the cluster mode.
+        # Otherwise, CMS has to take the responsibility of upgrading the dbs.
+        # Note: We run only the ovsdb-server in backgroud which created the
+        # cluster (i.e cluster_remote_addr is not set.).
+        run_ovsdb_in_bg="yes"
+        "$@" $file &
+        process_id=$!
+    else
+        start_wrapped_daemon "$wrapper" ovsdb-$db "" "$@" "$file"
+    fi
 
     # Initialize the database if it's NOT joining a cluster.
     if test -z "$cluster_remote_addr"; then
@@ -298,6 +312,10 @@ $cluster_remote_port
     if test $mode = cluster; then
         upgrade_cluster "$schema" "unix:$sock"
     fi
+
+    if test $run_ovsdb_in_bg = yes; then
+        wait $process_id
+    fi
 }
 
 start_nb_ovsdb() {
-- 
2.26.2