In some cases ovsdb server or relay gets restarted, ovsdb python clients
may keep the local socket open. Instead of reconnecting a lot of failures
will be logged.
This can be reproduced with ssl connections to the server/relay and
restarting it, so it has the same IP after restart.
This patch catches the Exceptions at do_handshake to recreate the
connection on the client side.
Tracebacks from the issue:
Traceback (most recent call last):
File
\"/usr/local/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/connection.py\",
line 107, in run
self.idl.run()
File
\"/usr/local/lib/python3.9/site-packages/ovs-3.1.0-py3.9.egg/ovs/db/idl.py\",
line 433, in run
self._session.run()
File
\"/usr/local/lib/python3.9/site-packages/ovs-3.1.0-py3.9.egg/ovs/jsonrpc.py\",
line 519, in run
error = self.stream.connect()
File
\"/usr/local/lib/python3.9/site-packages/ovs-3.1.0-py3.9.egg/ovs/stream.py\",
line 824, in connect
self.socket.do_handshake()
File \"/usr/local/lib/python3.9/site-packages/eventlet/green/ssl.py\", line
312, in do_handshake
return self._call_trampolining(
File \"/usr/local/lib/python3.9/site-packages/eventlet/green/ssl.py\", line
158, in _call_trampolining
return func(*a, **kw)
File \"/usr/local/lib/python3.9/ssl.py\", line 1310, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1129)
2023-04-03 14:06:43.458 1 ERROR ovsdbapp.backend.ovs_idl.connection
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection [-] TLS/SSL
connection has been closed (EOF) (_ssl.c:997): ssl.SSLZeroReturnError: TLS/SSL
connection has been closed (EOF) (_ssl.c:997)
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection Traceback
(most recent call last):
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection File
"/usr/local/lib/python3.10/dist-packages/ovsdbapp/backend/ovs_idl/connection.py",
line 107, in run
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection
self.idl.run()
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection File
"/usr/local/lib/python3.10/dist-packages/ovs/db/idl.py", line 433, in run
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection
self._session.run()
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection File
"/usr/local/lib/python3.10/dist-packages/ovs/jsonrpc.py", line 519, in run
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection error =
self.stream.connect()
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection File
"/usr/local/lib/python3.10/dist-packages/ovs/stream.py", line 824, in connect
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection
self.socket.do_handshake()
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection File
"/usr/lib/python3.10/ssl.py", line 1342, in do_handshake
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection
self._sslobj.do_handshake()
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection
ssl.SSLZeroReturnError: TLS/SSL connection has been closed (EOF) (_ssl.c:997)
2023-04-03 14:06:43.513 1 ERROR ovsdbapp.backend.ovs_idl.connection
2023-04-03 14:06:43.567 1 ERROR ovsdbapp.backend.ovs_idl.connection [-] TLS/SSL
connection has been closed (EOF) (_ssl.c:997): ssl.SSLZeroReturnError: TLS/SSL
connection has been closed (EOF) (_ssl.c:997)
Traceback (most recent call last):
File
"/usr/local/lib/python3.9/site-packages/ovsdbapp/backend/ovs_idl/connection.py",
line 107, in run
self.idl.run()
File
"/usr/local/lib/python3.9/site-packages/ovs-3.1.0-py3.9.egg/ovs/db/idl.py",
line 433, in run
self._session.run()
File
"/usr/local/lib/python3.9/site-packages/ovs-3.1.0-py3.9.egg/ovs/jsonrpc.py",
line 519, in run
error = self.stream.connect()
File
"/usr/local/lib/python3.9/site-packages/ovs-3.1.0-py3.9.egg/ovs/stream.py",
line 824, in connect
self.socket.do_handshake()
File "/usr/local/lib/python3.9/site-packages/eventlet/green/ssl.py", line
312, in do_handshake
return self._call_trampolining(
File "/usr/local/lib/python3.9/site-packages/eventlet/green/ssl.py", line
158, in _call_trampolining
return func(*a, **kw)
File "/usr/local/lib/python3.9/ssl.py", line 1305, in do_handshake
self._check_connected()
File "/usr/local/lib/python3.9/ssl.py", line 1089, in _check_connected
self.getpeername()
OSError: [Errno 107] Transport endpoint is not connected
Signed-off-by: Stefan Hoffmann <[email protected]>
Signed-off-by: Luca Czesla <[email protected]>
Signed-off-by: Max Lamprecht <[email protected]>
Co-authored-by: Luca Czesla <[email protected]>
Co-authored-by: Max Lamprecht <[email protected]>
---
python/ovs/stream.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/python/ovs/stream.py b/python/ovs/stream.py
index ac5b0fd0c..b32341076 100644
--- a/python/ovs/stream.py
+++ b/python/ovs/stream.py
@@ -824,7 +824,8 @@ class SSLStream(Stream):
self.socket.do_handshake()
except ssl.SSLWantReadError:
return errno.EAGAIN
- except ssl.SSLSyscallError as e:
+ except (ssl.SSLSyscallError, ssl.SSLZeroReturnError,
+ ssl.SSLEOFError, OSError) as e:
return ovs.socket_util.get_exception_errno(e)
return 0
--
2.34.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev