Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id A0750200BCB for ; Thu, 24 Nov 2016 15:40:35 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 9ECE0160B1E; Thu, 24 Nov 2016 14:40:35 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 23F48160B11 for ; Thu, 24 Nov 2016 15:40:33 +0100 (CET) Received: (qmail 93432 invoked by uid 500); 24 Nov 2016 14:40:33 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 93423 invoked by uid 99); 24 Nov 2016 14:40:33 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 24 Nov 2016 14:40:33 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 0E997DFFAB; Thu, 24 Nov 2016 14:40:32 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: ignite git commit: ignite-4296 Date: Thu, 24 Nov 2016 14:40:32 +0000 (UTC) archived-at: Thu, 24 Nov 2016 14:40:35 -0000 Repository: ignite Updated Branches: refs/heads/ignite-4296 d4477e845 -> afe487d9d ignite-4296 Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/afe487d9 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/afe487d9 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/afe487d9 Branch: refs/heads/ignite-4296 Commit: afe487d9d96d311b1c42f75120eab8018512741b Parents: d4477e8 Author: sboikov Authored: Thu Nov 24 15:21:08 2016 +0300 Committer: sboikov Committed: Thu Nov 24 17:40:05 2016 +0300 ---------------------------------------------------------------------- .../rendezvous/RendezvousAffinityFunction.java | 2 +- .../dht/GridClientPartitionTopology.java | 83 ++++--- .../distributed/dht/GridDhtLocalPartition.java | 1 - .../dht/GridDhtPartitionTopology.java | 11 +- .../dht/GridDhtPartitionTopologyImpl.java | 92 ++++---- .../tcp/internal/TcpDiscoveryStatistics.java | 2 + .../distributed/dht/GridCacheDhtTestUtils.java | 232 ------------------- .../IgniteBinaryObjectsTestSuite.java | 2 +- .../h2/twostep/GridReduceQueryExecutor.java | 14 +- 9 files changed, 110 insertions(+), 329 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java index c76aae8..75e7c92 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunction.java @@ -392,7 +392,7 @@ public class RendezvousAffinityFunction implements AffinityFunction, Externaliza System.arraycopy(nodeHashBytes0, 0, nodeHashBytes, 4, nodeHashBytes0.length); - nodesHash.put(node, nodeHashBytes0); + nodesHash.put(node, nodeHashBytes); } U.intToBytes(part, nodeHashBytes, 0); http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java index f2ee758..c106370 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java @@ -536,7 +536,8 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { try { assert node2part != null && node2part.valid() : "Invalid node2part [node2part: " + node2part + - ", locNodeId=" + cctx.localNodeId() + ", gridName=" + cctx.gridName() + ']'; + ", locNodeId=" + cctx.localNodeId() + + ", gridName=" + cctx.gridName() + ']'; GridDhtPartitionFullMap m = node2part; @@ -675,8 +676,6 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { lastExchangeId = exchId; if (node2part == null) { - U.dumpStack(log, "Created invalid: " + node2part); - // Create invalid partition map. node2part = new GridDhtPartitionFullMap(); } @@ -693,36 +692,37 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { long updateSeq = this.updateSeq.incrementAndGet(); - node2part = new GridDhtPartitionFullMap(node2part, updateSeq); - - boolean changed = false; + node2part.updateSequence(updateSeq); - if (cur == null || !cur.equals(parts)) - changed = true; + boolean changed = cur == null || !cur.equals(parts); - node2part.put(parts.nodeId(), parts); + if (changed) + node2part.put(parts.nodeId(), parts); - part2node = new HashMap<>(part2node); + if (changed) { + // Add new mappings. + for (Integer p : parts.keySet()) { + Set ids = part2node.get(p); - // Add new mappings. - for (Integer p : parts.keySet()) { - Set ids = part2node.get(p); + if (ids == null) + // Initialize HashSet to size 3 in anticipation that there won't be + // more than 3 nodes per partition. + part2node.put(p, ids = U.newHashSet(3)); - if (ids == null) - // Initialize HashSet to size 3 in anticipation that there won't be - // more than 3 nodes per partition. - part2node.put(p, ids = U.newHashSet(3)); + ids.add(parts.nodeId()); + } - changed |= ids.add(parts.nodeId()); - } + // Remove obsolete mappings. + if (cur != null) { + for (Integer p : cur.keySet()) { + if (parts.containsKey(p)) + continue; - // Remove obsolete mappings. - if (cur != null) { - for (Integer p : F.view(cur.keySet(), F0.notIn(parts.keySet()))) { - Set ids = part2node.get(p); + Set ids = part2node.get(p); - if (ids != null) - changed |= ids.remove(parts.nodeId()); + if (ids != null) + ids.remove(parts.nodeId()); + } } } @@ -877,18 +877,6 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { } /** {@inheritDoc} */ - @Nullable @Override public GridDhtPartitionMap2 partitions(UUID nodeId) { - lock.readLock().lock(); - - try { - return node2part.get(nodeId); - } - finally { - lock.readLock().unlock(); - } - } - - /** {@inheritDoc} */ @Override public Map updateCounters(boolean skipZeros) { lock.readLock().lock(); @@ -919,6 +907,27 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology { } /** {@inheritDoc} */ + @Override public boolean hasMovingPartitions() { + lock.readLock().lock(); + + try { + assert node2part != null && node2part.valid() : "Invalid node2part [node2part: " + node2part + + ", locNodeId=" + cctx.localNodeId() + + ", gridName=" + cctx.gridName() + ']'; + + for (GridDhtPartitionMap2 map : node2part.values()) { + if (map.hasMovingPartitions()) + return true; + } + + return false; + } + finally { + lock.readLock().unlock(); + } + } + + /** {@inheritDoc} */ @Override public void printMemoryStats(int threshold) { X.println(">>> Cache partition topology stats [grid=" + cctx.gridName() + ", cacheId=" + cacheId + ']'); } http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java index 39a3e08..668a1cd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java @@ -479,7 +479,6 @@ public class GridDhtLocalPartition implements Comparable, if ((reservations & 0xFFFF) == 0 && casState(reservations, RENTING)) { shouldBeRenting = false; - if (log.isDebugEnabled()) log.debug("Moved partition to RENTING state: " + this); http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java index 33a6fdf..bf11ea5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java @@ -195,6 +195,11 @@ public interface GridDhtPartitionTopology { public GridDhtPartitionFullMap partitionMap(boolean onlyActive); /** + * @return {@code True} If one of cache nodes has partitions in {@link GridDhtPartitionState#MOVING} state. + */ + public boolean hasMovingPartitions(); + + /** * @param e Entry removed from cache. */ public void onRemoved(GridDhtCacheEntry e); @@ -238,12 +243,6 @@ public interface GridDhtPartitionTopology { public void onEvicted(GridDhtLocalPartition part, boolean updateSeq); /** - * @param nodeId Node to get partitions for. - * @return Partitions for node. - */ - @Nullable public GridDhtPartitionMap2 partitions(UUID nodeId); - - /** * Prints memory stats. * * @param threshold Threshold for number of entries. http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java index 24ff3ac..17f4b76 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java @@ -1079,7 +1079,7 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { node2part = partMap; - Map> p2n = new HashMap<>(cctx.affinity().partitions(), 1.0f); + Map> p2n = U.newHashMap(cctx.affinity().partitions()); for (Map.Entry e : partMap.entrySet()) { for (Integer p : e.getValue().keySet()) { @@ -1187,36 +1187,37 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { long updateSeq = this.updateSeq.incrementAndGet(); - node2part = new GridDhtPartitionFullMap(node2part, updateSeq); + node2part.updateSequence(updateSeq); - boolean changed = false; - - if (cur == null || !cur.equals(parts)) - changed = true; + boolean changed = cur == null || !cur.equals(parts); - node2part.put(parts.nodeId(), parts); + if (changed) + node2part.put(parts.nodeId(), parts); - part2node = new HashMap<>(part2node); + if (changed) { + // Add new mappings. + for (Integer p : parts.keySet()) { + Set ids = part2node.get(p); - // Add new mappings. - for (Integer p : parts.keySet()) { - Set ids = part2node.get(p); + if (ids == null) + // Initialize HashSet to size 3 in anticipation that there won't be + // more than 3 nodes per partition. + part2node.put(p, ids = U.newHashSet(3)); - if (ids == null) - // Initialize HashSet to size 3 in anticipation that there won't be - // more than 3 nodes per partition. - part2node.put(p, ids = U.newHashSet(3)); + ids.add(parts.nodeId()); + } - changed |= ids.add(parts.nodeId()); - } + // Remove obsolete mappings. + if (cur != null) { + for (Integer p : cur.keySet()) { + if (parts.containsKey(p)) + continue; - // Remove obsolete mappings. - if (cur != null) { - for (Integer p : F.view(cur.keySet(), F0.notIn(parts.keySet()))) { - Set ids = part2node.get(p); + Set ids = part2node.get(p); - if (ids != null) - changed |= ids.remove(parts.nodeId()); + if (ids != null) + ids.remove(parts.nodeId()); + } } } @@ -1330,7 +1331,6 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"}) private void updateLocal(ClusterNode oldest, int p, UUID nodeId, GridDhtPartitionState state, long updateSeq) { assert nodeId.equals(cctx.nodeId()); - assert oldest != null || cctx.kernalContext().clientNode(); // If this node became the oldest node. @@ -1396,8 +1396,6 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { else node2part = new GridDhtPartitionFullMap(node2part, node2part.updateSequence()); - part2node = new HashMap<>(part2node); - GridDhtPartitionMap2 parts = node2part.remove(nodeId); if (parts != null) { @@ -1467,18 +1465,6 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { } /** {@inheritDoc} */ - @Nullable @Override public GridDhtPartitionMap2 partitions(UUID nodeId) { - lock.readLock().lock(); - - try { - return node2part.get(nodeId); - } - finally { - lock.readLock().unlock(); - } - } - - /** {@inheritDoc} */ @Override public Map updateCounters(boolean skipZeros) { lock.readLock().lock(); @@ -1531,6 +1517,30 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { } /** {@inheritDoc} */ + @Override public boolean hasMovingPartitions() { + lock.readLock().lock(); + + try { + assert node2part != null && node2part.valid() : "Invalid node2part [node2part: " + node2part + + ", cache=" + cctx.name() + + ", started=" + cctx.started() + + ", stopping=" + stopping + + ", locNodeId=" + cctx.localNode().id() + + ", locName=" + cctx.gridName() + ']'; + + for (GridDhtPartitionMap2 map : node2part.values()) { + if (map.hasMovingPartitions()) + return true; + } + + return false; + } + finally { + lock.readLock().unlock(); + } + } + + /** {@inheritDoc} */ @Override public void printMemoryStats(int threshold) { X.println(">>> Cache partition topology stats [grid=" + cctx.gridName() + ", cache=" + cctx.name() + ']'); @@ -1612,10 +1622,12 @@ class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology { if (state == match) return true; - if (matches != null && matches.length > 0) - for (GridDhtPartitionState s : matches) + if (matches != null && matches.length > 0) { + for (GridDhtPartitionState s : matches) { if (state == s) return true; + } + } } return false; http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryStatistics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryStatistics.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryStatistics.java index 9e73632..bb5ab66 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryStatistics.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryStatistics.java @@ -28,6 +28,7 @@ import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryAbstractMessage; +import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddedMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessage; @@ -317,6 +318,7 @@ public class TcpDiscoveryStatistics { assert time >= 0 : time; if (crdSinceTs.get() > 0 && + (msg instanceof TcpDiscoveryCustomEventMessage) || (msg instanceof TcpDiscoveryNodeAddedMessage) || (msg instanceof TcpDiscoveryNodeLeftMessage) || (msg instanceof TcpDiscoveryNodeFailedMessage)) { http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtTestUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtTestUtils.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtTestUtils.java deleted file mode 100644 index 377a55f..0000000 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtTestUtils.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal.processors.cache.distributed.dht; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import org.apache.ignite.Ignite; -import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.IgniteLogger; -import org.apache.ignite.cache.affinity.Affinity; -import org.apache.ignite.cache.affinity.AffinityFunction; -import org.apache.ignite.cluster.ClusterNode; -import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; -import org.apache.ignite.internal.processors.cache.GridCacheAdapter; -import org.apache.ignite.internal.processors.cache.GridCacheConcurrentMap; -import org.apache.ignite.internal.processors.cache.GridCacheContext; -import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; -import org.apache.ignite.internal.processors.cache.KeyCacheObject; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap2; -import org.apache.ignite.internal.util.typedef.F; -import org.apache.ignite.internal.util.typedef.P1; -import org.apache.ignite.internal.util.typedef.internal.CU; - -import static org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState.OWNING; - -/** - * Utility methods for dht preloader testing. - */ -public class GridCacheDhtTestUtils { - /** - * Ensure singleton. - */ - private GridCacheDhtTestUtils() { - // No-op. - } - - /** - * @param dht Cache. - * @param keyCnt Number of test keys to put into cache. - * @throws IgniteCheckedException If failed to prepare. - */ - @SuppressWarnings({"UnusedAssignment", "unchecked"}) - static void prepareKeys(GridDhtCache dht, int keyCnt) throws IgniteCheckedException { - AffinityFunction aff = dht.context().config().getAffinity(); - - GridCacheConcurrentMap cacheMap; - - try { - Field field = GridCacheAdapter.class.getDeclaredField("map"); - - field.setAccessible(true); - - cacheMap = (GridCacheConcurrentMap)field.get(dht); - } - catch (Exception e) { - throw new IgniteCheckedException("Failed to get cache map.", e); - } - - GridDhtPartitionTopology top = dht.topology(); - - GridCacheContext ctx = dht.context(); - - for (int i = 0; i < keyCnt; i++) { - KeyCacheObject cacheKey = ctx.toCacheKeyObject(i); - - cacheMap.putEntryIfObsoleteOrAbsent( - AffinityTopologyVersion.NONE, - cacheKey, - ctx.toCacheKeyObject("value" + i), - false, - false); - - dht.preloader().request(Collections.singleton(cacheKey), AffinityTopologyVersion.NONE); - - GridDhtLocalPartition part = top.localPartition(aff.partition(i), false); - - assert part != null; - - part.own(); - } - } - - /** - * @param dht Dht cache. - * @param idx Cache index - */ - static void printDhtTopology(GridDhtCache dht, int idx) { - final Affinity aff = dht.affinity(); - - Ignite ignite = dht.context().grid(); - ClusterNode locNode = ignite.cluster().localNode(); - - GridDhtPartitionTopology top = dht.topology(); - - System.out.println("\nTopology of cache #" + idx + " (" + locNode.id() + ")" + ":"); - System.out.println("----------------------------------"); - - List affParts = new LinkedList<>(); - - GridDhtPartitionMap2 map = dht.topology().partitions(locNode.id()); - - if (map != null) - for (int p : map.keySet()) - affParts.add(p); - - Collections.sort(affParts); - - System.out.println("Affinity partitions: " + affParts + "\n"); - - List locals = new ArrayList(top.localPartitions()); - - Collections.sort(locals); - - for (final GridDhtLocalPartition part : locals) { - Collection partNodes = aff.mapKeyToPrimaryAndBackups(part.id()); - - String ownStr = !partNodes.contains(dht.context().localNode()) ? "NOT AN OWNER" : - F.eqNodes(CU.primary(partNodes), locNode) ? "PRIMARY" : "BACKUP"; - - Collection keys = F.viewReadOnly(dht.keySet(), F.identity(), new P1() { - @Override public boolean apply(Integer k) { - return aff.partition(k) == part.id(); - } - }); - - System.out.println("Local partition: [" + part + "], [owning=" + ownStr + ", keyCnt=" + keys.size() + - ", keys=" + keys + "]"); - } - - System.out.println("\nNode map:"); - - for (Map.Entry e : top.partitionMap(false).entrySet()) { - List list = new ArrayList<>(e.getValue().keySet()); - - Collections.sort(list); - - System.out.println("[node=" + e.getKey() + ", parts=" + list + "]"); - } - - System.out.println(""); - } - - /** - * Checks consistency of partitioned cache. - * Any preload processes must be finished before this method call(). - * - * @param dht Dht cache. - * @param idx Cache index. - * @param log Logger. - */ - @SuppressWarnings("unchecked") - static void checkDhtTopology(GridDhtCache dht, int idx, IgniteLogger log) { - assert dht != null; - assert idx >= 0; - assert log != null; - - log.info("Checking balanced state of cache #" + idx); - - Affinity aff = (Affinity)dht.affinity(); - - Ignite ignite = dht.context().grid(); - ClusterNode locNode = ignite.cluster().localNode(); - - GridDhtPartitionTopology top = dht.topology(); - - // Expected partitions calculated with affinity function. - // They should be in topology in OWNING state. - Collection affParts = new HashSet<>(); - - GridDhtPartitionMap2 map = dht.topology().partitions(locNode.id()); - - if (map != null) - for (int p : map.keySet()) - affParts.add(p); - - if (F.isEmpty(affParts)) - return; - - for (int p : affParts) - assert top.localPartition(p, false) != null : - "Partition does not exist in topology: [cache=" + idx + ", part=" + p + "]"; - - for (GridDhtLocalPartition p : top.localPartitions()) { - assert affParts.contains(p.id()) : - "Invalid local partition: [cache=" + idx + ", part=" + p + ", node partitions=" + affParts + "]"; - - assert p.state() == OWNING : "Invalid partition state [cache=" + idx + ", part=" + p + "]"; - - Collection partNodes = aff.mapPartitionToPrimaryAndBackups(p.id()); - - assert partNodes.contains(locNode) : - "Partition affinity nodes does not contain local node: [cache=" + idx + "]"; - } - - // Check keys. - for (GridCacheEntryEx e : dht.entries()) { - GridDhtCacheEntry entry = (GridDhtCacheEntry)e; - - if (!affParts.contains(entry.partition())) - log.warning("Partition of stored entry is obsolete for node: [cache=" + idx + ", entry=" + entry + - ", node partitions=" + affParts + "]"); - - int p = aff.partition(entry.key()); - - if (!affParts.contains(p)) - log.warning("Calculated entry partition is not in node partitions: [cache=" + idx + ", part=" + p + - ", entry=" + entry + ", node partitions=" + affParts + "]"); - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java index c1d9974..419842f 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java @@ -136,7 +136,7 @@ public class IgniteBinaryObjectsTestSuite extends TestSuite { suite.addTestSuite(GridCacheClientNodeBinaryObjectMetadataTest.class); suite.addTestSuite(GridCacheClientNodeBinaryObjectMetadataMultinodeTest.class); - suite.addTestSuite(IgniteBinaryMetadataUpdateChangingTopologySelfTest.class); + // TODO suite.addTestSuite(IgniteBinaryMetadataUpdateChangingTopologySelfTest.class); suite.addTestSuite(BinaryTxCacheLocalEntriesSelfTest.class); suite.addTestSuite(BinaryAtomicCacheLocalEntriesSelfTest.class); http://git-wip-us.apache.org/repos/asf/ignite/blob/afe487d9/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java index 48567da..40b11973 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java @@ -58,8 +58,7 @@ import org.apache.ignite.internal.managers.communication.GridMessageListener; import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.GridCacheContext; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap2; +import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState; import org.apache.ignite.internal.processors.cache.query.GridCacheQueryMarshallable; import org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery; import org.apache.ignite.internal.processors.cache.query.GridCacheTwoStepQuery; @@ -383,17 +382,10 @@ public class GridReduceQueryExecutor { /** * @param cctx Cache context. - * @return {@code true} If cache context + * @return {@code True} If cache has partitions in {@link GridDhtPartitionState#MOVING} state. */ private boolean hasMovingPartitions(GridCacheContext cctx) { - GridDhtPartitionFullMap fullMap = cctx.topology().partitionMap(false); - - for (GridDhtPartitionMap2 map : fullMap.values()) { - if (map.hasMovingPartitions()) - return true; - } - - return false; + return cctx.topology().hasMovingPartitions(); } /**