@@ -670,7 +670,7 @@ func (cloud *CloudProvider) insertConstructedDisk(ctx context.Context, disk *com
670670 }
671671
672672 if filterErr := cloud .processDiskAlreadyExistErr (ctx , err , project , volKey , params , capacityRange , multiWriter , accessMode ); filterErr != nil {
673- return common .NewTemporaryError (codes .Unavailable , fmt .Errorf ("unknown error when polling the operation: %w" , err ))
673+ return common .NewTemporaryError (codes .Unavailable , fmt .Errorf ("unknown error when polling the operation: %w; filter error %v " , err , filterErr ))
674674 }
675675 return nil
676676}
@@ -1063,7 +1063,7 @@ func (cloud *CloudProvider) waitForZonalOp(ctx context.Context, project, opName
10631063 return wait .ExponentialBackoff (WaitForOpBackoff , func () (bool , error ) {
10641064 waitOp , err := cloud .service .ZoneOperations .Wait (project , zone , opName ).Context (ctx ).Do ()
10651065 // In case of service unavailable do not propogate the error so ExponentialBackoff will retry
1066- if err != nil && waitOp .HttpErrorStatusCode == 503 {
1066+ if err != nil && waitOp != nil && waitOp .HttpErrorStatusCode == 503 {
10671067 klog .Errorf ("WaitForZonalOp(op: %s, zone: %#v, err: %v) failed to poll the operation" , opName , zone , err )
10681068 return false , nil
10691069 }
@@ -1080,7 +1080,7 @@ func (cloud *CloudProvider) waitForRegionalOp(ctx context.Context, project, opNa
10801080 return wait .ExponentialBackoff (WaitForOpBackoff , func () (bool , error ) {
10811081 waitOp , err := cloud .service .RegionOperations .Wait (project , region , opName ).Context (ctx ).Do ()
10821082 // In case of service unavailable do not propogate the error so ExponentialBackoff will retry
1083- if err != nil && waitOp .HttpErrorStatusCode == 503 {
1083+ if err != nil && waitOp != nil && waitOp .HttpErrorStatusCode == 503 {
10841084 klog .Errorf ("WaitForRegionalOp(op: %s, region: %#v, err: %v) failed to poll the operation" , opName , region , err )
10851085 return false , nil
10861086 }
@@ -1089,6 +1089,10 @@ func (cloud *CloudProvider) waitForRegionalOp(ctx context.Context, project, opNa
10891089 return false , err
10901090 }
10911091 done , err := opIsDone (waitOp )
1092+ if err != nil && status .Code (err ) == codes .Unavailable {
1093+ klog .Errorf ("retriable error in op: %+v" , err )
1094+ return false , nil
1095+ }
10921096 return done , err
10931097 })
10941098}
@@ -1097,7 +1101,7 @@ func (cloud *CloudProvider) waitForGlobalOp(ctx context.Context, project, opName
10971101 return wait .ExponentialBackoff (WaitForOpBackoff , func () (bool , error ) {
10981102 waitOp , err := cloud .service .GlobalOperations .Wait (project , opName ).Context (ctx ).Do ()
10991103 // In case of service unavailable do not propogate the error so ExponentialBackoff will retry
1100- if err != nil && waitOp .HttpErrorStatusCode == 503 {
1104+ if err != nil && waitOp != nil && waitOp .HttpErrorStatusCode == 503 {
11011105 klog .Errorf ("WaitForGlobalOp(op: %s, err: %v) failed to poll the operation" , opName , err )
11021106 return false , nil
11031107 }
@@ -1197,6 +1201,7 @@ func codeForGCEOpError(err computev1.OperationErrorErrors) codes.Code {
11971201 "QUOTA_EXCEEDED" : codes .ResourceExhausted ,
11981202 "ZONE_RESOURCE_POOL_EXHAUSTED" : codes .Unavailable ,
11991203 "ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS" : codes .Unavailable ,
1204+ "INTERNAL_ERROR" : codes .Unavailable ,
12001205 "REGION_QUOTA_EXCEEDED" : codes .ResourceExhausted ,
12011206 "RATE_LIMIT_EXCEEDED" : codes .ResourceExhausted ,
12021207 "INVALID_USAGE" : codes .InvalidArgument ,
0 commit comments