From 4047dc24cae838525b78245f3d2ee84455b49d9e 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 83a852cf4..18664e4fa 100644 --- a/designate/tests/unit/test_zone_manager/test_tasks.py +++ b/designate/tests/unit/test_zone_manager/test_tasks.py @@ -19,46 +19,13 @@ import uuid import mock from oslotest import base as test from oslo_utils import timeutils -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): @@ -175,8 +142,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] } get_period_patcher = mock.patch.object( tasks.PeriodicExistsTask, '_get_period') diff --git a/designate/zone_manager/tasks.py b/designate/zone_manager/tasks.py index 6d4fc6c80..668e98f14 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):