rollback fails when updating stack if the parameters changes

Bug #1308883 reported by Zhang Yang
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Heat
Fix Released
Undecided
lvdongbing

Bug Description

I had a stack, and for some reasons update failed, then rollback failed because template validation failed.

traceback:
-> oldstack = Stack(self.context, self.name, self.t, self.env)
(Pdb)
Traceback (most recent call last):
  File "/usr/lib64/python2.6/site-packages/eventlet/hubs/poll.py", line 97, in wait
    readers.get(fileno, noop).cb(fileno)
  File "/usr/lib64/python2.6/site-packages/eventlet/greenthread.py", line 194, in main
    result = function(*args, **kwargs)
  File "/usr/lib64/python2.6/site-packages/heat/engine/parser.py", line 447, in update
    updater()
  File "/usr/lib64/python2.6/site-packages/heat/engine/scheduler.py", line 119, in __call__
    self.run_to_completion(wait_time=wait_time)
  File "/usr/lib64/python2.6/site-packages/heat/engine/scheduler.py", line 181, in run_to_completion
    while not self.step():
  File "/usr/lib64/python2.6/site-packages/heat/engine/scheduler.py", line 167, in step
    next(self._runner)
  File "/usr/lib64/python2.6/site-packages/heat/engine/scheduler.py", line 258, in wrapper
    subtask = parent.throw(*sys.exc_info())
  File "/usr/lib64/python2.6/site-packages/heat/engine/parser.py", line 508, in update_task
    yield self.update_task(oldstack, action=self.ROLLBACK)
  File "/usr/lib64/python2.6/site-packages/heat/engine/scheduler.py", line 232, in wrapper
    step = next(subtask)
  File "/usr/lib64/python2.6/site-packages/heat/engine/scheduler.py", line 225, in wrapper
    subtask = next(parent)
  File "/usr/lib64/python2.6/site-packages/heat/engine/parser.py", line 469, in update_task
    oldstack = Stack(self.context, self.name, self.t, self.env)
  File "/usr/lib64/python2.6/site-packages/heat/engine/parser.py", line 100, in __init__
    user_params=self.env.params)
  File "/usr/lib64/python2.6/site-packages/heat/engine/parameters.py", line 359, in __init__
    self._validate(user_params)
  File "/usr/lib64/python2.6/site-packages/heat/engine/parameters.py", line 396, in _validate
    raise exception.UnknownUserParameter(key=param)
UnknownUserParameter: The Parameter (KeyName) was not defined in template.

the reason is when we update a stack, we will replace the self.env with new_stack.env, but if update fails,
we use the new_env but the old_template, the validating will fail.

oldstack = Stack(self.context, self.name, self.t, self.env)
        backup_stack = self._backup_stack()
        try:
            update_task = update.StackUpdate(self, newstack, backup_stack,
                                             rollback=action == self.ROLLBACK)
            updater = scheduler.TaskRunner(update_task)

            self.env = newstack.env <--------------------- set env here
            self.parameters = newstack.parameters
            self.t.files = newstack.t.files
            self.disable_rollback = newstack.disable_rollback
            self.timeout_mins = newstack.timeout_mins
            self._set_param_stackid()

lvdongbing (dbcocle)
Changed in heat:
assignee: nobody → lvdongbing (dbcocle)
Revision history for this message
Openstack Gerrit (openstack-gerrit) wrote : Fix proposed to heat (master)

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

Changed in heat:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to heat (master)

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

commit 04bc6a52292fc3a2dbf9b9670dfa1a2015967567
Author: lvdongbing <email address hidden>
Date: Fri Aug 1 09:32:56 2014 +0800

    Fix rollback failure when updating stack

    When building oldstack in rollback, self.env doesn't match self.t, then
    the validating will fail, but oldstack is useless in rollback, so we don't
    need to build it in rollback.

    Change-Id: Iab17824d108d565126c1dd0338fefc9a5ee4f47b
    Closes-Bug: #1308883

Changed in heat:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in heat:
milestone: none → juno-3
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in heat:
milestone: juno-3 → 2014.2
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

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