fix: exhibit/bulk에서 concurrent DB 세션 충돌 수정

asyncio.gather로 동시에 실행되는 exhibit 항목들이 단일 DB 세션을
공유하면서 "concurrent operations are not permitted" 에러 발생.

각 _fetch_one 태스크가 AsyncSessionLocal()로 독립 세션 사용하도록 수정.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main
I Luk Kim 5 months ago
parent 45d832ba5c
commit 1e9432a6e3

@ -10,7 +10,7 @@ from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query, Response
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.core.database import get_db, AsyncSessionLocal
from app.schemas.filing import (
BulkExhibitItem,
BulkExhibitRequest,
@ -290,9 +290,11 @@ async def get_exhibit_bulk(
async def _fetch_one(item: dict) -> BulkExhibitItem:
accession_number = item.get("accession_number", "")
exhibit_type = item.get("exhibit_type", "EX-99.1")
# Each concurrent call gets its own DB session to avoid session contention
async with AsyncSessionLocal() as session:
try:
result = await asyncio.wait_for(
sec_filings_service.get_exhibit_content(db, accession_number, exhibit_type),
sec_filings_service.get_exhibit_content(session, accession_number, exhibit_type),
timeout=30,
)
return BulkExhibitItem(

Loading…
Cancel
Save