diff options
| -rw-r--r-- | nova/compute/manager.py | 5 | ||||
| -rw-r--r-- | nova/compute/utils.py | 5 | ||||
| -rw-r--r-- | nova/tests/test_compute.py | 22 |
3 files changed, 18 insertions, 14 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 0366b4568..0023d702a 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -717,12 +717,11 @@ class ComputeManager(manager.SchedulerDependentManager): self._notify_about_instance_usage(context, instance, "delete.start") self._shutdown_instance(context, instance, 'Terminating') self._cleanup_volumes(context, instance_id) - self._instance_update(context, + instance = self._instance_update(context, instance_id, vm_state=vm_states.DELETED, task_state=None, terminated_at=utils.utcnow()) - self.db.instance_destroy(context, instance_id) self._notify_about_instance_usage(context, instance, "delete.end") @@ -735,8 +734,6 @@ class ComputeManager(manager.SchedulerDependentManager): def do_terminate_instance(): elevated = context.elevated() instance = self.db.instance_get_by_uuid(elevated, instance_uuid) - compute_utils.notify_usage_exists( - context, instance, current_period=True) try: self._delete_instance(context, instance) except exception.InstanceTerminationFailure as error: diff --git a/nova/compute/utils.py b/nova/compute/utils.py index df4a9d221..78a6e574c 100644 --- a/nova/compute/utils.py +++ b/nova/compute/utils.py @@ -208,7 +208,10 @@ def _usage_from_instance(context, instance_ref, network_info=None, **kw): disk_gb=instance_ref['root_gb'] + instance_ref['ephemeral_gb'], display_name=instance_ref['display_name'], created_at=str(instance_ref['created_at']), - deleted_at=null_safe_str(instance_ref['deleted_at']), + # Nova's deleted vs terminated instance terminology is confusing, + # this should be when the instance was deleted (i.e. terminated_at), + # not when the db record was deleted. (mdragon) + deleted_at=null_safe_str(instance_ref['terminated_at']), launched_at=null_safe_str(instance_ref['launched_at']), image_ref_url=image_ref_url, state=instance_ref['vm_state'], diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index 348a7af0f..75544746b 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -872,27 +872,29 @@ class ComputeTestCase(BaseTestCase): def test_terminate_usage_notification(self): """Ensure terminate_instance generates apropriate usage notification""" + old_time = datetime.datetime(2012, 4, 1) + cur_time = datetime.datetime(2012, 12, 21, 12, 21) + utils.set_time_override(old_time) + inst_ref = self._create_fake_instance() self.compute.run_instance(self.context, inst_ref['uuid']) test_notifier.NOTIFICATIONS = [] + utils.set_time_override(cur_time) self.compute.terminate_instance(self.context, inst_ref['uuid']) - self.assertEquals(len(test_notifier.NOTIFICATIONS), 5) - msg = test_notifier.NOTIFICATIONS[0] - self.assertEquals(msg['priority'], 'INFO') - self.assertEquals(msg['event_type'], 'compute.instance.exists') + self.assertEquals(len(test_notifier.NOTIFICATIONS), 4) - msg = test_notifier.NOTIFICATIONS[1] + msg = test_notifier.NOTIFICATIONS[0] self.assertEquals(msg['priority'], 'INFO') self.assertEquals(msg['event_type'], 'compute.instance.delete.start') - msg1 = test_notifier.NOTIFICATIONS[2] + msg1 = test_notifier.NOTIFICATIONS[1] self.assertEquals(msg1['event_type'], 'compute.instance.shutdown.start') - msg1 = test_notifier.NOTIFICATIONS[3] + msg1 = test_notifier.NOTIFICATIONS[2] self.assertEquals(msg1['event_type'], 'compute.instance.shutdown.end') - msg1 = test_notifier.NOTIFICATIONS[4] + msg1 = test_notifier.NOTIFICATIONS[3] self.assertEquals(msg1['event_type'], 'compute.instance.delete.end') - payload = msg['payload'] + payload = msg1['payload'] self.assertEquals(payload['tenant_id'], self.project_id) self.assertEquals(payload['user_id'], self.user_id) self.assertEquals(payload['instance_id'], inst_ref.uuid) @@ -902,6 +904,8 @@ class ComputeTestCase(BaseTestCase): self.assertTrue('display_name' in payload) self.assertTrue('created_at' in payload) self.assertTrue('launched_at' in payload) + self.assertTrue('deleted_at' in payload) + self.assertEqual(payload['deleted_at'], str(cur_time)) image_ref_url = "%s/images/1" % utils.generate_glance_url() self.assertEquals(payload['image_ref_url'], image_ref_url) |
