From 35a85280303bc7ee6e8f385e69a8fec6f59a7c32 Mon Sep 17 00:00:00 2001 From: Max Ma Date: Mon, 3 Jun 2024 08:28:21 +0200 Subject: [PATCH] NET-1154:fix stale node issue on multinet when deleting host (#2940) * fix stale node issue on multinet when deleting host * fix stale node when deleting host or uninstall --- controllers/hosts.go | 10 +++++----- logic/hosts.go | 17 +++++------------ 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/controllers/hosts.go b/controllers/hosts.go index fa390ba9..f6a88aa4 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -304,17 +304,17 @@ func deleteHost(w http.ResponseWriter, r *http.Request) { slog.Error("failed to remove host credentials from EMQX", "id", currHost.ID, "error", err) } } - if err = logic.RemoveHost(currHost, forceDelete); err != nil { - logger.Log(0, r.Header.Get("user"), "failed to delete a host:", err.Error()) - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) - return - } if err = mq.HostUpdate(&models.HostUpdate{ Action: models.DeleteHost, Host: *currHost, }); err != nil { logger.Log(0, r.Header.Get("user"), "failed to send delete host update: ", currHost.ID.String(), err.Error()) } + if err = logic.RemoveHost(currHost, forceDelete); err != nil { + logger.Log(0, r.Header.Get("user"), "failed to delete a host:", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } apiHostData := currHost.ConvertNMHostToAPI() logger.Log(2, r.Header.Get("user"), "removed host", currHost.Name) diff --git a/logic/hosts.go b/logic/hosts.go index 8495873c..b888760d 100644 --- a/logic/hosts.go +++ b/logic/hosts.go @@ -396,20 +396,13 @@ func DissasociateNodeFromHost(n *models.Node, h *models.Host) error { if len(h.Nodes) == 0 { return fmt.Errorf("no nodes present in given host") } - index := -1 + nList := []string{} for i := range h.Nodes { - if h.Nodes[i] == n.ID.String() { - index = i - break + if h.Nodes[i] != n.ID.String() { + nList = append(nList, h.Nodes[i]) } } - if index < 0 { - if len(h.Nodes) == 0 { - return fmt.Errorf("node %s, not found in host, %s", n.ID.String(), h.ID.String()) - } - } else { - h.Nodes = RemoveStringSlice(h.Nodes, index) - } + h.Nodes = nList go func() { if servercfg.IsPro { if clients, err := GetNetworkExtClients(n.Network); err != nil { @@ -434,7 +427,7 @@ func DisassociateAllNodesFromHost(hostID string) error { for _, nodeID := range host.Nodes { node, err := GetNodeByID(nodeID) if err != nil { - logger.Log(0, "failed to get host node", err.Error()) + logger.Log(0, "failed to get host node, node id:", nodeID, err.Error()) continue } if err := DeleteNode(&node, true); err != nil {