Skip to content

Commit 647f525

Browse files
committed
fix(FR-1755): fix service validation message parsing and increase timeout (#4778)
Resolves #4742 ([FR-1755](https://lablup.atlassian.net/browse/FR-1755)) Backend.AI PR [#7119](lablup/backend.ai#7119) ## Summary - Fix `BackgroundTaskEvent.message` type from object to string to match actual API response - Add JSON parsing for message payload in all SSE event handlers (`onUpdated`, `onFailed`, `onTaskCancelled`, `onTaskFailed`) - Increase validation timeout from 10 seconds to 60 seconds for better reliability - Add early return handling for "Task started" message ## Test plan - [ ] Test model service validation flow - [ ] Verify SSE events are properly parsed and handled - [ ] Confirm validation completes within the new 60s timeout - [ ] Check error handling when validation fails [FR-1755]: https://lablup.atlassian.net/browse/FR-1755?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
1 parent d2addfb commit 647f525

File tree

1 file changed

+29
-20
lines changed

1 file changed

+29
-20
lines changed

react/src/components/ServiceValidationView.tsx

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ interface ServiceValidationModalProps {
3131
}
3232
type BackgroundTaskEvent = {
3333
task_id: string;
34-
message: { event: string; session_id: string };
34+
message: string;
3535
current_progress: number;
3636
total_progress: number;
3737
};
@@ -110,7 +110,7 @@ const ServiceValidationView: React.FC<ServiceValidationModalProps> = ({
110110
values.resource.accelerator > 0
111111
? {
112112
[values.resource.acceleratorType]:
113-
values.resource.accelerator,
113+
values.resource.accelerator.toString(),
114114
}
115115
: undefined),
116116
},
@@ -147,41 +147,50 @@ const ServiceValidationView: React.FC<ServiceValidationModalProps> = ({
147147
const timeoutId = setTimeout(() => {
148148
setValidationStatus('error');
149149
message.error(t('modelService.CannotValidateNow'));
150-
}, 10000);
150+
}, 60000);
151151

152152
const SSEEventHandlers: SSEEventHandlerTypes<BackgroundTaskEvent> = {
153153
onUpdated: async (data, controller) => {
154-
const msg = data.message;
155-
if (validationStatus === 'error') {
156-
clearTimeout(timeoutId);
157-
controller?.abort();
158-
} else if (
159-
['session_started', 'session_terminated'].includes(msg.event)
160-
) {
161-
const logs = await getLogs(msg.session_id);
162-
setContainerLogSummary(logs);
163-
clearTimeout(timeoutId);
164-
controller?.abort();
154+
try {
155+
setValidationStatus('processing');
156+
157+
const msg = JSON.parse(data.message);
158+
if (msg.event === 'session_cancelled') {
159+
setValidationStatus('error');
160+
message.error(t('modelService.CannotValidateNow'));
161+
controller?.abort();
162+
clearTimeout(timeoutId);
163+
} else if (
164+
msg.event === 'session_started' ||
165+
msg.event === 'session_terminated'
166+
) {
167+
const logs = await getLogs(msg.session_id);
168+
setContainerLogSummary(logs);
169+
}
170+
} catch {
171+
// ignore errors in log fetching
172+
return;
165173
}
166-
setValidationStatus('processing');
167174
},
168175
onDone: () => {
169176
setValidationStatus('finished');
170177
clearTimeout(timeoutId);
171178
},
172179
onFailed: async (data) => {
173-
const logs = await getLogs(data.message.session_id);
174-
setContainerLogSummary(logs);
180+
const logs = await getLogs(
181+
JSON.parse(data.message).session_id,
182+
).catch(() => undefined);
183+
logs ?? setContainerLogSummary(logs);
175184
setValidationStatus('error');
176-
throw new Error(data.message.event);
185+
throw new Error(JSON.parse(data.message).event);
177186
},
178187
onTaskCancelled: (data) => {
179188
setValidationStatus('error');
180-
throw new Error(data.message.event);
189+
throw new Error(JSON.parse(data.message).event);
181190
},
182191
onTaskFailed: (data) => {
183192
setValidationStatus('error');
184-
throw new Error(data.message.event);
193+
throw new Error(JSON.parse(data.message).event);
185194
},
186195
};
187196

0 commit comments

Comments
 (0)