Client discovery: wait during join if receive RES_CONTINUE_JOIN, RES_WAIT.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c1372ce2 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c1372ce2 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c1372ce2 Branch: refs/heads/master Commit: c1372ce2f0633968036fcfb079718214605c3350 Parents: 780bf23 Author: sboikov <sboi...@gridgain.com> Authored: Tue Sep 20 11:39:37 2016 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Tue Sep 20 11:39:37 2016 +0300 ---------------------------------------------------------------------- .../ignite/spi/discovery/tcp/ClientImpl.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/c1372ce2/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java index bf7f519..2c85645 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java @@ -497,6 +497,8 @@ class ClientImpl extends TcpDiscoveryImpl { Iterator<InetSocketAddress> it = addrs.iterator(); + boolean wait = false; + while (it.hasNext()) { if (Thread.currentThread().isInterrupted()) throw new InterruptedException(); @@ -515,12 +517,17 @@ class ClientImpl extends TcpDiscoveryImpl { Socket sock = sockAndRes.get1().socket(); + if (log.isDebugEnabled()) + log.debug("Received response to join request [addr=" + addr + ", res=" + sockAndRes.get2() + ']'); + switch (sockAndRes.get2()) { case RES_OK: return new T2<>(sockAndRes.get1(), sockAndRes.get3()); case RES_CONTINUE_JOIN: case RES_WAIT: + wait = true; + U.closeQuiet(sock); break; @@ -533,7 +540,16 @@ class ClientImpl extends TcpDiscoveryImpl { } } - if (addrs.isEmpty()) { + if (wait) { + if (timeout > 0 && (U.currentTimeMillis() - startTime) > timeout) + return null; + + if (log.isDebugEnabled()) + log.debug("Will wait before retry join."); + + Thread.sleep(2000); + } + else if (addrs.isEmpty()) { if (timeout > 0 && (U.currentTimeMillis() - startTime) > timeout) return null;