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 9f74b83..27f62b2 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 @@ -738,11 +738,19 @@ public class GridDiscoveryManager extends GridManagerAdapter { Object locMode = locNode.attribute(ATTR_DEPLOYMENT_MODE); + int locJvmMajVer = nodeJavaMajorVer(locNode); + boolean locP2pEnabled = locNode.attribute(ATTR_PEER_CLASSLOADING); boolean warned = false; for (ClusterNode n : nodes) { + int rmtJvmMajVer = nodeJavaMajorVer(n); + + if (locJvmMajVer != rmtJvmMajVer) + throw new IgniteCheckedException("Local node's java major version = " + locJvmMajVer + + " is different from remote node's one = " + rmtJvmMajVer); + String rmtPreferIpV4 = n.attribute("java.net.preferIPv4Stack"); if (!F.eq(rmtPreferIpV4, locPreferIpV4)) { @@ -784,6 +792,22 @@ public class GridDiscoveryManager extends GridManagerAdapter { } /** + * Gets Java major version running on the node. + * + * @param node Cluster node. + * @return Java major version. + * @throws IgniteCheckedException If failed to get the version. + */ + private int nodeJavaMajorVer(ClusterNode node) throws IgniteCheckedException { + try { + return Integer.parseInt(node.attribute("java.version").split("\\.")[1]); + } + catch (Exception e) { + throw new IgniteCheckedException("Failed to get java major version with reason: " + e.getMessage()); + } + } + + /** * @param nodes Nodes. * @return Total CPUs. */