aboutsummaryrefslogtreecommitdiff
path: root/server/services/get_data.py
diff options
context:
space:
mode:
authorNavan Chauhan <navanchauhan@gmail.com>2025-04-28 00:13:49 -0600
committerNavan Chauhan <navanchauhan@gmail.com>2025-04-28 00:13:49 -0600
commit6ddbe77958db1f97ea64ba650a49fa47888d3f40 (patch)
treea5c46b535079d44dfb3c8c512e20fefaed0e8a1b /server/services/get_data.py
parenta5818d5b353aa9d9607e77d9d2a46abd8da09bc6 (diff)
add retry for db
Diffstat (limited to 'server/services/get_data.py')
-rw-r--r--server/services/get_data.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/server/services/get_data.py b/server/services/get_data.py
index 3014ea1..fbbf12f 100644
--- a/server/services/get_data.py
+++ b/server/services/get_data.py
@@ -4,6 +4,8 @@ from db import SessionLocal
from models.market import MarketDataDB
from gridstatus import ISONE, MISO, NYISO
from typing import Dict, Type
+from sqlalchemy.exc import OperationalError
+import time
MARKET_CLASSES: Dict[str, Type] = {
"ISONE": ISONE,
@@ -108,7 +110,21 @@ def update_market_data():
)
db.add(entry)
- 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 Exception("Database is locked, and retries exhausted.")
+ else:
+ raise e
+
db.close()