Skip to content

Commit a07d675

Browse files
committed
fix(vmop): keep inbound-limited migrations pending
Signed-off-by: Daniil Antoshin <daniil.antoshin@flant.com>
1 parent d4d25a7 commit a07d675

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

images/virtualization-artifact/pkg/controller/vmop/migration/internal/handler/lifecycle.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ const (
6868
const (
6969
reasonFailedAttachVolume = "FailedAttachVolume"
7070
reasonFailedMount = "FailedMount"
71+
72+
reasonTargetNodeIncomingMigrationLimitExceeded = "TargetNodeIncomingMigrationLimitExceeded"
73+
messageTargetNodeIncomingMigrationLimitExceeded = "Target node has no free inbound migration slots."
7174
)
7275

7376
type Base interface {
@@ -578,6 +581,9 @@ func (h LifecycleHandler) getInProgressReasonAndMessage(
578581
case virtv1.MigrationPhaseUnset, virtv1.MigrationPending:
579582
reason = vmopcondition.ReasonMigrationPending
580583
message = messageMigrationPending
584+
if _, found := conditions.GetKVVMIMCondition(virtv1.VirtualMachineInstanceMigrationConditionType(reasonTargetNodeIncomingMigrationLimitExceeded), mig.Status.Conditions); found {
585+
message = messageTargetNodeIncomingMigrationLimitExceeded
586+
}
581587
case virtv1.MigrationScheduling:
582588
reason = vmopcondition.ReasonTargetScheduling
583589
message = messageTargetPodScheduling

images/virtualization-artifact/pkg/controller/vmop/migration/internal/handler/lifecycle_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,26 @@ var _ = Describe("LifecycleHandler", func() {
368368
),
369369
)
370370

371+
It("should keep migration pending for inbound target node limit", func() {
372+
mig := newSimpleMigration("vmop-test", name)
373+
mig.Status.Phase = virtv1.MigrationPending
374+
mig.Status.Conditions = []virtv1.VirtualMachineInstanceMigrationCondition{{
375+
Type: virtv1.VirtualMachineInstanceMigrationConditionType(reasonTargetNodeIncomingMigrationLimitExceeded),
376+
Status: corev1.ConditionTrue,
377+
Reason: reasonTargetNodeIncomingMigrationLimitExceeded,
378+
Message: messageTargetNodeIncomingMigrationLimitExceeded,
379+
}}
380+
381+
fakeClient, err := testutil.NewFakeClientWithObjects(mig)
382+
Expect(err).NotTo(HaveOccurred())
383+
384+
h := LifecycleHandler{client: fakeClient}
385+
reason, msg, err := h.getInProgressReasonAndMessage(ctx, mig)
386+
Expect(err).NotTo(HaveOccurred())
387+
Expect(reason).To(Equal(vmopcondition.ReasonMigrationPending))
388+
Expect(msg).To(Equal(messageTargetNodeIncomingMigrationLimitExceeded))
389+
})
390+
371391
DescribeTable("should build in-progress reason and message", func(
372392
phase virtv1.VirtualMachineInstanceMigrationPhase,
373393
state *virtv1.VirtualMachineInstanceMigrationState,

0 commit comments

Comments
 (0)