diff --git a/edb/server/net_worker.py b/edb/server/net_worker.py index 5b0ad51edca..37f49ea172e 100644 --- a/edb/server/net_worker.py +++ b/edb/server/net_worker.py @@ -337,7 +337,11 @@ def _warn(e): ) async for iteration in rloop: async with iteration: - result = await execute.parse_execute_json( + if not db.tenant.is_database_connectable(db.name): + # Don't run the net_worker if the database is not + # connectable, e.g. being dropped + continue + result_json = await execute.parse_execute_json( db, """ with requests := ( @@ -346,14 +350,15 @@ def _warn(e): and (datetime_of_statement() - .updated_at) > $expires_in ) - delete requests; + select count((delete requests)); """, variables={"expires_in": expires_in.to_backend_str()}, cached_globally=True, tx_isolation=defines.TxIsolationLevel.RepeatableRead, ) - if len(result) > 0: - logger.info(f"Deleted requests: {result!r}") + result: list[int] = json.loads(result_json) + if result[0] > 0: + logger.info(f"Deleted {result[0]} requests") else: logger.info(f"No requests to delete") @@ -383,7 +388,8 @@ async def gc(server: edbserver.BaseServer) -> None: if tenant.accept_new_tasks ] try: - await asyncio.wait(tasks) + if tasks: + await asyncio.wait(tasks) except Exception as ex: logger.debug( "GC of std::net::http::ScheduledRequest failed", exc_info=ex diff --git a/edb/server/protocol/auth_ext/pkce.py b/edb/server/protocol/auth_ext/pkce.py index 028a6e9e162..a8acfdc5752 100644 --- a/edb/server/protocol/auth_ext/pkce.py +++ b/edb/server/protocol/auth_ext/pkce.py @@ -158,23 +158,29 @@ async def delete(db: edbtenant.dbview.Database, id: str) -> None: assert len(result_json) == 1 +async def _delete_challenge(db: edbtenant.dbview.Database) -> None: + if not db.tenant.is_database_connectable(db.name): + # Don't run gc if the database is not connectable, e.g. being dropped + return + + await execute.parse_execute_json( + db, + """ + delete ext::auth::PKCEChallenge filter + (datetime_of_statement() - .created_at) > + $validity + """, + variables={"validity": VALIDITY.to_backend_str()}, + cached_globally=True, + ) + + async def _gc(tenant: edbtenant.Tenant) -> None: try: async with asyncio.TaskGroup() as g: for db in tenant.iter_dbs(): if "auth" in db.extensions: - g.create_task( - execute.parse_execute_json( - db, - """ - delete ext::auth::PKCEChallenge filter - (datetime_of_statement() - .created_at) > - $validity - """, - variables={"validity": VALIDITY.to_backend_str()}, - cached_globally=True, - ), - ) + g.create_task(_delete_challenge(db)) except Exception as ex: logger.debug( "GC of ext::auth::PKCEChallenge failed (instance: %s)",