From e2c704308a071bc91ae8c00a7baaa080db6a4564 Mon Sep 17 00:00:00 2001 From: Chin-Ya Huang Date: Mon, 16 Sep 2024 12:05:55 +0800 Subject: [PATCH] fix(node-controller): delete instance manager and requeue node when labels are missing longhorn/longhorn-9464 Signed-off-by: Chin-Ya Huang (cherry picked from commit 86a4416bf8c2a7def43b2dccf7d0433647099537) --- controller/node_controller.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/controller/node_controller.go b/controller/node_controller.go index 1920fe6891..b0826ae5d7 100644 --- a/controller/node_controller.go +++ b/controller/node_controller.go @@ -1044,7 +1044,17 @@ func (nc *NodeController) syncInstanceManagers(node *longhorn.Node) error { } log.Infof("Creating default instance manager %v, image: %v, dataEngine: %v", imName, defaultInstanceManagerImage, dataEngine) - if _, err := nc.createInstanceManager(node, imName, defaultInstanceManagerImage, imType, dataEngine); err != nil { + _, err = nc.createInstanceManager(node, imName, defaultInstanceManagerImage, imType, dataEngine) + if err != nil { + if apierrors.IsAlreadyExists(err) { + log.WithError(err).Warnf("Deleting instance manager %v because it cannot be obtained by selector labels", imName) + if err := nc.ds.DeleteInstanceManager(imName); err != nil { + return err + } + + nc.enqueueNode(node) + return nil + } return err } }