mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-05 04:55:18 +00:00
p2p: retry failed connections slightly more aggressively (#8010)
* p2p: retry failed connections slightly more aggressively * fix dial interval test
This commit is contained in:
@@ -1004,13 +1004,15 @@ func (m *PeerManager) retryDelay(failures uint32, persistent bool) time.Duration
|
||||
maxDelay = m.options.MaxRetryTimePersistent
|
||||
}
|
||||
|
||||
delay := m.options.MinRetryTime * time.Duration(math.Pow(2, float64(failures-1)))
|
||||
if maxDelay > 0 && delay > maxDelay {
|
||||
delay = maxDelay
|
||||
}
|
||||
delay := m.options.MinRetryTime * time.Duration(failures)
|
||||
if m.options.RetryTimeJitter > 0 {
|
||||
delay += time.Duration(m.rand.Int63n(int64(m.options.RetryTimeJitter)))
|
||||
}
|
||||
|
||||
if maxDelay > 0 && delay > maxDelay {
|
||||
delay = maxDelay
|
||||
}
|
||||
|
||||
return delay
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package p2p_test
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -315,13 +316,14 @@ func TestPeerManager_DialNext_Retry(t *testing.T) {
|
||||
ctx, cancel = context.WithTimeout(ctx, 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
for i := 0; i <= 5; i++ {
|
||||
for i := 0; i <= 6; i++ {
|
||||
start := time.Now()
|
||||
dial, err := peerManager.DialNext(ctx)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, a, dial)
|
||||
elapsed := time.Since(start).Round(time.Millisecond)
|
||||
|
||||
fmt.Println(elapsed, options.MinRetryTime)
|
||||
switch i {
|
||||
case 0:
|
||||
require.LessOrEqual(t, elapsed, options.MinRetryTime)
|
||||
@@ -330,14 +332,12 @@ func TestPeerManager_DialNext_Retry(t *testing.T) {
|
||||
case 2:
|
||||
require.GreaterOrEqual(t, elapsed, 2*options.MinRetryTime)
|
||||
case 3:
|
||||
require.GreaterOrEqual(t, elapsed, 3*options.MinRetryTime)
|
||||
case 4, 5, 6:
|
||||
require.GreaterOrEqual(t, elapsed, 4*options.MinRetryTime)
|
||||
case 4, 5:
|
||||
require.GreaterOrEqual(t, elapsed, options.MaxRetryTime)
|
||||
require.LessOrEqual(t, elapsed, 8*options.MinRetryTime)
|
||||
default:
|
||||
require.Fail(t, "unexpected retry")
|
||||
t.Fatal("unexpected retry")
|
||||
}
|
||||
|
||||
require.NoError(t, peerManager.DialFailed(ctx, a))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,10 +332,10 @@ func createPeerManager(
|
||||
MaxConnected: maxConns,
|
||||
MaxConnectedUpgrade: 4,
|
||||
MaxPeers: 1000,
|
||||
MinRetryTime: 100 * time.Millisecond,
|
||||
MaxRetryTime: 8 * time.Hour,
|
||||
MinRetryTime: 250 * time.Millisecond,
|
||||
MaxRetryTime: 30 * time.Minute,
|
||||
MaxRetryTimePersistent: 5 * time.Minute,
|
||||
RetryTimeJitter: 3 * time.Second,
|
||||
RetryTimeJitter: 5 * time.Second,
|
||||
PrivatePeers: privatePeerIDs,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user