Fix periodic secondary refresh task

It always fails with silly error:

2025-02-27 08:44:33.449 793 ERROR oslo_service.threadgroup File "/var/lib/kolla/venv/lib/python3.10/site-packages/designate/producer/tasks.py", line 206, in _call_
2025-02-27 08:44:33.449 793 ERROR oslo_service.threadgroup transferred = timeutils.parse_isotime(zone.transferred_at)
2025-02-27 08:44:33.449 793 ERROR oslo_service.threadgroup File "/var/lib/kolla/venv/lib/python3.10/site-packages/oslo_utils/timeutils.py", line 46, in parse_isotime
2025-02-27 08:44:33.449 793 ERROR oslo_service.threadgroup raise ValueError(str(e))
2025-02-27 08:44:33.449 793 ERROR oslo_service.threadgroup ValueError: expected string or bytes-like object

Closes-Bug: #2100881
Change-Id: Ia6305a8952b80515dd0f02eaba3bc89a8638a31b
This commit is contained in:
Mitya_Eremeev 2025-03-04 20:29:51 +03:00
parent 05ffe294ec
commit a265c5070b
4 changed files with 45 additions and 3 deletions

View File

@ -203,7 +203,7 @@ class PeriodicSecondaryRefreshTask(PeriodicTask):
now = timeutils.utcnow(True)
transferred = timeutils.parse_isotime(zone.transferred_at)
transferred = timeutils.parse_isotime(str(zone.transferred_at))
seconds = timeutils.delta_seconds(transferred, now)
if seconds > zone.refresh:
LOG.debug(

View File

@ -20,6 +20,7 @@ from unittest import mock
from oslo_log import log as logging
from oslo_utils import timeutils
from designate.central.rpcapi import CentralAPI
from designate.producer import tasks
from designate.storage import sql
from designate.storage.sqlalchemy import tables
@ -194,3 +195,38 @@ class PeriodicIncrementSerialTaskTest(designate.tests.functional.TestCase):
self.worker_api.update_zone.assert_called()
self.assertEqual(5, self.worker_api.update_zone.call_count)
class PeriodicSecondaryRefreshTaskTest(designate.tests.functional.TestCase):
def setUp(self):
super().setUp()
task_class = tasks.PeriodicSecondaryRefreshTask
fixture = base_fixtures.ZoneManagerTaskFixture(task_class)
self.periodic_secondary_refresh_task_fixture = self.useFixture(fixture)
def _create_zones(self):
refresh = 3600
need_refresh = datetime.timedelta(seconds=refresh)
do_not_need_refresh = need_refresh / 2
now = timeutils.utcnow(True)
all_transferred_at = (
None,
now - need_refresh,
now - do_not_need_refresh
)
email = 'service_central_managed_resource_email@example.org'
for name_index, transferred_at in enumerate(all_transferred_at):
self.create_zone(
name='example_%d.org.' % name_index,
email=email,
type='SECONDARY',
refresh=refresh,
transferred_at=transferred_at
)
@mock.patch.object(CentralAPI, 'xfr_zone')
def test_refresh_secondary_zone(self, mock_xfr_zone):
self._create_zones()
self.periodic_secondary_refresh_task_fixture.task()
mock_xfr_zone.assert_called_once()

View File

@ -239,7 +239,7 @@ class PeriodicSecondaryRefreshTest(oslotest.base.BaseTestCase):
transferred = timeutils.utcnow(True) - datetime.timedelta(minutes=62)
zone = RoObject(
id=uuidutils.generate_uuid(),
transferred_at=datetime.datetime.isoformat(transferred),
transferred_at=transferred,
refresh=3600
)
@ -254,7 +254,7 @@ class PeriodicSecondaryRefreshTest(oslotest.base.BaseTestCase):
transferred = timeutils.utcnow(True) - datetime.timedelta(minutes=50)
zone = RoObject(
id=uuidutils.generate_uuid(),
transferred_at=datetime.datetime.isoformat(transferred),
transferred_at=transferred,
refresh=3600
)

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Refresh secondary zone task was broken. It failed all the time.
If MDNS didn't get NOTIFY from master server, the secondary zone didn't get
updates. Now it's fixed.