diff options
| author | Mark Goddard <mark@stackhpc.com> | 2019-03-18 15:14:01 +0000 |
|---|---|---|
| committer | Mark Goddard <mark@stackhpc.com> | 2019-03-18 19:42:36 +0000 |
| commit | 3075685d01554447144f37201f241f7f1ff1ad3b (patch) | |
| tree | f9f4a47adfa88f3ec0c41282b565459041bf4ce9 | |
| parent | debe4179824005afeaa0d89ab68a9a8acd42103a (diff) | |
| download | kolla-3075685d01554447144f37201f241f7f1ff1ad3b.tar.gz kolla-3075685d01554447144f37201f241f7f1ff1ad3b.zip | |
Fix MariaDB 10.3 upgrade
There are a couple of issues with the mariadb image currently.
1. it doesn't include mysql_upgrade on CentOS/RHEL. It is necessary to
run this after an upgrade of MariaDB. This is fixed by installing
mariadb-server-utils.
2. it inherits the standard dumb-init entrypoint from the base image,
which includes a --single-child argument. That causes signals to be
forwarded only to the process executed by dumb-init, which in the
case of kolla-ansible is mysqld_safe, however mysqld_safe ignores
SIGTERM. After a timeout, Docker then forcibly kills the container.
Executing dumb-init without --single-child ensures the TERM signal is
sent to mysqld, allowing it to shutdown gracefully.
Change-Id: I1a450736721863b91be1ea3d3c8948990de9fdeb
Closes-Bug: #1820325
| -rw-r--r-- | docker/mariadb/Dockerfile.j2 | 14 | ||||
| -rw-r--r-- | docker/mariadb/extend_start.sh | 13 |
2 files changed, 26 insertions, 1 deletions
diff --git a/docker/mariadb/Dockerfile.j2 b/docker/mariadb/Dockerfile.j2 index 67a1c1d60..cc7b27194 100644 --- a/docker/mariadb/Dockerfile.j2 +++ b/docker/mariadb/Dockerfile.j2 @@ -13,8 +13,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'galera', 'hostname', 'mariadb', - 'mariadb-server-galera', 'mariadb-backup', + 'mariadb-server-galera', + 'mariadb-server-utils', 'pv', 'rsync', 'tar' @@ -50,6 +51,17 @@ RUN chmod 755 /usr/local/bin/kolla_extend_start \ {% if base_package_type == 'deb' %} RUN mkdir -p /var/run/mysqld && chown mysql /var/run/mysqld && chmod 755 /var/run/mysqld {% endif %} + +{% block mariadb_entrypoint %} +# NOTE(mgoddard): Override the dumb-init arguments to avoid passing +# --single-child. This does not play well with mysqld_safe, which ignores +# SIGTERM, meaning Docker needs to forcibly kill the container to stop it. +# Without --single-child, the TERM signal is sent to all subprocesses, +# including mysqld. +ENTRYPOINT ["dumb-init"] +CMD ["kolla_start"] +{% endblock %} + {% block mariadb_footer %}{% endblock %} {% block footer %}{% endblock %} diff --git a/docker/mariadb/extend_start.sh b/docker/mariadb/extend_start.sh index 310f79c2c..88be89d02 100644 --- a/docker/mariadb/extend_start.sh +++ b/docker/mariadb/extend_start.sh @@ -38,6 +38,19 @@ if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then exit 0 fi +# This catches all cases of the KOLLA_UPGRADE variable being set, including empty +if [[ "${!KOLLA_UPGRADE[@]}" ]]; then + # The mysql_upgrade command treats any directories under /var/lib/mysql as + # databases. Somehow we can end up with a .pki directory, which causes the + # command to fail with this error: + # Incorrect database name '#mysql50#.pki' when selecting the database + # There doesn't seem to be anything in the directory, so remove it. + rm -rf /var/lib/mysql/.pki + + mysql_upgrade --user=root --password="${DB_ROOT_PASSWORD}" + exit 0 +fi + if [[ "${!BOOTSTRAP_ARGS[@]}" ]]; then ARGS="${BOOTSTRAP_ARGS}" fi |
