Issue 47205: posix.sched_{get|set}affinity(-1) no longer returns ProcessLookup causing test failures on FreeBSD (original) (raw)
Two test cases have been failing on FreeBSD buildbot for a while. Let's skip the error check on FreeBSD for now.
0:27:24 load avg: 1.97 Re-running test_posix in verbose mode (matching: test_sched_getaffinity, test_sched_setaffinity) test_sched_getaffinity (test.test_posix.PosixTester.test_sched_getaffinity) ... FAIL test_sched_setaffinity (test.test_posix.PosixTester.test_sched_setaffinity) ... FAIL
FAIL: test_sched_getaffinity (test.test_posix.PosixTester.test_sched_getaffinity)
Traceback (most recent call last): File "/usr/home/buildbot/python/pull_request.koobs-freebsd-564d/build/Lib/test/test_posix.py", line 1197, in test_sched_getaffinity self.assertRaises(OSError, posix.sched_getaffinity, -1) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError: OSError not raised by sched_getaffinity
FAIL: test_sched_setaffinity (test.test_posix.PosixTester.test_sched_setaffinity)
Traceback (most recent call last): File "/usr/home/buildbot/python/pull_request.koobs-freebsd-564d/build/Lib/test/test_posix.py", line 1215, in test_sched_setaffinity self.assertRaises(OSError, posix.sched_setaffinity, -1, mask) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError: OSError not raised by sched_setaffinity
Ran 2 tests in 0.015s
From one of our base/kernel developers:
koobs wrote:
I don't grok the system call semantics, but it appears the issue is calls with the '-1' argument:
mask = posix.sched_getaffinity(0) ... self.assertRaises(OSError, posix.sched_getaffinity, -1) ... self.assertRaises(OSError, posix.sched_setaffinity, -1, mask)
This line was added 10 years ago in:
https://github.com/python/cpython/commit/848698727fcbb633246b56ab57080b4d5493c186
It wants an OSError [1] and presumably was getting it before recent failures, but isn't anymore:
[1] https://docs.python.org/3/library/exceptions.html#OSError
So this is the difference:
Python 3.11.0a6+ (heads/main:38ae5b8c0c, Apr 5 2022, 03:27:23) [GCC 11.2.0] on freebsd13 Type "help", "copyright", "credits" or "license" for more information.
import posix mask = posix.sched_getaffinity(-1) mask {0, 1, 2, 3, 4, 5, 6, 7}
Python 3.10.4 (main, Mar 25 2022, 00:00:00) [GCC 11.2.1 20220127 (Red Hat 11.2.1-9)] on linux Type "help", "copyright", "credits" or "license" for more information.
import posix mask = posix.sched_getaffinity(-1) Traceback (most recent call last): File "", line 1, in ProcessLookupError: [Errno 3] No such process
FreeBSD always accepted -1 as denoting the current process, while Linux does not. In fact, Linux uses 0 as current process pid alias.
For FreeBSD, both -1 and 0 works as getpid(), and I do not see it right to break our traditional API conventions. I believe the test should be fixed.
I am not sure what changed between 3.10 and main that changed/removed ProcessLookupError as the return for posix.sched_{get|set}affinity with -1 as the argument, but that appears to be the cause of the current test failure