diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-04-24 16:33:14 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-04-24 16:33:14 +0000 |
commit | d6857a43609288c4c07ecec3471c5b16902c259d (patch) | |
tree | 291be2e44e2040e5c5af91ce45f53464f159da08 /nova | |
parent | 276c320b105a8527291bb695bccdb34e135f3395 (diff) | |
parent | 89dae76870ed1b01cbcfd901d3a8737d41e8c8fc (diff) | |
download | nova-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.py | 7 | ||||
-rwxr-xr-x | nova/compute/manager.py | 12 | ||||
-rw-r--r-- | nova/compute/resource_tracker.py | 29 | ||||
-rw-r--r-- | nova/tests/compute/test_claims.py | 2 | ||||
-rw-r--r-- | nova/tests/compute/test_resource_tracker.py | 4 |
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)) |