@@ -101,23 +101,10 @@ func (i *Instances) InstanceShutdownByProviderID(ctx context.Context, providerID
101
101
defer responseBody .Body .Close ()
102
102
}
103
103
if err != nil {
104
- if err == client .ErrInstanceNotFound {
105
- attempt , ok := i .nodeShutdown .Load (providerID )
106
- if ! ok {
107
- attempt = 1
108
- i .nodeShutdown .Store (providerID , attempt )
109
-
110
- return false , err
111
- }
112
- if attempt .(int ) >= 3 {
113
-
114
- return true , nil
115
- }
116
- intAttempt := attempt .(int )
117
- i .nodeShutdown .Store (providerID , (intAttempt + 1 ))
118
-
119
- return false , err
104
+ if errors .Is (err , client .ErrInstanceNotFound ) {
105
+ return i .handleInstanceNotFoundErr (providerID , err )
120
106
}
107
+
121
108
return false , fmt .Errorf ("failed to get instance by provider ID %s: %w" , providerID , err )
122
109
}
123
110
if currInstance == nil || currInstance .State == "STATE_SHUTOFF" || currInstance .State == "STATE_SHUTDOWN" {
@@ -286,3 +273,25 @@ func getNodeAddress(currInstance *crusoeapi.InstanceV1Alpha5) ([]v1.NodeAddress,
286
273
287
274
return nodeAddress , nil
288
275
}
276
+
277
+ func (i * Instances ) handleInstanceNotFoundErr (providerID string , orignalErr error ) (instanceShutdown bool , err error ) {
278
+ attempt , ok := i .nodeShutdown .Load (providerID )
279
+ if ! ok {
280
+ i .nodeShutdown .Store (providerID , 1 )
281
+
282
+ return false , orignalErr
283
+ }
284
+ intAttempt , ok := attempt .(int )
285
+ if ! ok {
286
+ // store correct data in case to avoid conversion issues in next iteration
287
+ i .nodeShutdown .Store (providerID , 1 )
288
+
289
+ return false , orignalErr
290
+ }
291
+ if intAttempt >= 3 {
292
+ return true , nil
293
+ }
294
+ i .nodeShutdown .Store (providerID , (intAttempt + 1 ))
295
+
296
+ return false , orignalErr
297
+ }
0 commit comments