From 0022fd85b6cc91425eb0d87f066c162c0074ca0d Mon Sep 17 00:00:00 2001 From: Kiall Mac Innes Date: Mon, 15 Feb 2016 11:13:40 +0000 Subject: [PATCH] Ensure ZoneManager emits valid objects Zone Manager exists events have been sending Designate obj representiations rather than plain dicts. Additionally, the audit period values were not in the correct format due to an explicit datetime -> str cast vs allowing the serializer to handle the conversion. Additionally, remove duplicated RoObject class and implement the to_dict() method. Change-Id: I6892433b5c112563901dbac2b477bf3d9e56217b Closes-Bug: 1545658 --- designate/tests/unit/__init__.py | 3 ++ .../unit/test_zone_manager/test_tasks.py | 39 ++----------------- designate/zone_manager/tasks.py | 22 +++++++---- 3 files changed, 21 insertions(+), 43 deletions(-) diff --git a/designate/tests/unit/__init__.py b/designate/tests/unit/__init__.py index 225125268..285801d28 100644 --- a/designate/tests/unit/__init__.py +++ b/designate/tests/unit/__init__.py @@ -52,3 +52,6 @@ class RoObject(object): def __iter__(self): for k in six.iterkeys(self.__dict__): yield k, self.__dict__[k] + + def to_dict(self): + return self.__dict__ diff --git a/designate/tests/unit/test_zone_manager/test_tasks.py b/designate/tests/unit/test_zone_manager/test_tasks.py index 6eb45356e..7fef90bee 100644 --- a/designate/tests/unit/test_zone_manager/test_tasks.py +++ b/designate/tests/unit/test_zone_manager/test_tasks.py @@ -24,46 +24,13 @@ from oslo_utils import timeutils from oslotest import base as test import fixtures import mock -import six import testtools from designate.central import rpcapi as central_api from designate import context from designate import rpc from designate.zone_manager import tasks - - -class RoObject(object): - """Read-only object: raise exception on unexpected - __setitem__ or __setattr__ - """ - def __init__(self, d=None, **kw): - if d: - kw.update(d) - - self.__dict__.update(kw) - - def __getitem__(self, k): - try: - return self.__dict__[k] - except KeyError: - raise NotImplementedError( - "Attempt to perform __getitem__" - " %r on RoObject %r" % (k, self.__dict__) - ) - - def __setitem__(self, k, v): - raise NotImplementedError( - "Attempt to perform __setitem__ or __setattr__" - " %r on RoObject %r" % (k, self.__dict__) - ) - - def __setattr__(self, k, v): - self.__setitem__(k, v) - - def __iter__(self): - for k in six.iterkeys(self.__dict__): - yield k, self.__dict__[k] +from designate.tests.unit import RoObject class DummyTask(tasks.PeriodicTask): @@ -179,8 +146,8 @@ class PeriodicExistsTest(TaskTest): # correct below self.period = tasks.PeriodicExistsTask._get_period(2) self.period_data = { - "audit_period_beginning": str(self.period[0]), - "audit_period_ending": str(self.period[1]) + "audit_period_beginning": self.period[0], + "audit_period_ending": self.period[1] } self.useFixture(fixtures.MockPatchObject( tasks.PeriodicExistsTask, '_get_period', diff --git a/designate/zone_manager/tasks.py b/designate/zone_manager/tasks.py index f8225921c..00b83c4a5 100644 --- a/designate/zone_manager/tasks.py +++ b/designate/zone_manager/tasks.py @@ -168,7 +168,8 @@ class PeriodicExistsTask(PeriodicTask): def __call__(self): pstart, pend = self._my_range() - msg = _LI("Emitting zone exist events for %(start)s to %(end)s") + + msg = _LI("Emitting zone exist events for shards %(start)s to %(end)s") LOG.info(msg, {"start": pstart, "end": pend}) ctxt = context.DesignateContext.get_admin_context() @@ -176,17 +177,24 @@ class PeriodicExistsTask(PeriodicTask): start, end = self._get_period(self.options.interval) - data = { - "audit_period_beginning": str(start), - "audit_period_ending": str(end) + extra_data = { + "audit_period_beginning": start, + "audit_period_ending": end } + counter = 0 + for zone in self._iter_zones(ctxt): - zone_data = dict(zone) - zone_data.update(data) + counter += 1 + + zone_data = zone.to_dict() + zone_data.update(extra_data) + self.notifier.info(ctxt, 'dns.domain.exists', zone_data) - LOG.info(_LI("Finished emitting events.")) + LOG.info(_LI("Finished emitting %(counter)d events for shards " + "%(start)s to %(end)s"), + {"start": pstart, "end": pend, "counter": counter}) class PeriodicSecondaryRefreshTask(PeriodicTask):