diff --git a/designate/conf/mdns.py b/designate/conf/mdns.py index 53620e990..474ab872a 100644 --- a/designate/conf/mdns.py +++ b/designate/conf/mdns.py @@ -23,16 +23,18 @@ MDNS_GROUP = cfg.OptGroup( MDNS_OPTS = [ cfg.IntOpt('workers', - help='Number of mdns worker processes to spawn'), + help='Number of mDNS worker processes to spawn'), cfg.IntOpt('threads', default=1000, - help='Number of mdns greenthreads to spawn'), + help='Number of mDNS greenthreads to spawn'), cfg.ListOpt('listen', default=['0.0.0.0:%d' % DEFAULT_MDNS_PORT], help='mDNS host:port pairs to listen on'), cfg.IntOpt('tcp_backlog', default=100, help='mDNS TCP Backlog'), + cfg.IntOpt('tcp_keepidle', + help='mDNS TCP Keepidle in seconds'), cfg.FloatOpt('tcp_recv_timeout', default=0.5, - help='mDNS TCP Receive Timeout'), + help='mDNS TCP Receive Timeout in seconds'), cfg.BoolOpt('query_enforce_tsig', default=False, help='Enforce all incoming queries (including AXFR) are TSIG ' 'signed'), diff --git a/designate/mdns/service.py b/designate/mdns/service.py index c51bc4af8..1ad7957b6 100644 --- a/designate/mdns/service.py +++ b/designate/mdns/service.py @@ -42,6 +42,7 @@ class Service(service.Service): self.dns_application, self.tg, CONF['service:mdns'].listen, CONF['service:mdns'].tcp_backlog, + CONF['service:mdns'].tcp_keepidle, CONF['service:mdns'].tcp_recv_timeout, ) diff --git a/designate/service.py b/designate/service.py index 3fd0c0bea..34c2c7a08 100644 --- a/designate/service.py +++ b/designate/service.py @@ -142,11 +142,13 @@ class WSGIService(Service): class DNSService: _TCP_RECV_MAX_SIZE = 65535 - def __init__(self, app, tg, listen, tcp_backlog, tcp_recv_timeout): + def __init__(self, app, tg, listen, tcp_backlog, tcp_keepidle, + tcp_recv_timeout): self._running = threading.Event() self.app = app self.tg = tg self.tcp_backlog = tcp_backlog + self.tcp_keepidle = tcp_keepidle self.tcp_recv_timeout = tcp_recv_timeout self.listen = listen @@ -170,7 +172,7 @@ class DNSService: def _start(self, host, port): sock_tcp = utils.bind_tcp( - host, port, self.tcp_backlog + host, port, self.tcp_backlog, self.tcp_keepidle ) sock_udp = utils.bind_udp( host, port diff --git a/designate/tests/unit/test_service.py b/designate/tests/unit/test_service.py index a9f862353..65615365a 100644 --- a/designate/tests/unit/test_service.py +++ b/designate/tests/unit/test_service.py @@ -270,6 +270,7 @@ class TestDNSService(oslotest.base.BaseTestCase): self.application, self.tg, CONF['service:mdns'].listen, CONF['service:mdns'].tcp_backlog, + CONF['service:mdns'].tcp_keepidle, CONF['service:mdns'].tcp_recv_timeout, ) self.service._running = mock.Mock() @@ -279,6 +280,9 @@ class TestDNSService(oslotest.base.BaseTestCase): self.assertEqual( CONF['service:mdns'].tcp_backlog, self.service.tcp_backlog ) + self.assertEqual( + CONF['service:mdns'].tcp_keepidle, self.service.tcp_keepidle + ) self.assertEqual( CONF['service:mdns'].tcp_recv_timeout, self.service.tcp_recv_timeout @@ -291,7 +295,8 @@ class TestDNSService(oslotest.base.BaseTestCase): mock_bind_udp.assert_called_with('0.0.0.0', 5354) mock_bind_tcp.assert_called_with( - '0.0.0.0', 5354, CONF['service:mdns'].tcp_backlog + '0.0.0.0', 5354, CONF['service:mdns'].tcp_backlog, + CONF['service:mdns'].tcp_keepidle, ) def test_service_stop(self): @@ -353,6 +358,7 @@ class TestDNSService(oslotest.base.BaseTestCase): self.application, self.tg, CONF['service:mdns'].listen, CONF['service:mdns'].tcp_backlog, + CONF['service:mdns'].tcp_keepidle, CONF['service:mdns'].tcp_recv_timeout, ) self.service._running = mock.Mock() diff --git a/releasenotes/notes/mdns-tcp-keepidle-5ef6ec194a892f8a.yaml b/releasenotes/notes/mdns-tcp-keepidle-5ef6ec194a892f8a.yaml new file mode 100644 index 000000000..45cedde0f --- /dev/null +++ b/releasenotes/notes/mdns-tcp-keepidle-5ef6ec194a892f8a.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``[service:mdns] tcp_keepidle`` option has been added. This option + allows customizing TCP keepidle set for socket used by designate-mdns.