summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-04-27 19:16:50 +0000
committerGerrit Code Review <review@openstack.org>2012-04-27 19:16:50 +0000
commitcd57400a21cabb3c10bb02184145fe4704859be2 (patch)
tree224b68070933e0b2788b54bec403116bed8005ec
parentf041adaeaec7e746c9b78ae79bc196dfb80d8bfd (diff)
parent7988fd139865b5399be58aea75b07436dc7c2f21 (diff)
Merge "Fix instance delete notifications."
-rw-r--r--nova/compute/manager.py5
-rw-r--r--nova/compute/utils.py5
-rw-r--r--nova/tests/test_compute.py22
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)