@@ -671,7 +671,7 @@ func (cloud *CloudProvider) insertConstructedDisk(ctx context.Context, disk *com
671671 }
672672
673673 if filterErr := cloud .processDiskAlreadyExistErr (ctx , err , project , volKey , params , capacityRange , multiWriter , accessMode ); filterErr != nil {
674- return common .NewTemporaryError (codes .Unavailable , fmt .Errorf ("unknown error when polling the operation: %w" , err ))
674+ return common .NewTemporaryError (codes .Unavailable , fmt .Errorf ("unknown error when polling the operation: %w; filter error %v " , err , filterErr ))
675675 }
676676 return nil
677677}
@@ -1064,7 +1064,7 @@ func (cloud *CloudProvider) waitForZonalOp(ctx context.Context, project, opName
10641064 return wait .ExponentialBackoff (WaitForOpBackoff , func () (bool , error ) {
10651065 waitOp , err := cloud .service .ZoneOperations .Wait (project , zone , opName ).Context (ctx ).Do ()
10661066 // In case of service unavailable do not propogate the error so ExponentialBackoff will retry
1067- if err != nil && waitOp .HttpErrorStatusCode == 503 {
1067+ if err != nil && waitOp != nil && waitOp .HttpErrorStatusCode == 503 {
10681068 klog .Errorf ("WaitForZonalOp(op: %s, zone: %#v, err: %v) failed to poll the operation" , opName , zone , err )
10691069 return false , nil
10701070 }
@@ -1081,7 +1081,7 @@ func (cloud *CloudProvider) waitForRegionalOp(ctx context.Context, project, opNa
10811081 return wait .ExponentialBackoff (WaitForOpBackoff , func () (bool , error ) {
10821082 waitOp , err := cloud .service .RegionOperations .Wait (project , region , opName ).Context (ctx ).Do ()
10831083 // In case of service unavailable do not propogate the error so ExponentialBackoff will retry
1084- if err != nil && waitOp .HttpErrorStatusCode == 503 {
1084+ if err != nil && waitOp != nil && waitOp .HttpErrorStatusCode == 503 {
10851085 klog .Errorf ("WaitForRegionalOp(op: %s, region: %#v, err: %v) failed to poll the operation" , opName , region , err )
10861086 return false , nil
10871087 }
@@ -1090,6 +1090,10 @@ func (cloud *CloudProvider) waitForRegionalOp(ctx context.Context, project, opNa
10901090 return false , err
10911091 }
10921092 done , err := opIsDone (waitOp )
1093+ if err != nil && status .Code (err ) == codes .Unavailable {
1094+ klog .Errorf ("retriable error in op: %+v" , err )
1095+ return false , nil
1096+ }
10931097 return done , err
10941098 })
10951099}
@@ -1098,7 +1102,7 @@ func (cloud *CloudProvider) waitForGlobalOp(ctx context.Context, project, opName
10981102 return wait .ExponentialBackoff (WaitForOpBackoff , func () (bool , error ) {
10991103 waitOp , err := cloud .service .GlobalOperations .Wait (project , opName ).Context (ctx ).Do ()
11001104 // In case of service unavailable do not propogate the error so ExponentialBackoff will retry
1101- if err != nil && waitOp .HttpErrorStatusCode == 503 {
1105+ if err != nil && waitOp != nil && waitOp .HttpErrorStatusCode == 503 {
11021106 klog .Errorf ("WaitForGlobalOp(op: %s, err: %v) failed to poll the operation" , opName , err )
11031107 return false , nil
11041108 }
@@ -1198,6 +1202,7 @@ func codeForGCEOpError(err computev1.OperationErrorErrors) codes.Code {
11981202 "QUOTA_EXCEEDED" : codes .ResourceExhausted ,
11991203 "ZONE_RESOURCE_POOL_EXHAUSTED" : codes .Unavailable ,
12001204 "ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS" : codes .Unavailable ,
1205+ "INTERNAL_ERROR" : codes .Unavailable ,
12011206 "REGION_QUOTA_EXCEEDED" : codes .ResourceExhausted ,
12021207 "RATE_LIMIT_EXCEEDED" : codes .ResourceExhausted ,
12031208 "INVALID_USAGE" : codes .InvalidArgument ,
0 commit comments