Fix race conditions between containers
authorJiri Stransky <jistr@redhat.com>
Wed, 14 Jun 2017 13:24:46 +0000 (15:24 +0200)
committerJiri Stransky <jistr@redhat.com>
Wed, 14 Jun 2017 13:58:55 +0000 (15:58 +0200)
In many occasions we had log directory initialization containers
without `detach: false`, which didn't guarantee that they'll finish
before the container depending on them will start using the log
directory.

This is now fixed by moving the initialization container one global
step earlier, so that we can keep the concurrency when creating the
log dirs. (Using `detach: false` makes paunch handle just one
container at a time, and as such it can have negative performance
impact.)

For services which have their container(s) starting in step_1,
initialization cannot be moved to an earlier step, so the solution
here was to just add `detach: false`.

As a minor related change, cinder DB sync container now mounts the log
directory from host to put cinder-manage.log into the expected
location.

Change-Id: I1340de4f68dd32c2412d9385cf3a8ca202b48556

19 files changed:
docker/services/aodh-api.yaml
docker/services/cinder-api.yaml
docker/services/cinder-scheduler.yaml
docker/services/congress-api.yaml
docker/services/database/mysql.yaml
docker/services/database/redis.yaml
docker/services/glance-api.yaml
docker/services/gnocchi-api.yaml
docker/services/heat-engine.yaml
docker/services/horizon.yaml
docker/services/ironic-api.yaml
docker/services/keystone.yaml
docker/services/memcached.yaml
docker/services/mistral-api.yaml
docker/services/neutron-api.yaml
docker/services/nova-api.yaml
docker/services/panko-api.yaml
docker/services/rabbitmq.yaml
docker/services/tacker.yaml

index 4b93ddd..bda5469 100644 (file)
@@ -86,16 +86,15 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           aodh_init_log:
-            start_order: 0
             image: *aodh_image
             user: root
             volumes:
               - /var/log/containers/aodh:/var/log/aodh
             command: ['/bin/bash', '-c', 'mkdir -p /var/log/httpd; chown -R aodh:aodh /var/log/aodh']
+        step_3:
           aodh_db_sync:
-            start_order: 1
             image: *aodh_image
             net: host
             privileged: false
index 062f5fc..94bd66d 100644 (file)
@@ -87,9 +87,8 @@ outputs:
               owner: cinder:cinder
               recurse: true
       docker_config:
-        step_3:
+        step_2:
           cinder_api_init_logs:
-            start_order: 0
             image: &cinder_api_image
               list_join:
                 - '/'
@@ -99,6 +98,7 @@ outputs:
             volumes:
               - /var/log/containers/cinder:/var/log/cinder
             command: ['/bin/bash', '-c', 'chown -R cinder:cinder /var/log/cinder']
+        step_3:
           cinder_api_db_sync:
             image: *cinder_api_image
             net: host
@@ -110,6 +110,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/config-data/cinder/etc/cinder/:/etc/cinder/:ro
+                  - /var/log/containers/cinder:/var/log/cinder
             command:
               - '/usr/bin/bootstrap_host_exec'
               - 'cinder_api'
index 9d94b57..8199c34 100644 (file)
@@ -81,9 +81,8 @@ outputs:
               owner: cinder:cinder
               recurse: true
       docker_config:
-        step_3:
+        step_2:
           cinder_scheduler_init_logs:
-            start_order: 0
             image: &cinder_scheduler_image
               list_join:
                 - '/'
index 3ee1d91..92b0eeb 100644 (file)
@@ -82,9 +82,8 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           congress_init_logs:
-            start_order: 0
             image: &congress_image
               list_join:
                 - '/'
@@ -94,8 +93,8 @@ outputs:
             volumes:
               - /var/log/containers/congress:/var/log/congress
             command: ['/bin/bash', '-c', 'chown -R congress:congress /var/log/congress']
+        step_3:
           congress_db_sync:
-            start_order: 1
             image: *congress_image
             net: host
             privileged: false
index c73db85..9eabb71 100644 (file)
@@ -87,17 +87,16 @@ outputs:
               recurse: true
       docker_config:
         # Kolla_bootstrap runs before permissions set by kolla_config
-        step_2:
+        step_1:
           mysql_init_logs:
-            start_order: 0
             image: *mysql_image
             privileged: false
             user: root
             volumes:
               - /var/log/containers/mysql:/var/log/mariadb
             command: ['/bin/bash', '-c', 'chown -R mysql:mysql /var/log/mariadb']
+        step_2:
           mysql_bootstrap:
-            start_order: 1
             detach: false
             image: *mysql_image
             net: host
index 9e84dd5..9d0d30c 100644 (file)
@@ -79,6 +79,7 @@ outputs:
         step_1:
           redis_init_logs:
             start_order: 0
+            detach: false
             image: *redis_image
             privileged: false
             user: root
@@ -86,6 +87,7 @@ outputs:
               - /var/log/containers/redis:/var/log/redis
             command: ['/bin/bash', '-c', 'chown -R redis:redis /var/log/redis']
           redis:
+            start_order: 1
             image: *redis_image
             net: host
             privileged: false
index c3af523..5c24401 100644 (file)
@@ -85,17 +85,16 @@ outputs:
           command: /usr/sbin/httpd -DFOREGROUND
       docker_config:
         # Kolla_bootstrap/db_sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           glance_init_logs:
-            start_order: 0
             image: *glance_image
             privileged: false
             user: root
             volumes:
               - /var/log/containers/glance:/var/log/glance
             command: ['/bin/bash', '-c', 'chown -R glance:glance /var/log/glance']
+        step_3:
           glance_api_db_sync:
-            start_order: 1
             image: *glance_image
             net: host
             privileged: false
index e3b72bc..bd1c316 100644 (file)
@@ -86,16 +86,15 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           gnocchi_init_log:
-            start_order: 0
             image: *gnocchi_image
             user: root
             volumes:
               - /var/log/containers/gnocchi:/var/log/gnocchi
             command: ['/bin/bash', '-c', 'mkdir -p /var/log/httpd; chown -R gnocchi:gnocchi /var/log/gnocchi']
+        step_3:
           gnocchi_db_sync:
-            start_order: 1
             image: *gnocchi_image
             net: host
             detach: false
index 0adad53..7a3312d 100644 (file)
@@ -80,16 +80,15 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           heat_init_log:
-            start_order: 0
             image: *heat_engine_image
             user: root
             volumes:
               - /var/log/containers/heat:/var/log/heat
             command: ['/bin/bash', '-c', 'chown -R heat:heat /var/log/heat']
+        step_3:
           heat_engine_db_sync:
-            start_order: 1
             image: *heat_engine_image
             net: host
             privileged: false
index 022eb5d..13bd091 100644 (file)
@@ -86,7 +86,7 @@ outputs:
               owner: apache:apache
               recurse: false
       docker_config:
-        step_3:
+        step_2:
           horizon_fix_perms:
             image: *horizon_image
             user: root
@@ -99,8 +99,8 @@ outputs:
             volumes:
               - /var/log/containers/horizon:/var/log/horizon
               - /var/lib/config-data/horizon/etc/:/etc/
+        step_3:
           horizon:
-            start_order: 1
             image: *horizon_image
             net: host
             privileged: false
index 650ce4c..a32176a 100644 (file)
@@ -82,9 +82,8 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           ironic_init_logs:
-            start_order: 0
             image: &ironic_image
               list_join:
                 - '/'
@@ -94,6 +93,7 @@ outputs:
             volumes:
               - /var/log/containers/ironic:/var/log/ironic
             command: ['/bin/bash', '-c', 'chown -R ironic:ironic /var/log/ironic']
+        step_3:
           ironic_db_sync:
             start_order: 1
             image: *ironic_image
index 5b253b4..4cd44f2 100644 (file)
@@ -95,16 +95,15 @@ outputs:
           command: /usr/sbin/httpd -DFOREGROUND
       docker_config:
         # Kolla_bootstrap/db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           keystone_init_log:
-            start_order: 0
             image: *keystone_image
             user: root
             command: ['/bin/bash', '-c', 'mkdir -p /var/log/httpd; chown -R keystone:keystone /var/log/keystone']
             volumes:
               - /var/log/containers/keystone:/var/log/keystone
+        step_3:
           keystone_db_sync:
-            start_order: 1
             image: *keystone_image
             net: host
             privileged: false
index d85a087..d453964 100644 (file)
@@ -72,6 +72,7 @@ outputs:
         step_1:
           memcached_init_logs:
             start_order: 0
+            detach: false
             image: *memcached_image
             privileged: false
             user: root
index cc7e613..30c3cde 100644 (file)
@@ -82,9 +82,8 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           mistral_init_logs:
-            start_order: 0
             image: &mistral_image
               list_join:
                 - '/'
@@ -94,8 +93,9 @@ outputs:
             volumes:
               - /var/log/containers/mistral:/var/log/mistral
             command: ['/bin/bash', '-c', 'chown -R mistral:mistral /var/log/mistral']
+        step_3:
           mistral_db_sync:
-            start_order: 1
+            start_order: 0
             image: *mistral_image
             net: host
             privileged: false
@@ -109,7 +109,7 @@ outputs:
                   - /var/log/containers/mistral:/var/log/mistral
             command: "/usr/bin/bootstrap_host_exec mistral_api su mistral -s /bin/bash -c 'mistral-db-manage --config-file /etc/mistral/mistral.conf upgrade head'"
           mistral_db_populate:
-            start_order: 2
+            start_order: 1
             image: *mistral_image
             net: host
             privileged: false
index fbdf75a..6c2d4ca 100644 (file)
@@ -92,9 +92,8 @@ outputs:
           command: /usr/sbin/httpd -DFOREGROUND
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           neutron_init_logs:
-            start_order: 0
             image: &neutron_api_image
               list_join:
                 - '/'
@@ -104,8 +103,8 @@ outputs:
             volumes:
               - /var/log/containers/neutron:/var/log/neutron
             command: ['/bin/bash', '-c', 'chown -R neutron:neutron /var/log/neutron']
+        step_3:
           neutron_db_sync:
-            start_order: 1
             image: *neutron_api_image
             net: host
             privileged: false
index 2375dad..c97f45d 100644 (file)
@@ -86,9 +86,8 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           nova_init_logs:
-            start_order: 0
             image: &nova_api_image
               list_join:
                 - '/'
@@ -98,8 +97,9 @@ outputs:
             volumes:
               - /var/log/containers/nova:/var/log/nova
             command: ['/bin/bash', '-c', 'chown -R nova:nova /var/log/nova']
+        step_3:
           nova_api_db_sync:
-            start_order: 1
+            start_order: 0
             image: *nova_api_image
             net: host
             detach: false
@@ -116,7 +116,7 @@ outputs:
           # to be capable of upgrading a baremetal setup. This is to ensure the name
           # of the cell is 'default'
           nova_api_map_cell0:
-            start_order: 2
+            start_order: 1
             image: *nova_api_image
             net: host
             detach: false
@@ -124,7 +124,7 @@ outputs:
             volumes: *nova_api_volumes
             command: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage cell_v2 map_cell0'"
           nova_api_create_default_cell:
-            start_order: 3
+            start_order: 2
             image: *nova_api_image
             net: host
             detach: false
@@ -136,7 +136,7 @@ outputs:
             user: root
             command: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage cell_v2 create_cell --name=default'"
           nova_db_sync:
-            start_order: 4
+            start_order: 3
             image: *nova_api_image
             net: host
             detach: false
index c381c0d..585148e 100644 (file)
@@ -87,16 +87,15 @@ outputs:
               owner: panko:panko
               recurse: true
       docker_config:
-        step_3:
+        step_2:
           panko_init_log:
-            start_order: 0
             image: *panko_image
             user: root
             volumes:
               - /var/log/containers/panko:/var/log/panko
             command: ['/bin/bash', '-c', 'mkdir -p /var/log/httpd; chown -R panko:panko /var/log/panko']
+        step_3:
           panko_db_sync:
-            start_order: 1
             image: *panko_image
             net: host
             detach: false
index 609aec0..06d663c 100644 (file)
@@ -89,6 +89,7 @@ outputs:
         step_1:
           rabbitmq_init_logs:
             start_order: 0
+            detach: false
             image: *rabbitmq_image
             privileged: false
             user: root
@@ -97,6 +98,7 @@ outputs:
             command: ['/bin/bash', '-c', 'chown -R rabbitmq:rabbitmq /var/log/rabbitmq']
           rabbitmq_bootstrap:
             start_order: 1
+            detach: false
             image: *rabbitmq_image
             net: host
             privileged: false
index 2fc99d6..df9750c 100644 (file)
@@ -82,9 +82,8 @@ outputs:
               recurse: true
       docker_config:
         # db sync runs before permissions set by kolla_config
-        step_3:
+        step_2:
           tacker_init_logs:
-            start_order: 0
             image: &tacker_image
               list_join:
                 - '/'
@@ -94,8 +93,8 @@ outputs:
             volumes:
               - /var/log/containers/tacker:/var/log/tacker
             command: ['/bin/bash', '-c', 'chown -R tacker:tacker /var/log/tacker']
+        step_3:
           tacker_db_sync:
-            start_order: 1
             image: *tacker_image
             net: host
             privileged: false