diff --git a/templates/ovndbcluster/bin/functions b/templates/ovndbcluster/bin/functions index d190a246..f0ec5976 100644 --- a/templates/ovndbcluster/bin/functions +++ b/templates/ovndbcluster/bin/functions @@ -26,13 +26,6 @@ function wait_for_ovsdb_tool { done } -function wait_for_ovsdb_client { - while pgrep -a ovsdb-client; do - echo "ovsdb-client still working. Waiting..." - sleep 1 - done -} - function check_and_convert_db { local db_socket="${OVN_RUNDIR}/ovn${DB_TYPE}_db.sock" local db_schema="/usr/share/ovn/ovn-${DB_TYPE}.ovsschema" @@ -52,8 +45,15 @@ function check_and_convert_db { if test X"`ovsdb-client needs-conversion unix:$db_socket "$db_schema"`" = Xyes; then echo "Database conversion needed for ${DB_TYPE} database, performing conversion..." - # Set trap to wait for ovsdb-client to finish conversion - trap wait_for_ovsdb_client EXIT + local db_name="OVN_Northbound" + if [[ "${DB_TYPE}" == "sb" ]]; then + db_name="OVN_Southbound" + fi + local db_version + db_version=$(ovsdb-client get-schema-version "unix:$db_socket" "$db_name") + local backup_file="${DB_FILE%.db}-backup-v${db_version}.db" + echo "Backing up ${db_name} v${db_version} to ${backup_file}..." + ovsdb-client backup "unix:$db_socket" "$db_name" > "$backup_file" if ovsdb-client convert unix:$db_socket "$db_schema"; then echo "Database conversion completed successfully for ${DB_TYPE} database" @@ -62,10 +62,6 @@ function check_and_convert_db { trap - EXIT return 1 fi - - # Wait for conversion to complete and remove trap - wait_for_ovsdb_client - trap - EXIT fi } diff --git a/templates/ovndbcluster/bin/setup.sh b/templates/ovndbcluster/bin/setup.sh index 364f053b..16935ddb 100755 --- a/templates/ovndbcluster/bin/setup.sh +++ b/templates/ovndbcluster/bin/setup.sh @@ -46,6 +46,7 @@ fi # call to ovn-ctl directly instead of start-${DB_TYPE}-db-server to pass # extra_args after -- set /usr/share/ovn/scripts/ovn-ctl --no-monitor +set "$@" --no-db-cluster-schema-upgrade # Election timer (hardcoded initial value; runtime changes handled by operator) set "$@" --db-${DB_TYPE}-election-timer=10000 @@ -155,7 +156,10 @@ if [[ "$(hostname)" == "{{ .SERVICE_NAME }}-0" ]]; then fi # Check and perform database conversion if needed -# This can be cleaned up once https://redhat.atlassian.net/browse/FDP-3108 is fixed +# "Online" db conversion will happen when ovn-ctl starts a clustered DB unless +# --no-db-cluster-schema-upgrade is passed. Online conversion does no backup, +# making rollback impossible if something goes wrong during an upgrade and it +# needs to be reverted check_and_convert_db wait_for_ovsdb_tool