On Tue, Aug 07, 2018 at 05:07:58PM +0530, [email protected] wrote: > From: Numan Siddique <[email protected]> > > The python function ovs.socket_util.check_connection_completion() uses > select() > (provided by python) to monitor the socket file descriptor. The select() > returns 1 when the file descriptor becomes ready. For error cases like - > 111 (Connection refused) and 113 (No route to host) (POLLERR), > ovs.poller._SelectSelect.poll() > expects the exceptfds list to be set by select(). But that is not the case. > As per the select() man page, writefds list will be set for POLLERR. > Please see "Correspondence between select() and poll() notifications" section > of select(2) > man page. > > Because of this behavior, ovs.socket_util.check_connection_completion() > returns success > even if the remote is unreachable or not listening on the port. > > This patch fixes this issue by using poll() to check the connection status > similar to > the C implementation of check_connection_completion(). > > A new function 'get_system_poll() is added in ovs/poller.py which returns the > select.poll() object. If select.poll is monkey patched by eventlet/gevent, it > gets the original select.poll() and returns it. > > The test cases added in this patch fails without the fix. > > Suggested-by: Ben Pfaff <[email protected]> > Signed-off-by: Numan Siddique <[email protected]>
I believe that this patch is the cause of the testsuite failure currently exhibited in the master branch when tested using travis-ci. https://travis-ci.org/openvswitch/ovs/jobs/417506303 ... > diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at > index 014382850..e8a26e971 100644 > --- a/tests/ovsdb-idl.at > +++ b/tests/ovsdb-idl.at > @@ -1720,3 +1720,19 @@ OVSDB_CHECK_IDL_COMPOUND_INDEX_WITH_REF([set, simple3 > idl-compound-index-with-re > 007: check simple4: empty > 008: End test > ]]) > + > +m4_define([CHECK_STREAM_OPEN_BLOCK_PY], > + [AT_SETUP([$1]) > + AT_SKIP_IF([test $2 = no]) > + AT_KEYWORDS([Check PY Stream open block - $3]) > + AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"]) > + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) > + WRONG_PORT=$(($TCP_PORT+1)) > + AT_CHECK([$3 $srcdir/test-stream.py tcp:127.0.0.1:$TCP_PORT], [0], > [ignore]) > + AT_CHECK([$3 $srcdir/test-stream.py tcp:127.0.0.1:$WRONG_PORT], [1], > [ignore]) > + OVSDB_SERVER_SHUTDOWN > + AT_CHECK([$3 $srcdir/test-stream.py tcp:127.0.0.1:$TCP_PORT], [1], > [ignore]) > + AT_CLEANUP]) > + > +CHECK_STREAM_OPEN_BLOCK_PY([Check PY2 Stream open block], [$HAVE_PYTHON], > [$PYTHON]) > +CHECK_STREAM_OPEN_BLOCK_PY([Check PY3 Stream open block], [$HAVE_PYTHON], > [$PYTHON3]) I wonder if the problem exhibited by travis-ci would be resolved by changing $HAVE_PYTHON to $HAVE_PYTHON3 on the "PY3 Stream" line. Also, I wonder if s/PYTHON/PYTHON2/ is appropriate on the "PY2 Stream" line. ... _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
