in elastictransport/connection.go [334:357]
func (cp *statusConnectionPool) scheduleResurrect(c *Connection) {
factor := math.Min(float64(c.Failures-1), float64(defaultResurrectTimeoutFactorCutoff))
timeout := time.Duration(defaultResurrectTimeoutInitial.Seconds() * math.Exp2(factor) * float64(time.Second))
if debugLogger != nil {
debugLogger.Logf("Resurrect %s (failures=%d, factor=%1.1f, timeout=%s) in %s\n", c.URL, c.Failures, factor, timeout, c.DeadSince.Add(timeout).Sub(time.Now().UTC()).Truncate(time.Second))
}
time.AfterFunc(timeout, func() {
cp.Lock()
defer cp.Unlock()
c.Lock()
defer c.Unlock()
if !c.IsDead {
if debugLogger != nil {
debugLogger.Logf("Already resurrected %s\n", c.URL)
}
return
}
cp.resurrect(c, true)
})
}