IGNITE-8699 Fix for ZookeeperDiscoverySpiTest#testDisconnectOnServersLeft flaky fails. - Fixes #4161.
Signed-off-by: Dmitriy Pavlov <dpav...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/db7302b0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/db7302b0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/db7302b0 Branch: refs/heads/ignite-8446 Commit: db7302b047aa605dc68ab2ba5c40c5e4f4ef12c8 Parents: 5ee876a Author: Vitaliy Biryukov <biryukovvitali...@gmail.com> Authored: Thu Jun 21 19:25:24 2018 +0300 Committer: Dmitriy Pavlov <dpav...@apache.org> Committed: Thu Jun 21 19:25:24 2018 +0300 ---------------------------------------------------------------------- .../zk/internal/ZookeeperDiscoveryImpl.java | 20 +++++++++++--------- .../zk/internal/ZookeeperDiscoverySpiTest.java | 11 +++++++---- 2 files changed, 18 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/db7302b0/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java ---------------------------------------------------------------------- diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java index 43d6aeb..0a6df70 100644 --- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java +++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java @@ -1363,7 +1363,16 @@ public class ZookeeperDiscoveryImpl { if (prevEvts.clusterId.equals(newEvts.clusterId)) { U.warn(log, "All server nodes failed, notify all clients [locId=" + locNode.id() + ']'); - generateNoServersEvent(newEvts, stat); + try { + generateNoServersEvent(newEvts, stat); + } + catch (KeeperException.BadVersionException ignored) { + if (log.isDebugEnabled()) + log.debug("Failed to save no servers message. Path version changed."); + + rtState.zkClient.getChildrenAsync(zkPaths.aliveNodesDir, null, + new CheckClientsStatusCallback(rtState)); + } } else U.warn(log, "All server nodes failed (received events from new cluster)."); @@ -1423,14 +1432,7 @@ public class ZookeeperDiscoveryImpl { byte[] newEvtsBytes = marshalZip(evtsData); - try { - rtState.zkClient.setData(zkPaths.evtsPath, newEvtsBytes, evtsStat.getVersion()); - } - catch (KeeperException.BadVersionException e) { - // Version can change if new cluster started and saved new events. - if (log.isDebugEnabled()) - log.debug("Failed to save no servers message"); - } + rtState.zkClient.setData(zkPaths.evtsPath, newEvtsBytes, evtsStat.getVersion()); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/db7302b0/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTest.java ---------------------------------------------------------------------- diff --git a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTest.java b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTest.java index c7ab940..f04a880 100644 --- a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTest.java +++ b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoverySpiTest.java @@ -21,7 +21,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import java.lang.management.ManagementFactory; -import java.net.InetSocketAddress; import java.net.SocketTimeoutException; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -311,10 +310,14 @@ public class ZookeeperDiscoverySpiTest extends GridCommonAbstractTest { assertNull(old); - synchronized (nodeEvts) { - DiscoveryLocalJoinData locJoin = ((IgniteKernal)ignite).context().discovery().localJoin(); + // If the current node has failed, the local join will never happened. + if (evt.type() != EVT_NODE_FAILED || + discoveryEvt.eventNode().consistentId().equals(ignite.configuration().getConsistentId())) { + synchronized (nodeEvts) { + DiscoveryLocalJoinData locJoin = ((IgniteEx)ignite).context().discovery().localJoin(); - nodeEvts.put(locJoin.event().topologyVersion(), locJoin.event()); + nodeEvts.put(locJoin.event().topologyVersion(), locJoin.event()); + } } }