summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcloudinit/reporting/handlers.py8
-rw-r--r--tests/unittests/test_reporting_hyperv.py18
2 files changed, 23 insertions, 3 deletions
diff --git a/cloudinit/reporting/handlers.py b/cloudinit/reporting/handlers.py
index 10165aec..6605e795 100755
--- a/cloudinit/reporting/handlers.py
+++ b/cloudinit/reporting/handlers.py
@@ -1,6 +1,7 @@
# This file is part of cloud-init. See LICENSE file for license information.
import abc
+import uuid
import fcntl
import json
import six
@@ -201,10 +202,11 @@ class HyperVKvpReportingHandler(ReportingHandler):
def _event_key(self, event):
"""
the event key format is:
- CLOUD_INIT|<incarnation number>|<event_type>|<event_name>
+ CLOUD_INIT|<incarnation number>|<event_type>|<event_name>|<time>
"""
- return u"{0}|{1}|{2}".format(self.event_key_prefix,
- event.event_type, event.name)
+ return u"{0}|{1}|{2}|{3}".format(self.event_key_prefix,
+ event.event_type, event.name,
+ uuid.uuid4())
def _encode_kvp_item(self, key, value):
data = (struct.pack("%ds%ds" % (
diff --git a/tests/unittests/test_reporting_hyperv.py b/tests/unittests/test_reporting_hyperv.py
index 640895a4..3582cf0b 100644
--- a/tests/unittests/test_reporting_hyperv.py
+++ b/tests/unittests/test_reporting_hyperv.py
@@ -191,3 +191,21 @@ class TextKvpReporter(CiTestCase):
if "test_diagnostic" not in evt_msg:
raise AssertionError("missing expected diagnostic message")
+
+ def test_unique_kvp_key(self):
+ reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path)
+ evt1 = events.ReportingEvent(
+ "event_type", 'event_message',
+ "event_description")
+ reporter.publish_event(evt1)
+
+ evt2 = events.ReportingEvent(
+ "event_type", 'event_message',
+ "event_description", timestamp=evt1.timestamp + 1)
+ reporter.publish_event(evt2)
+
+ reporter.q.join()
+ kvps = list(reporter._iterate_kvps(0))
+ self.assertEqual(2, len(kvps))
+ self.assertNotEqual(kvps[0]["key"], kvps[1]["key"],
+ "duplicate keys for KVP entries")