summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatt.dietz@rackspace.com <>2011-07-19 15:21:39 -0500
committermatt.dietz@rackspace.com <>2011-07-19 15:21:39 -0500
commitb2637c282fba3d542c4e157e3e5e22046d28bb29 (patch)
treeaba73fb6a3eefad940ff7ac0c411fd55e2d8feae
parent10c089ffbae29b8a2af120bff37d889e1e0688f4 (diff)
downloadnova-b2637c282fba3d542c4e157e3e5e22046d28bb29.tar.gz
nova-b2637c282fba3d542c4e157e3e5e22046d28bb29.tar.xz
nova-b2637c282fba3d542c4e157e3e5e22046d28bb29.zip
Functionality fixed and new test passing
-rw-r--r--nova/compute/manager.py12
-rw-r--r--nova/tests/test_compute.py42
2 files changed, 49 insertions, 5 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index b91e6b9af..eb3996d29 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -720,7 +720,8 @@ class ComputeManager(manager.SchedulerDependentManager):
self.db.instance_update(context, instance_id,
dict(memory_mb=instance_type['memory_mb'],
vcpus=instance_type['vcpus'],
- local_gb=instance_type['local_gb']))
+ local_gb=instance_type['local_gb'],
+ instance_type_id=instance_type['id']))
self.driver.revert_resize(instance_ref)
self.db.migration_update(context, migration_id,
@@ -741,14 +742,14 @@ class ComputeManager(manager.SchedulerDependentManager):
"""
context = context.elevated()
instance_ref = self.db.instance_get(context, instance_id)
+
if instance_ref['host'] == FLAGS.host:
raise exception.Error(_(
'Migration error: destination same as source!'))
- old_instance_type = self.db.instance_type_get_by_flavor_id(context,
+ old_instance_type = self.db.instance_type_get_by_id(context,
instance_ref['instance_type_id'])
- instance_type = self.db.instance_type_get_by_flavor_id(context,
- flavor_id)
+
migration_ref = self.db.migration_create(context,
{'instance_id': instance_id,
'source_compute': instance_ref['host'],
@@ -768,6 +769,9 @@ class ComputeManager(manager.SchedulerDependentManager):
'migration_id': migration_ref['id'],
'instance_id': instance_id, },
})
+
+ instance_type = self.db.instance_type_get_by_flavor_id(context,
+ flavor_id)
usage_info = utils.usage_from_instance(instance_ref,
new_instance_type=instance_type['name'],
new_instance_type_id=instance_type['id'])
diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py
index d5de99956..dc3f0596d 100644
--- a/nova/tests/test_compute.py
+++ b/nova/tests/test_compute.py
@@ -524,9 +524,49 @@ class ComputeTestCase(test.TestCase):
context = self.context.elevated()
instance_id = self._create_instance()
+ def fake(*args, **kwargs):
+ pass
+
+ self.stubs.Set(self.compute.driver, 'finish_resize', fake)
+ self.stubs.Set(self.compute.driver, 'revert_resize', fake)
+ self.stubs.Set(self.compute.network_api, 'get_instance_nw_info', fake)
+
self.compute.run_instance(self.context, instance_id)
- self.compute_api.finish_revert_resize(context, instance_id, 1)
+ # Confirm the instance size before the resize starts
+ inst_ref = db.instance_get(context, instance_id)
+ instance_type_ref = db.instance_type_get_by_id(context,
+ inst_ref['instance_type_id'])
+ self.assertEqual(instance_type_ref['flavorid'], 1)
+
+ db.instance_update(self.context, instance_id, {'host': 'foo'})
+
+ self.compute.prep_resize(context, instance_id, 3)
+
+ migration_ref = db.migration_get_by_instance_and_status(context,
+ instance_id, 'pre-migrating')
+
+ self.compute.resize_instance(context, instance_id,
+ migration_ref['id'])
+ self.compute.finish_resize(context, instance_id,
+ int(migration_ref['id']), {})
+
+ # Prove that the instance size is now the new size
+ inst_ref = db.instance_get(context, instance_id)
+ instance_type_ref = db.instance_type_get_by_id(context,
+ inst_ref['instance_type_id'])
+ self.assertEqual(instance_type_ref['flavorid'], 3)
+
+ # Finally, revert and confirm the old flavor has been applied
+ self.compute.revert_resize(context, instance_id,
+ migration_ref['id'])
+ self.compute.finish_revert_resize(context, instance_id,
+ migration_ref['id'])
+
+ inst_ref = db.instance_get(context, instance_id)
+ instance_type_ref = db.instance_type_get_by_id(context,
+ inst_ref['instance_type_id'])
+ self.assertEqual(instance_type_ref['flavorid'], 1)
self.compute.terminate_instance(context, instance_id)