Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-118846: Fix free-threading test failures when run sequentially #118864

Merged
merged 4 commits into from
May 10, 2024

Conversation

colesbury
Copy link
Contributor

@colesbury colesbury commented May 9, 2024

The free-threaded build currently immortalizes some objects once the first thread is started. This can lead to test failures depending on the order in which tests are run. This PR addresses those failures by suppressing immortalization or skipping the affected tests.

The free-threaded build currently immortalizes some objects once the
first thread is started. This can lead to test failures depending on the
order in which tests are run. This PR addresses those failures by
suppressing immortalization or skipping the affected tests.
@colesbury
Copy link
Contributor Author

@hroncok - this should address the remaining test failures in conjunction with #118862

Copy link
Contributor

@DinoV DinoV left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@hroncok
Copy link
Contributor

hroncok commented May 9, 2024

I still have:

======================================================================
ERROR: test_builtin_with_more_than_four_children (test.test_pydoc.test_pydoc.PydocDocTest.test_builtin_with_more_than_four_children)
Tests help on builtin object which have more than four child classes.
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../cpython/Lib/test/test_pydoc/test_pydoc.py", line 537, in test_builtin_with_more_than_four_children
    text = doc.docclass(object)
  File ".../cpython/Lib/pydoc.py", line 1424, in docclass
    subclasses = sorted(
        (str(cls.__name__) for cls in type.__subclasses__(object)
         if not cls.__name__.startswith("_") and cls.__module__ == "builtins"),
        key=str.lower
    )
  File ".../cpython/Lib/pydoc.py", line 1426, in <genexpr>
    if not cls.__name__.startswith("_") and cls.__module__ == "builtins"),
                                            ^^^^^^^^^^^^^^
  File ".../cpython/Lib/test/test_inspect/test_inspect.py", line 775, in __module__
    raise AttributeError
AttributeError: . Did you mean: '__reduce__'?

----------------------------------------------------------------------
Ran 108 tests in 1.709s

FAILED (errors=1, skipped=3)
test test.test_pydoc.test_pydoc failed


======================================================================
FAIL: test_bug1055820c (test.test_gc.GCTogglingTests.test_bug1055820c)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../cpython/Lib/test/test_gc.py", line 1361, in test_bug1055820c
    self.fail("gc didn't happen after 10000 iterations")
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: gc didn't happen after 10000 iterations

======================================================================
FAIL: test_bug1055820d (test.test_gc.GCTogglingTests.test_bug1055820d)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../cpython/Lib/contextlib.py", line 85, in inner
    return func(*args, **kwds)
  File ".../cpython/Lib/test/test_gc.py", line 1429, in test_bug1055820d
    self.fail("gc didn't happen after 10000 iterations")
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: gc didn't happen after 10000 iterations

----------------------------------------------------------------------
Ran 49 tests in 14.476s

FAILED (failures=2, skipped=4)
test test_gc failed

Not sure if the pydoc thing is related, but the gc might.

@colesbury
Copy link
Contributor Author

The pydoc failure is a funny interaction between tests. In test_inspect.py, we create a class that raises an error when you access __module__:

def test_getfile_class_without_module(self):
class CM(type):
@property
def __module__(cls):
raise AttributeError

In the free-threaded build, this class is now immortalized so it's still alive later on when test_pydoc tries to generate the pydoc for all subclasses of object.

@colesbury
Copy link
Contributor Author

Ok, I think the test_pydoc and test_gc failures are fixed now too.

@colesbury colesbury merged commit b309c8e into python:main May 10, 2024
31 checks passed
@colesbury colesbury deleted the gh-118846-all-tests branch May 10, 2024 20:29
@miss-islington-app
Copy link

Thanks @colesbury for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request May 10, 2024
…ly (pythonGH-118864)

The free-threaded build currently immortalizes some objects once the
first thread is started. This can lead to test failures depending on the
order in which tests are run. This PR addresses those failures by
suppressing immortalization or skipping the affected tests.
(cherry picked from commit b309c8e)

Co-authored-by: Sam Gross <colesbury@gmail.com>
@bedevere-app
Copy link

bedevere-app bot commented May 10, 2024

GH-118927 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.13 bugs and security fixes label May 10, 2024
colesbury added a commit that referenced this pull request May 10, 2024
…lly (GH-118864) (#118927)

The free-threaded build currently immortalizes some objects once the
first thread is started. This can lead to test failures depending on the
order in which tests are run. This PR addresses those failures by
suppressing immortalization or skipping the affected tests.
(cherry picked from commit b309c8e)

Co-authored-by: Sam Gross <colesbury@gmail.com>
@hroncok
Copy link
Contributor

hroncok commented May 10, 2024

This is the only one I got now:

======================================================================
ERROR: test_expr_context (test.test_ast.ASTConstructorTests.test_expr_context)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../cpython/Lib/test/test_ast.py", line 3042, in test_expr_context
    self.assertIsInstance(name.ctx, ast.Load)
                          ^^^^^^^^
AttributeError: 'Name' object has no attribute 'ctx'

----------------------------------------------------------------------
Ran 175 tests in 0.765s

FAILED (errors=1, skipped=1)

@colesbury
Copy link
Contributor Author

Just checking, this is from ./python -m test -W on the 3.13 branch? Is it a debug build?

@AlexWaygood
Copy link
Member

Note that that AST test was only merged (and backported to 3.13) yesterday in #118854

@hroncok
Copy link
Contributor

hroncok commented May 11, 2024

I might have git pulled but forgot to rebuild it. Mea culpa. Trying fresh.

@hroncok
Copy link
Contributor

hroncok commented May 11, 2024

All is good now, thank you!

estyxx pushed a commit to estyxx/cpython that referenced this pull request Jul 17, 2024
…ly (python#118864)

The free-threaded build currently immortalizes some objects once the
first thread is started. This can lead to test failures depending on the
order in which tests are run. This PR addresses those failures by
suppressing immortalization or skipping the affected tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants