* NET-507

* Fixed server restart changing the node expiration date to the defaults.

* Removed expired nodes removal from zombie cleanup routine.

* Added a new expired nodes deletion routine which removes expired nodes every hour.

* NET-507 suggested changes

* Possible fix for zombie nodes upon node deletion from the UI.

* Suggested changes implemented for expired nodes deletion go routine.

* NET-507 typo fix

* typo fix for DeleteNode purge parameter
This commit is contained in:
Farukh Khan
2023-08-10 22:57:44 +08:00
committed by GitHub
parent 8ce7da2ce9
commit a9a8596d71
5 changed files with 40 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
package logic
import (
"context"
"encoding/json"
"errors"
"fmt"
@@ -20,6 +21,7 @@ import (
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/servercfg"
"github.com/gravitl/netmaker/validation"
"golang.org/x/exp/slog"
)
var (
@@ -444,6 +446,35 @@ func GetAllNodesAPI(nodes []models.Node) []models.ApiNode {
return apiNodes[:]
}
// DeleteExpiredNodes - goroutine which deletes nodes which are expired
func DeleteExpiredNodes(ctx context.Context, peerUpdate chan *models.Node) {
for {
select {
case <-ctx.Done():
return
case <-time.After(time.Hour):
// Delete Expired Nodes Every Hour
allnodes, err := GetAllNodes()
if err != nil {
slog.Error("failed to retrieve all nodes", "error", err.Error())
return
}
for _, node := range allnodes {
if time.Now().After(node.ExpirationDateTime) {
if err := DeleteNode(&node, false); err != nil {
slog.Error("error deleting expired node", "nodeid", node.ID.String(), "error", err.Error())
continue
}
node.Action = models.NODE_DELETE
node.PendingDelete = true
peerUpdate <- &node
slog.Info("deleting expired node", "nodeid", node.ID.String())
}
}
}
}
}
// == PRO ==
func updateProNodeACLS(node *models.Node) error {