Skip to content

Commit bdb6ee1

Browse files
authored
feat(api, cluster/backup): support backup tasks cancel (#137)
1 parent 70668bc commit bdb6ee1

File tree

6 files changed

+74
-5
lines changed

6 files changed

+74
-5
lines changed

apps/main/[3]cluster/[1]instances/[-2]_clusterId/[5]backup/components/BackupTable/index.tsx

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
} from '@/api/model'
1717
import {
1818
invalidateClusterBackups,
19+
useCancelClusterBackup,
1920
useDeleteClusterBackup,
2021
useQueryClusterBackups,
2122
} from '@/api/hooks/cluster'
@@ -122,9 +123,9 @@ function useTableColumn({ cluster }: { cluster: ClusterInfo }) {
122123
const clusterId = cluster.clusterId!
123124
const { t, i18n } = useI18n()
124125
const history = useHistory()
126+
const queryClient = useQueryClient()
125127

126128
const deleteBackup = useDeleteClusterBackup()
127-
const queryClient = useQueryClient()
128129
const deleteAction = useCallback(
129130
(backupId) =>
130131
deleteBackup.mutateAsync(
@@ -147,6 +148,29 @@ function useTableColumn({ cluster }: { cluster: ClusterInfo }) {
147148
[queryClient, deleteBackup.mutateAsync, clusterId]
148149
)
149150

151+
const cancelBackup = useCancelClusterBackup()
152+
const cancelAction = useCallback(
153+
(backupId) =>
154+
cancelBackup.mutateAsync(
155+
{
156+
payload: {
157+
backupId,
158+
clusterId,
159+
},
160+
options: {
161+
successMessage: t('cancel.message.success'),
162+
errorMessage: t('cancel.message.failed'),
163+
},
164+
},
165+
{
166+
onSettled() {
167+
return invalidateClusterBackups(queryClient, clusterId)
168+
},
169+
}
170+
),
171+
[queryClient, cancelBackup.mutateAsync, clusterId]
172+
)
173+
150174
const restoreAction = useCallback(
151175
(backup: ClusterBackupItem) => {
152176
history.push({
@@ -158,15 +182,16 @@ function useTableColumn({ cluster }: { cluster: ClusterInfo }) {
158182
)
159183

160184
return useMemo(
161-
() => getColumns(t, restoreAction, deleteAction),
162-
[i18n.language, deleteAction]
185+
() => getColumns(t, restoreAction, deleteAction, cancelAction),
186+
[i18n.language, deleteAction, cancelAction, restoreAction]
163187
)
164188
}
165189

166190
function getColumns(
167191
t: TFunction<''>,
168192
restoreAction: (backup: ClusterBackupItem) => any,
169-
deleteAction: (backupId: string) => any
193+
deleteAction: (backupId: string) => any,
194+
cancelAction: (backupId: string) => any
170195
): ProColumns<ClusterBackupItem>[] {
171196
return [
172197
{
@@ -280,8 +305,24 @@ function getColumns(
280305
const deleteDisabled =
281306
record.status !== BackupStatus.success &&
282307
record.status !== BackupStatus.failed
308+
const cancelDisabled =
309+
record.status !== BackupStatus.initializing &&
310+
record.status !== BackupStatus.processing
283311

284312
return [
313+
cancelDisabled ? null : (
314+
<IntlPopConfirm
315+
key="cancel"
316+
placement="topRight"
317+
title={t('cancel.confirm')}
318+
icon={<QuestionCircleOutlined />}
319+
onConfirm={async () => {
320+
await cancelAction(record.id!)
321+
}}
322+
>
323+
<a>{t('actions.cancel')}</a>
324+
</IntlPopConfirm>
325+
),
285326
restoreDisabled ? (
286327
<span className="disabled-text-btn" key="restore">
287328
{t('actions.restore')}

apps/main/[3]cluster/[1]instances/[-2]_clusterId/[5]backup/components/BackupTable/translations/en.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ delete:
44
message:
55
success: The backup files are deleted
66
failed: Failed to delete the backup files
7+
cancel:
8+
confirm: Are you sure you want to cancel this backup?
9+
message:
10+
success: The backup is canceled
11+
failed: Failed to cancel the backup
712
restore:
813
confirm: Are you sure you want to restore the cluster from this backup?
914
columns:
1015
actions: Actions
1116
actions:
1217
restore: Restore
1318
delete: Delete
19+
cancel: Cancel

apps/main/[3]cluster/[1]instances/[-2]_clusterId/[5]backup/components/BackupTable/translations/zh.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ delete:
44
message:
55
success: 备份文件删除成功
66
failed: 备份文件删除失败
7+
cancel:
8+
confirm: 确认取消该备份吗?
9+
message:
10+
success: 备份取消成功
11+
failed: 备份取消失败
712
restore:
813
confirm: 确认使用该备份恢复集群吗?
914
columns:
1015
actions: 操作
1116
actions:
1217
restore: 恢复
1318
delete: 删除
19+
cancel: 取消

external/api/swagger.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@
173173
"description": "cancel backup",
174174
"consumes": ["application/json"],
175175
"produces": ["application/json"],
176-
"tags": ["cancel cluster backup"],
176+
"tags": ["cluster backup"],
177177
"summary": "cancel backup",
178178
"parameters": [
179179
{

src/api/hooks/cluster.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
RequestBackupCreate,
88
RequestBackupRestore,
99
RequestBackupStrategyUpdate,
10+
RequestBackupCancel,
1011
RequestClusterCreate,
1112
RequestClusterDataReplicationCreate,
1213
RequestClusterDataReplicationUpdate,
@@ -384,6 +385,19 @@ export function useRestoreClusterBackup() {
384385
return useMutation(restoreClusterBackup)
385386
}
386387

388+
/**
389+
* Cancel a cluster backup task
390+
*/
391+
const cancelClusterBackup = ({
392+
payload,
393+
options,
394+
}: PayloadWithOptions<RequestBackupCancel>) =>
395+
APIS.ClusterBackups.backupsCancelPost(payload, options)
396+
397+
export function useCancelClusterBackup() {
398+
return useMutation(cancelClusterBackup)
399+
}
400+
387401
/**
388402
* Cluster Dashboard
389403
*/

src/api/model/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ClusterQueryClusterDetailResp,
1010
ClusterRestoreNewClusterReq,
1111
ClusterSaveBackupStrategyReq,
12+
ClusterCancelBackupReq,
1213
ClusterUpdateClusterParametersReq,
1314
ControllerCommonResult,
1415
ControllerResultWithPage,
@@ -102,6 +103,7 @@ export type UserLoginRequest = MessageLoginReq
102103
export type RequestBackupCreate = ClusterBackupClusterDataReq
103104
export type RequestBackupStrategyUpdate = ClusterSaveBackupStrategyReq
104105
export type RequestBackupRestore = ClusterRestoreNewClusterReq
106+
export type RequestBackupCancel = ClusterCancelBackupReq
105107
export type RequestTransportExport = MessageDataExportReq
106108
export type RequestTransportImport = MessageDataImportReq
107109
export type RequestClusterCreate = ClusterCreateClusterReq

0 commit comments

Comments
 (0)