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
This commit is contained in:
Kiall Mac Innes 2016-02-15 11:13:40 +00:00
parent 31d46c9ff3
commit 4047dc24ca
3 changed files with 21 additions and 43 deletions

View File

@ -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__

View File

@ -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')

View File

@ -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):