diff --git a/packages/engine/src/lib/services/progress.service.ts b/packages/engine/src/lib/services/progress.service.ts index 99fc412fd1..332b33ba98 100644 --- a/packages/engine/src/lib/services/progress.service.ts +++ b/packages/engine/src/lib/services/progress.service.ts @@ -107,9 +107,15 @@ const sendUpdateRunRequest = async (flowRunId: FlowRunId): Promise => { } as BodyAccessKeyRequest, { retries: MAX_RETRIES, - retryCondition: (error: AxiosError) => { + retryCondition: async (error: AxiosError) => { throwIfExecutionTimeExceeded(); - return isRetryableError(error); + + if (!isRetryableError(error)) { + return false; + } + + await updateRequestBody(request, error); + return true; }, retryDelay: (retryCount: number) => (retryCount + 1) * 200, // 200ms, 400ms, 600ms }, @@ -129,6 +135,22 @@ const sendUpdateRunRequest = async (flowRunId: FlowRunId): Promise => { logger.debug(`Progress update request for ${flowRunId} took ${duration}ms`); }; +async function updateRequestBody( + request: UpdateRunProgressRequest, + error: AxiosError, +): Promise { + try { + if (error.config) { + const newBodyAccessKey = await saveRequestBody(request); + error.config.data = JSON.stringify({ + bodyAccessKey: newBodyAccessKey, + }); + } + } catch (e) { + logger.info('Failed to update progress request body.', e); + } +} + type UpdateStepProgressParams = { engineConstants: EngineConstants; flowExecutorContext: FlowExecutorContext;