IGNITE-8192 Print out information on how many nodes left until auto-activation
Signed-off-by: Andrey Gura <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/493cc148 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/493cc148 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/493cc148 Branch: refs/heads/ignite-6083 Commit: 493cc14844b5ea1d4429f4c0a06f39ff739de2ca Parents: 244bb75 Author: Aleksey Plekhanov <[email protected]> Authored: Mon Apr 23 13:27:51 2018 +0300 Committer: Andrey Gura <[email protected]> Committed: Mon Apr 23 13:32:45 2018 +0300 ---------------------------------------------------------------------- .../apache/ignite/internal/IgniteKernal.java | 5 +- .../discovery/GridDiscoveryManager.java | 65 ++++++++++++++++---- .../ignite/internal/util/lang/GridFunc.java | 14 +++-- 3 files changed, 65 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/493cc148/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index 0e0e655..920f519 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -99,12 +99,12 @@ import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.MemoryConfiguration; import org.apache.ignite.configuration.NearCacheConfiguration; +import org.apache.ignite.events.EventType; import org.apache.ignite.internal.binary.BinaryEnumCache; import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.binary.BinaryUtils; import org.apache.ignite.internal.cluster.ClusterGroupAdapter; import org.apache.ignite.internal.cluster.IgniteClusterEx; -import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.failure.FailureProcessor; import org.apache.ignite.internal.managers.GridManager; import org.apache.ignite.internal.managers.checkpoint.GridCheckpointManager; @@ -1301,7 +1301,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { ackStart(rtBean); if (!isDaemon()) - ctx.discovery().ackTopology(ctx.discovery().localJoin().joinTopologyVersion().topologyVersion()); + ctx.discovery().ackTopology(ctx.discovery().localJoin().joinTopologyVersion().topologyVersion(), + EventType.EVT_NODE_JOINED, localNode()); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/493cc148/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 77c9657..6af3293 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 @@ -1372,18 +1372,22 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { * Prints the latest topology info into log taking into account logging/verbosity settings. * * @param topVer Topology version. + * @param evtType Event type. + * @param evtNode Event node. */ - public void ackTopology(long topVer) { - ackTopology(topVer, false); + public void ackTopology(long topVer, int evtType, ClusterNode evtNode) { + ackTopology(topVer, evtType, evtNode, false); } /** * Logs grid size for license compliance. * * @param topVer Topology version. + * @param evtType Event type. + * @param evtNode Event node. * @param throttle Suppress printing if this topology was already printed. */ - private void ackTopology(long topVer, boolean throttle) { + private void ackTopology(long topVer, int evtType, ClusterNode evtNode, boolean throttle) { assert !isLocDaemon; DiscoCache discoCache = discoCacheHist.get(new AffinityTopologyVersion(topVer)); @@ -1430,7 +1434,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { return null; } - }, topVer, srvNodes.size(), clientNodes.size(), totalCpus, heap, offheap); + }, topVer, discoCache, evtType, evtNode, srvNodes.size(), clientNodes.size(), totalCpus, heap, offheap); if (log.isDebugEnabled()) { String dbg = ""; @@ -1481,7 +1485,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { return null; } - }, topVer, srvNodes.size(), clientNodes.size(), totalCpus, heap, offheap); + }, topVer, discoCache, evtType, evtNode, srvNodes.size(), clientNodes.size(), totalCpus, heap, offheap); } /** @@ -1557,14 +1561,18 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { /** * @param clo Wrapper of logger. * @param topVer Topology version. + * @param discoCache Discovery cache. + * @param evtType Event type. + * @param evtNode Event node. * @param srvNodesNum Server nodes number. * @param clientNodesNum Client nodes number. * @param totalCpus Total cpu number. * @param heap Heap size. * @param offheap Offheap size. */ - private void topologySnapshotMessage(IgniteClosure<String, Void> clo, long topVer, int srvNodesNum, - int clientNodesNum, int totalCpus, double heap, double offheap) { + private void topologySnapshotMessage(IgniteClosure<String, Void> clo, long topVer, DiscoCache discoCache, + int evtType, ClusterNode evtNode, int srvNodesNum, int clientNodesNum, int totalCpus, double heap, + double offheap) { String summary = PREFIX + " [" + (discoOrdered ? "ver=" + topVer + ", " : "") + "servers=" + srvNodesNum + @@ -1575,6 +1583,41 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { clo.apply(summary); + DiscoveryDataClusterState state = discoCache.state(); + + clo.apply(" ^-- Node [id=" + discoCache.localNode().id().toString().toUpperCase() + ", clusterState=" + + (state.active() ? "ACTIVE" : "INACTIVE") + ']'); + + BaselineTopology blt = state.baselineTopology(); + + if (blt != null && discoCache.baselineNodes() != null) { + int bltSize = discoCache.baselineNodes().size(); + int bltOnline = discoCache.aliveBaselineNodes().size(); + int bltOffline = bltSize - bltOnline; + + clo.apply(" ^-- Baseline [id=" + blt.id() + ", size=" + bltSize + ", online=" + bltOnline + + ", offline=" + bltOffline + ']'); + + if (!state.active() && ctx.config().isAutoActivationEnabled()) { + String offlineConsistentIds = ""; + + if (bltOffline > 0 && bltOffline <= 5) { + Collection<BaselineNode> offlineNodes = new HashSet<>(discoCache.baselineNodes()); + + offlineNodes.removeAll(discoCache.aliveBaselineNodes()); + + offlineConsistentIds = ' ' + F.nodeConsistentIds(offlineNodes).toString(); + } + + if (bltOffline == 0) { + if (evtType == EVT_NODE_JOINED && discoCache.baselineNode(evtNode)) + clo.apply(" ^-- All baseline nodes are online, will start auto-activation"); + } + else + clo.apply(" ^-- " + bltOffline + " nodes left for auto-activation" + offlineConsistentIds); + } + } + DataStorageConfiguration memCfg = ctx.config().getDataStorageConfiguration(); if (memCfg == null) @@ -2742,7 +2785,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { if (log.isInfoEnabled()) log.info("Added new node to topology: " + node); - ackTopology(topVer.topologyVersion(), true); + ackTopology(topVer.topologyVersion(), type, node, true); } else if (log.isDebugEnabled()) log.debug("Added new node to topology: " + node); @@ -2763,7 +2806,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { if (log.isInfoEnabled()) log.info("Node left topology: " + node); - ackTopology(topVer.topologyVersion(), true); + ackTopology(topVer.topologyVersion(), type, node, true); } else if (log.isDebugEnabled()) log.debug("Node left topology: " + node); @@ -2785,7 +2828,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { log.info("Client node reconnected to topology: " + node); if (!isLocDaemon) - ackTopology(topVer.topologyVersion(), true); + ackTopology(topVer.topologyVersion(), type, node, true); break; } @@ -2799,7 +2842,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { if (!isLocDaemon) { U.warn(log, "Node FAILED: " + node); - ackTopology(topVer.topologyVersion(), true); + ackTopology(topVer.topologyVersion(), type, node, true); } else if (log.isDebugEnabled()) log.debug("Node FAILED: " + node); http://git-wip-us.apache.org/repos/asf/ignite/blob/493cc148/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 ef32e31..f9c4d9d 100755 --- 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 @@ -43,6 +43,7 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.cache.Cache; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.cluster.BaselineNode; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException; import org.apache.ignite.internal.IgniteInternalFuture; @@ -164,11 +165,12 @@ public class GridFunc { private static final IgniteClosure<ClusterNode, UUID> NODE2ID = new ClusterNodeGetIdClosure(); /** */ - private static final IgniteClosure<ClusterNode, Object> NODE2CONSISTENTID = new IgniteClosure<ClusterNode, Object>() { - @Override public Object apply(ClusterNode node) { - return node.consistentId(); - } - }; + private static final IgniteClosure<BaselineNode, Object> NODE2CONSISTENTID = + new IgniteClosure<BaselineNode, Object>() { + @Override public Object apply(BaselineNode node) { + return node.consistentId(); + } + }; /** * Gets predicate that evaluates to {@code true} only for given local node ID. @@ -335,7 +337,7 @@ public class GridFunc { * @param nodes Collection of grid nodes. * @return Collection of node consistent IDs for given collection of grid nodes. */ - public static Collection<Object> nodeConsistentIds(@Nullable Collection<? extends ClusterNode> nodes) { + public static Collection<Object> nodeConsistentIds(@Nullable Collection<? extends BaselineNode> nodes) { if (nodes == null || nodes.isEmpty()) return Collections.emptyList();
