From afce10dea418dcf691e8f4539f5fb7dc766235a3 Mon Sep 17 00:00:00 2001
From: SamYaple <sam@yaple.net>
Date: Sat, 19 Mar 2016 13:58:19 +0000
Subject: [PATCH] Fix mysql bootstrap

The lightsout recover patch broke multinode mysql. Also the lightsout
recovery didnt probably pass the --wsrep-new-cluster flag. This
updates the mariadb bootstrap to work with multinode again.

Closes-Bug: #1559480
Related-Id: I903c3bcd069af39814bcabcef37684b1f043391f
Change-Id: I1ec91a8b2144930ea8f04cc1c201b53712352e4e
---
 .../roles/mariadb/tasks/bootstrap_cluster.yml | 32 +++++++++++--------
 .../roles/mariadb/tasks/recover_cluster.yml   |  2 +-
 ansible/roles/mariadb/templates/galera.cnf.j2 |  2 +-
 docker/mariadb/extend_start.sh                |  8 +++--
 4 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/ansible/roles/mariadb/tasks/bootstrap_cluster.yml b/ansible/roles/mariadb/tasks/bootstrap_cluster.yml
index 6c3c8537f9..1c9aab453e 100644
--- a/ansible/roles/mariadb/tasks/bootstrap_cluster.yml
+++ b/ansible/roles/mariadb/tasks/bootstrap_cluster.yml
@@ -1,31 +1,37 @@
 ---
-- name: Starting MariaDB bootstrap container
+- name: Running MariaDB bootstrap container
   kolla_docker:
     action: "start_container"
     common_options: "{{ docker_common_options }}"
+    detach: False
     environment:
       KOLLA_BOOTSTRAP:
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
       DB_ROOT_PASSWORD: "{{ database_password }}"
       DB_MAX_TIMEOUT: "{{ database_max_timeout }}"
-      ARGS: "--wsrep-new-cluster"
     image: "{{ mariadb_image_full }}"
     labels:
       BOOTSTRAP:
-    name: "mariadb"
+    name: "bootstrap_mariadb"
     restart_policy: "never"
     volumes:
       - "{{ node_config_directory }}/mariadb/:{{ container_config_directory }}/:ro"
       - "kolla_logs:/var/log/kolla/"
       - "mariadb:/var/lib/mysql"
 
-- name: Waiting for MariaDB service to be ready
-  command: "docker exec mariadb ls /var/lib/mysql/{{ item }}"
-  register: bootstrap_result
-  until: bootstrap_result | success
-  changed_when: False
-  retries: 6
-  delay: 10
-  with_items:
-    - cluster.exists
-    - mariadb.pid
+- name: Starting first MariaDB container
+  kolla_docker:
+    action: "start_container"
+    common_options: "{{ docker_common_options }}"
+    environment:
+      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+      BOOTSTRAP_ARGS: "--wsrep-new-cluster"
+    image: "{{ mariadb_image_full }}"
+    labels:
+      BOOTSTRAP:
+    name: "mariadb"
+    restart_policy: "never"
+    volumes:
+      - "{{ node_config_directory }}/mariadb/:{{ container_config_directory }}/:ro"
+      - "kolla_logs:/var/log/kolla/"
+      - "mariadb:/var/lib/mysql"
diff --git a/ansible/roles/mariadb/tasks/recover_cluster.yml b/ansible/roles/mariadb/tasks/recover_cluster.yml
index 2a19c11acb..6c2fccb725 100644
--- a/ansible/roles/mariadb/tasks/recover_cluster.yml
+++ b/ansible/roles/mariadb/tasks/recover_cluster.yml
@@ -20,7 +20,7 @@
     common_options: "{{ docker_common_options }}"
     environment:
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-      ARGS: "--wsrep-new-cluster"
+      BOOTSTRAP_ARGS: "--wsrep-new-cluster"
     image: "{{ mariadb_image_full }}"
     labels:
       BOOTSTRAP:
diff --git a/ansible/roles/mariadb/templates/galera.cnf.j2 b/ansible/roles/mariadb/templates/galera.cnf.j2
index 095652d847..a4210fa9ca 100644
--- a/ansible/roles/mariadb/templates/galera.cnf.j2
+++ b/ansible/roles/mariadb/templates/galera.cnf.j2
@@ -13,7 +13,7 @@ datadir=/var/lib/mysql/
 
 wsrep_cluster_address=gcomm://{% if (groups['mariadb'] | length) > 1 %}{% for host in groups['mariadb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mariadb_wsrep_port }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %}
 
-wsrep_provider_options="gmcast.listen_addr=tcp://{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ mariadb_wsrep_port }};ist.recv_addr={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ mariadb_ist_port }}"
+wsrep_provider_options=gmcast.listen_addr=tcp://{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ mariadb_wsrep_port }};ist.recv_addr={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ mariadb_ist_port }}
 
 wsrep_node_address={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ mariadb_wsrep_port }}
 wsrep_sst_receive_address={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ mariadb_sst_port }}
diff --git a/docker/mariadb/extend_start.sh b/docker/mariadb/extend_start.sh
index 3d826c4e85..e5d9632b91 100644
--- a/docker/mariadb/extend_start.sh
+++ b/docker/mariadb/extend_start.sh
@@ -32,8 +32,12 @@ if [[ $(stat -c %a /var/log/kolla/mariadb) != "755" ]]; then
 fi
 
 # This catches all cases of the BOOTSTRAP variable being set, including empty
-if [[ "${!KOLLA_BOOTSTRAP[@]}" ]] && [[ ! -e /var/lib/mysql/cluster.exists ]]; then
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
     mysql_install_db
     bootstrap_db
-    touch /var/lib/mysql/cluster.exists
+    exit 0
+fi
+
+if [[ "${!BOOTSTRAP_ARGS[@]}" ]]; then
+    ARGS="${BOOTSTRAP_ARGS}"
 fi
-- 
GitLab