multipart mime wait handle

Bug #1473660 reported by Kevin Fox
14
This bug affects 2 people
Affects Status Importance Assigned to Milestone
OpenStack Heat
Fix Released
High
Rabi Mishra
Kilo
Fix Released
Undecided
Unassigned

Bug Description

Just upgraded to kilo from juno. A lot of my templates are now breaking. I've boiled it down to having a Wait Handle Instance's url in any part of the config data of the MultipartMime config.

Minimal reproducer:

  UserData:
    Type: OS::Heat::MultipartMime
    Properties:
      parts:
        - config: {Ref: WaitHandleInstance}

2015-07-11 09:14:29.499 21256 INFO heat.engine.resource [-] creating MultipartMime "UserData" Stack "kfox-test" [9b969cee-6d5e-4a02-bd60-80efe1d7b3cc]
2015-07-11 09:14:29.672 21256 DEBUG oslo_messaging._drivers.amqpdriver [-] MSG_ID is 6ed148af52054c1c981866fbdafe3a96 _send /usr/lib/python2.7/site-packages/oslo_messaging/_drivers/amqpdriver.py:311
2015-07-11 09:14:29.672 21256 DEBUG oslo_messaging._drivers.amqp [-] UNIQUE_ID is 20ebf6fced54441e88de5e13209d9911. _add_unique_id /usr/lib/python2.7/site-packages/oslo_messaging/_drivers/amqp.py:258
2015-07-11 09:14:29.680 21258 ERROR oslo_messaging.rpc.dispatcher [req-aa306066-0e0b-4924-930b-2431745762ec kfox grid] Exception during message handling: unsupported format character 'A' (0x41) at index 73
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher Traceback (most recent call last):
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 142, in _dispatch_and_reply
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher executor_callback))
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 186, in _dispatch
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher executor_callback)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 130, in _do_dispatch
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher result = func(ctxt, **new_args)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/osprofiler/profiler.py", line 105, in wrapper
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher return f(*args, **kwargs)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/common/context.py", line 300, in wrapped
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher return func(self, ctx, *args, **kwargs)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/engine/service.py", line 1441, in show_software_config
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher return self.software_config.show_software_config(cnxt, config_id)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/engine/service_software_config.py", line 36, in show_software_config
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher sc = software_config_object.SoftwareConfig.get_by_id(cnxt, config_id)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/objects/software_config.py", line 57, in get_by_id
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher context, cls(), db_api.software_config_get(context, config_id))
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/db/api.py", line 272, in software_config_get
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher return IMPL.software_config_get(context, config_id)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/db/sqlalchemy/api.py", line 757, in software_config_get
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher config_id)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/common/exception.py", line 405, in __init__
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher super(NotFound, self).__init__()
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/heat/common/exception.py", line 113, in __init__
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher self.message = self.msg_fmt % kwargs
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/site-packages/oslo_i18n/_message.py", line 112, in __mod__
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher unicode_mod = super(Message, self).__mod__(params)
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher ValueError: unsupported format character 'A' (0x41) at index 73
2015-07-11 09:14:29.680 21258 TRACE oslo_messaging.rpc.dispatcher
2015-07-11 09:14:29.681 21258 ERROR oslo_messaging._drivers.common [req-aa306066-0e0b-4924-930b-2431745762ec kfox grid] Returning exception unsupported format character 'A' (0x41) at index 73 to caller
2015-07-11 09:14:29.681 21258 ERROR oslo_messaging._drivers.common [req-aa306066-0e0b-4924-930b-2431745762ec kfox grid] ['Traceback (most recent call last):\n', ' File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 142, in _dispatch_and_reply\n executor_callback))\n', ' File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 186, in _dispatch\n executor_callback)\n', ' File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 130, in _do_dispatch\n result = func(ctxt, **new_args)\n', ' File "/usr/lib/python2.7/site-packages/osprofiler/profiler.py", line 105, in wrapper\n return f(*args, **kwargs)\n', ' File "/usr/lib/python2.7/site-packages/heat/common/context.py", line 300, in wrapped\n return func(self, ctx, *args, **kwargs)\n', ' File "/usr/lib/python2.7/site-packages/heat/engine/service.py", line 1441, in show_software_config\n return self.software_config.show_software_config(cnxt, config_id)\n', ' File "/usr/lib/python2.7/site-packages/heat/engine/service_software_config.py", line 36, in show_software_config\n sc = software_config_object.SoftwareConfig.get_by_id(cnxt, config_id)\n', ' File "/usr/lib/python2.7/site-packages/heat/objects/software_config.py", line 57, in get_by_id\n context, cls(), db_api.software_config_get(context, config_id))\n', ' File "/usr/lib/python2.7/site-packages/heat/db/api.py", line 272, in software_config_get\n return IMPL.software_config_get(context, config_id)\n', ' File "/usr/lib/python2.7/site-packages/heat/db/sqlalchemy/api.py", line 757, in software_config_get\n config_id)\n', ' File "/usr/lib/python2.7/site-packages/heat/common/exception.py", line 405, in __init__\n super(NotFound, self).__init__()\n', ' File "/usr/lib/python2.7/site-packages/heat/common/exception.py", line 113, in __init__\n self.message = self.msg_fmt % kwargs\n', ' File "/usr/lib/python2.7/site-packages/oslo_i18n/_message.py", line 112, in __mod__\n unicode_mod = super(Message, self).__mod__(params)\n', "ValueError: unsupported format character 'A' (0x41) at index 73\n"]
2015-07-11 09:14:29.681 21258 DEBUG oslo_messaging._drivers.amqp [req-aa306066-0e0b-4924-930b-2431745762ec kfox grid] UNIQUE_ID is 2196a458f8ce477b917949e17fa1157f. _add_unique_id /usr/lib/python2.7/site-packages/oslo_messaging/_drivers/amqp.py:258
2015-07-11 09:14:29.682 21258 DEBUG oslo_messaging._drivers.amqp [req-aa306066-0e0b-4924-930b-2431745762ec kfox grid] UNIQUE_ID is e07e9e0068dc45ce954be6ec8c5e1d9c. _add_unique_id /usr/lib/python2.7/site-packages/oslo_messaging/_drivers/amqp.py:258
2015-07-11 09:14:29.684 21256 INFO heat.engine.resource [-] CREATE: MultipartMime "UserData" Stack "kfox-test" [9b969cee-6d5e-4a02-bd60-80efe1d7b3cc]
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource Traceback (most recent call last):
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/resource.py", line 489, in _action_recorder
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource yield
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/resource.py", line 559, in _do_action
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource yield self.action_handler_task(action, args=handler_args)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/scheduler.py", line 296, in wrapper
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource step = next(subtask)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/resource.py", line 530, in action_handler_task
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource handler_data = handler(*args)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/resources/openstack/heat/multi_part.py", line 99, in handle_create
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource self.CONFIG: self.get_message(),
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/resources/openstack/heat/multi_part.py", line 119, in get_message
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource self.rpc_client().ignore_error_named(ex, 'NotFound')
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/rpc/client.py", line 78, in ignore_error_named
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource raise error
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource ValueError: unsupported format character 'A' (0x41) at index 73
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource Traceback (most recent call last):
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 142, in _dispatch_and_reply
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource executor_callback))
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 186, in _dispatch
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource executor_callback)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py", line 130, in _do_dispatch
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource result = func(ctxt, **new_args)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/osprofiler/profiler.py", line 105, in wrapper
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource return f(*args, **kwargs)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/common/context.py", line 300, in wrapped
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource return func(self, ctx, *args, **kwargs)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/service.py", line 1441, in show_software_config
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource return self.software_config.show_software_config(cnxt, config_id)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/engine/service_software_config.py", line 36, in show_software_config
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource sc = software_config_object.SoftwareConfig.get_by_id(cnxt, config_id)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/objects/software_config.py", line 57, in get_by_id
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource context, cls(), db_api.software_config_get(context, config_id))
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/db/api.py", line 272, in software_config_get
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource return IMPL.software_config_get(context, config_id)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/db/sqlalchemy/api.py", line 757, in software_config_get
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource config_id)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/common/exception.py", line 405, in __init__
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource super(NotFound, self).__init__()
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/heat/common/exception.py", line 113, in __init__
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource self.message = self.msg_fmt % kwargs
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource File "/usr/lib/python2.7/site-packages/oslo_i18n/_message.py", line 112, in __mod__
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource unicode_mod = super(Message, self).__mod__(params)
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource
2015-07-11 09:14:29.684 21256 TRACE heat.engine.resource ValueError: unsupported format character 'A' (0x41) at index 73

Revision history for this message
Kevin Fox (kevpn) wrote :

at:
/usr/lib/python2.7/site-packages/heat/db/sqlalchemy/api.py line 756,
config_id = "http://192.168.122.36:8000/v1/waitcondition/arn%3Aopenstack%3Aheat%3A%3A536d674127fe44cda5699c9879979f2e%3Astacks%2Fkfox-test%2Fb2a71b98-12ea-4f8f-a439-21052085bb9b%2Fresources%2FWaitHandleInstance?Timestam
p=2015-07-11T16%3A45%3A28Z&SignatureMethod=HmacSHA256&AWSAccessKeyId=6101xxxx&SignatureVersion=2&Signature=JeydXxxxx5P0%2BskuV4Hl9AJSIFHyhdp33d2w%3D",
 and the formatter is "Software config with id %s not found"

I think config_id needs escaping here?

Revision history for this message
Rabi Mishra (rabi) wrote :

As we are using the config(url) as the config_id to search for it, we probably have to escape it here.

https://github.com/openstack/heat/blob/master/heat/engine/resources/openstack/heat/multi_part.py#L117

               sc = self.rpc_client().show_software_config(
                    self.context, urllib.quote_plus(config))

Changed in heat:
assignee: nobody → Rabi Mishra (rabi)
Changed in heat:
status: New → Triaged
importance: Undecided → High
tags: added: kilo-backport-potential
Revision history for this message
Steve Baker (steve-stevebaker) wrote :

I never envisaged wait handles being passed to the config property ;)

Lets handle this by adding a uuidutils.is_uuid_like check before multi_part.py#L117

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to heat (master)

Fix proposed to branch: master
Review: https://review.openstack.org/203476

Changed in heat:
status: Triaged → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to heat (stable/kilo)

Fix proposed to branch: stable/kilo
Review: https://review.openstack.org/203508

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Change abandoned on heat (stable/kilo)

Change abandoned by Rabi Mishra (<email address hidden>) on branch: stable/kilo
Review: https://review.openstack.org/203508
Reason: abandoned

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to heat (master)

Reviewed: https://review.openstack.org/203476
Committed: https://git.openstack.org/cgit/openstack/heat/commit/?id=b924a29d06c30146ac6cb7a30a4643e66bd7899c
Submitter: Jenkins
Branch: master

commit b924a29d06c30146ac6cb7a30a4643e66bd7899c
Author: Rabi Mishra <email address hidden>
Date: Tue Jul 14 18:42:34 2015 +0530

    Fix unsupported format character error for multipart mime

    Change-Id: I6cdd794924429040370796e127734c663980f710
    Closes-Bug: #1473660

Changed in heat:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in heat:
milestone: none → liberty-2
status: Fix Committed → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to heat (stable/kilo)

Reviewed: https://review.openstack.org/203508
Committed: https://git.openstack.org/cgit/openstack/heat/commit/?id=f34a474ba79db6cca6e25757ec7bd5c3c9747b44
Submitter: Jenkins
Branch: stable/kilo

commit f34a474ba79db6cca6e25757ec7bd5c3c9747b44
Author: Rabi Mishra <email address hidden>
Date: Tue Jul 14 18:42:34 2015 +0530

    Fix unsupported format character error for multipart mime

    (cherry-picked from b924a29d06c30146ac6cb7a30a4643e66bd7899c)
    Change-Id: I6cdd794924429040370796e127734c663980f710
    Closes-Bug: #1473660

tags: added: in-stable-kilo
removed: kilo-backport-potential
Thierry Carrez (ttx)
Changed in heat:
milestone: liberty-2 → 5.0.0
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.