diff --git a/app/workers/kosha_collector.py b/app/workers/kosha_collector.py index 0ece796..0d873c3 100644 --- a/app/workers/kosha_collector.py +++ b/app/workers/kosha_collector.py @@ -297,6 +297,10 @@ async def collect_disaster_cases(session) -> int: await _ingest_attachment(session, boardno, filenm, filepath) except FeedError as e: logger.warning(f"[kosha] 첨부 실패 skip ({boardno}/{filenm}): {e}") + + # 케이스 단위 commit (R4) — 이후 페이지/케이스의 _api_get 실패가 앞서 적재한 + # 케이스까지 전체 rollback 하지 않게 부분 적재 보존 (csb/api_standards idiom). + await session.commit() if page_all_dup: break # 등록일 역순 — 페이지 전체가 기존이면 이후 페이지도 기존 @@ -374,6 +378,8 @@ async def collect_fatal_accidents(session) -> int: await enqueue_stage(session, doc.id, "embed") await enqueue_stage(session, doc.id, "chunk") new_count += 1 + # 케이스 단위 commit (R4) — 이후 페이지 실패가 앞 케이스 전체 rollback 방지. + await session.commit() if page_all_dup: break # 등록일 역순 — 페이지 전체가 기존이면 이후 페이지도 기존 @@ -450,6 +456,8 @@ async def collect_kosha_guide(session, cap: int = _GUIDE_DAILY_CAP) -> int: await session.flush() await enqueue_stage(session, doc.id, "extract") ingested += 1 + # 항목 단위 commit (R4) — 다운로드 실패가 앞서 적재한 GUIDE 항목 전체 rollback 방지. + await session.commit() # silent cap 금지 — 잔량 가시화 (자동 점진 백필: 내일 cap 만큼 또 소화) logger.info(f"[kosha] GUIDE 신규/개정 {len(new_specs)}건 중 {ingested}건 ingest"