diff options
Diffstat (limited to 'server/api/bids.py')
-rw-r--r-- | server/api/bids.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/server/api/bids.py b/server/api/bids.py index c08c74b..c9d2ebd 100644 --- a/server/api/bids.py +++ b/server/api/bids.py @@ -1,5 +1,7 @@ from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session +from sqlalchemy.exc import OperationalError +import time from db import SessionLocal from models.bid import Bid as BidModel from models.auth import User @@ -111,6 +113,23 @@ def submit_bid(bid: BidCreate, db: Session = Depends(get_db)): pnl=None, ) db.add(db_bid) - db.commit() + max_retries = 3 + + for attempt in range(max_retries): + try: + db.commit() + break + except OperationalError as e: + if "database is locked" in str(e).lower(): + if attempt < max_retries - 1: + time.sleep(2) + continue + else: + raise HTTPException( + status_code=500, + detail="Database is busy. Please try again later.", + ) + else: + raise db.refresh(db_bid) return db_bid |