NET-1608:reset failover if endpoint changed (#3149)

* reset failover if endpoint changed

* add peerUpdate in pull when resetfailover

* remove go routine for peerUpdate in pull

* update peerUpdate in pull
This commit is contained in:
Max Ma 2024-10-10 00:15:58 -09:00 committed by GitHub
parent 370f8521f7
commit 24cee9b6de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 1 deletions

View file

@ -167,6 +167,8 @@ func pull(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
sendPeerUpdate := false
for _, nodeID := range host.Nodes {
node, err := logic.GetNodeByID(nodeID)
if err != nil {
@ -174,7 +176,13 @@ func pull(w http.ResponseWriter, r *http.Request) {
continue
}
if node.FailedOverBy != uuid.Nil {
go logic.ResetFailedOverPeer(&node)
logic.ResetFailedOverPeer(&node)
sendPeerUpdate = true
}
}
if sendPeerUpdate {
if err := mq.PublishPeerUpdate(true); err != nil {
logger.Log(0, "fail to publish peer update: ", err.Error())
}
}
allNodes, err := logic.GetAllNodes()

View file

@ -10,6 +10,7 @@ import (
"github.com/google/uuid"
"golang.org/x/crypto/bcrypt"
"golang.org/x/exp/slog"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
@ -254,14 +255,31 @@ func UpdateHostFromClient(newHost, currHost *models.Host) (sendPeerUpdate bool)
currHost.WgPublicListenPort = newHost.WgPublicListenPort
sendPeerUpdate = true
}
isEndpointChanged := false
if currHost.EndpointIP.String() != newHost.EndpointIP.String() {
currHost.EndpointIP = newHost.EndpointIP
sendPeerUpdate = true
isEndpointChanged = true
}
if currHost.EndpointIPv6.String() != newHost.EndpointIPv6.String() {
currHost.EndpointIPv6 = newHost.EndpointIPv6
sendPeerUpdate = true
isEndpointChanged = true
}
if isEndpointChanged {
for _, nodeID := range currHost.Nodes {
node, err := GetNodeByID(nodeID)
if err != nil {
slog.Error("failed to get node:", "id", node.ID, "error", err)
continue
}
if node.FailedOverBy != uuid.Nil {
ResetFailedOverPeer(&node)
}
}
}
currHost.DaemonInstalled = newHost.DaemonInstalled
currHost.Debug = newHost.Debug
currHost.Verbosity = newHost.Verbosity