summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Burt <randall.burt@rackspace.com>2015-03-16 15:25:47 -0500
committerRandall Burt <randall.burt@rackspace.com>2015-04-01 15:05:39 -0500
commit9b559905dda474ea2f88785288ab046a9316c50f (patch)
tree316abd0682c9fc00e82e7a70570e03f1db3f66ff
parent1eae9e60195c31588b6e2c46a69eba8cd378c233 (diff)
downloadheat-9b559905dda474ea2f88785288ab046a9316c50f.tar.gz
Ignore migrating environments for deleted stacks
Change-Id: I50b7a0f309922aa3c6ef63b9d27282e2adae4a6e Closes-Bug: 1432795
-rw-r--r--heat/db/sqlalchemy/migrate_repo/versions/056_convergence_parameter_storage.py10
-rw-r--r--heat/tests/db/test_migrations.py35
2 files changed, 28 insertions, 17 deletions
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/056_convergence_parameter_storage.py b/heat/db/sqlalchemy/migrate_repo/versions/056_convergence_parameter_storage.py
index 74ae04419..69318f987 100644
--- a/heat/db/sqlalchemy/migrate_repo/versions/056_convergence_parameter_storage.py
+++ b/heat/db/sqlalchemy/migrate_repo/versions/056_convergence_parameter_storage.py
@@ -41,8 +41,8 @@ def upgrade(migrate_engine):
stack_table = sqlalchemy.Table('stack', meta, autoload=True)
update_query = tmpl_table.update().values(
environment=sqlalchemy.select([stack_table.c.parameters]).
- where(tmpl_table.c.id == stack_table.c.raw_template_id).
- as_scalar())
+ where(sqlalchemy.and_(stack_table.c.raw_template_id == tmpl_table.c.id,
+ stack_table.c.deleted_at.is_(None))).as_scalar())
migrate_engine.execute(update_query)
stack_table.c.parameters.drop()
@@ -76,14 +76,16 @@ def upgrade_sqlite(migrate_engine):
stack_parameters = {}
for s in stacks:
- stack_parameters[s.raw_template_id] = s.parameters
+ stack_parameters[s.raw_template_id] = (s.parameters, s.deleted_at)
colnames = [c.name for c in tmpl_table.columns]
for template in templates:
values = dict(zip(colnames,
map(lambda colname: getattr(template, colname),
colnames)))
- values['environment'] = stack_parameters.get(values['id'])
+ params, del_at = stack_parameters.get(values['id'], (None, None))
+ if params is not None and del_at is None:
+ values['environment'] = params
migrate_engine.execute(new_template.insert(values))
# migrate stacks to new table
diff --git a/heat/tests/db/test_migrations.py b/heat/tests/db/test_migrations.py
index 02ab041d6..69a4f1251 100644
--- a/heat/tests/db/test_migrations.py
+++ b/heat/tests/db/test_migrations.py
@@ -434,11 +434,11 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
templ.append(t)
user_creds = utils.get_table(engine, 'user_creds')
- user = [dict(id=900, username='test_user', password='password',
+ user = [dict(id=uid, username='test_user', password='password',
tenant='test_project', auth_url='bla',
tenant_id=str(uuid.uuid4()),
trust_id='',
- trustor_user_id='')]
+ trustor_user_id='') for uid in range(900, 903)]
engine.execute(user_creds.insert(), user)
stack = utils.get_table(engine, 'stack')
@@ -447,11 +447,14 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
('9a4bd1e9-8b21-46cd-964a-f66cb1cfa2f9', 2)]
data = [dict(id=ll_id, name=ll_id,
raw_template_id=templ[templ_id]['id'],
- user_creds_id=user[0]['id'],
+ user_creds_id=user[templ_id]['id'],
username='test_user',
disable_rollback=True,
- parameters='test_params')
+ parameters='test_params',
+ created_at=datetime.datetime.utcnow(),
+ deleted_at=None)
for ll_id, templ_id in stack_ids]
+ data[-1]['deleted_at'] = datetime.datetime.utcnow()
engine.execute(stack.insert(), data)
return data
@@ -465,23 +468,29 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
# Get the parameters in stack table
stack_parameters = {}
for stack in data:
- stack_parameters[stack['raw_template_id']] = stack['parameters']
+ templ_id = stack['raw_template_id']
+ stack_parameters[templ_id] = (stack['parameters'],
+ stack.get('deleted_at'))
# validate whether its moved to raw_template
raw_template_table = utils.get_table(engine, 'raw_template')
raw_templates = raw_template_table.select().execute()
for raw_template in raw_templates:
- if stack_parameters.get(raw_template.id) is not None:
- stack_param = stack_parameters[raw_template.id]
+ if raw_template.id in stack_parameters:
+ stack_param, deleted_at = stack_parameters[raw_template.id]
tmpl_env = raw_template.environment
- if engine.name == 'sqlite':
+ if engine.name == 'sqlite' and deleted_at is None:
stack_param = '"%s"' % stack_param
-
- self.assertEqual(stack_param,
- tmpl_env,
- 'parameters migration from stack to '
- 'raw_template failed')
+ if deleted_at is None:
+ self.assertEqual(stack_param,
+ tmpl_env,
+ 'parameters migration from stack to '
+ 'raw_template failed')
+ else:
+ self.assertIsNone(tmpl_env,
+ 'parameters migration did not skip '
+ 'deleted stack')
def _pre_upgrade_057(self, engine):
# template