Piotr Kliczewski has uploaded a new change for review. Change subject: rpc: keep listening on socket ......................................................................
rpc: keep listening on socket Some users are using Nessus scanner which seems to close vdsm socket. Users are not willing to configure it not to break vdsm. Due to this issue vdsm needs to be restarted to make it fully operational again. We can intercept socket closure and to reopen it. This fix was tested by using gdb to close the socket and observing that the socket is still open. Bug-Url: https://bugzilla.redhat.com/1326940 Change-Id: I811786795ca15548da19de0f6a31cd9df6fc8c4e Signed-off-by: Piotr Kliczewski <piotr.kliczew...@gmail.com> --- M lib/vdsm/protocoldetector.py 1 file changed, 22 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/86/65686/1 diff --git a/lib/vdsm/protocoldetector.py b/lib/vdsm/protocoldetector.py index 196a2ab..f1450d7 100644 --- a/lib/vdsm/protocoldetector.py +++ b/lib/vdsm/protocoldetector.py @@ -51,8 +51,10 @@ class _AcceptorImpl(object): log = logging.getLogger("ProtocolDetector.AcceptorImpl") - def __init__(self, dispatcher_factory): + def __init__(self, dispatcher_factory, listener): self._dispatcher_factory = dispatcher_factory + self.listener = listener + self._keep_open = True def readable(self, dispatcher): return True @@ -73,6 +75,11 @@ def handle_close(self, dispatcher): dispatcher.close() + if self._keep_open: + self.listener.listen() + + def prepare_for_shutdown(self): + self._keep_open = False class _ProtocolDetector(object): @@ -172,15 +179,20 @@ ): self._sslctx = sslctx self._reactor = reactor - sock = _create_socket(host, port) - # TODO: Clean _host & _port, use sockaddr instead. - self._host, self._port = sock.getsockname()[0:2] - self.log.info("Listening at %s:%d", self._host, self._port) - self._acceptor = self._reactor.create_dispatcher( - sock, _AcceptorImpl(self.handle_accept)) - self._acceptor.listen(5) + self.port = port + self.host = host + self.listen() self._handlers = [] self.TIMEOUT = ssl_hanshake_timeout + + def listen(self): + sock = _create_socket(self.host, self.port) + # TODO: Clean _host & _port, use sockaddr instead. + self._host, self._port = sock.getsockname()[0:2] + self._acceptor = self._reactor.create_dispatcher( + sock, _AcceptorImpl(self.handle_accept, self)) + self._acceptor.listen(5) + self.log.info("Listening at %s:%d", self._host, self._port) def handle_accept(self, client): if self._sslctx is None: @@ -208,6 +220,8 @@ def stop(self): self.log.debug("Stopping Acceptor") self._reactor.stop() + + self._acceptor.prepare_for_shutdown() self._acceptor.close() -- To view, visit https://gerrit.ovirt.org/65686 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I811786795ca15548da19de0f6a31cd9df6fc8c4e Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Piotr Kliczewski <piotr.kliczew...@gmail.com> _______________________________________________ vdsm-patches mailing list -- vdsm-patches@lists.fedorahosted.org To unsubscribe send an email to vdsm-patches-le...@lists.fedorahosted.org