summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-04-25 18:55:37 +0000
committerGerrit Code Review <review@openstack.org>2013-04-25 18:55:37 +0000
commit13c085bc9605447c4ff39ed903e0ef5bffd965d0 (patch)
tree861bd26cb2767e1d0aab08029db9a5065c4cf05c
parent858d1f4ea23ad8210f818367ec2ba0fe125a8b72 (diff)
parent481d4a767e324e956af4afcb510eac802a9efa7a (diff)
downloadnova-13c085bc9605447c4ff39ed903e0ef5bffd965d0.tar.gz
nova-13c085bc9605447c4ff39ed903e0ef5bffd965d0.tar.xz
nova-13c085bc9605447c4ff39ed903e0ef5bffd965d0.zip
Merge "Fix bug in db.instance_type_destroy"
-rw-r--r--nova/db/sqlalchemy/api.py7
-rw-r--r--nova/tests/test_db_api.py20
2 files changed, 26 insertions, 1 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index f22a95066..b6267f81a 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -3761,6 +3761,10 @@ def instance_type_destroy(context, name):
session.query(models.InstanceTypeExtraSpecs).\
filter_by(instance_type_id=instance_type_id).\
soft_delete()
+ model_query(context, models.InstanceTypeProjects,
+ session=session, read_deleted="no").\
+ filter_by(instance_type_id=instance_type_id).\
+ soft_delete()
@require_context
@@ -3775,7 +3779,8 @@ def instance_type_access_get_by_flavor_id(context, flavor_id):
instance_type_ref = _instance_type_get_query(context).\
filter_by(flavorid=flavor_id).\
first()
-
+ if not instance_type_ref:
+ return []
return [r for r in instance_type_ref.projects]
diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py
index d834d03f9..3faa26e3b 100644
--- a/nova/tests/test_db_api.py
+++ b/nova/tests/test_db_api.py
@@ -2307,6 +2307,26 @@ class InstanceTypeAccessTestCase(BaseInstanceTypeTestCase):
db.instance_type_access_remove,
self.ctxt, inst_type['flavorid'], 'p2')
+ def test_instance_type_access_removed_after_instance_type_destroy(self):
+ inst_type1 = self._create_inst_type({'flavorid': 'f1', 'name': 'n1'})
+ inst_type2 = self._create_inst_type({'flavorid': 'f2', 'name': 'n2'})
+ values = [
+ (inst_type1['flavorid'], 'p1'),
+ (inst_type1['flavorid'], 'p2'),
+ (inst_type2['flavorid'], 'p3')
+ ]
+ for v in values:
+ self._create_inst_type_access(*v)
+
+ db.instance_type_destroy(self.ctxt, inst_type1['name'])
+
+ p = (self.ctxt, inst_type1['flavorid'])
+ self.assertEqual(0, len(db.instance_type_access_get_by_flavor_id(*p)))
+ p = (self.ctxt, inst_type2['flavorid'])
+ self.assertEqual(1, len(db.instance_type_access_get_by_flavor_id(*p)))
+ db.instance_type_destroy(self.ctxt, inst_type2['name'])
+ self.assertEqual(0, len(db.instance_type_access_get_by_flavor_id(*p)))
+
class FixedIPTestCase(BaseInstanceTypeTestCase):
def _timeout_test(self, ctxt, timeout, multi_host):