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

RuntimeError: Event loop is closed #88

Open
mikepal2 opened this issue Jun 22, 2024 · 3 comments
Open

RuntimeError: Event loop is closed #88

mikepal2 opened this issue Jun 22, 2024 · 3 comments

Comments

@mikepal2
Copy link
Collaborator

Reproduced on 127.0.0.1:8000/?origin=SWB&destination=PVB

INFO: 127.0.0.1:59821 - "POST /api/routeplans HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 419, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in call
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\fastapi\applications.py", line 1054, in call
await super().call(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\applications.py", line 123, in call
await self.middleware_stack(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\middleware\errors.py", line 186, in call
raise exc
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\middleware\errors.py", line 164, in call
await self.app(scope, receive, _send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in call
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette_exception_handler.py", line 64, in wrapped_app
raise exc
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\routing.py", line 758, in call
await self.middleware_stack(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\routing.py", line 778, in app
await route.handle(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\routing.py", line 299, in handle
await self.app(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\routing.py", line 79, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette_exception_handler.py", line 64, in wrapped_app
raise exc
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette_exception_handler.py", line 53, in wrapped_app
await app(scope, receive, sender)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\starlette\routing.py", line 74, in app
response = await func(request)
^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\fastapi\routing.py", line 278, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\fastapi\routing.py", line 191, in run_endpoint_function
return await dependant.call(**values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mike\Sources\ferry-planner\src\ferry_planner\server.py", line 102, in api_routeplans
await route_plan_builder.make_route_plans(
File "C:\Users\Mike\Sources\ferry-planner\src\ferry_planner\route.py", line 283, in make_route_plans
await self._pre_cache_schedules(routes=routes, options=options)
File "C:\Users\Mike\Sources\ferry-planner\src\ferry_planner\route.py", line 274, in _pre_cache_schedules
await asyncio.gather(*tasks)
File "C:\Users\Mike\Sources\ferry-planner\src\ferry_planner\schedule.py", line 168, in get
schedule = await self.download_schedule(origin_id, destination_id, date=date)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mike\Sources\ferry-planner\src\ferry_planner\schedule.py", line 194, in download_schedule
return await self._download_schedule_async(origin_id, destination_id, date=date)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Mike\Sources\ferry-planner\src\ferry_planner\schedule.py", line 219, in _download_schedule_async
response = await self._client.get(url)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_client.py", line 1801, in get
return await self.request(
^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_client.py", line 1574, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_client.py", line 1661, in send
response = await self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_client.py", line 1689, in _send_handling_auth
response = await self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_client.py", line 1726, in _send_handling_redirects
response = await self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_client.py", line 1763, in _send_single_request
response = await transport.handle_async_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpx_transports\default.py", line 373, in handle_async_request
resp = await self._pool.handle_async_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpcore_async\connection_pool.py", line 216, in handle_async_request
raise exc from None
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpcore_async\connection_pool.py", line 189, in handle_async_request
await self._close_connections(closing)
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpcore_async\connection_pool.py", line 305, in _close_connections
await connection.aclose()
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpcore_async\connection.py", line 171, in aclose
await self._connection.aclose()
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpcore_async\http11.py", line 265, in aclose
await self._network_stream.aclose()
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\httpcore_backends\anyio.py", line 54, in aclose
await self._stream.aclose()
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\anyio\streams\tls.py", line 202, in aclose
await self.transport_stream.aclose()
File "c:\Users\Mike\Sources\ferry-planner.venv\Lib\site-packages\anyio_backends_asyncio.py", line 1191, in aclose
self._transport.close()
File "C:\Users\Mike\AppData\Local\Programs\Python\Python311\Lib\asyncio\selector_events.py", line 864, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Users\Mike\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 762, in call_soon
self._check_closed()
File "C:\Users\Mike\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 520, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

@mikepal2
Copy link
Collaborator Author

@mikepal2
Copy link
Collaborator Author

@mikepal2
Copy link
Collaborator Author

mikepal2 commented Jun 22, 2024

Repro 100% with cache_ahead_days: int = 3
on 127.0.0.1:8000/?origin=SWB&destination=PVB

it has something to do with
[ScheduleDB:ERROR] failed to download schedule: TEX-CMX:2024-06-23
ScheduleDownloadError('error downloading https://www.bcferries.com/routes-fares/schedules/seasonal/TEX-CMX?&scheduleDate=06/23/2024: Date 2024-06-23 00:00:00 is out of seasonal schedules range')

once i added workaround for this schedule everything started to work fine

but we have to fix the underlying cause to prevent other download errors (timeouts?) to crash server

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant