2
votes

I am getting an exception on hazelcast client reconnect, when the only hazelcast server node is restarted:

SEVERE: Error while fetching cluster partition table!
com.hazelcast.core.HazelcastInstanceNotActiveException: Hazelcast instance is not ready yet!
at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.processRequest(ClientEngineImpl.java:423)
at com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.run(ClientEngineImpl.java:346)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76)
at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92)
at ------ End remote and begin local stack-trace ------.(Unknown Source)
at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl.sendAndReceive(ClientConnectionManagerImpl.java:500)
at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl.authenticate(ClientConnectionManagerImpl.java:474)
at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl.access$2100(ClientConnectionManagerImpl.java:85)
at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl$ClusterAuthenticator.auth(ClientConnectionManagerImpl.java:461)
at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl$ConnectionProcessor.call(ClientConnectionManagerImpl.java:395)
at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl$ConnectionProcessor.call(ClientConnectionManagerImpl.java:353)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:57)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76)
at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92)

this doesn't prevent client from reconnecting, client gets reconnected few seconds later:

INFO: HazelcastClient[hz.client_0_dev][3.4.2] is CLIENT_CONNECTED

Any ideas what is happening and how to prevent this log from appearing?

I'm running both server and client locally.

Server configuration:

   private static Config createServerConfig(int port, String members) {
        Config config = new Config();

        NetworkConfig network = config.getNetworkConfig();

        network.setPort(port);
        network.setPortAutoIncrement(true);

        JoinConfig join = network.getJoin();

        join.getMulticastConfig().setEnabled(false);
        join.getTcpIpConfig().setEnabled(true);

        for (String host : members.split(";")) {
            join.getTcpIpConfig().addMember(host);
        }

        return config;
    }

Client config:

  private static ClientConfig createClientConfig(String members) {
        ClientConfig config = new ClientConfig();

        ClientNetworkConfig cnc = new ClientNetworkConfig();
        cnc.setConnectionAttemptLimit(0);
        for (String host : members.split(";")) {
            cnc.addAddress(host);
        }
        config.setNetworkConfig(cnc);

        return config;
    }
1

1 Answers

2
votes

This is not a destructive exception. Partition Table is updated periodically and not able to update partition table will not affect the consistency. Only problem is performance for short amount of time after cluster change.

Unfortunately there is no way to prevent this from happening. For our side, it seems like printing this as SEVERE log was wrong to begin with. If you file an issue at https://github.com/hazelcast/, you can track the process of related fix.