Fix issue with mdns rpc and make mdns safer to upgrade

As part of deprecating unused code paths a function signature
was updated that can cause problems during upgrade. Reverting the
signature to make upgrades safer and fixing bad rpc versioning.

Change-Id: I6850c9894d3d1fcc7702520042e5035b612d6cf4
This commit is contained in:
Erik Olof Gunnar Andersson 2022-05-06 18:36:03 -07:00
parent 7be428e156
commit 56223bbd4f
4 changed files with 16 additions and 14 deletions

View File

@ -38,14 +38,15 @@ CONF = cfg.CONF
class NotifyEndpoint(base.BaseEndpoint):
RPC_API_VERSION = '2.1'
RPC_API_VERSION = '2.2'
RPC_API_NAMESPACE = 'notify'
def get_serial_number(self, zone, host, port, timeout,
def get_serial_number(self, context, zone, host, port, timeout,
retry_interval, max_retries, delay):
"""
Get zone serial number from a resolver using retries.
:param context: The user context.
:param zone: The designate zone object. This contains the zone
name. zone.serial = expected_serial
:param host: A notify is sent to this host.

View File

@ -44,11 +44,12 @@ class MdnsAPI(object):
1.1 - Added get_serial_number.
2.0 - Changed method signatures.
2.1 - Removed unused functions.
2.2 - Changed get_serial_number signature to make upgrade safer.
XFR API version history:
1.0 - Added perform_zone_xfr.
"""
RPC_NOTIFY_API_VERSION = '2.1'
RPC_NOTIFY_API_VERSION = '2.2'
RPC_XFR_API_VERSION = '1.0'
def __init__(self, topic=None):
@ -57,7 +58,7 @@ class MdnsAPI(object):
notify_target = messaging.Target(topic=self.topic,
namespace='notify',
version=self.RPC_NOTIFY_API_VERSION)
self.notify_client = rpc.get_client(notify_target, version_cap='2.0')
self.notify_client = rpc.get_client(notify_target, version_cap='2.2')
xfr_target = messaging.Target(topic=self.topic,
namespace='xfr',
@ -78,7 +79,7 @@ class MdnsAPI(object):
MDNS_API = cls()
return MDNS_API
def get_serial_number(self, zone, host, port, timeout,
def get_serial_number(self, context, zone, host, port, timeout,
retry_interval, max_retries, delay):
LOG.info(
"get_serial_number: Calling mdns for zone '%(zone)s', serial "
@ -91,7 +92,7 @@ class MdnsAPI(object):
})
cctxt = self.notify_client.prepare()
return cctxt.call(
'get_serial_number', zone=zone,
context, 'get_serial_number', zone=zone,
host=host, port=port, timeout=timeout,
retry_interval=retry_interval, max_retries=max_retries,
delay=delay

View File

@ -63,7 +63,7 @@ class MdnsNotifyTest(MdnsTestCase):
with patch.object(dns.query, 'udp', return_value=dns.message.from_wire(
binascii.a2b_hex(poll_response))):
status, serial, retries = self.notify.get_serial_number(
objects.Zone.from_dict(self.test_zone),
'context', objects.Zone.from_dict(self.test_zone),
self.nameserver.host, self.nameserver.port, 0, 0, 2, 0)
self.assertEqual(status, 'SUCCESS')
self.assertEqual(serial, self.test_zone['serial'])
@ -88,7 +88,7 @@ class MdnsNotifyTest(MdnsTestCase):
with patch.object(dns.query, 'udp', return_value=dns.message.from_wire(
binascii.a2b_hex(poll_response))):
status, serial, retries = self.notify.get_serial_number(
objects.Zone.from_dict(self.test_zone),
'context', objects.Zone.from_dict(self.test_zone),
self.nameserver.host, self.nameserver.port, 0, 0, 2, 0)
self.assertEqual(status, 'ERROR')
self.assertEqual(serial, 99)
@ -113,7 +113,7 @@ class MdnsNotifyTest(MdnsTestCase):
with patch.object(dns.query, 'udp', return_value=dns.message.from_wire(
binascii.a2b_hex(poll_response))):
status, serial, retries = self.notify.get_serial_number(
objects.Zone.from_dict(self.test_zone),
'context', objects.Zone.from_dict(self.test_zone),
self.nameserver.host, self.nameserver.port, 0, 0, 2, 0)
self.assertEqual(status, 'SUCCESS')
self.assertEqual(serial, 101)
@ -122,7 +122,7 @@ class MdnsNotifyTest(MdnsTestCase):
@patch.object(dns.query, 'udp', side_effect=dns.exception.Timeout)
def test_poll_for_serial_number_timeout(self, _):
status, serial, retries = self.notify.get_serial_number(
objects.Zone.from_dict(self.test_zone),
'context', objects.Zone.from_dict(self.test_zone),
self.nameserver.host, self.nameserver.port, 0, 0, 2, 0)
self.assertEqual(status, 'ERROR')
self.assertIsNone(serial)

View File

@ -48,7 +48,7 @@ class MdnsNotifyTest(designate.tests.TestCase):
)
out = self.notify.get_serial_number(
zone, 'h', 1234, 1, 2, 3, 4
'context', zone, 'h', 1234, 1, 2, 3, 4
)
self.assertEqual(('NO_ZONE', None, 0), out)
@ -69,7 +69,7 @@ class MdnsNotifyTest(designate.tests.TestCase):
)
out = self.notify.get_serial_number(
zone, 'h', 1234, 1, 2, 3, 4
'context', zone, 'h', 1234, 1, 2, 3, 4
)
self.assertEqual(('NO_ZONE', 0, 3), out)
@ -92,7 +92,7 @@ class MdnsNotifyTest(designate.tests.TestCase):
)
out = self.notify.get_serial_number(
zone, 'h', 1234, 1, 2, 3, 4
'context', zone, 'h', 1234, 1, 2, 3, 4
)
self.assertEqual(('SUCCESS', 314, 3), out)
@ -115,7 +115,7 @@ class MdnsNotifyTest(designate.tests.TestCase):
)
out = self.notify.get_serial_number(
zone, 'h', 1234, 1, 2, 3, 4
'context', zone, 'h', 1234, 1, 2, 3, 4
)
self.assertEqual(('ERROR', 310, 0), out)