Bläddra i källkod

optimise failover operations

abhishek9686 7 månader sedan
förälder
incheckning
bd75e74649
4 ändrade filer med 16 tillägg och 74 borttagningar
  1. 2 1
      controllers/hosts.go
  2. 5 72
      logic/acls.go
  3. 1 0
      logic/hosts.go
  4. 8 1
      pro/controllers/failover.go

+ 2 - 1
controllers/hosts.go

@@ -235,7 +235,8 @@ func pull(w http.ResponseWriter, r *http.Request) {
 			slog.Error("failed to get node:", "id", node.ID, "error", err)
 			continue
 		}
-		if node.FailedOverBy != uuid.Nil {
+		if node.FailedOverBy != uuid.Nil && r.URL.Query().Get("reset_failovered") == "true" {
+			fmt.Println("#### RESETTTING FAILED OVERED PEER: ", host.Name)
 			logic.ResetFailedOverPeer(&node)
 			sendPeerUpdate = true
 		}

+ 5 - 72
logic/acls.go

@@ -14,10 +14,8 @@ import (
 )
 
 var (
-	aclCacheMutex      = &sync.RWMutex{}
-	aclCacheMap        = make(map[string]models.Acl)
-	aclNetCacheMutex   = &sync.RWMutex{}
-	aclNetworkCacheMap = make(map[models.NetworkID]AclNetInfo)
+	aclCacheMutex = &sync.RWMutex{}
+	aclCacheMap   = make(map[string]models.Acl)
 )
 
 type AclNetInfo struct {
@@ -40,34 +38,6 @@ func MigrateAclPolicies() {
 
 }
 
-func loadNetworkAclsIntoCache() {
-	aclNetCacheMutex.Lock()
-	defer aclNetCacheMutex.Unlock()
-	aclNetworkCacheMap = make(map[models.NetworkID]AclNetInfo)
-	acls := ListAcls()
-	for _, acl := range acls {
-		aclNetInfo := aclNetworkCacheMap[acl.NetworkID]
-		if acl.RuleType == models.DevicePolicy {
-			aclNetInfo.DevicePolices = append(aclNetInfo.DevicePolices, acl)
-		} else {
-			aclNetInfo.UserPolicies = append(aclNetInfo.UserPolicies, acl)
-		}
-		aclNetworkCacheMap[acl.NetworkID] = aclNetInfo
-	}
-	for netID, aclNetInfo := range aclNetworkCacheMap {
-		defaultDevicePolicy, err := GetDefaultPolicy(models.NetworkID(netID), models.DevicePolicy)
-		if err == nil {
-			aclNetInfo.DefaultDevicePolicy = defaultDevicePolicy
-			aclNetworkCacheMap[netID] = aclNetInfo
-		}
-		defaultUserPolicy, err := GetDefaultPolicy(models.NetworkID(netID), models.UserPolicy)
-		if err == nil {
-			aclNetInfo.DefaultUserPolicy = defaultUserPolicy
-			aclNetworkCacheMap[netID] = aclNetInfo
-		}
-	}
-}
-
 // CreateDefaultAclNetworkPolicies - create default acl network policies
 func CreateDefaultAclNetworkPolicies(netID models.NetworkID) {
 	if netID.String() == "" {
@@ -198,20 +168,14 @@ func listAclFromCache() (acls []models.Acl) {
 
 func storeAclInCache(a models.Acl) {
 	aclCacheMutex.Lock()
-	defer func() {
-		aclCacheMutex.Unlock()
-		go loadNetworkAclsIntoCache()
-	}()
+	defer aclCacheMutex.Unlock()
 	aclCacheMap[a.ID] = a
 
 }
 
 func removeAclFromCache(a models.Acl) {
 	aclCacheMutex.Lock()
-	defer func() {
-		aclCacheMutex.Unlock()
-		go loadNetworkAclsIntoCache()
-	}()
+	defer aclCacheMutex.Unlock()
 	delete(aclCacheMap, a.ID)
 }
 
@@ -527,37 +491,6 @@ func listPoliciesOfUser(user models.User, netID models.NetworkID) []models.Acl {
 	return userAcls
 }
 
-func GetDefaultPolicyFromNetCache(netID models.NetworkID, ruleType models.AclPolicyType) models.Acl {
-	aclNetCacheMutex.RLock()
-	defer aclNetCacheMutex.RUnlock()
-	if aclNetInfo, ok := aclNetworkCacheMap[netID]; ok {
-		if ruleType == models.DevicePolicy {
-			return aclNetInfo.DefaultDevicePolicy
-		} else {
-			return aclNetInfo.DefaultUserPolicy
-		}
-	}
-	return models.Acl{}
-}
-
-func listPolicesFromNetCache(netID models.NetworkID, ruleType models.AclPolicyType) []models.Acl {
-	aclNetCacheMutex.RLock()
-	if aclNetInfo, ok := aclNetworkCacheMap[netID]; ok {
-		if ruleType == models.DevicePolicy {
-			aclNetCacheMutex.RUnlock()
-			return aclNetInfo.DevicePolices
-		} else {
-			aclNetCacheMutex.RUnlock()
-			return aclNetInfo.UserPolicies
-		}
-	}
-	aclNetCacheMutex.RUnlock()
-	if ruleType == models.DevicePolicy {
-		return listDevicePolicies(netID)
-	}
-	return listUserPolicies(netID)
-}
-
 // listDevicePolicies - lists all device policies in a network
 func listDevicePolicies(netID models.NetworkID) []models.Acl {
 	allAcls := ListAcls()
@@ -660,7 +593,7 @@ func IsPeerAllowed(node, peer models.Node, checkDefaultPolicy bool) bool {
 
 	}
 	// list device policies
-	policies := listPolicesFromNetCache(models.NetworkID(node.Network), models.DevicePolicy)
+	policies := listDevicePolicies(models.NetworkID(node.Network))
 	srcMap := make(map[string]struct{})
 	dstMap := make(map[string]struct{})
 	defer func() {

+ 1 - 0
logic/hosts.go

@@ -275,6 +275,7 @@ func UpdateHostFromClient(newHost, currHost *models.Host) (sendPeerUpdate bool)
 				continue
 			}
 			if node.FailedOverBy != uuid.Nil {
+				fmt.Println("ENDPOIINT CHANGED RESETTING FAILEDDOVERED: ", currHost.Name)
 				ResetFailedOverPeer(&node)
 			}
 		}

+ 8 - 1
pro/controllers/failover.go

@@ -205,6 +205,12 @@ func failOverME(w http.ResponseWriter, r *http.Request) {
 		)
 		return
 	}
+	peerHost, err := logic.GetHost(peerNode.HostID.String())
+	if err != nil {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
+		return
+	}
+	fmt.Println("#### RECV FAILOVER REQ FROM: 1", "from-host", host.Name, "node-id", node.ID.String(), "to-host", peerHost.Name, "peer-id", peerNode.ID)
 	if peerNode.IsFailOver {
 		logic.ReturnErrorResponse(
 			w,
@@ -267,7 +273,7 @@ func failOverME(w http.ResponseWriter, r *http.Request) {
 		)
 		return
 	}
-
+	fmt.Println("#### RECV FAILOVER REQ FROM: 2", "from-host", host.Name, "node-id", node.ID.String(), "to-host", peerHost.Name, "peer-id", peerNode.ID)
 	err = proLogic.SetFailOverCtx(failOverNode, node, peerNode)
 	if err != nil {
 		slog.Debug("failed to create failover", "id", node.ID.String(),
@@ -279,6 +285,7 @@ func failOverME(w http.ResponseWriter, r *http.Request) {
 		)
 		return
 	}
+	fmt.Println("#### RECV FAILOVER REQ FROM: 3", "from-host", host.Name, "node-id", node.ID.String(), "to-host", peerHost.Name, "peer-id", peerNode.ID)
 	slog.Info(
 		"[auto-relay] created relay on node",
 		"node",