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 2297a97c15
commit 0022fd85b6
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

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

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