From 268a7d4e68a567aaeda93c4e828c34701390d7f2 Mon Sep 17 00:00:00 2001 From: Phil Day Date: Fri, 20 Sep 2013 11:38:21 +0000 Subject: [PATCH] Correct deleted_at value in notification messages The deleted_at value in notification messages is currently set from the terminated_at value in the instance record. A comment in the code says this is to avoid confusion between terminated_at and deleted_at, but swapping the names doesn't seem to be a great way to address that. In practice "terminated and not deleted" is a transient state unless an error occurs, and the time gap is very short. But deleted_at is always set when the entry is deleted in the DB, whereas terminated_at can be left unset in some error cases. Rather than present terminated_at as the deleted_at value in the message we include both and let the recipient decide which they want to use. Fixes bug: 1227080 Change-Id: Ic67f66b6c64be1a8f43f4fdd5b1fac25f1414247 --- nova/notifications.py | 9 +++++---- nova/tests/compute/test_compute.py | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/nova/notifications.py b/nova/notifications.py index 3c50606bcc53..57c6edd03b9c 100644 --- a/nova/notifications.py +++ b/nova/notifications.py @@ -381,10 +381,11 @@ def info_from_instance(context, instance_ref, network_info, # Date properties created_at=str(instance_ref['created_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_isotime(instance_ref.get('terminated_at')), + # Terminated and Deleted are slightly different (although being + # terminated and not deleted is a transient state), so include + # both and let the recipient decide which they want to use. + terminated_at=null_safe_isotime(instance_ref.get('terminated_at')), + deleted_at=null_safe_isotime(instance_ref.get('deleted_at')), launched_at=null_safe_isotime(instance_ref.get('launched_at')), # Image properties diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 1b2090923d76..9001dcd96c59 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -2872,8 +2872,9 @@ class ComputeTestCase(BaseTestCase): self.assertTrue('display_name' in payload) self.assertTrue('created_at' in payload) self.assertTrue('launched_at' in payload) + self.assertTrue('terminated_at' in payload) self.assertTrue('deleted_at' in payload) - self.assertEqual(payload['deleted_at'], timeutils.strtime(cur_time)) + self.assertEqual(payload['terminated_at'], timeutils.strtime(cur_time)) image_ref_url = glance.generate_image_url(FAKE_IMAGE_REF) self.assertEquals(payload['image_ref_url'], image_ref_url)