Due to unfortunate copy-pasta, the original implementation of
function.dep_attrs() iterates over items in a dictionary instead of values.
Dictionary keys cannot have dependencies - they must be hashable and
Function objects are not. So for each dictionary key we call dep_attrs()
recursively 3 times as many times as we need to (for the key/value tuple,
the key, and the value). For template snippets that are dominated by
dictionaries, this means it took three times as long and used three times
as much memory and twice as much stack space as it needed to.
Reviewed: https:/ /review. openstack. org/477031 /git.openstack. org/cgit/ openstack/ heat/commit/ ?id=c889f08ab52 79caae3d6fe4e06 14fa938fb2c9ff
Committed: https:/
Submitter: Jenkins
Branch: master
commit c889f08ab5279ca ae3d6fe4e0614fa 938fb2c9ff
Author: Zane Bitter <email address hidden>
Date: Wed Jul 19 17:35:40 2017 -0400
Optimise the function. dep_attrs( ) function
Due to unfortunate copy-pasta, the original implementation of dep_attrs( ) iterates over items in a dictionary instead of values.
function.
Dictionary keys cannot have dependencies - they must be hashable and
Function objects are not. So for each dictionary key we call dep_attrs()
recursively 3 times as many times as we need to (for the key/value tuple,
the key, and the value). For template snippets that are dominated by
dictionaries, this means it took three times as long and used three times
as much memory and twice as much stack space as it needed to.
Change-Id: I13781540483daf 88202d221a9f517 746eebf0346
Partial-Bug: #1684272