Only write to template files if template data changes

Currently the template data is assigned to the files dict regardless
of whether the data has changed or not.

This has no consequence on Liberty, but the files dict in Kilo
and Juno is a sqlalchemy MutableDict so these assignments are triggering
updates to the raw_template table. These updates are even triggered for
calls to heat resource-list. With large raw_template records this can make
heat unusable.

Therefore this fix is presented here as having no effect (and being
harmless) to git master, but high priority backports for Kilo and Juno.

Change-Id: Ibb714a9c5dc9f6879ff108419127da985a57897b
Closes-Bug: #1494108
(cherry picked from commit 779ba8e431)
This commit is contained in:
Steve Baker 2015-09-18 11:56:57 +12:00 committed by Zane Bitter
parent 9e6d7c29c8
commit a4aafba0c2
1 changed files with 3 additions and 1 deletions

View File

@ -182,6 +182,7 @@ class TemplateResource(stack_resource.StackResource):
# 3. look in the db
reported_excp = None
t_data = self.stack.t.files.get(self.template_name)
stored_t_data = t_data
if not t_data and self.template_name.endswith((".yaml", ".template")):
try:
t_data = self.get_template_file(self.template_name,
@ -196,7 +197,8 @@ class TemplateResource(stack_resource.StackResource):
t_data = jsonutils.dumps(self.nested().t.t)
if t_data is not None:
self.stack.t.files[self.template_name] = t_data
if t_data != stored_t_data:
self.stack.t.files[self.template_name] = t_data
self.stack.t.env.register_class(self.resource_type,
self.template_name)
return t_data