Skip to content

Commit ce567f5

Browse files
committed
[FIX:SDK] Health check now parses pipeline status on 200 responses
Previously the PipelineStatus check was unreachable dead code — a 200 returned immediately without parsing the body. Now on 200 we parse the session response and check the actual pipeline state: RUNNING succeeds, terminal states (FAILED, ERROR, STOPPED) raise immediately, and pending states continue polling.
1 parent 49e10eb commit ce567f5

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

eyepop/compute/status.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33

44
import aiohttp
55

6-
from eyepop.compute.context import ComputeContext
6+
from eyepop.compute.context import ComputeContext, PipelineStatus
7+
from eyepop.compute.responses import ComputeApiSessionResponse
78
from eyepop.exceptions import ComputeHealthCheckException
89

910
log = logging.getLogger("eyepop.compute")
1011

12+
_TERMINAL_STATES = {PipelineStatus.FAILED, PipelineStatus.ERROR, PipelineStatus.STOPPED}
13+
1114

1215
async def wait_for_session(
1316
compute_config: ComputeContext, client_session: aiohttp.ClientSession
@@ -39,25 +42,40 @@ async def wait_for_session(
3942
attempt += 1
4043
try:
4144
async with client_session.get(health_url, headers=headers) as response:
42-
log.debug(f"GET /health - status: {response.status} (attempt {attempt})")
45+
if response.status != 200:
46+
last_message = f"HTTP {response.status}"
47+
log.debug(f"GET /health - status: {response.status} (attempt {attempt})")
48+
await asyncio.sleep(interval)
49+
continue
50+
51+
session_response = ComputeApiSessionResponse(**(await response.json()))
52+
status = session_response.session_status
53+
log.debug(f"GET /health - status: 200, pipeline: {status.value} (attempt {attempt})")
4354

44-
if response.status == 200:
55+
if status == PipelineStatus.RUNNING:
4556
return True
4657

47-
last_message = f"Health check returned status {response.status}"
58+
if status in _TERMINAL_STATES:
59+
raise ComputeHealthCheckException(
60+
f"Session in terminal state: {status.value}. "
61+
f"Message: {session_response.session_message}",
62+
session_endpoint=compute_config.session_endpoint,
63+
last_status=status.value,
64+
)
65+
66+
last_message = f"Pipeline status: {status.value}"
4867
await asyncio.sleep(interval)
49-
continue
5068

5169
except ComputeHealthCheckException:
5270
raise
5371
except aiohttp.ClientResponseError as e:
5472
last_message = f"HTTP {e.status}: {e.message}"
5573
log.debug(f"GET /health - error: {last_message} (attempt {attempt})")
74+
await asyncio.sleep(interval)
5675
except Exception as e:
5776
last_message = str(e)
5877
log.debug(f"GET /health - error: {last_message} (attempt {attempt})")
59-
60-
await asyncio.sleep(interval)
78+
await asyncio.sleep(interval)
6179

6280
log.error(f"Session timed out after {timeout}s. Last message: {last_message}")
6381
raise TimeoutError(f"Session timed out after {timeout}s. Last message: {last_message}")

0 commit comments

Comments
 (0)