Skip to content

Commit

Permalink
Throw exception when proxy is not created succesfully. (#10963)
Browse files Browse the repository at this point in the history
fixes #10961
  • Loading branch information
mustafa sancar koyunlu authored and asimarslan committed Jul 31, 2017
1 parent 06c758a commit 9771b45
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IAtomicLong;
import com.hazelcast.core.Member;
import com.hazelcast.core.OperationTimeoutException;
import com.hazelcast.durableexecutor.impl.DistributedDurableExecutorService;
import com.hazelcast.executor.impl.DistributedExecutorService;
import com.hazelcast.map.impl.MapService;
Expand Down Expand Up @@ -320,8 +321,9 @@ public void removeProxy(String service, String id) {
}

private void initializeWithRetry(ClientProxy clientProxy) throws Exception {
final long retryCountLimit = getRetryCountLimit();
for (int retryCount = 0; retryCount < retryCountLimit; retryCount++) {
long invocationTimeoutMillis = getInvocationTimeoutMillis();
long startMillis = System.currentTimeMillis();
while (System.currentTimeMillis() < startMillis + invocationTimeoutMillis) {
try {
initialize(clientProxy);
return;
Expand All @@ -339,13 +341,17 @@ private void initializeWithRetry(ClientProxy clientProxy) throws Exception {
}
}
}
long elapsedTime = System.currentTimeMillis() - startMillis;
throw new OperationTimeoutException("Initializing " + clientProxy.getServiceName() + ":"
+ clientProxy.getName() + " is timed out after " + elapsedTime
+ " ms. Configured invocation timeout is " + invocationTimeoutMillis + " ms");
}

private long getRetryCountLimit() {
private long getInvocationTimeoutMillis() {
HazelcastProperties hazelcastProperties = client.getProperties();
int waitTime = hazelcastProperties.getSeconds(INVOCATION_TIMEOUT_SECONDS);
long retryTimeoutInSeconds = waitTime > 0 ? waitTime : Integer.parseInt(INVOCATION_TIMEOUT_SECONDS.getDefaultValue());
return retryTimeoutInSeconds / ClientInvocation.RETRY_WAIT_TIME_IN_SECONDS;
waitTime = waitTime > 0 ? waitTime : Integer.parseInt(INVOCATION_TIMEOUT_SECONDS.getDefaultValue());
return TimeUnit.SECONDS.toMillis(waitTime);
}

private boolean isRetryable(final Throwable t) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@

package com.hazelcast.client.proxy;

import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.impl.HazelcastClientInstanceImpl;
import com.hazelcast.client.spi.ProxyManager;
import com.hazelcast.client.spi.properties.ClientProperty;
import com.hazelcast.client.test.TestHazelcastFactory;
import com.hazelcast.config.Config;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.OperationTimeoutException;
import com.hazelcast.nio.Address;
import com.hazelcast.test.HazelcastParallelClassRunner;
import com.hazelcast.test.HazelcastTestSupport;
Expand Down Expand Up @@ -123,4 +126,14 @@ private List<HazelcastInstance> createNodes(final int numberOfLiteNodes, final i

return instances;
}

@Test(expected = OperationTimeoutException.class)
public void testProxyCreateTimeout_whenClusterIsNotReachable() {
HazelcastInstance instance = factory.newHazelcastInstance();
ClientConfig config = new ClientConfig();
config.setProperty(ClientProperty.INVOCATION_TIMEOUT_SECONDS.getName(), "1");
HazelcastInstance client = factory.newHazelcastClient(config);
instance.shutdown();
client.getMap("test");
}
}

0 comments on commit 9771b45

Please sign in to comment.