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());
+                            }
                         }
                     }
 

Reply via email to