From 4480052cd6340fecb8459862a490bc0e9ea08cf3 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 30 Mar 2018 19:11:04 -0700 Subject: [PATCH] server: ensure a default backoff is always used --- server.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/server.go b/server.go index 53ae5e55b..f4d8808a2 100644 --- a/server.go +++ b/server.go @@ -1292,20 +1292,28 @@ func (s *server) peerTerminationWatcher(p *peer) { s.persistentConnReqs[pubStr] = append( s.persistentConnReqs[pubStr], connReq) - // Compute the subsequent backoff duration. - currBackoff := s.persistentPeersBackoff[pubStr] - nextBackoff := computeNextBackoff(currBackoff) - s.persistentPeersBackoff[pubStr] = nextBackoff + // Now, determine the appropriate backoff to use for the retry. + backoff, ok := s.persistentPeersBackoff[pubStr] + if !ok { + // If an existing backoff was unknown, use the default. + backoff = defaultBackoff + } else { + // Otherwise, use a previous backoff to compute the + // subsequent randomized exponential backoff duration. + backoff = computeNextBackoff(backoff) + } + + s.persistentPeersBackoff[pubStr] = backoff // We choose not to wait group this go routine since the Connect // call can stall for arbitrarily long if we shutdown while an // outbound connection attempt is being made. go func() { srvrLog.Debugf("Scheduling connection re-establishment to "+ - "persistent peer %v in %s", p, nextBackoff) + "persistent peer %v in %s", p, backoff) select { - case <-time.After(nextBackoff): + case <-time.After(backoff): case <-s.quit: return }