From f4953d5ff851ea1a064d9e1876ca3735a0537856 Mon Sep 17 00:00:00 2001 From: James Lu Date: Tue, 14 Jan 2025 11:23:38 +0800 Subject: [PATCH] fix(backup): return null if backup volume is not found ref: longhorn/longhorn 5411, 9987, 10025 Signed-off-by: James Lu --- csi/controller_server.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/csi/controller_server.go b/csi/controller_server.go index 6b65af348e..18e4351dbe 100644 --- a/csi/controller_server.go +++ b/csi/controller_server.go @@ -127,6 +127,9 @@ func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol backupVolume, backupName := sourceVolumeName, id bv, err := cs.apiClient.BackupVolume.ById(backupVolume) if err != nil { + return nil, status.Errorf(codes.Internal, "failed to retrieve backup volume %s: %v", backupVolume, err) + } + if bv == nil { return nil, status.Errorf(codes.NotFound, "failed to restore CSI snapshot %s backup volume %s unavailable", snapshot.SnapshotId, backupVolume) } @@ -1182,7 +1185,7 @@ func (cs *ControllerServer) waitForBackupControllerSync(volumeName, snapshotName if err != nil { return nil, err } - if backup.SnapshotCreated != "" { + if backup != nil && backup.SnapshotCreated != "" { // The backup controller sets the snapshot creation time at first sync. If we do not wait to return until // this is done, we may see timestamp related errors in csi-snapshotter logs. return backup, nil @@ -1207,7 +1210,7 @@ func (cs *ControllerServer) waitForBackupControllerSync(volumeName, snapshotName if err != nil { return nil, err } - if backup.SnapshotCreated != "" { + if backup != nil && backup.SnapshotCreated != "" { return backup, nil } } @@ -1224,6 +1227,10 @@ func (cs *ControllerServer) getBackup(volumeName, snapshotName string) (*longhor if err != nil { return nil, status.Error(codes.Internal, err.Error()) } + if backupVolume == nil { + return nil, nil + } + backupListOutput, err := cs.apiClient.BackupVolume.ActionBackupList(backupVolume) if err != nil { return nil, status.Error(codes.Internal, err.Error())