diff options
| author | Brian Waldon <brian.waldon@rackspace.com> | 2011-11-04 12:44:30 -0400 |
|---|---|---|
| committer | Brian Waldon <brian.waldon@rackspace.com> | 2011-11-09 08:53:40 -0500 |
| commit | cb05f783d0c26063b2ce069c7f2a8fd794f4fa0e (patch) | |
| tree | 6073d9ebcd6393b502d8717d5c1b4fff66d6a275 /nova/compute | |
| parent | 93c02408754e7cec274c6d2580bc04f5e333eade (diff) | |
Reducing the number of compute calls to Glance
Fixes bug 886224
Change-Id: Ibd270d24eb68cc2503fee933a2154125995d352d
Diffstat (limited to 'nova/compute')
| -rw-r--r-- | nova/compute/manager.py | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 3d937b73d..660824d2e 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -127,6 +127,11 @@ def checks_instance_lock(function): return decorated_function +def _get_image_meta(context, image_ref): + image_service, image_id = nova.image.get_image_service(context, image_ref) + return image_service.show(context, image_id) + + class ComputeManager(manager.SchedulerDependentManager): """Manages the running instances from creation to destruction.""" @@ -310,7 +315,7 @@ class ComputeManager(manager.SchedulerDependentManager): def _run_instance(self, context, instance_id, **kwargs): """Launch a new instance with specified options.""" - def _check_image_size(): + def _check_image_size(image_meta): """Ensure image is smaller than the maximum size allowed by the instance_type. @@ -325,13 +330,6 @@ class ComputeManager(manager.SchedulerDependentManager): image, but is accurate because it reflects the image's actual size. """ - # NOTE(jk0): image_ref is defined in the DB model, image_href is - # used by the image service. This should be refactored to be - # consistent. - image_href = instance['image_ref'] - image_service, image_id = nova.image.get_image_service(context, - image_href) - image_meta = image_service.show(context, image_id) try: size_bytes = image_meta['size'] @@ -355,6 +353,7 @@ class ComputeManager(manager.SchedulerDependentManager): allowed_size_bytes = allowed_size_gb * 1024 * 1024 * 1024 + image_id = image_meta['id'] LOG.debug(_("image_id=%(image_id)s, image_size_bytes=" "%(size_bytes)d, allowed_size_bytes=" "%(allowed_size_bytes)d") % locals()) @@ -427,7 +426,9 @@ class ComputeManager(manager.SchedulerDependentManager): if instance['name'] in self.driver.list_instances(): raise exception.Error(_("Instance has already been created")) - _check_image_size() + image_meta = _get_image_meta(context, instance['image_ref']) + + _check_image_size(image_meta) LOG.audit(_("instance %s: starting..."), instance_id, context=context) @@ -460,7 +461,7 @@ class ComputeManager(manager.SchedulerDependentManager): # TODO(vish) check to make sure the availability zone matches with _logging_error(instance_id, "failed to spawn"): - self.driver.spawn(context, instance, + self.driver.spawn(context, instance, image_meta, network_info, block_device_info) current_power_state = self._get_power_state(context, instance) @@ -664,7 +665,10 @@ class ComputeManager(manager.SchedulerDependentManager): instance_ref.admin_pass = kwargs.get('new_pass', utils.generate_password(FLAGS.password_length)) - self.driver.spawn(context, instance_ref, network_info, bd_mapping) + image_meta = _get_image_meta(context, instance_ref['image_ref']) + + self.driver.spawn(context, instance_ref, image_meta, + network_info, bd_mapping) current_power_state = self._get_power_state(context, instance_ref) self._instance_update(context, @@ -1146,8 +1150,13 @@ class ComputeManager(manager.SchedulerDependentManager): instance_ref.uuid) network_info = self._get_instance_nw_info(context, instance_ref) + + # Have to look up image here since we depend on disk_format later + image_meta = _get_image_meta(context, instance_ref['image_ref']) + self.driver.finish_migration(context, migration_ref, instance_ref, - disk_info, network_info, resize_instance) + disk_info, network_info, image_meta, + resize_instance) self._instance_update(context, instance_id, |
