ignite-747: returning only verified nodes from top snapshot
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/96960375 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/96960375 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/96960375 Branch: refs/heads/ignite-747 Commit: 9696037540220507cbad1151ff10706bdd615c85 Parents: 20204f0 Author: Denis Magda <dma...@gridgain.com> Authored: Fri Jul 3 15:07:58 2015 +0300 Committer: Denis Magda <dma...@gridgain.com> Committed: Fri Jul 3 15:07:58 2015 +0300 ---------------------------------------------------------------------- .../managers/discovery/GridDiscoveryManager.java | 3 ++- .../apache/ignite/internal/util/lang/GridFunc.java | 16 ++++++++++++++++ .../tcp/internal/TcpDiscoveryNodesRing.java | 8 +++++++- 3 files changed, 25 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/96960375/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java index a8ce8ff..616e27c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java @@ -438,7 +438,8 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { // There is no race possible between history maintenance and concurrent discovery // event notifications, since SPI notifies manager about all events from this listener. if (verChanged) { - DiscoCache cache = new DiscoCache(locNode, F.view(topSnapshot, F.remoteNodes(locNode.id()))); + DiscoCache cache = new DiscoCache(locNode, F.view(topSnapshot, + F.remoteVerifiedNodes(locNode.id()))); discoCacheHist.put(nextTopVer, cache); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/96960375/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java index 6f544e0..d04190a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java @@ -332,6 +332,22 @@ public class GridFunc { } /** + * Gets predicate that evaluates to {@code false} for given local node ID and unverified nodes - who hasn't + * received order ID from the coordinator. + * + * @param locNodeId Local node ID. + * @param <T> Type of the node. + * @return Return {@code false} for the given local node ID. + */ + public static <T extends ClusterNode> IgnitePredicate<T> remoteVerifiedNodes(final UUID locNodeId) { + return new P1<T>() { + @Override public boolean apply(T n) { + return n.order() > 0 && !n.id().equals(locNodeId); + } + }; + } + + /** * Creates new collection by removing duplicates from the given collection. * * @param c Collection to remove duplicates from. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/96960375/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNodesRing.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNodesRing.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNodesRing.java index e9eaa1d..acb479d 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNodesRing.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNodesRing.java @@ -34,7 +34,13 @@ public class TcpDiscoveryNodesRing { /** Visible nodes filter. */ public static final IgnitePredicate<TcpDiscoveryNode> VISIBLE_NODES = new P1<TcpDiscoveryNode>() { @Override public boolean apply(TcpDiscoveryNode node) { - return node.visible(); + if (node.visible()) { + assert node.order() > 0 : "Invalid node order: " + node; + + return true; + } + + return false; } };