From f4b7ae95ac24f395e8d7ddd36cba362659fd29b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Andr=C3=A9?= <martin.andre@kvhasia.com>
Date: Mon, 19 Jan 2015 15:06:28 +0900
Subject: [PATCH] Check for nova DB availability in dependent containers

When nova-api start and the nova database hasn't yet been created, it
would create it itself, preventing the migration in nova-conductor to
run and making it unable to start. This commit ensures that nova-api
container will not try to steal nova-conductor's job of creating the
nova database.

Nova-scheduler reacts differently to the missing database and simply
exits with a backtrace. This commit also prevents nova-scheduler to
start when the nova database cannot be found.

Change-Id: Ib6f7521151815faa7a26ec1d170df5a1cdb7fd63
Related-Bug: #1335804
---
 docker/fedora-rdo-base/kolla-common.sh         | 6 ++++--
 docker/nova-base/config-nova.sh                | 1 -
 docker/nova-controller/nova-api/start.sh       | 3 ++-
 docker/nova-controller/nova-scheduler/start.sh | 3 +++
 4 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/docker/fedora-rdo-base/kolla-common.sh b/docker/fedora-rdo-base/kolla-common.sh
index c9ba03be52..56c658c43f 100644
--- a/docker/fedora-rdo-base/kolla-common.sh
+++ b/docker/fedora-rdo-base/kolla-common.sh
@@ -56,12 +56,14 @@ check_for_neutron() {
 }
 
 # Exit unless we receive a successful response from the database server.
+# Optionally takes a database name to check for. Defaults to 'mysql'.
 check_for_db() {
+    local database=${1:-mysql}
     check_required_vars MARIADB_SERVICE_HOST DB_ROOT_PASSWORD
 
     mysql -h ${MARIADB_SERVICE_HOST} -u root -p"${DB_ROOT_PASSWORD}" \
-            -e "select 1" mysql > /dev/null 2>&1 || {
-        echo "ERROR: database is not available @ $MARIADB_SERVICE_HOST" >&2
+            -e "select 1" $database > /dev/null 2>&1 || {
+        echo "ERROR: database $database is not available @ $MARIADB_SERVICE_HOST" >&2
         exit 1
     }
 
diff --git a/docker/nova-base/config-nova.sh b/docker/nova-base/config-nova.sh
index 10aa646fab..829fb48dea 100755
--- a/docker/nova-base/config-nova.sh
+++ b/docker/nova-base/config-nova.sh
@@ -11,7 +11,6 @@
 : ${RABBIT_PASSWORD:=guest}
 : ${NETWORK_MANAGER:=nova}
 
-check_for_db
 check_required_vars KEYSTONE_ADMIN_TOKEN NOVA_DB_PASSWORD \
                     RABBITMQ_SERVICE_HOST GLANCE_API_SERVICE_HOST \
                     KEYSTONE_PUBLIC_SERVICE_HOST PUBLIC_IP
diff --git a/docker/nova-controller/nova-api/start.sh b/docker/nova-controller/nova-api/start.sh
index 49329f21c6..723a3539e9 100755
--- a/docker/nova-controller/nova-api/start.sh
+++ b/docker/nova-controller/nova-api/start.sh
@@ -7,8 +7,9 @@ set -e
 check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_ADMIN_SERVICE_HOST \
                     NOVA_KEYSTONE_USER NOVA_KEYSTONE_PASSWORD \
                     ADMIN_TENANT_NAME NOVA_API_SERVICE_HOST \
-                    NOVA_EC2_API_SERVICE_HOST PUBLIC_IP
+                    NOVA_EC2_API_SERVICE_HOST PUBLIC_IP NOVA_DB_NAME
 check_for_keystone
+check_for_db $NOVA_DB_NAME
 
 export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
 export SERVICE_ENDPOINT="http://${KEYSTONE_ADMIN_SERVICE_HOST}:35357/v2.0"
diff --git a/docker/nova-controller/nova-scheduler/start.sh b/docker/nova-controller/nova-scheduler/start.sh
index 71dd848f7e..da7f5f32a0 100755
--- a/docker/nova-controller/nova-scheduler/start.sh
+++ b/docker/nova-controller/nova-scheduler/start.sh
@@ -4,4 +4,7 @@ set -e
 
 . /opt/kolla/config-nova.sh
 
+check_required_vars NOVA_DB_NAME
+check_for_db $NOVA_DB_NAME
+
 exec /usr/bin/nova-scheduler
-- 
GitLab