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