Compare commits

...

2 Commits

Author SHA1 Message Date
db0d1fb6a5 Error handled cursors closing 2025-12-25 21:49:21 +03:00
be9f2825df Support * columns in SelectResultData 2025-12-25 21:49:08 +03:00
3 changed files with 21 additions and 9 deletions

View File

@@ -60,7 +60,10 @@ async def get_cursors(cursor_id: str) -> CachedCursorOut:
)
async def close_all_cursor() -> None:
for cached_cursor in mysql.cached_cursors.values():
await cached_cursor.close()
try:
await cached_cursor.close()
except Exception as e:
print(f"Error closing a cursor {e}")
mysql.cached_cursors.clear()
@@ -73,8 +76,11 @@ async def close_cursor(cursor_id: str) -> None:
cached_cursor = mysql.cached_cursors.get(cursor_id, None)
if cached_cursor is None:
raise CursorNotFound
try:
await cached_cursor.close()
except Exception as e:
print(f"Error closing the cursor. e={e}")
await cached_cursor.close()
del mysql.cached_cursors[cursor_id]
@@ -83,11 +89,12 @@ async def close_cursor(cursor_id: str) -> None:
dependencies=[Depends(get_current_user)],
status_code=status.HTTP_200_OK,
)
async def cursor_push_ttl(cursor_id: str, new_ttl: int|None=None) -> CachedCursorOut:
async def cursor_push_ttl(
cursor_id: str, new_ttl: int | None = None
) -> CachedCursorOut:
cached_cursor = mysql.cached_cursors.get(cursor_id, None)
if cached_cursor is None:
raise CursorNotFound
cached_cursor.ttl = new_ttl if new_ttl else cached_cursor.ttl
cached_cursor.close_at = cached_cursor.upgrade_close_at()
return cached_cursor

View File

@@ -172,7 +172,7 @@ class SelectQueryInDB(SelectQueryIn):
class SelectResultData(BaseModel):
columns: List[str]
columns: List[str] | str
data: List[List[Any]]

View File

@@ -24,8 +24,8 @@ async def close_old_cached_cursors():
continue
try:
await cursor.close()
cached_cursors.pop(cursor_id, None)
await cursor.close()
closed_cached_cursors[cursor_id] = cursor
print(f"Closed cursor {cursor_id}")
except Exception as e:
@@ -51,13 +51,18 @@ async def remove_old_closed_cached_cursors():
async def cached_cursors_cleaner():
global cached_cursors, closed_cached_cursors
while True:
await close_old_cached_cursors()
await remove_old_closed_cached_cursors()
try:
await close_old_cached_cursors()
except Exception as e:
print(f"Error closing some cached cursors, {e=}")
try:
await remove_old_closed_cached_cursors()
except Exception as e:
print(f"Error removing closed cursors, {e=}")
await asyncio.sleep(10)
async def pool_creator(connection: Connection, minsize=5, maxsize=10):
return await aiomysql.create_pool(
host=connection.host,
user=connection.username,