fix: set StateReady after temporary accept error retry
When Accept() returns a transient error, the service enters StateFailed, sleeps for the retry delay, then loops back to Accept(). Previously the state stayed StateFailed until the next successful Accept() — which could take arbitrarily long for idle services, making status observers see a stale 'error' even though the service has already reconnected and is ready. Now set StateReady (and clear lastError) immediately after the retry sleep. Accept will block until the next connection, but the state correctly reflects that the service is functional.
This commit is contained in:
@@ -227,6 +227,14 @@ func (s *defaultService) Serve() error {
|
|||||||
|
|
||||||
log.Warnf("accept: %v, retrying in %v", e, tempDelay)
|
log.Warnf("accept: %v, retrying in %v", e, tempDelay)
|
||||||
time.Sleep(tempDelay)
|
time.Sleep(tempDelay)
|
||||||
|
|
||||||
|
// Transition back to Ready so status observers see the
|
||||||
|
// recovered service immediately, instead of waiting for
|
||||||
|
// the next successful Accept (which may block arbitrarily).
|
||||||
|
if s.status.State() == StateFailed {
|
||||||
|
s.setState(StateReady)
|
||||||
|
s.status.setLastError(nil)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.setState(StateClosed)
|
s.setState(StateClosed)
|
||||||
|
|||||||
Reference in New Issue
Block a user