Skip to content
Prev Previous commit
resolved with changes from PR 1015
  • Loading branch information
elankath committed Aug 21, 2025
commit c5cd1bf541bd057cf9d6b78433639c70f6bc77de
10 changes: 5 additions & 5 deletions pkg/util/provider/machinecontroller/machine_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -1067,24 +1067,24 @@ func (c *controller) reconcileMachineHealth(ctx context.Context, machine *v1alph
var (
description string
timeOutDuration time.Duration
timeElapsed time.Duration
)

isMachinePending := machine.Status.CurrentStatus.Phase == v1alpha1.MachinePending
isMachineInPlaceUpdating := machine.Status.CurrentStatus.Phase == v1alpha1.MachineInPlaceUpdating
disableHealthTimeout := machine.Spec.MachineConfiguration != nil && ptr.Deref(machine.Spec.DisableHealthTimeout, false)
sleepTime := 1 * time.Minute

if isMachinePending {
timeOutDuration = c.getEffectiveCreationTimeout(machine).Duration
timeElapsed = metav1.Now().Sub(machine.CreationTimestamp.Time)
} else if isMachineInPlaceUpdating {
timeOutDuration = c.getEffectiveInPlaceUpdateTimeout(machine).Duration
timeElapsed = metav1.Now().Sub(machine.Status.CurrentStatus.LastUpdateTime.Time)
} else {
timeOutDuration = c.getEffectiveHealthTimeout(machine).Duration
timeElapsed = metav1.Now().Sub(machine.Status.CurrentStatus.LastUpdateTime.Time)
}

// Timeout value obtained by subtracting last operation with expected time out period
timeOut := metav1.Now().Add(-timeOutDuration).Sub(machine.Status.CurrentStatus.LastUpdateTime.Time)
if timeOut > 0 {
if timeElapsed > timeOutDuration {
// Machine health timeout occurred while joining or rejoining of machine

if !isMachinePending && !isMachineInPlaceUpdating && !disableHealthTimeout {
Expand Down
38 changes: 35 additions & 3 deletions pkg/util/provider/machinecontroller/machine_util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2411,13 +2411,45 @@ var _ = Describe("machine_util", func() {
Expect(getErr).To(BeNil())
Expect(data.expect.expectedPhase).To(Equal(updatedTargetMachine.Status.CurrentStatus.Phase))
},
Entry("simple machine with creation Timeout(20 min)", &data{
Entry("Pending machine is marked as Failed when creation timeout (20min) has elapsed", &data{
setup: setup{
machines: []*machinev1.Machine{
newMachine(
&machinev1.MachineTemplateSpec{ObjectMeta: *newObjectMeta(&metav1.ObjectMeta{GenerateName: machineSet1Deploy1}, 0)},
&machinev1.MachineStatus{CurrentStatus: machinev1.CurrentStatus{Phase: machinev1.MachinePending, LastUpdateTime: metav1.NewTime(time.Now().Add(-25 * time.Minute))}},
nil, nil, map[string]string{machinev1.NodeLabelKey: "node-0-0"}, true, metav1.Now()),
&machinev1.MachineStatus{CurrentStatus: machinev1.CurrentStatus{Phase: machinev1.MachinePending}},
nil, nil, map[string]string{machinev1.NodeLabelKey: "node-0-0"}, true, metav1.NewTime(time.Now().Add(-25*time.Minute))),
},
targetMachineName: machineSet1Deploy1 + "-" + "0",
},
expect: expect{
retryPeriod: machineutils.ShortRetry,
err: errSuccessfulPhaseUpdate,
expectedPhase: machinev1.MachineFailed,
},
}),
Entry("Pending machine stays in the Pending phase if creation timeout (20min) has not elapsed", &data{
setup: setup{
machines: []*machinev1.Machine{
newMachine(
&machinev1.MachineTemplateSpec{ObjectMeta: *newObjectMeta(&metav1.ObjectMeta{GenerateName: machineSet1Deploy1}, 0)},
&machinev1.MachineStatus{CurrentStatus: machinev1.CurrentStatus{Phase: machinev1.MachinePending}},
nil, nil, map[string]string{machinev1.NodeLabelKey: "node-0-0"}, true, metav1.NewTime(time.Now().Add(-15*time.Minute))),
},
targetMachineName: machineSet1Deploy1 + "-" + "0",
},
expect: expect{
retryPeriod: machineutils.LongRetry,
err: nil,
expectedPhase: machinev1.MachinePending,
},
}),
Entry("Pending machine is marked as Failed when creation timeout (20min) has elapsed, even if lastUpdate time is recent", &data{
setup: setup{
machines: []*machinev1.Machine{
newMachine(
&machinev1.MachineTemplateSpec{ObjectMeta: *newObjectMeta(&metav1.ObjectMeta{GenerateName: machineSet1Deploy1}, 0)},
&machinev1.MachineStatus{CurrentStatus: machinev1.CurrentStatus{Phase: machinev1.MachinePending, LastUpdateTime: metav1.NewTime(time.Now().Add(-15 * time.Minute))}},
nil, nil, map[string]string{machinev1.NodeLabelKey: "node-0-0"}, true, metav1.NewTime(time.Now().Add(-25*time.Minute))),
},
targetMachineName: machineSet1Deploy1 + "-" + "0",
},
Expand Down