summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdevstack/upgrade/upgrade.sh7
-rw-r--r--ironic/cmd/status.py11
-rw-r--r--releasenotes/notes/handle-missing-table-in-status-check-512c1732dec56f62.yaml6
3 files changed, 22 insertions, 2 deletions
diff --git a/devstack/upgrade/upgrade.sh b/devstack/upgrade/upgrade.sh
index 8c6096da8..7801ccd26 100755
--- a/devstack/upgrade/upgrade.sh
+++ b/devstack/upgrade/upgrade.sh
@@ -81,7 +81,12 @@ if [ $ret_val -gt 1 ] ; then
# Warnings are permissible and returned as status code 1, errors are
# returned as greater than 1 which means there is a major upgrade
# stopping issue which needs to be addressed.
- die $LINENO "Ironic DB Status check failed, returned: $ret_val"
+ echo "WARNING: Status check failed, we're going to attempt to apply the schema update and then re-evaluate."
+ $IRONIC_BIN_DIR/ironic-dbsync --config-file=$IRONIC_CONF_FILE upgrade
+ $IRONIC_BIN_DIR/ironic-status upgrade check && ret_val=$? || ret_val=$?
+ if [ $ret_val -gt 1 ] ; then
+ die $LINENO "Ironic DB Status check failed, returned: $ret_val"
+ fi
fi
$IRONIC_BIN_DIR/ironic-dbsync --config-file=$IRONIC_CONF_FILE
diff --git a/ironic/cmd/status.py b/ironic/cmd/status.py
index 37fdbaf7d..10c8a5bfd 100644
--- a/ironic/cmd/status.py
+++ b/ironic/cmd/status.py
@@ -19,6 +19,7 @@ from oslo_db.sqlalchemy import enginefacade
from oslo_db.sqlalchemy import utils
from oslo_upgradecheck import common_checks
from oslo_upgradecheck import upgradecheck
+from sqlalchemy import exc as sa_exc
from ironic.cmd import dbsync
from ironic.common.i18n import _
@@ -44,7 +45,15 @@ class Checks(upgradecheck.UpgradeCommands):
.version field in the database, with the expected versions
of these objects.
"""
- msg = dbsync.DBCommand().check_obj_versions(ignore_missing_tables=True)
+ try:
+ # NOTE(TheJulia): Seems an exception is raised by sqlalchemy
+ # when a table is missing, so lets catch it, since it is fatal.
+ msg = dbsync.DBCommand().check_obj_versions(
+ ignore_missing_tables=True)
+ except sa_exc.NoSuchTableError as e:
+ msg = ('Database table missing. Please ensure you have '
+ 'updated the database schema. Not Found: %s' % e)
+ return upgradecheck.Result(upgradecheck.Code.FAILURE, details=msg)
if not msg:
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
diff --git a/releasenotes/notes/handle-missing-table-in-status-check-512c1732dec56f62.yaml b/releasenotes/notes/handle-missing-table-in-status-check-512c1732dec56f62.yaml
new file mode 100644
index 000000000..026b4386a
--- /dev/null
+++ b/releasenotes/notes/handle-missing-table-in-status-check-512c1732dec56f62.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Handles excessively long errors when the status upgrade check is executed,
+ and simply indicates now if a table is missing, suggesting to update the
+ database schema before proceeding.