Skip to content

Commit 4ddf08f

Browse files
authored
Merge pull request #125 from djedi/fix/session-rollback-on-exception
fix: rollback db session on exception to prevent cascade errors
2 parents 471515c + 426740d commit 4ddf08f

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

app/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ def create_all(self):
6060
@app.teardown_appcontext
6161
def shutdown_session(exception=None):
6262
"""Remove the database session at the end of each request."""
63+
if exception:
64+
# Rollback the session if there was an exception to clear the failed state
65+
db_session.rollback()
6366
db_session.remove()
6467

6568

app/routes.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
import re
55
import time
66
import asyncio
7+
import logging
78
from uuid import uuid4
89
import frontmatter
910
import datetime
1011
import httpx
12+
13+
logger = logging.getLogger(__name__)
1114
from dateutil import rrule, tz
1215
from urllib.parse import urlparse, parse_qs, quote
1316

@@ -2379,7 +2382,13 @@ async def sse_stream():
23792382
if not username:
23802383
abort(401)
23812384

2382-
user = User.query.filter_by(username=username.lower()).first()
2385+
try:
2386+
user = User.query.filter_by(username=username.lower()).first()
2387+
except Exception as e:
2388+
# Rollback any failed transaction state before aborting
2389+
logger.error(f"Database error in SSE stream: {e}")
2390+
db.session.rollback()
2391+
abort(500)
23832392

23842393
if not user:
23852394
abort(400)

0 commit comments

Comments
 (0)