Steps to reproduce:
1. Create stack using following template:
heat_template_version: 2013-05-23
parameters:
image:
type: string
description: Name of image to use for server
flavor:
type: string
description: Flavor to use for server
timeout:
type: number
description: Timeout for WaitCondition, depends on your image and environment
network:
type: string
resources:
wait_condition:
type: OS::Heat::WaitCondition
depends_on: instance1
properties:
handle: {get_resource: wait_handle}
count: 5
timeout: {get_param: timeout}
wait_handle:
type: OS::Heat::WaitConditionHandle
instance1:
type: OS::Nova::Server
properties:
image: {get_param: image}
flavor: {get_param: flavor}
networks: [{network: {get_param: network}}]
user_data_format: RAW
user_data:
str_replace:
template: |
#!/bin/sh
wc_notify --data-binary '{"status": "SUCCESS"}'
wc_notify --data-binary '{"status": "SUCCESS", "reason": "signal2"}'
wc_notify --data-binary '{"status": "SUCCESS", "reason": "signal3", "data": "data3"}'
wc_notify --data-binary '{"status": "SUCCESS", "reason": "signal4", "data": "data4"}'
wc_notify --data-binary '{"status": "SUCCESS", "id": "5"}'
wc_notify --data-binary '{"status": "SUCCESS", "id": "5"}'
params:
wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
outputs:
curl_cli:
value: { get_attr: ['wait_handle', 'curl_cli'] }
wc_data:
value: { get_attr: ['wait_condition', 'data'] }
2. Wait for stack creation
Observed result:
Stack creation fails because not all signals were received.
E.g:
test_stack 16 minutes Create Failed Resource CREATE failed: WaitConditionTimeout: resources.wait_condition: 4 of 5 received - Signal 1 received;signal3;signal2;Signal 5 received
wait_condition - 16 minutes Create Failed WaitConditionTimeout: resources.wait_condition: 4 of 5 received - Signal 1 received;signal3;signal2;Signal 5 received
wait_handle 21 minutes Signal Complete Signal: status:SUCCESS reason:Signal 5 received
wait_handle 21 minutes Signal Complete Signal: status:SUCCESS reason:signal4
wait_handle 21 minutes Signal Complete Signal: status:SUCCESS reason:Signal 4 received
wait_handle 21 minutes Signal Complete Signal: status:SUCCESS reason:signal3
wait_handle 21 minutes Signal Complete Signal: status:SUCCESS reason:signal2
wait_handle 21 minutes Signal Complete Signal: status:SUCCESS reason:Signal 1 received
It'd be interesting to see some analysis/logs around the "concurrent transactions" part of this - the report above is quite confusing - we see 5 "Signal N received" at 21 minutes, but the stack failed with a timeout at 16 minutes, with 4 of 5 recieved?