diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-13 15:36:28 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-13 15:36:28 +0000 |
| commit | 2db23f6ba4db8fe95d05874dc3c6bef017a412ae (patch) | |
| tree | 6d026ffa59c735fda184e6b3523d1bf14739c06e /nova/db | |
| parent | 726bd9bb3fa3acc4c72d71617f9ba3e0b3276697 (diff) | |
| parent | 9575a426fa4adcd79f1fa0c3a1d1008d8010c44c (diff) | |
Merge "Flavor extra specs extension use instance_type id"
Diffstat (limited to 'nova/db')
| -rw-r--r-- | nova/db/api.py | 12 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 40 |
2 files changed, 30 insertions, 22 deletions
diff --git a/nova/db/api.py b/nova/db/api.py index 48b9fba1e..f0d6c435d 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -1611,21 +1611,21 @@ def bw_usage_update(context, #################### -def instance_type_extra_specs_get(context, instance_type_id): +def instance_type_extra_specs_get(context, flavor_id): """Get all extra specs for an instance type.""" - return IMPL.instance_type_extra_specs_get(context, instance_type_id) + return IMPL.instance_type_extra_specs_get(context, flavor_id) -def instance_type_extra_specs_delete(context, instance_type_id, key): +def instance_type_extra_specs_delete(context, flavor_id, key): """Delete the given extra specs item.""" - IMPL.instance_type_extra_specs_delete(context, instance_type_id, key) + IMPL.instance_type_extra_specs_delete(context, flavor_id, key) -def instance_type_extra_specs_update_or_create(context, instance_type_id, +def instance_type_extra_specs_update_or_create(context, flavor_id, extra_specs): """Create or update instance type extra specs. This adds or modifies the key/value pairs specified in the extra specs dict argument""" - IMPL.instance_type_extra_specs_update_or_create(context, instance_type_id, + IMPL.instance_type_extra_specs_update_or_create(context, flavor_id, extra_specs) diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 2b5b9f993..ba34a08d8 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -4401,17 +4401,23 @@ def bw_usage_update(context, #################### -def _instance_type_extra_specs_get_query(context, instance_type_id, +def _instance_type_extra_specs_get_query(context, flavor_id, session=None): + # Two queries necessary because join with update doesn't work. + t = model_query(context, models.InstanceTypes.id, + session=session, read_deleted="no").\ + filter(models.InstanceTypes.flavorid == flavor_id).\ + subquery() return model_query(context, models.InstanceTypeExtraSpecs, session=session, read_deleted="no").\ - filter_by(instance_type_id=instance_type_id) + filter(models.InstanceTypeExtraSpecs.\ + instance_type_id.in_(t)) @require_context -def instance_type_extra_specs_get(context, instance_type_id): +def instance_type_extra_specs_get(context, flavor_id): rows = _instance_type_extra_specs_get_query( - context, instance_type_id).\ + context, flavor_id).\ all() result = {} @@ -4422,43 +4428,45 @@ def instance_type_extra_specs_get(context, instance_type_id): @require_context -def instance_type_extra_specs_delete(context, instance_type_id, key): +def instance_type_extra_specs_delete(context, flavor_id, key): + # Don't need synchronize the session since we will not use the query result _instance_type_extra_specs_get_query( - context, instance_type_id).\ - filter_by(key=key).\ + context, flavor_id).\ + filter(models.InstanceTypeExtraSpecs.key == key).\ update({'deleted': True, 'deleted_at': timeutils.utcnow(), - 'updated_at': literal_column('updated_at')}) + 'updated_at': literal_column('updated_at')}, + synchronize_session=False) @require_context -def instance_type_extra_specs_get_item(context, instance_type_id, key, +def instance_type_extra_specs_get_item(context, flavor_id, key, session=None): result = _instance_type_extra_specs_get_query( - context, instance_type_id, session=session).\ - filter_by(key=key).\ + context, flavor_id, session=session).\ + filter(models.InstanceTypeExtraSpecs.key == key).\ first() - if not result: raise exception.InstanceTypeExtraSpecsNotFound( - extra_specs_key=key, instance_type_id=instance_type_id) + extra_specs_key=key, instance_type_id=flavor_id) return result @require_context -def instance_type_extra_specs_update_or_create(context, instance_type_id, +def instance_type_extra_specs_update_or_create(context, flavor_id, specs): session = get_session() spec_ref = None + instance_type = instance_type_get_by_flavor_id(context, flavor_id) for key, value in specs.iteritems(): try: spec_ref = instance_type_extra_specs_get_item( - context, instance_type_id, key, session) + context, flavor_id, key, session) except exception.InstanceTypeExtraSpecsNotFound, e: spec_ref = models.InstanceTypeExtraSpecs() spec_ref.update({"key": key, "value": value, - "instance_type_id": instance_type_id, + "instance_type_id": instance_type["id"], "deleted": 0}) spec_ref.save(session=session) return specs |
