Skip to content

Commit ff11ca5

Browse files
committed
change GetDisk error reporting to temporary in CreateVolume codepath
1 parent 57fc063 commit ff11ca5

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

pkg/gce-cloud-provider/compute/gce-compute.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func (cloud *CloudProvider) insertRegionalDisk(
560560
if IsGCEError(err, "alreadyExists") {
561561
disk, err := cloud.GetDisk(ctx, project, volKey, gceAPIVersion)
562562
if err != nil {
563-
return err
563+
return status.Error(codes.Unavailable, err.Error())
564564
}
565565
err = cloud.ValidateExistingDisk(ctx, disk, params,
566566
int64(capacityRange.GetRequiredBytes()),
@@ -572,16 +572,18 @@ func (cloud *CloudProvider) insertRegionalDisk(
572572
klog.Warningf("GCE PD %s already exists, reusing", volKey.Name)
573573
return nil
574574
}
575-
return status.Error(codes.Internal, fmt.Sprintf("unknown Insert disk error: %v", err.Error()))
575+
return fmt.Errorf("unknown Insert Regional disk error: %w", err)
576576
}
577577
klog.V(5).Infof("InsertDisk operation %s for disk %s", opName, diskToCreate.Name)
578578

579579
err = cloud.waitForRegionalOp(ctx, project, opName, volKey.Region)
580+
// failed to wait for Op to finish, however, the Op possibly is still running as expected
581+
// the error code returned should be non-final
580582
if err != nil {
581583
if IsGCEError(err, "alreadyExists") {
582584
disk, err := cloud.GetDisk(ctx, project, volKey, gceAPIVersion)
583585
if err != nil {
584-
return err
586+
return status.Errorf(codes.Unavailable, "error when getting disk: %v", err.Error())
585587
}
586588
err = cloud.ValidateExistingDisk(ctx, disk, params,
587589
int64(capacityRange.GetRequiredBytes()),
@@ -593,7 +595,7 @@ func (cloud *CloudProvider) insertRegionalDisk(
593595
klog.Warningf("GCE PD %s already exists after wait, reusing", volKey.Name)
594596
return nil
595597
}
596-
return fmt.Errorf("unknown Insert disk operation error: %w", err)
598+
return status.Errorf(codes.Unavailable, "unknown error when polling the operation: %v", err.Error())
597599
}
598600
return nil
599601
}
@@ -695,7 +697,7 @@ func (cloud *CloudProvider) insertZonalDisk(
695697
if IsGCEError(err, "alreadyExists") {
696698
disk, err := cloud.GetDisk(ctx, project, volKey, gceAPIVersion)
697699
if err != nil {
698-
return err
700+
return status.Error(codes.Unavailable, err.Error())
699701
}
700702
err = cloud.ValidateExistingDisk(ctx, disk, params,
701703
int64(capacityRange.GetRequiredBytes()),
@@ -714,10 +716,12 @@ func (cloud *CloudProvider) insertZonalDisk(
714716
err = cloud.waitForZonalOp(ctx, project, opName, volKey.Zone)
715717

716718
if err != nil {
719+
// failed to wait for Op to finish, however, the Op possibly is still running as expected
720+
// the error code returned should be non-final
717721
if IsGCEError(err, "alreadyExists") {
718722
disk, err := cloud.GetDisk(ctx, project, volKey, gceAPIVersion)
719723
if err != nil {
720-
return err
724+
return status.Errorf(codes.Unavailable, "error when getting disk: %v", err.Error())
721725
}
722726
err = cloud.ValidateExistingDisk(ctx, disk, params,
723727
int64(capacityRange.GetRequiredBytes()),
@@ -729,7 +733,7 @@ func (cloud *CloudProvider) insertZonalDisk(
729733
klog.Warningf("GCE PD %s already exists after wait, reusing", volKey.Name)
730734
return nil
731735
}
732-
return fmt.Errorf("unknown Insert disk operation error: %w", err)
736+
return status.Errorf(codes.Unavailable, "unknown error when polling the operation: %v", err.Error())
733737
}
734738
return nil
735739
}

pkg/gce-pd-csi-driver/controller.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ func (gceCS *GCEControllerServer) CreateVolume(ctx context.Context, req *csi.Cre
324324
existingDisk, err := gceCS.CloudProvider.GetDisk(ctx, gceCS.CloudProvider.GetDefaultProject(), volKey, gceAPIVersion)
325325
if err != nil {
326326
if !gce.IsGCEError(err, "notFound") {
327-
return nil, common.LoggedError("CreateVolume, failed to getDisk when validating: ", err)
327+
return nil, common.LoggedError("CreateVolume, failed to getDisk when validating: ", status.Error(codes.Unavailable, err.Error()))
328328
}
329329
}
330330
if err == nil {
@@ -1878,7 +1878,7 @@ func createRegionalDisk(ctx context.Context, cloudProvider gce.GCECompute, name
18781878
}
18791879
disk, err := cloudProvider.GetDisk(ctx, project, meta.RegionalKey(name, region), gceAPIVersion)
18801880
if err != nil {
1881-
return nil, fmt.Errorf("failed to get disk after creating regional disk: %w", err)
1881+
return nil, status.Errorf(codes.Unavailable, "failed to get disk after creating regional disk: %v", err.Error())
18821882
}
18831883
return disk, nil
18841884
}
@@ -1900,7 +1900,7 @@ func createSingleZoneDisk(ctx context.Context, cloudProvider gce.GCECompute, nam
19001900
}
19011901
disk, err := cloudProvider.GetDisk(ctx, project, meta.ZonalKey(name, diskZone), gceAPIVersion)
19021902
if err != nil {
1903-
return nil, err
1903+
return nil, status.Errorf(codes.Unavailable, "failed to get disk after creating zonal disk: %v", err.Error())
19041904
}
19051905
return disk, nil
19061906
}

0 commit comments

Comments
 (0)