Browse Source

autocleanup offline nodes

abhishek9686 3 months ago
parent
commit
29cb343ae7
5 changed files with 30 additions and 5 deletions
  1. 3 1
      logic/peers.go
  2. 20 0
      logic/zombie.go
  3. 1 1
      main.go
  4. 2 3
      scripts/netmaker.default.env
  5. 4 0
      servercfg/serverconf.go

+ 3 - 1
logic/peers.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"fmt"
 	"net"
 	"net"
 	"net/netip"
 	"net/netip"
+	"time"
 
 
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
@@ -194,9 +195,10 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 			continue
 			continue
 		}
 		}
 
 
-		if !node.Connected || node.PendingDelete || node.Action == models.NODE_DELETE {
+		if !node.Connected || node.PendingDelete || node.Action == models.NODE_DELETE || time.Since(node.LastCheckIn) > time.Hour {
 			continue
 			continue
 		}
 		}
+
 		hostPeerUpdate = SetDefaultGw(node, hostPeerUpdate)
 		hostPeerUpdate = SetDefaultGw(node, hostPeerUpdate)
 		if !hostPeerUpdate.IsInternetGw {
 		if !hostPeerUpdate.IsInternetGw {
 			hostPeerUpdate.IsInternetGw = IsInternetGw(node)
 			hostPeerUpdate.IsInternetGw = IsInternetGw(node)

+ 20 - 0
logic/zombie.go

@@ -7,6 +7,7 @@ import (
 	"github.com/google/uuid"
 	"github.com/google/uuid"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/servercfg"
 )
 )
 
 
 const (
 const (
@@ -135,6 +136,25 @@ func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) {
 					}
 					}
 				}
 				}
 			}
 			}
+			if servercfg.IsAutoCleanUpEnabled() {
+				nodes, _ := GetAllNodes()
+				for _, node := range nodes {
+					if time.Since(node.LastCheckIn) > time.Minute*ZOMBIE_DELETE_TIME {
+						if err := DeleteNode(&node, true); err != nil {
+							continue
+						}
+						node.PendingDelete = true
+						node.Action = models.NODE_DELETE
+						peerUpdate <- &node
+						host, err := GetHost(node.HostID.String())
+						if err == nil && len(host.Nodes) == 0 {
+							RemoveHostByID(host.ID.String())
+						}
+
+					}
+				}
+			}
+
 		}
 		}
 	}
 	}
 }
 }

+ 1 - 1
main.go

@@ -178,7 +178,7 @@ func runMessageQueue(wg *sync.WaitGroup, ctx context.Context) {
 	defer mq.CloseClient()
 	defer mq.CloseClient()
 	go mq.Keepalive(ctx)
 	go mq.Keepalive(ctx)
 	go func() {
 	go func() {
-		peerUpdate := make(chan *models.Node)
+		peerUpdate := make(chan *models.Node, 100)
 		go logic.ManageZombies(ctx, peerUpdate)
 		go logic.ManageZombies(ctx, peerUpdate)
 		go logic.DeleteExpiredNodes(ctx, peerUpdate)
 		go logic.DeleteExpiredNodes(ctx, peerUpdate)
 		for nodeUpdate := range peerUpdate {
 		for nodeUpdate := range peerUpdate {

+ 2 - 3
scripts/netmaker.default.env

@@ -103,6 +103,5 @@ METRICS_PORT=51821
 # Metrics Collection interval in minutes
 # Metrics Collection interval in minutes
 PUBLISH_METRIC_INTERVAL=15
 PUBLISH_METRIC_INTERVAL=15
 # auto delete offline nodes
 # auto delete offline nodes
-AUTO_DELETE_NODES=false
-# auto delete offline nodes interval in hours
-AUTO_DELETE_OFFLINE_NODES_INTERVAL=12
+AUTO_DELETE_OFFLINE_NODES=false
+

+ 4 - 0
servercfg/serverconf.go

@@ -894,3 +894,7 @@ func GetAllowedEmailDomains() string {
 func GetNmBaseDomain() string {
 func GetNmBaseDomain() string {
 	return os.Getenv("NM_DOMAIN")
 	return os.Getenv("NM_DOMAIN")
 }
 }
+
+func IsAutoCleanUpEnabled() bool {
+	return os.Getenv("AUTO_DELETE_OFFLINE_NODES") == "true"
+}