tortoise / aerich

A database migrations tool for TortoiseORM, ready to production.
https://github.com/tortoise/aerich
Apache License 2.0
804 stars 90 forks source link

Timeout Error when try to connect to database #259

Open Angatupyry opened 1 year ago

Angatupyry commented 1 year ago

I've a project using

tortoise = "^0.19.0" 
aerich = "^0.6.2". 

The connection to the database is made to an internal docker.

The connection was working fine until a few days ago when I get the following error stack:

Traceback (most recent call last):                                                                                                                                                                   
File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 691, in _create_ssl_connection                                  
tr, pr = await loop.create_connection(                                                                                                                                                           
File "/usr/local/lib/python3.10/asyncio/base_events.py", line 1040, in create_connection                                                                                                           
sock = await self._connect_sock(                                                                                                                                                                File "/usr/local/lib/python3.10/asyncio/base_events.py", line 954, in _connect_sock                                                                                                                
await self.sock_connect(sock, address)                                                                                                                                                           
File "/usr/local/lib/python3.10/asyncio/selector_events.py", line 502, in sock_connect                                                                                                             
return await fut                                                                                                                                                                                 
asyncio.exceptions.CancelledError                                                                                                                                                                    

During handling of the above exception, another exception occurred:                                                                                                                                  

Traceback (most recent call last):                                                                                                                                                                   
   File "/usr/local/lib/python3.10/asyncio/tasks.py", line 458, in wait_for                                                                                                                           
     fut.result()                                                                                                                                                                                     
 asyncio.exceptions.CancelledError                                                                                                                                                                    

 The above exception was the direct cause of the following exception:                                                                                                                                 

 Traceback (most recent call last):                                                                                                                                                                   
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/bin/aerich", line 8, in <module>                                                                                             
  sys.exit(main())                                                                                                                                                                                 
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/aerich/cli.py", line 257, in main                                                               
     cli()                                                                                                                                                                                            
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/click/core.py", line 1130, in __call__                                                          
     return self.main(*args, **kwargs)                                                                                                                                                                
backend_1   |   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/click/core.py", 
line 1055, in main                                                              
     rv = self.invoke(ctx)                                                                                                                                                                            
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/click/core.py", line 1654, in invoke                                                            
     super().invoke(ctx)                                                                                                                                                                              
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/click/core.py", line 1404, in invoke                                                            
     return ctx.invoke(self.callback, **ctx.params)                                                                                                                                                   
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/click/core.py", line 760, in invoke                                                             
     return __callback(*args, **kwargs)                                                                                                                                                               
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func                                                      
     return f(get_current_context(), *args, **kwargs)                                                                                                                                                 
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/aerich/cli.py", line 31, in wrapper                                                             
     loop.run_until_complete(f(*args, **kwargs))
   File "/usr/local/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
     return future.result()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/aerich/cli.py", line 77, in cli
     await command.init()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/aerich/__init__.py", line 38, in init
     await Migrate.init(self.tortoise_config, self.app, self.location)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/aerich/migrate.py", line 69, in init
     last_version = await cls.get_last_version()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/aerich/migrate.py", line 55, in get_last_version
     return await Aerich.filter(app=cls.app).first()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/queryset.py", line 1006, in _execute
     instance_list = await self._db.executor_class(
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/base/executor.py", line 130, in execute_select
     _, raw_results = await self.db.execute_query(query.get_sql())
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/base_postgres/client.py", line 24, in _translate_exceptions
 File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/base_postgres/client.py", line 24, in _translate_exceptions
  return await self._translate_exceptions(func, *args, **kwargs)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/asyncpg/client.py", line 79, in _translate_exceptions
     return await func(self, *args, **kwargs)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/asyncpg/client.py", line 126, in execute_query
     async with self.acquire_connection() as connection:
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/base/client.py", line 326, in __aenter__
     await self.ensure_connection()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/base/client.py", line 322, in ensure_connection
     await self.client.create_connection(with_db=True)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/asyncpg/client.py", line 56, in create_connection
     self._pool = await self.create_pool(password=self.password, **self._template)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/tortoise/backends/asyncpg/client.py", line 62, in create_pool
     return await asyncpg.create_pool(None, **kwargs)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/pool.py", line 413, in _async__init__
     await self._initialize()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/pool.py", line 441, in _initialize
     await first_ch.connect()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/pool.py", line 133, in connect
     self._con = await self._pool._get_new_connection()
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/pool.py", line 511, in _get_new_connection
     con = await connection.connect(
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/connection.py", line 2085, in connect
     return await connect_utils._connect(
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 895, in _connect
     raise last_error
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 881, in _connect
     return await _connect_addr(
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 781, in _connect_addr
     return await __connect_addr(params, timeout, True, *args)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/connect_utils.py", line 825, in __connect_addr
     tr, pr = await compat.wait_for(connector, timeout=timeout)
   File "/root/.cache/pypoetry/virtualenvs/ambient-admin-9TtSrW0h-py3.10/lib/python3.10/site-packages/asyncpg/compat.py", line 66, in wait_for
     return await asyncio.wait_for(fut, timeout)
   File "/usr/local/lib/python3.10/asyncio/tasks.py", line 460, in wait_for
     raise exceptions.TimeoutError() from exc
 asyncio.exceptions.TimeoutError

My connection:

import logging
import os

logger = logging.getLogger(__name__)

db_url = os.environ.get("DATABASE_URL", "sqlite://:memory:")

TORTOISE_ORM = {
    "connections": {"default": db_url},
    "apps": {
        "models": {
            "models": [
                "aerich.models",
                "folder.models",
            ],
            "default_connection": "default",
        },
    },
}

Database URL field into docker compose: - DATABASE_URL=postgres://postgres:postgres@host.docker.internal/docker-name