Skip to content

Commit 121e764

Browse files
authored
fix(orchestrator):improve abort instance error handling (#1368)
Signed-off-by: Lior Soffer <liorsoffer1@gmail.com>
1 parent 7d15bdf commit 121e764

2 files changed

Lines changed: 30 additions & 14 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@red-hat-developer-hub/backstage-plugin-orchestrator-backend': patch
3+
---
4+
5+
improve abort instance error handling

workspaces/orchestrator/plugins/orchestrator/src/components/WorkflowInstancePage/WorkflowInstancePage.tsx

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import React, { useRef, useState } from 'react';
17+
import { useCallback, useRef, useState } from 'react';
1818
import { useNavigate } from 'react-router-dom';
1919
import { useAsync } from 'react-use';
2020

@@ -215,14 +215,13 @@ export const WorkflowInstancePage = () => {
215215
const [isAbortConfirmationDialogOpen, setIsAbortConfirmationDialogOpen] =
216216
useState(false);
217217

218-
const [isAborting, setIsAborting] = React.useState(false);
219-
const [isAbortSnackbarOpen, setIsAbortSnackbarOpen] = React.useState(false);
220-
const [abortError, setAbortError] = React.useState('');
218+
const [isAborting, setIsAborting] = useState(false);
219+
const [isAbortSnackbarOpen, setIsAbortSnackbarOpen] = useState(false);
220+
const [abortError, setAbortError] = useState('');
221221

222-
const [isRetrigger, setIsRetrigger] = React.useState(false);
223-
const [isRetriggerSnackbarOpen, setIsRetriggerSnackbarOpen] =
224-
React.useState(false);
225-
const [retriggerError, setRetriggerError] = React.useState('');
222+
const [isRetrigger, setIsRetrigger] = useState(false);
223+
const [isRetriggerSnackbarOpen, setIsRetriggerSnackbarOpen] = useState(false);
224+
const [retriggerError, setRetriggerError] = useState('');
226225

227226
const handleAbortBarClose = () => {
228227
setIsAbortSnackbarOpen(false);
@@ -231,7 +230,7 @@ export const WorkflowInstancePage = () => {
231230
setIsRetriggerSnackbarOpen(false);
232231
};
233232

234-
const fetchInstance = React.useCallback(async () => {
233+
const fetchInstance = useCallback(async () => {
235234
if (!instanceId) {
236235
return undefined;
237236
}
@@ -283,28 +282,40 @@ export const WorkflowInstancePage = () => {
283282
value?.state === ProcessInstanceStatusDTO.Aborted ||
284283
value?.state === ProcessInstanceStatusDTO.Error;
285284

286-
const toggleAbortConfirmationDialog = React.useCallback(() => {
285+
const toggleAbortConfirmationDialog = useCallback(() => {
287286
setIsAbortConfirmationDialogOpen(prev => !prev);
288287
}, []);
289288

290-
const handleAbort = React.useCallback(async () => {
289+
const handleAbort = useCallback(async () => {
291290
if (value) {
292291
setIsAborting(true);
293292

294293
try {
295294
await orchestratorApi.abortWorkflowInstance(value.id);
296295
restart();
297296
} catch (e) {
298-
setAbortError(`Abort failed: ${(e as Error).message}`);
297+
const res = await fetchInstance();
298+
if (res?.state === ProcessInstanceStatusDTO.Completed) {
299+
setAbortError('Abort failed: Run has already been completed.');
300+
restart();
301+
} else {
302+
setAbortError(`Abort failed: ${(e as Error).message}`);
303+
}
299304
setIsAbortSnackbarOpen(true);
300305
} finally {
301306
setIsAborting(false);
302307
toggleAbortConfirmationDialog();
303308
}
304309
}
305-
}, [orchestratorApi, restart, value, toggleAbortConfirmationDialog]);
310+
}, [
311+
orchestratorApi,
312+
restart,
313+
value,
314+
toggleAbortConfirmationDialog,
315+
fetchInstance,
316+
]);
306317

307-
const handleRerun = React.useCallback(() => {
318+
const handleRerun = useCallback(() => {
308319
if (!value) {
309320
return;
310321
}

0 commit comments

Comments
 (0)