Netflix/eureka
View on GitHubeureka client not register it self ofter a long time network connection problem
Open
#1,221 opened on Jun 22, 2019
bughelp wanted
Description
- after a long time network connection problem
- client instance is removed from eureka server
- renew thread try to send heart beat but eureka server return 404
- sendHeartBeat throw TransportException with 404 status code
- in the code below, try to re-register client but cause step 4 throw exception, so the re-register logic not executed
boolean renew() {
EurekaHttpResponse<InstanceInfo> httpResponse;
try {
httpResponse = eurekaTransport.registrationClient.sendHeartBeat(instanceInfo.getAppName(), instanceInfo.getId(), instanceInfo, null);
logger.debug(PREFIX + "{} - Heartbeat status: {}", appPathIdentifier, httpResponse.getStatusCode());
if (httpResponse.getStatusCode() == Status.NOT_FOUND.getStatusCode()) {
REREGISTER_COUNTER.increment();
logger.info(PREFIX + "{} - Re-registering apps/{}", appPathIdentifier, instanceInfo.getAppName());
long timestamp = instanceInfo.setIsDirtyWithTime();
boolean success = register();
if (success) {
instanceInfo.unsetIsDirty(timestamp);
}
return success;
}
return httpResponse.getStatusCode() == Status.OK.getStatusCode();
} catch (Throwable e) {
logger.error(PREFIX + "{} - was unable to send heartbeat!", appPathIdentifier, e);
return false;
}
}
- Eureka client always retry to send heartbeat with no re-register