From 3a4875fc871eebca04e99017d475599a9929e019 Mon Sep 17 00:00:00 2001 From: lash Date: Tue, 16 Jan 2018 19:44:45 +0100 Subject: [PATCH] swarm/network: Fix kademlia param overflow on 32bit --- swarm/network/kademlia.go | 20 ++++++++++---------- swarm/network/kademlia_test.go | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/swarm/network/kademlia.go b/swarm/network/kademlia.go index d7bb7be6d7..ed1e01410d 100644 --- a/swarm/network/kademlia.go +++ b/swarm/network/kademlia.go @@ -54,14 +54,14 @@ var pof = pot.DefaultPof(256) // KadParams holds the config params for Kademlia type KadParams struct { // adjustable parameters - MaxProxDisplay int // number of rows the table shows - MinProxBinSize int // nearest neighbour core minimum cardinality - MinBinSize int // minimum number of peers in a row - MaxBinSize int // maximum number of peers in a row before pruning - RetryInterval int // initial interval before a peer is first redialed - RetryExponent int // exponent to multiply retry intervals with - MaxRetries int // maximum number of redial attempts - PruneInterval int // interval between peer pruning cycles + MaxProxDisplay int // number of rows the table shows + MinProxBinSize int // nearest neighbour core minimum cardinality + MinBinSize int // minimum number of peers in a row + MaxBinSize int // maximum number of peers in a row before pruning + RetryInterval uint // initial interval before a peer is first redialed + RetryExponent uint // exponent to multiply retry intervals with + MaxRetries int // maximum number of redial attempts + PruneInterval int // interval between peer pruning cycles // function to sanction or prevent suggesting a peer Reachable func(OverlayAddr) bool } @@ -400,10 +400,10 @@ func (k *Kademlia) callable(val pot.Val) OverlayAddr { } // calculate the allowed number of retries based on time lapsed since last seen timeAgo := int(time.Since(e.seenAt)) - div := k.RetryExponent + div := int(k.RetryExponent) div += (150000 - rand.Intn(300000)) * div / 1000000 var retries int - for delta := timeAgo; delta > k.RetryInterval; delta /= div { + for delta := timeAgo; uint(delta) > k.RetryInterval; delta /= div { retries++ } diff --git a/swarm/network/kademlia_test.go b/swarm/network/kademlia_test.go index 7e3c752dc2..16bbb62020 100644 --- a/swarm/network/kademlia_test.go +++ b/swarm/network/kademlia_test.go @@ -284,7 +284,7 @@ func TestSuggestPeerRetries(t *testing.T) { // 2 row gap, unsaturated proxbin, no callables -> want PO 0 k := newTestKademlia("00000000") cycle := time.Second - k.RetryInterval = int(cycle) + k.RetryInterval = uint(cycle) k.MaxRetries = 50 k.RetryExponent = 2 sleep := func(n int) {