summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-04-24 16:33:14 +0000
committerGerrit Code Review <review@openstack.org>2013-04-24 16:33:14 +0000
commitd6857a43609288c4c07ecec3471c5b16902c259d (patch)
tree291be2e44e2040e5c5af91ce45f53464f159da08 /nova
parent276c320b105a8527291bb695bccdb34e135f3395 (diff)
parent89dae76870ed1b01cbcfd901d3a8737d41e8c8fc (diff)
downloadnova-d6857a43609288c4c07ecec3471c5b16902c259d.tar.gz
nova-d6857a43609288c4c07ecec3471c5b16902c259d.tar.xz
nova-d6857a43609288c4c07ecec3471c5b16902c259d.zip
Merge "Remove unnecessary full resource audits at the end of resizes"
Diffstat (limited to 'nova')
-rw-r--r--nova/compute/claims.py7
-rwxr-xr-xnova/compute/manager.py12
-rw-r--r--nova/compute/resource_tracker.py29
-rw-r--r--nova/tests/compute/test_claims.py2
-rw-r--r--nova/tests/compute/test_resource_tracker.py4
5 files changed, 23 insertions, 31 deletions
diff --git a/nova/compute/claims.py b/nova/compute/claims.py
index 51717ba18..fc170839f 100644
--- a/nova/compute/claims.py
+++ b/nova/compute/claims.py
@@ -18,11 +18,9 @@ Claim objects for use with resource tracking.
"""
from nova.openstack.common import jsonutils
-from nova.openstack.common import lockutils
from nova.openstack.common import log as logging
LOG = logging.getLogger(__name__)
-COMPUTE_RESOURCE_SEMAPHORE = "compute_resources"
class NopClaim(object):
@@ -86,7 +84,6 @@ class Claim(NopClaim):
def vcpus(self):
return self.instance['vcpus']
- @lockutils.synchronized(COMPUTE_RESOURCE_SEMAPHORE, 'nova-')
def abort(self):
"""Compute operation requiring claimed resources has failed or
been aborted.
@@ -210,11 +207,9 @@ class ResizeClaim(Claim):
def vcpus(self):
return self.instance_type['vcpus']
- @lockutils.synchronized(COMPUTE_RESOURCE_SEMAPHORE, 'nova-')
def abort(self):
"""Compute operation requiring claimed resources has failed or
been aborted.
"""
LOG.debug(_("Aborting claim: %s") % self, instance=self.instance)
- self.tracker.abort_resize_claim(self.instance['uuid'],
- self.instance_type)
+ self.tracker.drop_resize_claim(self.instance, self.instance_type)
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index a7048ff10..95ad4f910 100755
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -2130,8 +2130,11 @@ class ComputeManager(manager.SchedulerDependentManager):
self.driver.confirm_migration(migration, instance,
self._legacy_nw_info(network_info))
+ self.conductor_api.migration_update(context, migration,
+ 'confirmed')
+
rt = self._get_resource_tracker(migration['source_node'])
- rt.confirm_resize(context, migration)
+ rt.drop_resize_claim(instance, prefix='old_')
instance = self._instance_update(context, instance['uuid'],
vm_state=vm_states.ACTIVE,
@@ -2183,8 +2186,10 @@ class ComputeManager(manager.SchedulerDependentManager):
self._terminate_volume_connections(context, instance)
+ self.conductor_api.migration_update(context, migration, 'reverted')
+
rt = self._get_resource_tracker(instance.get('node'))
- rt.revert_resize(context, migration, status='reverted_dest')
+ rt.drop_resize_claim(instance)
self.compute_rpcapi.finish_revert_resize(context, instance,
migration, migration['source_compute'],
@@ -2273,9 +2278,6 @@ class ComputeManager(manager.SchedulerDependentManager):
instance = self._instance_update(context, instance['uuid'],
vm_state=vm_states.ACTIVE, task_state=None)
- rt = self._get_resource_tracker(instance.get('node'))
- rt.revert_resize(context, migration)
-
self._notify_about_instance_usage(
context, instance, "resize.revert.end")
diff --git a/nova/compute/resource_tracker.py b/nova/compute/resource_tracker.py
index ab7bf80c5..0ee707922 100644
--- a/nova/compute/resource_tracker.py
+++ b/nova/compute/resource_tracker.py
@@ -47,7 +47,7 @@ CONF = cfg.CONF
CONF.register_opts(resource_tracker_opts)
LOG = logging.getLogger(__name__)
-COMPUTE_RESOURCE_SEMAPHORE = claims.COMPUTE_RESOURCE_SEMAPHORE
+COMPUTE_RESOURCE_SEMAPHORE = "compute_resources"
class ResourceTracker(object):
@@ -183,6 +183,7 @@ class ResourceTracker(object):
instance_ref['launched_on'] = self.host
instance_ref['node'] = self.nodename
+ @lockutils.synchronized(COMPUTE_RESOURCE_SEMAPHORE, 'nova-')
def abort_instance_claim(self, instance):
"""Remove usage from the given instance."""
# flag the instance as deleted to revert the resource usage
@@ -193,14 +194,20 @@ class ResourceTracker(object):
ctxt = context.get_admin_context()
self._update(ctxt, self.compute_node)
- def abort_resize_claim(self, instance_uuid, instance_type):
- """Remove usage for an incoming migration."""
- if instance_uuid in self.tracked_migrations:
- migration, itype = self.tracked_migrations.pop(instance_uuid)
+ @lockutils.synchronized(COMPUTE_RESOURCE_SEMAPHORE, 'nova-')
+ def drop_resize_claim(self, instance, instance_type=None, prefix='new_'):
+ """Remove usage for an incoming/outgoing migration."""
+ if instance['uuid'] in self.tracked_migrations:
+ migration, itype = self.tracked_migrations.pop(instance['uuid'])
+
+ if not instance_type:
+ ctxt = context.get_admin_context()
+ instance_type = self._get_instance_type(ctxt, instance, prefix)
- if instance_type['id'] == migration['new_instance_type_id']:
+ if instance_type['id'] == itype['id']:
self.stats.update_stats_for_migration(itype, sign=-1)
self._update_usage(self.compute_node, itype, sign=-1)
+ self.compute_node['stats'] = self.stats
ctxt = context.get_admin_context()
self._update(ctxt, self.compute_node)
@@ -353,16 +360,6 @@ class ResourceTracker(object):
self.compute_node = self.conductor_api.compute_node_update(
context, self.compute_node, values, prune_stats)
- def confirm_resize(self, context, migration, status='confirmed'):
- """Cleanup usage for a confirmed resize."""
- elevated = context.elevated()
- self.conductor_api.migration_update(elevated, migration, status)
- self.update_available_resource(elevated)
-
- def revert_resize(self, context, migration, status='reverted'):
- """Cleanup usage for a reverted resize."""
- self.confirm_resize(context, migration, status)
-
def _update_usage(self, resources, usage, sign=1):
resources['memory_mb_used'] += sign * usage['memory_mb']
resources['local_gb_used'] += sign * usage.get('root_gb', 0)
diff --git a/nova/tests/compute/test_claims.py b/nova/tests/compute/test_claims.py
index e00b4bb24..66c04ced8 100644
--- a/nova/tests/compute/test_claims.py
+++ b/nova/tests/compute/test_claims.py
@@ -30,7 +30,7 @@ class DummyTracker(object):
def abort_instance_claim(self, *args, **kwargs):
self.icalled = True
- def abort_resize_claim(self, *args, **kwargs):
+ def drop_resize_claim(self, *args, **kwargs):
self.rcalled = True
diff --git a/nova/tests/compute/test_resource_tracker.py b/nova/tests/compute/test_resource_tracker.py
index af9b7b8bb..6d26174c7 100644
--- a/nova/tests/compute/test_resource_tracker.py
+++ b/nova/tests/compute/test_resource_tracker.py
@@ -770,9 +770,7 @@ class ResizeClaimTestCase(BaseTrackerTestCase):
def test_revert(self):
self.tracker.resize_claim(self.context, self.instance,
self.instance_type, self.limits)
- migration, itype = self.tracker.tracked_migrations[
- self.instance['uuid']]
- self.tracker.revert_resize(self.context, migration)
+ self.tracker.drop_resize_claim(self.instance)
self.assertEqual(0, len(self.tracker.tracked_instances))
self.assertEqual(0, len(self.tracker.tracked_migrations))