hazelcast / hazelcast/hazelcast-eureka

Hazelcast eureka client is not able to register after Eureka Server restart

Open
#237 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
33
Forks
28
Avg merge
19h 22m
Merged PRs (30d)
7

Description

Hi,

Currently we use Eureka Server with Spring Boot 2.5.5 - org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:jar:3.0.4 and we plan to upgrade it to Spring Boot 3.1.6 - org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:jar:4.0.3.

Unfortunately, there is an issue with newer version of Eureka Server. After restarting Eureka Server cache's eureka client is not able to register itself but our application's eureka client is able to do that. Looks like an issue related with cache eureka client.

In the logs of eureka server we can see some warnings:

>2024-01-22T15:45:48.487+01:00 DEBUG 33229 --- [nio-8761-exec-9] o.s.s.a.dao.DaoAuthenticationProvider : Authenticated user
2024-01-22T15:45:48.487+01:00 DEBUG 33229 --- [nio-8761-exec-9] o.s.s.w.a.www.BasicAuthenticationFilter : Set SecurityContextHolder to UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=admin, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=null], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]
2024-01-22T15:45:48.488+01:00 DEBUG 33229 --- [nio-8761-exec-9] o.s.security.web.FilterChainProxy : Secured PUT /eureka/apps/USER-CACHE/f0899c53-47a8-4a2b-bab4-99855fe3c55c?status=UP&lastDirtyTimestamp=1705934237735
2024-01-22T15:45:48.489+01:00 WARN 33229 --- [nio-8761-exec-9] c.n.e.registry.AbstractInstanceRegistry : DS: Registry: lease doesn't exist, registering resource: USER-CACHE - f0899c53-47a8-4a2b-bab4-99855fe3c55c
2024-01-22T15:45:48.489+01:00 WARN 33229 --- [nio-8761-exec-9] c.n.eureka.resources.InstanceResource : Not Found (Renew): USER-CACHE - f0899c53-47a8-4a2b-bab4-99855fe3c55c
2024-01-22T15:45:48.489+01:00 DEBUG 33229 --- [nio-8761-exec-9] o.s.security.web.FilterChainProxy : Securing PUT /error?status=UP&lastDirtyTimestamp=1705934237735
2024-01-22T15:45:48.490+01:00 DEBUG 33229 --- [nio-8761-exec-9] o.s.security.web.FilterChainProxy : Secured PUT /error?status=UP&lastDirtyTimestamp=1705934237735

In the logs of our application we have an error related to cache:

>2024-01-22T15:51:48.563+01:00 ERROR 32183 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER-CACHE/f0899c53-47a8-4a2b-bab4-99855fe3c55c - was unable to send heartbeat!
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:837)
at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1401)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)

Bellow our cache configuration:

```
@Bean
public CacheManager cacheManager(HazelcastInstance hazelcastInstance) {
log.debug("Starting HazelcastCacheManager");
return new com.hazelcast.spring.cache.HazelcastCacheManager(hazelcastInstance);
}

@Bean
public HazelcastInstance hazelcastInstance() {
log.debug("Configuring Hazelcast");
HazelcastInstance hazelCastInstance = Hazelcast.getHazelcastInstanceByName(appName);
if (hazelCastInstance != null) {
log.debug("Hazelcast already initialized");
return hazelCastInstance;
}
Config config = new Config();
config.setInstanceName(appName);
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config
.getNetworkConfig()
.getJoin()
.getEurekaConfig()
.setEnabled(true)
.setProperty("self-registration", "true")
.setProperty("namespace", "hazelcast")
.setProperty("use-metadata-for-host-and-port", "false")
.setProperty("skip-eureka-registration-verification", "true")
.setProperty("use-classpath-eureka-client-props", "false")
.setProperty("shouldUseDns", "false")
.setProperty("name", appName + "-cache")
.setProperty("serviceUrl.default", eurekaServiceUrl);
config.setManagementCenterConfig(new ManagementCenterConfig());
// config.addMapConfig(initializeDefaultMapConfig(jHipsterProperties));
// config.addMapConfig(initializeDomainMapConfig(jHipsterProperties));
return Hazelcast.newHazelcastInstance(config);
}
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing the Hazelcast Eureka configuration shown in the report and the DiscoveryClient heartbeat and renew path named in the stack trace. Reproduce a Eureka Server restart with the provided setup, then verify that the cache client can register and resume heartbeats afterward.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring-boot
Domain
distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.