khoj-ai / khoj

Your AI second brain. Self-hostable. Get answers from the web or your docs. Build custom agents, schedule automations, do deep research. Turn any online or local LLM into your personal, autonomous AI (e.g gpt, claude, gemini, llama, qwen, mistral).
https://khoj.dev
GNU Affero General Public License v3.0
15.12k stars 754 forks source link

[FIX] InterfaceError: connection already closed #974

Open thinker007 opened 4 days ago

thinker007 commented 4 days ago

After running for 9 days we got this error

From the error stack trace, this is a PostgreSQL database connection issue. The main error is InterfaceError: connection already closed, indicating that the code is trying to use a database connection that has already been closed. The main possible causes are:

Database connection timeout Database connection unexpectedly closed Incorrect connection pool configuration Connection management issues in asynchronous environments

uvicorn.error: Exception in ASGI h11_impl.py:411 application

                       ╭─ Traceback (most recent call last─╮                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/backends/base/ba │                
                       │ se.py:294 in _cursor              │                
                       │                                   │                
                       │   291 │   │   self.close_if_healt │                
                       │   292 │   │   self.ensure_connect │                
                       │   293 │   │   with self.wrap_data │                
                       │ ❱ 294 │   │   │   return self._pr │                
                       │   295 │                           │                
                       │   296 │   def _commit(self):      │                
                       │   297 │   │   if self.connection  │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/utils/asyncio.py:26 │                
                       │  in inner                         │                
                       │                                   │                
                       │   23 │   │   │   │   if not os.en │                
                       │   24 │   │   │   │   │   raise Sy │                
                       │   25 │   │   │   # Pass onward.   │                
                       │ ❱ 26 │   │   │   return func(*arg │                
                       │   27 │   │                        │                
                       │   28 │   │   return inner         │                
                       │   29                              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/backends/postgre │                
                       │ sql/base.py:332 in create_cursor  │                
                       │                                   │                
                       │   329 │   │   │   │   name, scrol │                
                       │   330 │   │   │   )               │                
                       │   331 │   │   else:               │                
                       │ ❱ 332 │   │   │   cursor = self.c │                
                       │   333 │   │                       │                
                       │   334 │   │   if is_psycopg3:     │                
                       │   335 │   │   │   # Register the  │                
                       ╰───────────────────────────────────╯                
                       InterfaceError: connection already                   
                       closed                                               

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

                       ╭─ Traceback (most recent call last─╮                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/uvicorn/protocols/http/h11 │                
                       │ _impl.py:406 in run_asgi          │                
                       │                                   │                
                       │   403 │   # ASGI exception wrappe │                
                       │   404 │   async def run_asgi(self │                
                       │   405 │   │   try:                │                
                       │ ❱ 406 │   │   │   result = await  │                
                       │   407 │   │   │   │   self.scope, │                
                       │   408 │   │   │   )               │                
                       │   409 │   │   except BaseExceptio │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/uvicorn/middleware/proxy_h │                
                       │ eaders.py:70 in __call__          │                
                       │                                   │                
                       │   67 │   │   │   │   │   port = 0 │                
                       │   68 │   │   │   │   │   scope["c │                
                       │   69 │   │                        │                
                       │ ❱ 70 │   │   return await self.ap │                
                       │   71                              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/fastapi/applications.py:10 │                
                       │ 54 in __call__                    │                
                       │                                   │                
                       │   1051 │   async def __call__(sel │                
                       │   1052 │   │   if self.root_path: │                
                       │   1053 │   │   │   scope["root_pa │                
                       │ ❱ 1054 │   │   await super().__ca │                
                       │   1055 │                          │                
                       │   1056 │   def add_api_route(     │                
                       │   1057 │   │   self,              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/applications.py: │                
                       │ 113 in __call__                   │                
                       │                                   │                
                       │   110 │   │   scope["app"] = self │                
                       │   111 │   │   if self.middleware_ │                
                       │   112 │   │   │   self.middleware │                
                       │ ❱ 113 │   │   await self.middlewa │                
                       │   114 │                           │                
                       │   115 │   def on_event(self, even │                
                       │   116 │   │   return self.router. │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/error │                
                       │ s.py:187 in __call__              │                
                       │                                   │                
                       │   184 │   │   │   # We always con │                
                       │   185 │   │   │   # This allows s │                
                       │   186 │   │   │   # to optionally │                
                       │ ❱ 187 │   │   │   raise exc       │                
                       │   188 │                           │                
                       │   189 │   def format_line(self, i │                
                       │       str:                        │                
                       │   190 │   │   values = {          │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/error │                
                       │ s.py:165 in __call__              │                
                       │                                   │                
                       │   162 │   │   │   await send(mess │                
                       │   163 │   │                       │                
                       │   164 │   │   try:                │                
                       │ ❱ 165 │   │   │   await self.app( │                
                       │   166 │   │   except Exception as │                
                       │   167 │   │   │   request = Reque │                
                       │   168 │   │   │   if self.debug:  │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/sessi │                
                       │ ons.py:85 in __call__             │                
                       │                                   │                
                       │   82 │   │   │   │   │   headers. │                
                       │   83 │   │   │   await send(messa │                
                       │   84 │   │                        │                
                       │ ❱ 85 │   │   await self.app(scope │                
                       │   86                              │                
                       │                                   │                
                       │ /app/src/khoj/configure.py:372 in │                
                       │ __call__                          │                
                       │                                   │                
                       │   369 │   │   async def __call__( │                
                       │   370 │   │   │   if scope["type" │                
                       │   371 │   │   │   │   scope["path │                
                       │ ❱ 372 │   │   │   await self.app( │                
                       │   373 │   │                       │                
                       │   374 │   │   def __init__(self,  │                
                       │   375 │   │   │   super().__init_ │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/authe │                
                       │ ntication.py:48 in __call__       │                
                       │                                   │                
                       │   45 │   │   if auth_result is No │                
                       │   46 │   │   │   auth_result = Au │                
                       │   47 │   │   scope["auth"], scope │                
                       │ ❱ 48 │   │   await self.app(scope │                
                       │   49 │                            │                
                       │   50 │   @staticmethod            │                
                       │   51 │   def default_on_error(con │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/base. │                
                       │ py:187 in __call__                │                
                       │                                   │                
                       │   184 │   │                       │                
                       │   185 │   │   with collapse_excgr │                
                       │   186 │   │   │   async with anyi │                
                       │ ❱ 187 │   │   │   │   response =  │                
                       │   188 │   │   │   │   await respo │                
                       │   189 │   │   │   │   response_se │                
                       │   190                             │                
                       │                                   │                
                       │ /app/src/khoj/configure.py:86 in  │                
                       │ dispatch                          │                
                       │                                   │                
                       │    83 │   │   await run_in_thread │                
                       │    84 │   │   await sync_to_async │                
                       │    85 │   │   try:                │                
                       │ ❱  86 │   │   │   response = awai │                
                       │    87 │   │   finally:            │                
                       │    88 │   │   │   # in tests, use │                
                       │    89 │   │   │   if getattr(sett │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/base. │                
                       │ py:163 in call_next               │                
                       │                                   │                
                       │   160 │   │   │   │   │   message │                
                       │   161 │   │   │   except anyio.En │                
                       │   162 │   │   │   │   if app_exc  │                
                       │ ❱ 163 │   │   │   │   │   raise a │                
                       │   164 │   │   │   │   raise Runti │                
                       │   165 │   │   │                   │                
                       │   166 │   │   │   assert message[ │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/base. │                
                       │ py:149 in coro                    │                
                       │                                   │                
                       │   146 │   │   │   │               │                
                       │   147 │   │   │   │   async with  │                
                       │   148 │   │   │   │   │   try:    │                
                       │ ❱ 149 │   │   │   │   │   │   awa │                
                       │   150 │   │   │   │   │   except  │                
                       │   151 │   │   │   │   │   │   app │                
                       │   152                             │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/cors. │                
                       │ py:85 in __call__                 │                
                       │                                   │                
                       │    82 │   │   origin = headers.ge │                
                       │    83 │   │                       │                
                       │    84 │   │   if origin is None:  │                
                       │ ❱  85 │   │   │   await self.app( │                
                       │    86 │   │   │   return          │                
                       │    87 │   │                       │                
                       │    88 │   │   if method == "OPTIO │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/middleware/excep │                
                       │ tions.py:62 in __call__           │                
                       │                                   │                
                       │   59 │   │   else:                │                
                       │   60 │   │   │   conn = WebSocket │                
                       │   61 │   │                        │                
                       │ ❱ 62 │   │   await wrap_app_handl │                
                       │   63 │                            │                
                       │   64 │   def http_exception(self, │                
                       │   65 │   │   assert isinstance(ex │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/_exception_handl │                
                       │ er.py:53 in wrapped_app           │                
                       │                                   │                
                       │   50 │   │   │   │   handler = _l │                
                       │   51 │   │   │                    │                
                       │   52 │   │   │   if handler is No │                
                       │ ❱ 53 │   │   │   │   raise exc    │                
                       │   54 │   │   │                    │                
                       │   55 │   │   │   if response_star │                
                       │   56 │   │   │   │   raise Runtim │                
                       │      started.") from exc          │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/_exception_handl │                
                       │ er.py:42 in wrapped_app           │                
                       │                                   │                
                       │   39 │   │   │   await send(messa │                
                       │   40 │   │                        │                
                       │   41 │   │   try:                 │                
                       │ ❱ 42 │   │   │   await app(scope, │                
                       │   43 │   │   except Exception as  │                
                       │   44 │   │   │   handler = None   │                
                       │   45                              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/routing.py:715   │                
                       │ in __call__                       │                
                       │                                   │                
                       │   712 │   │   """                 │                
                       │   713 │   │   The main entry poin │                
                       │   714 │   │   """                 │                
                       │ ❱ 715 │   │   await self.middlewa │                
                       │   716 │                           │                
                       │   717 │   async def app(self, sco │                
                       │   718 │   │   assert scope["type" │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/routing.py:735   │                
                       │ in app                            │                
                       │                                   │                
                       │   732 │   │   │   match, child_sc │                
                       │   733 │   │   │   if match == Mat │                
                       │   734 │   │   │   │   scope.updat │                
                       │ ❱ 735 │   │   │   │   await route │                
                       │   736 │   │   │   │   return      │                
                       │   737 │   │   │   elif match == M │                
                       │   738 │   │   │   │   partial = r │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/routing.py:288   │                
                       │ in handle                         │                
                       │                                   │                
                       │   285 │   │   │   │   response =  │                
                       │       headers=headers)            │                
                       │   286 │   │   │   await response( │                
                       │   287 │   │   else:               │                
                       │ ❱ 288 │   │   │   await self.app( │                
                       │   289 │                           │                
                       │   290 │   def __eq__(self, other: │                
                       │   291 │   │   return (            │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/routing.py:76 in │                
                       │ app                               │                
                       │                                   │                
                       │    73 │   │   │   response = awai │                
                       │    74 │   │   │   await response( │                
                       │    75 │   │                       │                
                       │ ❱  76 │   │   await wrap_app_hand │                
                       │    77 │                           │                
                       │    78 │   return app              │                
                       │    79                             │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/_exception_handl │                
                       │ er.py:53 in wrapped_app           │                
                       │                                   │                
                       │   50 │   │   │   │   handler = _l │                
                       │   51 │   │   │                    │                
                       │   52 │   │   │   if handler is No │                
                       │ ❱ 53 │   │   │   │   raise exc    │                
                       │   54 │   │   │                    │                
                       │   55 │   │   │   if response_star │                
                       │   56 │   │   │   │   raise Runtim │                
                       │      started.") from exc          │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/_exception_handl │                
                       │ er.py:42 in wrapped_app           │                
                       │                                   │                
                       │   39 │   │   │   await send(messa │                
                       │   40 │   │                        │                
                       │   41 │   │   try:                 │                
                       │ ❱ 42 │   │   │   await app(scope, │                
                       │   43 │   │   except Exception as  │                
                       │   44 │   │   │   handler = None   │                
                       │   45                              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/routing.py:73 in │                
                       │ app                               │                
                       │                                   │                
                       │    70 │   │   request = Request(s │                
                       │    71 │   │                       │                
                       │    72 │   │   async def app(scope │                
                       │ ❱  73 │   │   │   response = awai │                
                       │    74 │   │   │   await response( │                
                       │    75 │   │                       │                
                       │    76 │   │   await wrap_app_hand │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/fastapi/routing.py:301 in  │                
                       │ app                               │                
                       │                                   │                
                       │    298 │   │   │   │   )          │                
                       │    299 │   │   │   │   errors = s │                
                       │    300 │   │   │   │   if not err │                
                       │ ❱  301 │   │   │   │   │   raw_re │                
                       │    302 │   │   │   │   │   │   de │                
                       │    303 │   │   │   │   │   │   va │                
                       │    304 │   │   │   │   │   │   is │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/fastapi/routing.py:212 in  │                
                       │ run_endpoint_function             │                
                       │                                   │                
                       │    209 │   assert dependant.call  │                
                       │    210 │                          │                
                       │    211 │   if is_coroutine:       │                
                       │ ❱  212 │   │   return await depen │                
                       │    213 │   else:                  │                
                       │    214 │   │   return await run_i │                
                       │    215                            │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/starlette/authentication.p │                
                       │ y:75 in async_wrapper             │                
                       │                                   │                
                       │    72 │   │   │   │   │   │   nex │                
                       │    73 │   │   │   │   │   │   ret │                
                       │    74 │   │   │   │   │   raise H │                
                       │ ❱  75 │   │   │   │   return awai │                
                       │    76 │   │   │                   │                
                       │    77 │   │   │   return async_wr │                
                       │    78                             │                
                       │                                   │                
                       │ /app/src/khoj/routers/api_chat.py │                
                       │ :1201 in chat                     │                
                       │                                   │                
                       │   1198 │   ## Non-Streaming Text  │                
                       │   1199 │   else:                  │                
                       │   1200 │   │   response_iterator  │                
                       │ ❱ 1201 │   │   response_data = aw │                
                       │   1202 │   │   return Response(co │                
                       │        media_type="application/js │                
                       │   1203                            │                
                       │                                   │                
                       │ /app/src/khoj/routers/helpers.py: │                
                       │ 1763 in read_chat_stream          │                
                       │                                   │                
                       │   1760 │   event_delimiter = "␃🔚 │                
                       │   1761 │   buffer = ""            │                
                       │   1762 │                          │                
                       │ ❱ 1763 │   async for chunk in res │                
                       │   1764 │   │   # Start buffering  │                
                       │   1765 │   │   buffer += chunk    │                
                       │   1766                            │                
                       │                                   │                
                       │ /app/src/khoj/routers/api_chat.py │                
                       │ :1154 in event_generator          │                
                       │                                   │                
                       │   1151 │   │   ## Generate Text O │                
                       │   1152 │   │   async for result i │                
                       │        response**"):              │                
                       │   1153 │   │   │   yield result   │                
                       │ ❱ 1154 │   │   llm_response, chat │                
                       │   1155 │   │   │   defiltered_que │                
                       │   1156 │   │   │   meta_log,      │                
                       │   1157 │   │   │   conversation,  │                
                       │                                   │                
                       │ /app/src/khoj/routers/helpers.py: │                
                       │ 249 in agenerate_chat_response    │                
                       │                                   │                
                       │    246                            │                
                       │    247 async def agenerate_chat_r │                
                       │    248 │   loop = asyncio.get_eve │                
                       │ ❱  249 │   return await loop.run_ │                
                       │    250                            │                
                       │    251                            │                
                       │    252 async def acreate_title_fr │                
                       │                                   │                
                       │ /usr/lib/python3.10/concurrent/fu │                
                       │ tures/thread.py:58 in run         │                
                       │                                   │                
                       │    55 │   │   │   return          │                
                       │    56 │   │                       │                
                       │    57 │   │   try:                │                
                       │ ❱  58 │   │   │   result = self.f │                
                       │    59 │   │   except BaseExceptio │                
                       │    60 │   │   │   self.future.set │                
                       │    61 │   │   │   # Break a refer │                
                       │                                   │                
                       │ /app/src/khoj/routers/helpers.py: │                
                       │ 1141 in generate_chat_response    │                
                       │                                   │                
                       │   1138 │   logger.debug(f"Convers │                
                       │   1139 │                          │                
                       │   1140 │   metadata = {}          │                
                       │ ❱ 1141 │   agent = AgentAdapters. │                
                       │        conversation.agent else No │                
                       │   1142 │   query_to_run = q       │                
                       │   1143 │   if meta_research:      │                
                       │   1144 │   │   query_to_run = f"A │                
                       │                                   │                
                       │ /app/src/khoj/database/adapters/_ │                
                       │ _init__.py:710 in                 │                
                       │ get_conversation_agent_by_id      │                
                       │                                   │                
                       │    707 │                          │                
                       │    708 │   @staticmethod          │                
                       │    709 │   def get_conversation_a │                
                       │ ❱  710 │   │   agent = Agent.obje │                
                       │    711 │   │   if agent == AgentA │                
                       │    712 │   │   │   # If the agent │                
                       │        default application code b │                
                       │    713 │   │   │   return None    │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/models/query.py: │                
                       │ 1097 in first                     │                
                       │                                   │                
                       │   1094 │   │   else:              │                
                       │   1095 │   │   │   self._check_or │                
                       │   1096 │   │   │   queryset = sel │                
                       │ ❱ 1097 │   │   for obj in queryse │                
                       │   1098 │   │   │   return obj     │                
                       │   1099 │                          │                
                       │   1100 │   async def afirst(self) │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/models/query.py: │                
                       │ 400 in __iter__                   │                
                       │                                   │                
                       │    397 │   │   │   3. self.iterat │                
                       │    398 │   │   │      - Responsib │                
                       │    399 │   │   """                │                
                       │ ❱  400 │   │   self._fetch_all()  │                
                       │    401 │   │   return iter(self._ │                
                       │    402 │                          │                
                       │    403 │   def __aiter__(self):   │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/models/query.py: │                
                       │ 1928 in _fetch_all                │                
                       │                                   │                
                       │   1925 │                          │                
                       │   1926 │   def _fetch_all(self):  │                
                       │   1927 │   │   if self._result_ca │                
                       │ ❱ 1928 │   │   │   self._result_c │                
                       │   1929 │   │   if self._prefetch_ │                
                       │   1930 │   │   │   self._prefetch │                
                       │   1931                            │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/models/query.py: │                
                       │ 91 in __iter__                    │                
                       │                                   │                
                       │     88 │   │   compiler = queryse │                
                       │     89 │   │   # Execute the quer │                
                       │     90 │   │   # and annotations. │                
                       │ ❱   91 │   │   results = compiler │                
                       │     92 │   │   │   chunked_fetch= │                
                       │     93 │   │   )                  │                
                       │     94 │   │   select, klass_info │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/models/sql/compi │                
                       │ ler.py:1560 in execute_sql        │                
                       │                                   │                
                       │   1557 │   │   if chunked_fetch:  │                
                       │   1558 │   │   │   cursor = self. │                
                       │   1559 │   │   else:              │                
                       │ ❱ 1560 │   │   │   cursor = self. │                
                       │   1561 │   │   try:               │                
                       │   1562 │   │   │   cursor.execute │                
                       │   1563 │   │   except Exception:  │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/utils/asyncio.py:26 │                
                       │  in inner                         │                
                       │                                   │                
                       │   23 │   │   │   │   if not os.en │                
                       │   24 │   │   │   │   │   raise Sy │                
                       │   25 │   │   │   # Pass onward.   │                
                       │ ❱ 26 │   │   │   return func(*arg │                
                       │   27 │   │                        │                
                       │   28 │   │   return inner         │                
                       │   29                              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/backends/base/ba │                
                       │ se.py:316 in cursor               │                
                       │                                   │                
                       │   313 │   @async_unsafe           │                
                       │   314 │   def cursor(self):       │                
                       │   315 │   │   """Create a cursor, │                
                       │ ❱ 316 │   │   return self._cursor │                
                       │   317 │                           │                
                       │   318 │   @async_unsafe           │                
                       │   319 │   def commit(self):       │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/backends/base/ba │                
                       │ se.py:293 in _cursor              │                
                       │                                   │                
                       │   290 │   def _cursor(self, name= │                
                       │   291 │   │   self.close_if_healt │                
                       │   292 │   │   self.ensure_connect │                
                       │ ❱ 293 │   │   with self.wrap_data │                
                       │   294 │   │   │   return self._pr │                
                       │   295 │                           │                
                       │   296 │   def _commit(self):      │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/utils.py:91 in   │                
                       │ __exit__                          │                
                       │                                   │                
                       │    88 │   │   │   │   # the conne │                
                       │    89 │   │   │   │   if dj_exc_t │                
                       │    90 │   │   │   │   │   self.wr │                
                       │ ❱  91 │   │   │   │   raise dj_ex │                
                       │    92 │                           │                
                       │    93 │   def __call__(self, func │                
                       │    94 │   │   # Note that we are  │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/backends/base/ba │                
                       │ se.py:294 in _cursor              │                
                       │                                   │                
                       │   291 │   │   self.close_if_healt │                
                       │   292 │   │   self.ensure_connect │                
                       │   293 │   │   with self.wrap_data │                
                       │ ❱ 294 │   │   │   return self._pr │                
                       │   295 │                           │                
                       │   296 │   def _commit(self):      │                
                       │   297 │   │   if self.connection  │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/utils/asyncio.py:26 │                
                       │  in inner                         │                
                       │                                   │                
                       │   23 │   │   │   │   if not os.en │                
                       │   24 │   │   │   │   │   raise Sy │                
                       │   25 │   │   │   # Pass onward.   │                
                       │ ❱ 26 │   │   │   return func(*arg │                
                       │   27 │   │                        │                
                       │   28 │   │   return inner         │                
                       │   29                              │                
                       │                                   │                
                       │ /usr/local/lib/python3.10/dist-pa │                
                       │ ckages/django/db/backends/postgre │                
                       │ sql/base.py:332 in create_cursor  │                
                       │                                   │                
                       │   329 │   │   │   │   name, scrol │                
                       │   330 │   │   │   )               │                
                       │   331 │   │   else:               │                
                       │ ❱ 332 │   │   │   cursor = self.c │                
                       │   333 │   │                       │                
                       │   334 │   │   if is_psycopg3:     │                
                       │   335 │   │   │   # Register the  │                
                       ╰───────────────────────────────────╯                
                       InterfaceError: connection already                   
                       closed        
thinker007 commented 2 days ago

Has any one else bumped into this bug?

sabaimran commented 1 day ago

Hi @thinker007 , do you mind sharing a bit about your hosting environment? I'm guessing your instance has been running for a while? Is it on your own machine, or in a separate cloud?

Unfortunately, this is an issue we've been tracking for a while. It's going to require a bit of refactoring to address it. In the meantime, restarting the service is usually sufficient for avoiding the problem. In the longer term, we're going to have to update our ORM or API layer completely so that we don't encounter this problem. There's a discussion here which highlights some of the technical issues.