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 | |
parent | d1c1844f6e7a98bf8d593c810afa44fbfdbd8dc1 (diff) |
WAL & retry
-rw-r--r-- | server/api/bids.py | 21 | ||||
-rw-r--r-- | server/db.py | 8 |
2 files changed, 26 insertions, 3 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 diff --git a/server/db.py b/server/db.py index a73d08f..221d240 100644 --- a/server/db.py +++ b/server/db.py @@ -1,9 +1,13 @@ -from sqlalchemy import create_engine +from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker, declarative_base # SQLite DB DATABASE_URL = "sqlite:///./virtual_energy.db" -engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) +engine = create_engine( + DATABASE_URL, connect_args={"check_same_thread": False, "timeout": 30} +) +with engine.connect() as conn: + conn.execute(text("PRAGMA journal_mode=WAL;")) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() |