strawberry icon indicating copy to clipboard operation
strawberry copied to clipboard

`connection_init_timeout` - "task destroyed but it is pending!"

Open nrbnlulu opened this issue 1 year ago • 4 comments

Describe the Bug

If a gql_transport_ws connection ended before connection_init_timeout asncio will warn: (if there were no event loops after the task was closed)

Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<BaseGraphQLTransportWSHandler.handle_connection_init_timeout() running at /home/nir/Desktop/opensource/forks/strawberry/strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py:75> wait_for=<Future pending cb=[Task.task_wakeup()]>>

Very annoying for tests.
repro:

async def test_connection_init_timeout():
    client = WebsocketCommunicator(
        GraphQLWSConsumer.as_asgi(
            schema=schema,
            # uncomment this and no warning will occure
            # connection_init_wait_timeout=timedelta(seconds=0),
            subscription_protocols=(GRAPHQL_TRANSPORT_WS_PROTOCOL,),
        ),
        "/graphql",
        subprotocols=[
            GRAPHQL_TRANSPORT_WS_PROTOCOL,
        ],
    )
    await asyncio.sleep(0.1)
    # Hope that the connection init timeout expired
    res = await client.connect()
    assert res == (True, GRAPHQL_TRANSPORT_WS_PROTOCOL)

    data = await client.receive_output()
    assert data["type"] == "websocket.close"
    assert data["code"] == 4408

System Information

  • Operating system: ubuntu 22.0.4
  • Strawberry version (if applicable): 0.154.0
  • Python: 3.10

Additional Context

Upvote & Fund

  • We're using Polar.sh so you can upvote and help fund this issue.
  • We receive the funding once the issue is completed & confirmed by you.
  • Thank you in advance for helping prioritize & fund our backlog.
Fund with Polar

nrbnlulu avatar Jan 16 '23 07:01 nrbnlulu