This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: FreeBSD: SCTP tests of test_socket fails on AMD64 FreeBSD Shared 3.x
Type: Stage: resolved
Components: Tests Versions: Python 3.9
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: koobs, vstinner
Priority: normal Keywords:

Created on 2020-03-16 21:59 by vstinner, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (12)
msg364362 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-16 21:59
AMD64 FreeBSD Shared 3.x:
https://buildbot.python.org/all/#/builders/152/builds/409

======================================================================
ERROR: testSendmsg (test.test_socket.SendmsgSCTPStreamTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 342, in _setUp
    self.__setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 2716, in setUp
    super().setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 2533, in setUp
    super().setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 646, in setUp
    conn, addr = self.serv.accept()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/socket.py", line 293, in accept
    fd, addr = self._accept()
ConnectionAbortedError: [Errno 53] Software caused connection abort

(...)

======================================================================
ERROR: testRecvmsgAfterClose (test.test_socket.RecvmsgSCTPStreamTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 342, in _setUp
    self.__setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 2533, in setUp
    super().setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 646, in setUp
    conn, addr = self.serv.accept()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/socket.py", line 293, in accept
    fd, addr = self._accept()
ConnectionAbortedError: [Errno 53] Software caused connection abort

(...)

======================================================================
ERROR: testRecvmsgIntoGenerator (test.test_socket.RecvmsgIntoSCTPStreamTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 342, in _setUp
    self.__setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 2533, in setUp
    super().setUp()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/test/test_socket.py", line 646, in setUp
    conn, addr = self.serv.accept()
  File "/usr/home/buildbot/python/3.x.koobs-freebsd-564d/build/Lib/socket.py", line 293, in accept
    fd, addr = self._accept()
ConnectionAbortedError: [Errno 53] Software caused connection abort

(...)
msg364363 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-16 22:08
It worked 10 days ago:
https://buildbot.python.org/all/#/builders/152/builds/382
msg364367 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-16 22:27
Same issue on AMD64 FreeBSD Shared 3.8:
https://buildbot.python.org/all/#builders/18/builds/162

It looks more like a recent FreeBSD upgrade than a Python regression.

3.8 fail, build 162:

os.uname: posix.uname_result(sysname='FreeBSD', nodename='130-CURRENT-amd64', release='13.0-CURRENT', version='FreeBSD 13.0-CURRENT #1 r358865: Wed Mar 11 21:35:42 UTC 2020     root@130-CURRENT-amd64:/usr/obj/usr/src/amd64.amd64/sys/GENERIC', machine='amd64')

3.8 ok, build 153 (12 days ago):

os.uname: posix.uname_result(sysname='FreeBSD', nodename='130-CURRENT-amd64', release='13.0-CURRENT', version='FreeBSD 13.0-CURRENT #7 r356645: Sun Jan 12 14:57:12 AEDT 2020     root@130-CURRENT-amd64:/usr/obj/usr/src/amd64.amd64/sys/GENERIC-NODEBUG', machine='amd64')

The kernel changed.
msg364381 - (view) Author: Kubilay Kocak (koobs) (Python triager) Date: 2020-03-17 01:25
Saw the following commit which *may* be related:

"Log:
  sendfile() does currently not support SCTP sockets.
  Therefore, fail the call.
"

https://svnweb.freebsd.org/changeset/base/358965

I'm updating FreeBSD base on the BB worker to include that commit and will re-run the failing build
msg364403 - (view) Author: Kubilay Kocak (koobs) (Python triager) Date: 2020-03-17 09:44
Update to BB complete. Rebuilding:

https://buildbot.python.org/all/#/builders/18/builds/162 and
https://buildbot.python.org/all/#/builders/152/builds/409
msg364406 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-17 10:43
> https://buildbot.python.org/all/#/builders/152/builds/409

That's AMD64 FreeBSD Shared 3.x: there are still tons of SCTP failures.

"Log: sendfile() does currently not support SCTP sockets. Therefore, fail the call."

I don't understand why the test passed previously... was it simply skipped?

Test on FreeBSD 12.1:
---
vstinner@freebsd$ uname -a
FreeBSD freebsd 12.1-RELEASE-p2 FreeBSD 12.1-RELEASE-p2 GENERIC  amd64

vstinner@freebsd$ ./python -m test test_socket -v -m '*SCTP*'
== CPython 3.9.0a4+ (heads/master:a45b695b9f, Mar 17 2020, 10:42:05) [Clang 8.0.1 (tags/RELEASE_801/final 366581)]
== FreeBSD-12.1-RELEASE-p2-amd64-64bit-ELF little-endian
== cwd: /usr/home/vstinner/python/master/build/test_python_1636
== CPU count: 8
== encodings: locale=UTF-8, FS=utf-8
0:00:00 load avg: 0.23 Run tests sequentially
0:00:00 load avg: 0.23 [1/1] test_socket
testSendmsg (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgAfterClose (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgAncillaryGenerator (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgArray (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgBadArgs (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgBadCmsg (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgBadMultiCmsg (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgDataGenerator (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgDontWait (test.test_socket.SendmsgSCTPStreamTest) ... skipped 'MSG_DONTWAIT not known to work on this platform when sending'
testSendmsgExcessCmsgReject (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgExplicitNoneAddr (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgGather (test.test_socket.SendmsgSCTPStreamTest) ... ok
testSendmsgTimeout (test.test_socket.SendmsgSCTPStreamTest) ... ok
testRecvmsg (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgAfterClose (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgBadArgs (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgEOF (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgExplicitDefaults (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgFromSendmsg (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgLongAncillaryBuf (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgOverflow (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgPeek (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgShortAncillaryBuf (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgShorter (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgTimeout (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsgTrunc (test.test_socket.RecvmsgSCTPStreamTest) ... ok
testRecvmsg (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgAfterClose (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgEOF (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgExplicitDefaults (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgFromSendmsg (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgIntoArray (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgIntoBadArgs (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgIntoGenerator (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgIntoScatter (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgLongAncillaryBuf (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgOverflow (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgPeek (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgShortAncillaryBuf (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgShorter (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgTimeout (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok
testRecvmsgTrunc (test.test_socket.RecvmsgIntoSCTPStreamTest) ... ok

----------------------------------------------------------------------

Ran 42 tests in 0.327s

OK (skipped=1)

== Tests result: SUCCESS ==

1 test OK.

Total duration: 746 ms
Tests result: SUCCESS
---
msg364408 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-17 10:54
It seems like there is a race condition in some tests. Running the same test twice on the idle buildbot worker fails randomly:

130-CURRENT-amd64% ./python -m test test_socket -v -m test.test_socket.RecvmsgSCTPStreamTest.testRecvmsgAfterClose
== CPython 3.9.0a4+ (heads/master:6ff79f6582, Mar 16 2020, 22:07:47) [Clang 10.0.0 (git@github.com:llvm/llvm-project.git llvmorg-10.0.0-rc3-1-gc290c
== FreeBSD-13.0-CURRENT-amd64-64bit-ELF little-endian
== cwd: /usr/home/haypo/python/master/build/test_python_31444
== CPU count: 2
== encodings: locale=UTF-8, FS=utf-8
(...)
testRecvmsgAfterClose (test.test_socket.RecvmsgSCTPStreamTest) ... ok
(...)

130-CURRENT-amd64% ./python -m test test_socket -v -m test.test_socket.RecvmsgSCTPStreamTest.testRecvmsgAfterClose
(...)
testRecvmsgAfterClose (test.test_socket.RecvmsgSCTPStreamTest) ... ERROR

======================================================================
ERROR: testRecvmsgAfterClose (test.test_socket.RecvmsgSCTPStreamTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/home/haypo/python/master/Lib/test/test_socket.py", line 342, in _setUp
    self.__setUp()
  File "/usr/home/haypo/python/master/Lib/test/test_socket.py", line 2533, in setUp
    super().setUp()
  File "/usr/home/haypo/python/master/Lib/test/test_socket.py", line 646, in setUp
    conn, addr = self.serv.accept()
  File "/usr/home/haypo/python/master/Lib/socket.py", line 293, in accept
    fd, addr = self._accept()
ConnectionAbortedError: [Errno 53] Software caused connection abort
(...)
msg364579 - (view) Author: Kubilay Kocak (koobs) (Python triager) Date: 2020-03-19 00:51
I've been in touch with the FreeBSD SCTP maintainer and will continue to investigate that avenue. 

In the meantime, I'm re-running the last successful 3.x build (382 [1]) to see if that fails or not to isolate Cpython code changes as contributing causes

[1] https://buildbot.python.org/all/#/builders/152/builds/382
msg365101 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-26 17:41
Ok, we got the confirmation that it's a regression in the FreeBSD kernel in FreeBSD CURRENT. The following commit reverts a change which introduced the race condition:
https://svnweb.freebsd.org/base?view=revision&revision=359302

I suggest to wait until this change lands on FreeBSD CURRENT buildbots (not workaround the bug in Python, since CURRENT is not released yet).
msg365239 - (view) Author: Kubilay Kocak (koobs) (Python triager) Date: 2020-03-29 01:49
koobs-freebsd-564d (CURRENT) BB has been updated past https://svnweb.freebsd.org/base?view=revision&revision=359302

test_socket is no longer failing
msg365256 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-03-29 14:23
Wow wow wow, that's huge. Python helps to detect FreeBSD kernel bugs :-)

Thanks a lot Kubilay Kocak!
msg365292 - (view) Author: Kubilay Kocak (koobs) (Python triager) Date: 2020-03-30 02:56
+1 to mutually beneficial relationships :)
History
Date User Action Args
2022-04-11 14:59:28adminsetgithub: 84163
2020-03-30 02:56:56koobssetmessages: + msg365292
2020-03-29 14:23:53vstinnersetmessages: + msg365256
2020-03-29 01:49:38koobssetstatus: open -> closed
resolution: fixed
messages: + msg365239

stage: resolved
2020-03-26 17:41:48vstinnersetmessages: + msg365101
2020-03-19 00:51:21koobssetmessages: + msg364579
2020-03-17 10:54:17vstinnersetmessages: + msg364408
2020-03-17 10:43:57vstinnersetmessages: + msg364406
2020-03-17 09:44:33koobssetmessages: + msg364403
2020-03-17 01:25:23koobssetmessages: + msg364381
2020-03-16 22:27:06vstinnersetmessages: + msg364367
2020-03-16 22:08:18vstinnersetmessages: + msg364363
2020-03-16 21:59:26vstinnercreate