diff --git a/OWNERS b/OWNERS index 2b1bdfb3..c024ec58 100644 --- a/OWNERS +++ b/OWNERS @@ -1,6 +1,8 @@ filters: "*": reviewers: - - wayblink + - huanghaoyuanhhy + - Thomas-HuWei approvers: - - wayblink \ No newline at end of file + - huanghaoyuanhhy + - Thomas-HuWei \ No newline at end of file diff --git a/core/backup_impl_create_backup.go b/core/backup_impl_create_backup.go index c433feda..eb2034d6 100644 --- a/core/backup_impl_create_backup.go +++ b/core/backup_impl_create_backup.go @@ -765,6 +765,8 @@ func (b *BackupContext) executeCreateBackup(ctx context.Context, request *backup if err != nil { backupInfo.StateCode = backuppb.BackupTaskStateCode_BACKUP_FAIL backupInfo.ErrorMessage = err.Error() + b.meta.UpdateBackup(backupInfo.Id, setStateCode(backuppb.BackupTaskStateCode_BACKUP_FAIL), + setErrorMessage(err.Error())) return err } log.Info("finish backup all collections", diff --git a/core/backup_impl_restore_backup.go b/core/backup_impl_restore_backup.go index 50bfc311..31333eb2 100644 --- a/core/backup_impl_restore_backup.go +++ b/core/backup_impl_restore_backup.go @@ -372,12 +372,18 @@ func (b *BackupContext) executeRestoreBackupTask(ctx context.Context, backupBuck job := func(ctx context.Context) error { endTask, err := b.executeRestoreCollectionTask(ctx, backupBucketName, backupPath, restoreCollectionTaskClone, id) if err != nil { + b.meta.UpdateRestoreTask(id, setRestoreStateCode(backuppb.RestoreTaskStateCode_FAIL), + setRestoreErrorMessage(endTask.ErrorMessage)) + b.meta.UpdateRestoreCollectionTask(id, endTask.Id, + setRestoreCollectionStateCode(backuppb.RestoreTaskStateCode_FAIL), + setRestoreCollectionErrorMessage(endTask.ErrorMessage)) log.Error("executeRestoreCollectionTask failed", zap.String("TargetDBName", restoreCollectionTaskClone.GetTargetDbName()), zap.String("TargetCollectionName", restoreCollectionTaskClone.GetTargetCollectionName()), zap.Error(err)) return err } + restoreCollectionTaskClone.StateCode = backuppb.RestoreTaskStateCode_SUCCESS log.Info("finish restore collection", zap.String("db_name", restoreCollectionTaskClone.GetTargetDbName()), diff --git a/core/backup_meta_manager.go b/core/backup_meta_manager.go index a2e10f2d..612a0882 100644 --- a/core/backup_meta_manager.go +++ b/core/backup_meta_manager.go @@ -569,3 +569,33 @@ func (meta *MetaManager) GetRestoreTask(taskID string) *backuppb.RestoreBackupTa defer meta.mu.Unlock() return meta.restoreTasks[taskID] } + +func (meta *MetaManager) UpdateRestoreCollectionTask(restoreID string, restoreCollectionId string, opts ...RestoreCollectionTaskOpt) { + meta.mu.Lock() + defer meta.mu.Unlock() + restoreBackup := meta.restoreTasks[restoreID] + tasks := restoreBackup.GetCollectionRestoreTasks() + for i := 0; i < len(tasks); i++ { + if tasks[i].Id == restoreCollectionId { + cBackup := proto.Clone(tasks[i]).(*backuppb.RestoreCollectionTask) + for _, opt := range opts { + opt(cBackup) + } + tasks[i] = cBackup + } + } +} + +type RestoreCollectionTaskOpt func(task *backuppb.RestoreCollectionTask) + +func setRestoreCollectionStateCode(stateCode backuppb.RestoreTaskStateCode) RestoreCollectionTaskOpt { + return func(task *backuppb.RestoreCollectionTask) { + task.StateCode = stateCode + } +} + +func setRestoreCollectionErrorMessage(errorMessage string) RestoreCollectionTaskOpt { + return func(task *backuppb.RestoreCollectionTask) { + task.ErrorMessage = errorMessage + } +} diff --git a/core/backup_server.go b/core/backup_server.go index ddb11225..0d9c6a86 100644 --- a/core/backup_server.go +++ b/core/backup_server.go @@ -264,6 +264,12 @@ func (h *Handlers) handleGetRestore(c *gin.Context) (interface{}, error) { if h.backupContext.params.HTTPCfg.SimpleResponse { resp = SimpleRestoreResponse(resp) } + log.Info("End to GetRestoreStateRequest", + zap.Any("code", resp.GetCode()), + zap.String("msg", resp.GetMsg()), + zap.Any("progress", resp.GetData().Progress), + zap.Any("stateCode", resp.GetData().StateCode), + ) c.JSON(http.StatusOK, resp) return nil, nil }