swarm/network: fix int overflow by converting to int64

This commit is contained in:
Anton Evangelatov 2018-02-14 14:45:24 +01:00
parent 411b9a9cdf
commit 3474bd58d5
2 changed files with 15 additions and 16 deletions

View file

@ -58,7 +58,7 @@ type KadParams struct {
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
RetryInterval int64 // 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
@ -399,9 +399,9 @@ func (k *Kademlia) callable(val pot.Val) OverlayAddr {
return nil
}
// calculate the allowed number of retries based on time lapsed since last seen
timeAgo := int(time.Since(e.seenAt))
div := k.RetryExponent
div += (150000 - rand.Intn(300000)) * div / 1000000
timeAgo := int64(time.Since(e.seenAt))
div := int64(k.RetryExponent)
div += (150000 - rand.Int63n(300000)) * div / 1000000
var retries int
for delta := timeAgo; delta > k.RetryInterval; delta /= div {
retries++

View file

@ -283,16 +283,15 @@ func TestSuggestPeerFindPeers(t *testing.T) {
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 = int64(time.Second) // cycle
k.MaxRetries = 50
k.RetryExponent = 2
sleep := func(n int) {
t := k.RetryInterval
ts := k.RetryInterval
for i := 1; i < n; i++ {
t *= k.RetryExponent
ts *= int64(k.RetryExponent)
}
time.Sleep(time.Duration(t))
time.Sleep(time.Duration(ts))
}
k.Register("01000000")