Skip to content

Fix connection reuse for file-like data payloads #10915

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

Merged
merged 77 commits into from
May 22, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
612af32
Ensure writer is cleaned up if reader is already at eof
bdraco May 21, 2025
2a5abcd
still not a good fix
bdraco May 21, 2025
25dfcd8
still not a good fix
bdraco May 21, 2025
af71a7f
signal writer
bdraco May 21, 2025
f5128cc
signal writer
bdraco May 21, 2025
1a021f1
signal writer
bdraco May 21, 2025
2739c6a
cleanup
bdraco May 21, 2025
d65abb2
revert
bdraco May 21, 2025
a7e332f
cleanup
bdraco May 21, 2025
467442e
cleanup
bdraco May 21, 2025
e20652c
tweak
bdraco May 21, 2025
54c5579
tweak
bdraco May 21, 2025
fe8be39
fixes
bdraco May 21, 2025
4a051ad
debug
bdraco May 21, 2025
8b4ca43
debug
bdraco May 21, 2025
fec1397
more fixes
bdraco May 21, 2025
c582931
more fixes
bdraco May 21, 2025
3b75f9a
more fixes
bdraco May 21, 2025
373f157
reduce
bdraco May 21, 2025
99d8f19
reduce
bdraco May 21, 2025
e902724
reduce
bdraco May 21, 2025
653933c
reduce
bdraco May 21, 2025
fdae4f2
fix
bdraco May 21, 2025
f2ae144
all working now
bdraco May 21, 2025
14a1f41
fixes
bdraco May 21, 2025
05f6a3c
tweak
bdraco May 21, 2025
06c5945
tweak
bdraco May 21, 2025
d638b49
tweak
bdraco May 21, 2025
ca9f98c
tweak
bdraco May 21, 2025
2479a36
docs
bdraco May 21, 2025
71dfa14
docs
bdraco May 21, 2025
6dfdde1
docs
bdraco May 21, 2025
5cb1581
cleanup
bdraco May 21, 2025
ad5ec73
cleanup
bdraco May 21, 2025
8e9aaf8
cleanup
bdraco May 21, 2025
df1d173
cleanup
bdraco May 21, 2025
9683667
cleanup
bdraco May 21, 2025
9a3bde6
preen
bdraco May 21, 2025
133ec6c
cover
bdraco May 21, 2025
4ff2c43
cover
bdraco May 21, 2025
e2e14be
fix
bdraco May 21, 2025
a448922
fix
bdraco May 21, 2025
dbb13ad
convert reproducer to test
bdraco May 21, 2025
0330f2f
fix
bdraco May 21, 2025
25693d4
fix
bdraco May 21, 2025
fa19c4b
preen
bdraco May 21, 2025
5d6fac3
preen
bdraco May 21, 2025
698e9e3
cover
bdraco May 21, 2025
a108969
cleanup
bdraco May 21, 2025
b88e788
Merge branch 'master' into wait_for_writer_eof
bdraco May 21, 2025
ff04923
fixes
bdraco May 21, 2025
9f9cce8
Merge remote-tracking branch 'upstream/wait_for_writer_eof' into wait…
bdraco May 21, 2025
d46356e
cover missing line
bdraco May 21, 2025
7504200
cover missing line
bdraco May 21, 2025
61fca77
proper fix
bdraco May 21, 2025
6106242
fixes
bdraco May 21, 2025
d66b363
fixes
bdraco May 21, 2025
01feb88
lit
bdraco May 21, 2025
c121180
fix
bdraco May 21, 2025
dea6011
fix
bdraco May 21, 2025
fb3223b
no cover
bdraco May 21, 2025
249a31c
cover one more
bdraco May 21, 2025
32f01e7
cover one more
bdraco May 21, 2025
897fe6b
fix test
bdraco May 21, 2025
f591d65
cleanup
bdraco May 22, 2025
80cd057
fix test
bdraco May 22, 2025
966dc55
cleanup
bdraco May 22, 2025
86756af
Merge branch 'master' into wait_for_writer_eof
bdraco May 22, 2025
f1c3a4d
fix leak in client functional
bdraco May 22, 2025
6159fc9
fix PyPy
bdraco May 22, 2025
749aa1a
revert
bdraco May 22, 2025
7e08cd6
move test to see why its failing on pypy
bdraco May 22, 2025
b6fd37c
Revert "move test to see why its failing on pypy"
bdraco May 22, 2025
8654141
see if PyPy error moves
bdraco May 22, 2025
d109188
Fix for PyPy not closing file handle if we do not exaust the iterator
bdraco May 22, 2025
f768b7f
Merge branch 'master' into wait_for_writer_eof
bdraco May 22, 2025
042726d
Revert "see if PyPy error moves"
bdraco May 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
see if PyPy error moves
  • Loading branch information
bdraco committed May 22, 2025
commit 8654141943785cdac996b4a913c6e29ceccb4dcd
16 changes: 0 additions & 16 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import zlib_ng.zlib_ng
from blockbuster import blockbuster_ctx

from aiohttp import payload
from aiohttp.client_proto import ResponseHandler
from aiohttp.compression_utils import ZLibBackend, ZLibBackendProtocol, set_zlib_backend
from aiohttp.http import WS_KEY
Expand Down Expand Up @@ -332,18 +331,3 @@ def parametrize_zlib_backend(
yield

set_zlib_backend(original_backend)


@pytest.fixture()
def cleanup_payload_pending_file_closes(
loop: asyncio.AbstractEventLoop,
) -> Generator[None, None, None]:
"""Ensure all pending file close operations complete during test teardown."""
yield
if payload._CLOSE_FUTURES:
# Only wait for futures from the current loop
loop_futures = [f for f in payload._CLOSE_FUTURES if f.get_loop() is loop]
if loop_futures:
loop.run_until_complete(
asyncio.gather(*loop_futures, return_exceptions=True)
)
19 changes: 14 additions & 5 deletions tests/test_client_functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
Awaitable,
Callable,
Dict,
Generator,
List,
NoReturn,
Optional,
Expand All @@ -33,7 +34,7 @@
from yarl import URL

import aiohttp
from aiohttp import Fingerprint, ServerFingerprintMismatch, hdrs, web
from aiohttp import Fingerprint, ServerFingerprintMismatch, hdrs, payload, web
from aiohttp.abc import AbstractResolver, ResolveResult
from aiohttp.client_exceptions import (
ClientResponseError,
Expand All @@ -53,11 +54,19 @@
from aiohttp.typedefs import Handler, Query


@pytest.fixture(autouse=True)
def cleanup(
cleanup_payload_pending_file_closes: None,
) -> None:
@pytest.fixture()
def cleanup_payload_pending_file_closes(
loop: asyncio.AbstractEventLoop,
) -> Generator[None, None, None]:
"""Ensure all pending file close operations complete during test teardown."""
yield
if payload._CLOSE_FUTURES:
# Only wait for futures from the current loop
loop_futures = [f for f in payload._CLOSE_FUTURES if f.get_loop() is loop]
if loop_futures:
loop.run_until_complete(
asyncio.gather(*loop_futures, return_exceptions=True)
)


@pytest.fixture
Expand Down
19 changes: 14 additions & 5 deletions tests/test_payload.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import array
import asyncio
import io
import unittest.mock
from io import StringIO
from typing import AsyncIterator, Iterator, List, Optional, Union
from typing import AsyncIterator, Generator, Iterator, List, Optional, Union

import pytest
from multidict import CIMultiDict
Expand All @@ -11,11 +12,19 @@
from aiohttp.abc import AbstractStreamWriter


@pytest.fixture(autouse=True)
def cleanup(
cleanup_payload_pending_file_closes: None,
) -> None:
@pytest.fixture()
def cleanup_payload_pending_file_closes(
loop: asyncio.AbstractEventLoop,
) -> Generator[None, None, None]:
"""Ensure all pending file close operations complete during test teardown."""
yield
if payload._CLOSE_FUTURES:
# Only wait for futures from the current loop
loop_futures = [f for f in payload._CLOSE_FUTURES if f.get_loop() is loop]
if loop_futures:
loop.run_until_complete(
asyncio.gather(*loop_futures, return_exceptions=True)
)


@pytest.fixture
Expand Down
Loading