Переглянути джерело

add failover defence check on signal handler

abhishek9686 1 рік тому
батько
коміт
eeb196ec2d
3 змінених файлів з 19 додано та 0 видалено
  1. 8 0
      mq/handlers.go
  2. 7 0
      pro/logic/nodes.go
  3. 4 0
      pro/logic/relays.go

+ 8 - 0
mq/handlers.go

@@ -215,6 +215,14 @@ func signalPeer(signal models.Signal) {
 		signal.Action = ""
 		return
 	}
+	if node.IsRelay || node.InternetGwID != "" || node.FailedOverBy != uuid.Nil {
+		signal.Action = ""
+		return
+	}
+	if peerNode.IsRelay || peerNode.InternetGwID != "" || peerNode.FailedOverBy != uuid.Nil {
+		signal.Action = ""
+		return
+	}
 	err = HostUpdate(&models.HostUpdate{
 		Action: models.SignalHost,
 		Host:   *peerHost,

+ 7 - 0
pro/logic/nodes.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"net"
 
+	"github.com/google/uuid"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"golang.org/x/exp/slog"
@@ -29,6 +30,9 @@ func ValidateInetGwReq(inetNode models.Node, req models.InetNodeReq, update bool
 	if inetNode.IsRelayed {
 		return fmt.Errorf("node %s is being relayed", inetHost.Name)
 	}
+	if inetNode.FailedOverBy != uuid.Nil {
+		ResetFailedOverPeer(&inetNode)
+	}
 	for _, clientNodeID := range req.InetNodeClientIDs {
 		clientNode, err := logic.GetNodeByID(clientNodeID)
 		if err != nil {
@@ -53,6 +57,9 @@ func ValidateInetGwReq(inetNode models.Node, req models.InetNodeReq, update bool
 				return fmt.Errorf("node %s is already using a internet gateway", clientHost.Name)
 			}
 		}
+		if clientNode.FailedOverBy != uuid.Nil {
+			ResetFailedOverPeer(&clientNode)
+		}
 
 		if clientNode.IsRelayed {
 			return fmt.Errorf("node %s is being relayed", clientHost.Name)

+ 4 - 0
pro/logic/relays.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"net"
 
+	"github.com/google/uuid"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
@@ -122,6 +123,9 @@ func ValidateRelay(relay models.RelayRequest, update bool) error {
 		if relayedNode.IsInternetGateway {
 			return errors.New("cannot relay an internet gateway (" + relayedNodeID + ")")
 		}
+		if relayedNode.FailedOverBy != uuid.Nil {
+			ResetFailedOverPeer(&relayedNode)
+		}
 	}
 	return err
 }