diff options
author | Navan Chauhan <navanchauhan@gmail.com> | 2025-04-28 00:10:57 -0600 |
---|---|---|
committer | Navan Chauhan <navanchauhan@gmail.com> | 2025-04-28 00:10:57 -0600 |
commit | 96715ca3ce3817690ac7e4db3fee6062089956c1 (patch) | |
tree | 0633718c25b89c8ad0b510d34e667f6448eb6142 /server/api/bids.py | |
parent | d1c1844f6e7a98bf8d593c810afa44fbfdbd8dc1 (diff) |
WAL & retry
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 |