From 0a8e1a73a3c9b7a4812dd69228f972dc6c0377bf Mon Sep 17 00:00:00 2001 From: Svarog Date: Tue, 1 Feb 2022 16:35:47 +0200 Subject: [PATCH] Prune nodes which had at least one attempt, and it was not successfull (#44) --- dnsseed.go | 5 ++--- manager.go | 23 +++++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/dnsseed.go b/dnsseed.go index 974d4661..48dbb759 100644 --- a/dnsseed.go +++ b/dnsseed.go @@ -61,7 +61,6 @@ func creep() { var knownPeers []*appmessage.NetAddress if len(ActiveConfig().KnownPeers) != 0 { - for _, p := range strings.Split(ActiveConfig().KnownPeers, ",") { addressStr := strings.Split(p, ":") if len(addressStr) != 2 { @@ -138,8 +137,9 @@ func creep() { } func pollPeer(netAdapter *standalone.MinimalNetAdapter, addr *appmessage.NetAddress) error { - peerAddress := net.JoinHostPort(addr.IP.String(), strconv.Itoa(int(addr.Port))) + defer amgr.Attempt(addr.IP) + peerAddress := net.JoinHostPort(addr.IP.String(), strconv.Itoa(int(addr.Port))) routes, err := netAdapter.Connect(peerAddress) if err != nil { return errors.Wrapf(err, "could not connect to %s", peerAddress) @@ -162,7 +162,6 @@ func pollPeer(netAdapter *standalone.MinimalNetAdapter, addr *appmessage.NetAddr log.Infof("Peer %s sent %d addresses, %d new", peerAddress, len(msgAddresses.AddressList), added) - amgr.Attempt(addr.IP) amgr.Good(addr.IP, nil) return nil diff --git a/manager.go b/manager.go index 34490bbd..f84ba256 100644 --- a/manager.go +++ b/manager.go @@ -240,17 +240,24 @@ func (m *Manager) prunePeers() { var count int now := time.Now() m.mtx.Lock() + + lastSeenAbovePruneExpire := func(node *Node) bool { + return now.Sub(node.LastSeen) > pruneExpireTimeout + } + hadAttemptsButNoSuccess := func(node *Node) bool { + return !node.LastAttempt.IsZero() && node.LastSuccess.IsZero() + } + hadSuccessButLongTimeAgo := func(node *Node) bool { + return !node.LastSuccess.IsZero() && now.Sub(node.LastSuccess) > pruneExpireTimeout + } + for k, node := range m.nodes { - if now.Sub(node.LastSeen) > pruneExpireTimeout { - delete(m.nodes, k) - count++ - continue - } - if !node.LastSuccess.IsZero() && - now.Sub(node.LastSuccess) > pruneExpireTimeout { + if lastSeenAbovePruneExpire(node) || + hadAttemptsButNoSuccess(node) || + hadSuccessButLongTimeAgo(node) { + delete(m.nodes, k) count++ - continue } } l := len(m.nodes)