NoodleX
NoodleX

Reputation: 749

How to safely resume cache operation on client side after Hazelcast restart?

Whenever I restart hazelcast server, without restarting client in spring boot. I'm getting following error :

    03-01-2018 16:44:17.966 [http-nio-8080-exec-7] ERROR  o.a.c.c.C.[.[.[.[dispatcherServlet].log - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.hazelcast.client.HazelcastClientNotActiveException: Partition does not have owner. partitionId : 203] with root cause
java.io.IOException: Partition does not have owner. partitionId : 203
    at com.hazelcast.client.spi.impl.ClientSmartInvocationServiceImpl.invokeOnPartitionOwner(ClientSmartInvocationServiceImpl.java:43)
    at com.hazelcast.client.spi.impl.ClientInvocation.invokeOnSelection(ClientInvocation.java:142)
    at com.hazelcast.client.spi.impl.ClientInvocation.invoke(ClientInvocation.java:122)
    at com.hazelcast.client.spi.ClientProxy.invokeOnPartition(ClientProxy.java:152)
    at com.hazelcast.client.spi.ClientProxy.invoke(ClientProxy.java:147)
    at com.hazelcast.client.proxy.ClientMapProxy.getInternal(ClientMapProxy.java:245)
    at com.hazelcast.client.proxy.ClientMapProxy.get(ClientMapProxy.java:240)
    at com.hazelcast.spring.cache.HazelcastCache.lookup(HazelcastCache.java:139)
    at com.hazelcast.spring.cache.HazelcastCache.get(HazelcastCache.java:57)
    at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:71)

If I enabled hot-restart, the issue is solved. But is there a way to resume client application without restarting it and hot-restart is disabled ?

Upvotes: 0

Views: 949

Answers (1)

Alparslan Avci
Alparslan Avci

Reputation: 981

Hazelcast client tries to reconnect to the cluster if the connection drops. It uses ClientNetworkConfig.connectionAttemptLimit and ClientNetworkConfig.connectionAttemptPeriod elements to configure how frequently it will try. connectionAttemptLimit defines the number of attempts on a disconnection and connectionAttemptPeriod defines the period between two retries in ms. Please see the usage example below:

ClientConfig clientConfig = new ClientConfig();
clientConfig.getNetworkConfig().setConnectionAttemptLimit(5);
clientConfig.getNetworkConfig().setConnectionAttemptPeriod(5000);

Starting with Hazelcast 3.9, you can use reconnect-mode property to configure how the client will reconnect to the cluster after it disconnects. It has three options:

  • The option OFF disables the reconnection.
  • ON enables reconnection in a blocking manner where all the waiting invocations will be blocked until a cluster connection is established or failed.
  • The option ASYNC enables reconnection in a non-blocking manner where all the waiting invocations will receive a HazelcastClientOfflineException.

Its default value is ON. You can see a configuration example below:

ClientConfig clientConfig = new ClientConfig();
clientConfig.getConnectionStrategyConfig()
        .setReconnectMode(ClientConnectionStrategyConfig.ReconnectMode.ON);

By using these configuration elements, you can resume your client without restarting it.

Upvotes: 1

Related Questions