Spaces:
Running
Running
fix: resolve InFailedSqlTransaction by adding db.rollback() in background task and adding detailed error logging
Browse files
app/services/analysis_service.py
CHANGED
|
@@ -59,7 +59,14 @@ class AnalysisService:
|
|
| 59 |
try:
|
| 60 |
# 1. Fetch papers from DB
|
| 61 |
paper_repo = PaperRepository(db)
|
| 62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
docs = []
|
| 65 |
for p in db_papers:
|
|
@@ -100,7 +107,14 @@ class AnalysisService:
|
|
| 100 |
db.commit()
|
| 101 |
|
| 102 |
except Exception as e:
|
|
|
|
| 103 |
from app.core.logging import logger
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
try:
|
| 60 |
# 1. Fetch papers from DB
|
| 61 |
paper_repo = PaperRepository(db)
|
| 62 |
+
paper_uuids = []
|
| 63 |
+
for pid in request.paper_ids:
|
| 64 |
+
try:
|
| 65 |
+
paper_uuids.append(UUID(pid) if isinstance(pid, str) else pid)
|
| 66 |
+
except ValueError:
|
| 67 |
+
continue
|
| 68 |
+
|
| 69 |
+
db_papers = [paper_repo.get_by_id(pid) for pid in paper_uuids]
|
| 70 |
|
| 71 |
docs = []
|
| 72 |
for p in db_papers:
|
|
|
|
| 107 |
db.commit()
|
| 108 |
|
| 109 |
except Exception as e:
|
| 110 |
+
db.rollback() # CLEAN TRANSACTION
|
| 111 |
from app.core.logging import logger
|
| 112 |
+
import traceback
|
| 113 |
+
logger.error(f"Background analysis error for {analysis_id}: {str(e)}")
|
| 114 |
+
logger.error(traceback.format_exc())
|
| 115 |
+
try:
|
| 116 |
+
self.complete_analysis(UUID(analysis_id), status="FAILED")
|
| 117 |
+
db.commit()
|
| 118 |
+
except Exception as final_err:
|
| 119 |
+
logger.error(f"Failed to even mark analysis as FAILED: {final_err}")
|
| 120 |
+
db.rollback()
|