diff --git a/internal/p2p/peermanager.go b/internal/p2p/peermanager.go index 99ea85692..62f2c1a73 100644 --- a/internal/p2p/peermanager.go +++ b/internal/p2p/peermanager.go @@ -1038,13 +1038,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 } diff --git a/internal/p2p/peermanager_test.go b/internal/p2p/peermanager_test.go index f1dda6543..4f6eecd76 100644 --- a/internal/p2p/peermanager_test.go +++ b/internal/p2p/peermanager_test.go @@ -3,6 +3,7 @@ package p2p_test import ( "context" "errors" + "fmt" "strings" "testing" "time" @@ -314,13 +315,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) @@ -329,12 +331,11 @@ 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(a)) diff --git a/node/setup.go b/node/setup.go index e36fe6522..7e319db1e 100644 --- a/node/setup.go +++ b/node/setup.go @@ -461,10 +461,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, }