diff --git a/adapter/outboundgroup/fallback.go b/adapter/outboundgroup/fallback.go index 5f365ff8a..734bd6b78 100644 --- a/adapter/outboundgroup/fallback.go +++ b/adapter/outboundgroup/fallback.go @@ -66,17 +66,20 @@ func (f *Fallback) onDialFailed() { f.failedTime.Store(now) f.failedTimes.Store(1) } else { - if f.failedTime.Load()-time.Now().UnixMilli() > 5*1000 { + if f.failedTime.Load()-time.Now().UnixMilli() > 5*time.Second.Milliseconds() { f.failedTimes.Store(-1) f.failedTime.Store(-1) } else { failedCount := f.failedTimes.Inc() log.Warnln("%s failed count: %d", f.Name(), failedCount) - if failedCount > 5 { + if failedCount >= 5 && failedCount < 6 { log.Warnln("because %s failed multiple times, active health check", f.Name()) for _, proxyProvider := range f.providers { go proxyProvider.HealthCheck() } + + f.failedTimes.Store(-1) + f.failedTime.Store(-1) } } } diff --git a/adapter/outboundgroup/urltest.go b/adapter/outboundgroup/urltest.go index c0ac5d3c3..836dcaac8 100644 --- a/adapter/outboundgroup/urltest.go +++ b/adapter/outboundgroup/urltest.go @@ -149,11 +149,14 @@ func (u *URLTest) onDialFailed() { } else { failedCount := u.failedTimes.Inc() log.Warnln("%s failed count: %d", u.Name(), failedCount) - if failedCount > 5 { + if failedCount >= 5 && failedCount < 6 { log.Warnln("because %s failed multiple times, active health check", u.Name()) for _, proxyProvider := range u.providers { go proxyProvider.HealthCheck() } + + u.failedTimes.Store(-1) + u.failedTime.Store(-1) } } }