Skip to content

Commit

Permalink
Fix quota direct DB access in compute
Browse files Browse the repository at this point in the history
This fixes the quota direct DB access in compute by using the new Quota
object.

Related to blueprint unified-object-model

Change-Id: Ib6ed6cc3b3f3f49cca1e89c0fb6e501201febd24
Closes-Bug: 1226759
  • Loading branch information
comstud committed Sep 17, 2013
1 parent 8435c98 commit b80ad60
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 25 deletions.
40 changes: 16 additions & 24 deletions nova/compute/manager.py
Expand Up @@ -65,6 +65,7 @@
from nova.objects import base as obj_base
from nova.objects import instance as instance_obj
from nova.objects import migration as migration_obj
from nova.objects import quotas as quotas_obj
from nova.openstack.common import excutils
from nova.openstack.common.gettextutils import _
from nova.openstack.common import jsonutils
Expand All @@ -74,7 +75,6 @@
from nova.openstack.common.rpc import common as rpc_common
from nova.openstack.common import timeutils
from nova import paths
from nova import quota
from nova import safe_utils
from nova import utils
from nova.virt import block_device as driver_block_device
Expand Down Expand Up @@ -600,35 +600,26 @@ def _complete_partial_deletion(self, context, instance):
deleted in the DB
"""
self.conductor_api.instance_destroy(context, instance)
project_id = instance['project_id']
if (instance.get('user_id', None) and
(context.user_id != instance['user_id'])):
user_id = instance['user_id']
else:
user_id = context.user_id
system_meta = utils.metadata_to_dict(instance['system_metadata'])
bdms = self._get_instance_volume_bdms(context, instance)
instance_vcpus = instance['vcpus']
instance_memory_mb = instance['memory_mb']
reservations = quota.QUOTAS.reserve(context,
project_id=project_id,
user_id=user_id,
instances=-1,
cores=-instance_vcpus,
ram=-instance_memory_mb)
quotas = quotas_obj.Quotas()
project_id, user_id = quotas_obj.ids_from_instance(context, instance)
quotas.reserve(context, project_id=project_id, user_id=user_id,
instances=-1, cores=-instance_vcpus,
ram=-instance_memory_mb)
self._complete_deletion(context,
instance,
bdms,
reservations,
project_id,
system_meta,
user_id=user_id)
quotas,
system_meta)

def _complete_deletion(self, context, instance, bdms,
reservations, prj_id, system_meta, user_id=None):
quotas, system_meta):

self._quota_commit(context, reservations, project_id=prj_id,
user_id=user_id)
if quotas:
quotas.commit()
# ensure block device mappings are not leaked
self.conductor_api.block_device_mapping_destroy(context, bdms)

Expand Down Expand Up @@ -1764,13 +1755,14 @@ def _delete_instance(self, context, instance, bdms,
project_id=project_id,
user_id=user_id)

quotas = quotas_obj.Quotas.from_reservations(context,
reservations,
instance=instance)
self._complete_deletion(context,
instance,
bdms,
reservations,
project_id,
system_meta,
user_id=user_id)
quotas,
system_meta)

@object_compat
@wrap_exception()
Expand Down
4 changes: 3 additions & 1 deletion nova/tests/compute/test_compute.py
Expand Up @@ -57,6 +57,7 @@
from nova.objects import base as obj_base
from nova.objects import instance as instance_obj
from nova.objects import migration as migration_obj
from nova.objects import quotas as quotas_obj
from nova.openstack.common.gettextutils import _
from nova.openstack.common import importutils
from nova.openstack.common import jsonutils
Expand Down Expand Up @@ -5379,6 +5380,7 @@ def test_complete_partial_deletion(self):
'vcpus': 1,
'memory_mb': 1,
'project_id': 'fake-prj',
'user_id': 'fake-user',
'deleted': 0
}

Expand All @@ -5397,7 +5399,7 @@ def fake_conductor(context, instance):
'_complete_deletion',
lambda *a, **k: None)

self.stubs.Set(nova.quota.QUOTAS, 'reserve', lambda *a, **k: None)
self.stubs.Set(quotas_obj.Quotas, 'reserve', lambda *a, **k: None)

self.compute._complete_partial_deletion(admin_context, instance)

Expand Down

0 comments on commit b80ad60

Please sign in to comment.