|
@@ -78,7 +78,7 @@ func checkForZombieHosts(h *models.Host) {
|
|
func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) {
|
|
func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) {
|
|
logger.Log(2, "Zombie management started")
|
|
logger.Log(2, "Zombie management started")
|
|
go InitializeZombies()
|
|
go InitializeZombies()
|
|
- go checkPendingRemovalNodes()
|
|
|
|
|
|
+ go checkPendingRemovalNodes(peerUpdate)
|
|
// Zombie Nodes Cleanup Four Times a Day
|
|
// Zombie Nodes Cleanup Four Times a Day
|
|
ticker := time.NewTicker(time.Hour * ZOMBIE_TIMEOUT)
|
|
ticker := time.NewTicker(time.Hour * ZOMBIE_TIMEOUT)
|
|
|
|
|
|
@@ -158,12 +158,31 @@ func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-func checkPendingRemovalNodes() {
|
|
|
|
|
|
+func checkPendingRemovalNodes(peerUpdate chan *models.Node) {
|
|
nodes, _ := GetAllNodes()
|
|
nodes, _ := GetAllNodes()
|
|
for _, node := range nodes {
|
|
for _, node := range nodes {
|
|
|
|
+ node := node
|
|
pendingDelete := node.PendingDelete || node.Action == models.NODE_DELETE
|
|
pendingDelete := node.PendingDelete || node.Action == models.NODE_DELETE
|
|
if pendingDelete {
|
|
if pendingDelete {
|
|
DeleteNode(&node, true)
|
|
DeleteNode(&node, true)
|
|
|
|
+ peerUpdate <- &node
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ if servercfg.IsAutoCleanUpEnabled() {
|
|
|
|
+ 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())
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|