[openstack-dev] [heat] How to avoid property revalidation?

Steve Baker sbaker at redhat.com
Sun Jun 15 21:55:38 UTC 2014

On 16/06/14 06:26, Clint Byrum wrote:
> Excerpts from Steven Hardy's message of 2014-06-15 02:40:14 -0700:
>> Hi all,
>> So, I stumbled accross an issue while fixing up some tests, which is that
>> AFAICS since Icehouse we continually revalidate every property every time
>> they are accessed:
>> https://github.com/openstack/heat/blob/stable/havana/heat/engine/properties.py#L716
>> This means that, for example, we revalidate every property every time an
>> event is created:
>> https://github.com/openstack/heat/blob/stable/havana/heat/engine/event.py#L44
>> And obviously also every time the property is accessed in the code
>> implementing whatever action we're handling, and potentially also before
>> the action (e.g the explicit validate before create/update).
>> This repeated revalidation seems like it could get very expensive - for
>> example there are several resources (Instance/Server resources in
>> particular) which validate against glance via a custom constraint, so we're
>> probably doing at least 6 calls to glance validating the image every
>> create.  My suspicion is this is one of the reasons for the performance
>> regression observed in bug #1324102.
>> I've been experimenting with some code which implements local caching of
>> the validated properties, but according to the tests this introduces some
>> problems where the cached value doesn't always match what is expected,
>> still investigating why but I guess it's updates where we need to
>> re-resolve what is cached during the update.
>> Does anyone (and in particular Zane and Thomas who I know have deep
>> experience in this area) have any ideas on what strategy we might employ to
>> reduce this revalidation overhead?
> tl;dr: I think we should only validate structure in validate, and leave
> runtime validation to preview.
> I've been wondering about what we want to achieve with validation
> recently. It seems to me that the goal is to assist template authors
> in finding obvious issues in structure and content before they cause a
> runtime failure. But the error messages are so unhelpful we basically
> get this:
> http://cdn.memegenerator.net/instances/500x/50964597.jpg
> What holds us back from improving that is the complexity of doing
> runtime validation.
> To me, runtime is more of a 'preview' problem than a validate problem. A
> template that validates once should continue to validate on any version
> that supports the template format. But a preview will actually want to
> measure runtime things and use parameters, and thus is where runtime
> concerns belong.
> I wonder if we could move validation out of any runtime context, and
> remove any attempts to validate runtime things like image names/ids and
> such. That would allow us to remove any but pre-action validation calls.
Agreed, and parameter validation needs to be included in this too -
especially with custom constraints which can make API calls.

More information about the OpenStack-dev mailing list