findnodes
All checks were successful
release-tag / release-image (push) Successful in 1m28s

This commit is contained in:
2025-09-27 16:25:13 +02:00
parent 6a0dc578ea
commit d125e3dd54

View File

@@ -184,6 +184,9 @@ func (n *Node) Serve() error {
n.loopSeeder()
}()
n.wg.Add(1)
go func() { defer n.wg.Done(); n.loopPeerExchange() }()
if n.cfg.EnableDiscovery && n.cfg.DiscoveryAddress != "" {
n.wg.Add(2)
go func() {
@@ -226,6 +229,43 @@ func (n *Node) Close(ctx context.Context) error {
/*** Loops ***/
func (n *Node) loopPeerExchange() {
t := time.NewTicker(30 * time.Second)
defer t.Stop()
for {
select {
case <-n.stop:
return
case <-t.C:
}
// Seeds abfragen
for _, s := range n.cfg.Seeds {
if strings.TrimSpace(s) == "" {
continue
}
resp, err := n.client.Get(strings.TrimRight(s, "/") + "/mesh/peers")
if err != nil {
continue
}
var list []Peer
if json.NewDecoder(resp.Body).Decode(&list) == nil {
n.mu.Lock()
for _, p := range list {
if p.URL == "" || p.URL == n.self.URL {
continue
}
if _, ok := n.peers[p.URL]; !ok {
cp := p
n.peers[p.URL] = &cp
}
}
n.mu.Unlock()
}
resp.Body.Close()
}
}
}
func (n *Node) loopSeeder() {
// attempt to hello known seeds every 5s at start, then every 30s
backoff := 5 * time.Second