Browse Source

discosrv: Expire nodes, reduce debug logging

Jakob Borg 11 years ago
parent
commit
9744629c4b
1 changed files with 38 additions and 13 deletions
  1. 38 13
      discover/cmd/discosrv/main.go

+ 38 - 13
discover/cmd/discosrv/main.go

@@ -4,18 +4,21 @@ import (
 	"log"
 	"net"
 	"sync"
+	"time"
 
 	"github.com/calmh/syncthing/discover"
 )
 
 type Node struct {
-	IP   []byte
-	Port uint16
+	IP      []byte
+	Port    uint16
+	Updated time.Time
 }
 
 var (
-	nodes = make(map[string]Node)
-	lock  sync.Mutex
+	nodes   = make(map[string]Node)
+	lock    sync.Mutex
+	queries = 0
 )
 
 func main() {
@@ -25,6 +28,26 @@ func main() {
 		panic(err)
 	}
 
+	go func() {
+		for {
+			time.Sleep(600 * time.Second)
+
+			lock.Lock()
+
+			var deleted = 0
+			for id, node := range nodes {
+				if time.Since(node.Updated) > 60*time.Minute {
+					delete(nodes, id)
+					deleted++
+				}
+			}
+			log.Printf("Expired %d nodes; %d nodes in registry; %d queries", deleted, len(nodes), queries)
+			queries = 0
+
+			lock.Unlock()
+		}
+	}()
+
 	var buf = make([]byte, 1024)
 	for {
 		n, addr, err := conn.ReadFromUDP(buf)
@@ -40,20 +63,25 @@ func main() {
 		switch pkt.Magic {
 		case 0x20121025:
 			// Announcement
-			//lock.Lock()
+			lock.Lock()
 			ip := addr.IP.To4()
 			if ip == nil {
 				ip = addr.IP.To16()
 			}
-			node := Node{ip, uint16(pkt.Port)}
-			log.Println("<-", pkt.ID, node)
+			node := Node{
+				IP:      ip,
+				Port:    uint16(pkt.Port),
+				Updated: time.Now(),
+			}
+			//log.Println("<-", pkt.ID, node)
 			nodes[pkt.ID] = node
-			//lock.Unlock()
+			lock.Unlock()
 		case 0x19760309:
 			// Query
-			//lock.Lock()
+			lock.Lock()
 			node, ok := nodes[pkt.ID]
-			//lock.Unlock()
+			queries++
+			lock.Unlock()
 			if ok {
 				pkt := discover.Packet{
 					Magic: 0x20121025,
@@ -64,11 +92,8 @@ func main() {
 				_, _, err = conn.WriteMsgUDP(discover.EncodePacket(pkt), nil, addr)
 				if err != nil {
 					log.Println("Warning:", err)
-				} else {
-					log.Println("->", pkt.ID, node)
 				}
 			}
 		}
-
 	}
 }