diff options
| author | Sidharth Surana <ssurana@vmware.com> | 2015-12-08 02:23:58 -0800 |
|---|---|---|
| committer | Sidharth Surana <ssurana@vmware.com> | 2016-01-04 09:10:04 -0800 |
| commit | 37d44444d7bc1804976fc4477c4022ee6cc06e44 (patch) | |
| tree | f3a24b78ab16f83c2698165b9f7dd6f20fc819bb /ansible | |
| parent | 58daa10ae30cc750e5f8f3f5e512f444d12aa5f7 (diff) | |
| download | kolla-37d44444d7bc1804976fc4477c4022ee6cc06e44.tar.gz kolla-37d44444d7bc1804976fc4477c4022ee6cc06e44.zip | |
Make galeradb bootstraping robust
Currently, there are arbitrary wait for mariadb service startup.
However, this leads to nondeterministic results in the current
workflow. This patch tries to make the workflow more deterministic.
Change-Id: I3c6245cce93c7ff0d3d57cb2ae065a1ed1487769
Closes-Bug: #1491782
Diffstat (limited to 'ansible')
| -rw-r--r-- | ansible/roles/mariadb/defaults/main.yml | 2 | ||||
| -rw-r--r-- | ansible/roles/mariadb/tasks/bootstrap.yml | 12 | ||||
| -rw-r--r-- | ansible/roles/mariadb/tasks/start.yml | 11 | ||||
| -rw-r--r-- | ansible/roles/mariadb/templates/galera.cnf.j2 | 3 |
4 files changed, 24 insertions, 4 deletions
diff --git a/ansible/roles/mariadb/defaults/main.yml b/ansible/roles/mariadb/defaults/main.yml index 00f49d1ba..410e86d3e 100644 --- a/ansible/roles/mariadb/defaults/main.yml +++ b/ansible/roles/mariadb/defaults/main.yml @@ -5,7 +5,7 @@ project_name: "mariadb" # Database #################### database_cluster_name: "openstack" - +database_max_timeout: 60 #################### # Docker diff --git a/ansible/roles/mariadb/tasks/bootstrap.yml b/ansible/roles/mariadb/tasks/bootstrap.yml index 68354dd15..af7d8f308 100644 --- a/ansible/roles/mariadb/tasks/bootstrap.yml +++ b/ansible/roles/mariadb/tasks/bootstrap.yml @@ -44,6 +44,8 @@ KOLLA_BOOTSTRAP: KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" DB_ROOT_PASSWORD: "{{ database_password }}" + DB_PID_FILE: "/var/lib/mysql/{{ hostvars[inventory_hostname]['ansible_hostname'] }}-galera.pid" + DB_MAX_TIMEOUT: "{{ database_max_timeout }}" image: "{{ mariadb_image_full }}" name: "mariadb" restart_policy: "never" @@ -52,7 +54,11 @@ - "mariadb:/var/lib/mysql" when: delegate_host == 'None' and inventory_hostname == groups['mariadb'][0] -- name: Sleeping for 15 seconds while the cluster starts - command: sleep 15 - changed_when: False +- name: Waiting for MariaDB service to be ready + command: "docker exec mariadb ls /var/lib/mysql/{{ hostvars[inventory_hostname]['ansible_hostname'] }}-galera.pid /var/lib/mysql/cluster.exists" + register: bootstrap_result when: delegate_host == 'None' and inventory_hostname == groups['mariadb'][0] + until: bootstrap_result|success + changed_when: False + retries: 6 + delay: 10 diff --git a/ansible/roles/mariadb/tasks/start.yml b/ansible/roles/mariadb/tasks/start.yml index 4682455ca..cfc12c063 100644 --- a/ansible/roles/mariadb/tasks/start.yml +++ b/ansible/roles/mariadb/tasks/start.yml @@ -11,3 +11,14 @@ when: delegate_host != 'None' or ( groups['mariadb'] | length ) == 1 or ( delegate_host == 'None' and inventory_hostname != groups['mariadb'][0] ) + +- name: Waiting for MariaDB service to be ready + command: "docker exec mariadb ls /var/lib/mysql/{{ hostvars[inventory_hostname]['ansible_hostname'] }}-galera.pid" + register: bootstrap_result + when: delegate_host != 'None' or + ( groups['mariadb'] | length ) == 1 or + ( delegate_host == 'None' and inventory_hostname != groups['mariadb'][0] ) + until: bootstrap_result|success + changed_when: False + retries: 6 + delay: 10 diff --git a/ansible/roles/mariadb/templates/galera.cnf.j2 b/ansible/roles/mariadb/templates/galera.cnf.j2 index bed806883..4e1039268 100644 --- a/ansible/roles/mariadb/templates/galera.cnf.j2 +++ b/ansible/roles/mariadb/templates/galera.cnf.j2 @@ -24,3 +24,6 @@ wsrep_sst_auth={{ database_user }}:{{ database_password }} wsrep_slave_threads=4 max_connections=1000 + +[server] +pid-file=/var/lib/mysql/{{ ansible_hostname }}-galera.pid |
