From 622d44a215608383beb1ed3fb9a3217396abb50c Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Wed, 29 Apr 2026 23:31:39 +0530 Subject: [PATCH] Fix: Prevent infinite loop in gap_analysis preload (#885) --- application/utils/gap_analysis.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/application/utils/gap_analysis.py b/application/utils/gap_analysis.py index 9e3dab04d..7a1bcdf8e 100644 --- a/application/utils/gap_analysis.py +++ b/application/utils/gap_analysis.py @@ -198,14 +198,25 @@ def calculate_a_to_b(sa: str, sb: str) -> bool: for sb in standards: if sa == sb: continue - waiting.append(f"{sa}->{sb}") + waiting.append((sa, sb)) + + MAX_RETRIES = 10 + retries = {pair: 0 for pair in waiting} + while len(waiting): - for sa in standards: - for sb in standards: - if sa == sb: - continue - if calculate_a_to_b(sa, sb): - waiting.remove(f"{sa}->{sb}") if f"{sa}->{sb}" in waiting else "" - print(f"calculating {len(waiting)} gap analyses") - time.sleep(30) + for pair in list(waiting): + sa, sb = pair + if calculate_a_to_b(sa, sb): + waiting.remove(pair) + else: + retries[pair] += 1 + if retries[pair] >= MAX_RETRIES: + print( + f"{sa}->{sb} reached max retries ({MAX_RETRIES}), dropping from waiting list" + ) + waiting.remove(pair) + + if waiting: + print(f"calculating {len(waiting)} gap analyses") + time.sleep(30) print("map analysis preloaded successfully")