Skip to content

Commit 1109cbd

Browse files
committed
remove wait for disk call and add retry for busy error code
1 parent 9ca7c9d commit 1109cbd

File tree

4 files changed

+16
-67
lines changed

4 files changed

+16
-67
lines changed

cloud/scope/client.go

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ type LinodeInstanceClient interface {
3333
GetImage(ctx context.Context, imageID string) (*linodego.Image, error)
3434
CreateStackscript(ctx context.Context, opts linodego.StackscriptCreateOptions) (*linodego.Stackscript, error)
3535
ListStackscripts(ctx context.Context, opts *linodego.ListOptions) ([]linodego.Stackscript, error)
36-
WaitForInstanceDiskStatus(ctx context.Context, instanceID int, diskID int, status linodego.DiskStatus, timeoutSeconds int) (*linodego.InstanceDisk, error)
3736
}
3837

3938
// LinodeVPCClient defines the methods that a Linode client must have to interact with Linode's VPC service.

controller/linodemachine_controller.go

+5-15
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,8 @@ import (
5151
)
5252

5353
const (
54-
linodeBusyCode = 400
55-
defaultDiskFilesystem = string(linodego.FilesystemExt4)
56-
defaultResizeWaitSeconds = 5
54+
linodeBusyCode = 400
55+
defaultDiskFilesystem = string(linodego.FilesystemExt4)
5756

5857
// conditions for preflight instance creation
5958
ConditionPreflightCreated clusterv1.ConditionType = "PreflightCreated"
@@ -413,7 +412,9 @@ func (r *LinodeMachineReconciler) createDisks(ctx context.Context, logger logr.L
413412
},
414413
)
415414
if err != nil {
416-
logger.Error(err, "Failed to create disk", "DiskLabel", label)
415+
if !linodego.ErrHasStatus(err, linodeBusyCode) {
416+
logger.Error(err, "Failed to create disk", "DiskLabel", label)
417+
}
417418

418419
conditions.MarkFalse(
419420
machineScope.LinodeMachine,
@@ -490,17 +491,6 @@ func (r *LinodeMachineReconciler) resizeRootDisk(
490491
conditions.MarkTrue(machineScope.LinodeMachine, ConditionPreflightRootDiskResizing)
491492
}
492493

493-
// wait for the disk to resize
494-
if _, err := machineScope.LinodeClient.WaitForInstanceDiskStatus(ctx, linodeInstanceID, rootDiskID, linodego.DiskReady, defaultResizeWaitSeconds); err != nil {
495-
logger.Info("Timed out resizing root disk",
496-
"timeout", defaultResizeWaitSeconds,
497-
"reqeue", true,
498-
)
499-
conditions.MarkFalse(machineScope.LinodeMachine, ConditionPreflightRootDiskResized, string(cerrs.CreateMachineError), clusterv1.ConditionSeverityWarning, err.Error())
500-
501-
return err
502-
}
503-
504494
conditions.Delete(machineScope.LinodeMachine, ConditionPreflightRootDiskResizing)
505495
conditions.MarkTrue(machineScope.LinodeMachine, ConditionPreflightRootDiskResized)
506496

controller/linodemachine_controller_test.go

+11-21
Original file line numberDiff line numberDiff line change
@@ -273,17 +273,13 @@ var _ = Describe("create", Label("machine", "create"), func() {
273273
ResizeInstanceDisk(ctx, 123, 100, 4262).
274274
After(getInstDisk).
275275
Return(nil)
276-
waitForInstDisk := mockLinodeClient.EXPECT().
277-
WaitForInstanceDiskStatus(ctx, 123, 100, linodego.DiskReady, defaultResizeWaitSeconds).
278-
After(resizeInstDisk).
279-
Return(nil, nil)
280276
createEtcdDisk := mockLinodeClient.EXPECT().
281277
CreateInstanceDisk(ctx, 123, linodego.InstanceDiskCreateOptions{
282278
Label: "etcd-data",
283279
Size: 10738,
284280
Filesystem: string(linodego.FilesystemExt4),
285281
}).
286-
After(waitForInstDisk).
282+
After(resizeInstDisk).
287283
Return(&linodego.InstanceDisk{ID: 101}, nil)
288284
listInstConfsForProfile := mockLinodeClient.EXPECT().
289285
ListInstanceConfigs(ctx, 123, gomock.Any()).
@@ -398,10 +394,15 @@ var _ = Describe("create", Label("machine", "create"), func() {
398394
ResizeInstanceDisk(ctx, 123, 100, 4262).
399395
After(getInstDisk).
400396
Return(nil)
401-
mockLinodeClient.EXPECT().
402-
WaitForInstanceDiskStatus(ctx, 123, 100, linodego.DiskReady, defaultResizeWaitSeconds).
397+
398+
createFailedEtcdDisk := mockLinodeClient.EXPECT().
399+
CreateInstanceDisk(ctx, 123, linodego.InstanceDiskCreateOptions{
400+
Label: "etcd-data",
401+
Size: 10738,
402+
Filesystem: string(linodego.FilesystemExt4),
403+
}).
403404
After(resizeInstDisk).
404-
Return(nil, errors.New("Waiting for Instance 123 Disk 100 status ready: not yet"))
405+
Return(nil, linodego.Error{Code: 400})
405406

406407
mScope := scope.MachineScope{
407408
Client: k8sClient,
@@ -421,30 +422,19 @@ var _ = Describe("create", Label("machine", "create"), func() {
421422

422423
listInst = mockLinodeClient.EXPECT().
423424
ListInstances(ctx, gomock.Any()).
425+
After(createFailedEtcdDisk).
424426
Return([]linodego.Instance{{
425427
ID: 123,
426428
IPv4: []*net.IP{ptr.To(net.IPv4(192, 168, 0, 2))},
427429
Status: linodego.InstanceOffline,
428430
}}, nil)
429-
listInstConfs = mockLinodeClient.EXPECT().
430-
ListInstanceConfigs(ctx, 123, gomock.Any()).
431-
After(listInst).
432-
Return([]linodego.InstanceConfig{{
433-
Devices: &linodego.InstanceConfigDeviceMap{
434-
SDA: &linodego.InstanceConfigDevice{DiskID: 100},
435-
},
436-
}}, nil)
437-
waitForInstDisk := mockLinodeClient.EXPECT().
438-
WaitForInstanceDiskStatus(ctx, 123, 100, linodego.DiskReady, defaultResizeWaitSeconds).
439-
After(listInstConfs).
440-
Return(nil, nil)
441431
createEtcdDisk := mockLinodeClient.EXPECT().
442432
CreateInstanceDisk(ctx, 123, linodego.InstanceDiskCreateOptions{
443433
Label: "etcd-data",
444434
Size: 10738,
445435
Filesystem: string(linodego.FilesystemExt4),
446436
}).
447-
After(waitForInstDisk).
437+
After(listInst).
448438
Return(&linodego.InstanceDisk{ID: 101}, nil)
449439
listInstConfsForProfile := mockLinodeClient.EXPECT().
450440
ListInstanceConfigs(ctx, 123, gomock.Any()).

mock/client.go

-30
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)