Repository: ignite Updated Branches: refs/heads/master 411755620 -> 5135f82f3
IGNITE-8252 NPE is replaced with IgniteException with meaningful message - Fixes #3908. Signed-off-by: dspavlov <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5135f82f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5135f82f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5135f82f Branch: refs/heads/master Commit: 5135f82f3f53eddef9ab91da2e647e14488b2d5a Parents: 4117556 Author: Sergey Chugunov <[email protected]> Authored: Sat Apr 28 16:52:44 2018 +0300 Committer: dspavlov <[email protected]> Committed: Sat Apr 28 16:52:44 2018 +0300 ---------------------------------------------------------------------- .../preloader/latch/ExchangeLatchManager.java | 33 ++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/5135f82f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/latch/ExchangeLatchManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/latch/ExchangeLatchManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/latch/ExchangeLatchManager.java index b9c7dee..d44d165 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/latch/ExchangeLatchManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/latch/ExchangeLatchManager.java @@ -30,12 +30,15 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; +import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.GridTopic; import org.apache.ignite.internal.managers.communication.GridIoManager; import org.apache.ignite.internal.managers.communication.GridIoPolicy; +import org.apache.ignite.internal.managers.discovery.DiscoCache; import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.util.GridConcurrentHashSet; @@ -229,13 +232,33 @@ public class ExchangeLatchManager { } /** + * Gets alive server nodes from disco cache for provided AffinityTopologyVersion. + * + * @param topVer Topology version. + * @return Collection of nodes with at least one cache configured. + */ + private Collection<ClusterNode> aliveNodesForTopologyVer(AffinityTopologyVersion topVer) { + if (topVer == AffinityTopologyVersion.NONE) + return discovery.aliveServerNodes(); + else { + DiscoCache discoCache = discovery.discoCache(topVer); + + if (discoCache != null) + return discoCache.aliveServerNodes(); + else + throw new IgniteException("DiscoCache not found for topology " + + topVer + + "; consider increasing IGNITE_DISCOVERY_HISTORY_SIZE property. Current value is " + + IgniteSystemProperties.getInteger(IgniteSystemProperties.IGNITE_DISCOVERY_HISTORY_SIZE, -1)); + } + } + + /** * @param topVer Latch topology version. * @return Collection of alive server nodes with latch functionality. */ private Collection<ClusterNode> getLatchParticipants(AffinityTopologyVersion topVer) { - Collection<ClusterNode> aliveNodes = topVer == AffinityTopologyVersion.NONE - ? discovery.aliveServerNodes() - : discovery.discoCache(topVer).aliveServerNodes(); + Collection<ClusterNode> aliveNodes = aliveNodesForTopologyVer(topVer); return aliveNodes .stream() @@ -248,9 +271,7 @@ public class ExchangeLatchManager { * @return Oldest alive server node with latch functionality. */ @Nullable private ClusterNode getLatchCoordinator(AffinityTopologyVersion topVer) { - Collection<ClusterNode> aliveNodes = topVer == AffinityTopologyVersion.NONE - ? discovery.aliveServerNodes() - : discovery.discoCache(topVer).aliveServerNodes(); + Collection<ClusterNode> aliveNodes = aliveNodesForTopologyVer(topVer); return aliveNodes .stream()
