From e7dce33f09654f6a3f6b9920c5ce16c9c71ccb7f Mon Sep 17 00:00:00 2001 From: Guoshuai Li Date: Sun, 1 Jan 2017 19:04:55 +0800 Subject: [PATCH] python: Add TCP/SSL probes for OVSDB python lib stream_or_pstream_needs_probes always return 0. This causes TCP/SSL connection not be probed, and no reconnect when the connection is aborted Signed-off-by: Guoshuai Li Signed-off-by: Ben Pfaff --- python/ovs/stream.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/python/ovs/stream.py b/python/ovs/stream.py index 421bfabe9b4..4fd68f97163 100644 --- a/python/ovs/stream.py +++ b/python/ovs/stream.py @@ -39,16 +39,18 @@ def stream_or_pstream_needs_probes(name): - """ 1 if the stream or pstream specified by 'name' needs periodic probes to - verify connectivity. For [p]streams which need probes, it can take a long - time to notice the connection was dropped. Returns 0 if probes aren't - needed, and -1 if 'name' is invalid""" - - if PassiveStream.is_valid_name(name) or Stream.is_valid_name(name): - # Only unix and punix are supported currently. - return 0 + """ True if the stream or pstream specified by 'name' needs periodic probes + to verify connectivity. For [p]streams which need probes, it can take a + long time to notice the connection was dropped. Returns False if probes + aren't needed, and None if 'name' is invalid""" + + cls = Stream._find_method(name) + if cls: + return cls.needs_probes() + elif PassiveStream.is_valid_name(name): + return PassiveStream.needs_probes(name) else: - return -1 + return None class Stream(object): @@ -524,6 +526,10 @@ class PassiveStream(object): connect = None # overlapped for read operation connect_pending = False + @staticmethod + def needs_probes(name): + return False if name.startswith("punix:") else True + @staticmethod def is_valid_name(name): """Returns True if 'name' is a passive stream name in the form @@ -708,6 +714,10 @@ def usage(name): class UnixStream(Stream): + @staticmethod + def needs_probes(): + return False + @staticmethod def _open(suffix, dscp): connect_path = suffix @@ -719,6 +729,10 @@ def _open(suffix, dscp): class TCPStream(Stream): + @staticmethod + def needs_probes(): + return True + @staticmethod def _open(suffix, dscp): error, sock = ovs.socket_util.inet_open_active(socket.SOCK_STREAM, @@ -732,6 +746,9 @@ def _open(suffix, dscp): class SSLStream(Stream): + @staticmethod + def needs_probes(): + return True @staticmethod def verify_cb(conn, cert, errnum, depth, ok):