Skip to content

Commit 91a2bf8

Browse files
committed
Add DB readiness checks and error handling to engagement tasks
Signed-off-by: Akshat Baranwal <kysuakshat23@gmail.com>
1 parent 91731ac commit 91a2bf8

File tree

1 file changed

+32
-0
lines changed
  • augur/tasks/contributors_engagement

1 file changed

+32
-0
lines changed

augur/tasks/contributors_engagement/utils.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,23 @@ def list_queries(self) -> List[str]:
7575
"""List all available query names"""
7676
return list(self._queries.keys())
7777

78+
import time
79+
80+
def wait_for_db_ready(retries=10, delay=3, logger=None):
81+
for attempt in range(retries):
82+
try:
83+
with get_session() as session:
84+
session.execute(text("SELECT 1"))
85+
if logger:
86+
logger.info("Database is ready.")
87+
return True
88+
except Exception as e:
89+
if logger:
90+
logger.warning(f"Database not ready (attempt {attempt+1}/{retries}): {e}")
91+
time.sleep(delay)
92+
if logger:
93+
logger.error("Database not ready after retries.")
94+
return False
7895

7996
# Initialize global query loader
8097
import pathlib
@@ -97,6 +114,11 @@ def get_d0_engagement_data(repo_id: int, logger: logging.Logger, full_collection
97114

98115
logger.info(f"Executing D0 engagement query for repo_id: {repo_id} (full_collection: {full_collection})")
99116

117+
# Wait for DB to be ready before running the query
118+
if not wait_for_db_ready(logger=logger):
119+
logger.error("Database not ready, aborting D0 engagement query.")
120+
return []
121+
100122
# Get the base query
101123
base_query = query_loader.get_query('d0_engagement_query')
102124

@@ -134,6 +156,11 @@ def get_d1_engagement_data(repo_id: int, logger: logging.Logger, full_collection
134156

135157
logger.info(f"Executing D1 engagement query for repo_id: {repo_id} (full_collection: {full_collection})")
136158

159+
# Wait for DB to be ready before running the query
160+
if not wait_for_db_ready(logger=logger):
161+
logger.error("Database not ready, aborting D0 engagement query.")
162+
return []
163+
137164
# Get the base query
138165
base_query = query_loader.get_query('d1_engagement_query')
139166

@@ -171,6 +198,11 @@ def get_d2_engagement_data(repo_id: int, logger: logging.Logger, full_collection
171198

172199
logger.info(f"Executing D2 engagement query for repo_id: {repo_id} (full_collection: {full_collection})")
173200

201+
# Wait for DB to be ready before running the query
202+
if not wait_for_db_ready(logger=logger):
203+
logger.error("Database not ready, aborting D0 engagement query.")
204+
return []
205+
174206
# Get the base query
175207
base_query = query_loader.get_query('d2_engagement_query')
176208

0 commit comments

Comments
 (0)