Explorar o código

add wg groups to zombie routines

Abhishek Kondur hai 1 ano
pai
achega
988defee1b
Modificáronse 3 ficheiros con 14 adicións e 7 borrados
  1. 2 1
      logic/nodes.go
  2. 3 1
      logic/zombie.go
  3. 9 5
      main.go

+ 2 - 1
logic/nodes.go

@@ -457,8 +457,9 @@ func GetAllNodesAPI(nodes []models.Node) []models.ApiNode {
 }
 
 // DeleteExpiredNodes - goroutine which deletes nodes which are expired
-func DeleteExpiredNodes(ctx context.Context, peerUpdate chan *models.Node) {
+func DeleteExpiredNodes(ctx context.Context, wg *sync.WaitGroup, peerUpdate chan *models.Node) {
 	// Delete Expired Nodes Every Hour
+	defer wg.Done()
 	ticker := time.NewTicker(time.Hour)
 	for {
 		select {

+ 3 - 1
logic/zombie.go

@@ -2,6 +2,7 @@ package logic
 
 import (
 	"context"
+	"sync"
 	"time"
 
 	"github.com/google/uuid"
@@ -74,8 +75,9 @@ func checkForZombieHosts(h *models.Host) {
 }
 
 // ManageZombies - goroutine which adds/removes/deletes nodes from the zombie node quarantine list
-func ManageZombies(ctx context.Context, peerUpdate chan *models.Node) {
+func ManageZombies(ctx context.Context, wg *sync.WaitGroup, peerUpdate chan *models.Node) {
 	logger.Log(2, "Zombie management started")
+	defer wg.Done()
 	InitializeZombies()
 
 	// Zombie Nodes Cleanup Four Times a Day

+ 9 - 5
main.go

@@ -139,11 +139,15 @@ func startControllers(wg *sync.WaitGroup, ctx context.Context) {
 	}
 	//Run MessageQueue
 	wg.Add(1)
-	go runMessageQueue(wg, ctx)
+	go runMessageQueue(ctx, wg)
+	peerUpdate := make(chan *models.Node)
+	wg.Add(1)
+	go logic.ManageZombies(ctx, wg, peerUpdate)
+	wg.Add(1)
+	go logic.DeleteExpiredNodes(ctx, wg, peerUpdate)
+	wg.Add(1)
 	go func() {
-		peerUpdate := make(chan *models.Node)
-		go logic.ManageZombies(ctx, peerUpdate)
-		go logic.DeleteExpiredNodes(ctx, peerUpdate)
+		defer wg.Done()
 		for {
 			select {
 			case nodeUpdate := <-peerUpdate:
@@ -164,7 +168,7 @@ func startControllers(wg *sync.WaitGroup, ctx context.Context) {
 }
 
 // Should we be using a context vice a waitgroup????????????
-func runMessageQueue(wg *sync.WaitGroup, ctx context.Context) {
+func runMessageQueue(ctx context.Context, wg *sync.WaitGroup) {
 	defer wg.Done()
 	go mq.Keepalive(ctx)
 	defer mq.CloseClient()