This commit is contained in:
@@ -184,6 +184,9 @@ func (n *Node) Serve() error {
|
|||||||
n.loopSeeder()
|
n.loopSeeder()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
n.wg.Add(1)
|
||||||
|
go func() { defer n.wg.Done(); n.loopPeerExchange() }()
|
||||||
|
|
||||||
if n.cfg.EnableDiscovery && n.cfg.DiscoveryAddress != "" {
|
if n.cfg.EnableDiscovery && n.cfg.DiscoveryAddress != "" {
|
||||||
n.wg.Add(2)
|
n.wg.Add(2)
|
||||||
go func() {
|
go func() {
|
||||||
@@ -226,6 +229,43 @@ func (n *Node) Close(ctx context.Context) error {
|
|||||||
|
|
||||||
/*** Loops ***/
|
/*** 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() {
|
func (n *Node) loopSeeder() {
|
||||||
// attempt to hello known seeds every 5s at start, then every 30s
|
// attempt to hello known seeds every 5s at start, then every 30s
|
||||||
backoff := 5 * time.Second
|
backoff := 5 * time.Second
|
||||||
|
|||||||
Reference in New Issue
Block a user