# ignite-45 added specific test for near reader update
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/5d46399b Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/5d46399b Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/5d46399b Branch: refs/heads/ignite-471 Commit: 5d46399b7c8463ec4c11f824e42552ff9e30e4fc Parents: 8aff704 Author: sboikov <sboi...@gridgain.com> Authored: Tue Mar 24 13:41:28 2015 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Tue Mar 24 13:41:28 2015 +0300 ---------------------------------------------------------------------- ...cheNearUpdateTopologyChangeAbstractTest.java | 129 +++++++++++++++++++ ...CacheAtomicNearUpdateTopologyChangeTest.java | 39 ++++++ .../CacheTxNearUpdateTopologyChangeTest.java | 33 +++++ ...GridCacheDhtEvictionNearReadersSelfTest.java | 8 -- .../dht/GridCacheDhtEvictionSelfTest.java | 8 -- .../dht/GridCacheDhtInternalEntrySelfTest.java | 8 -- .../testframework/junits/GridAbstractTest.java | 8 ++ .../junits/common/GridCommonAbstractTest.java | 53 ++++++++ 8 files changed, 262 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheNearUpdateTopologyChangeAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheNearUpdateTopologyChangeAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheNearUpdateTopologyChangeAbstractTest.java new file mode 100644 index 0000000..9200612 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheNearUpdateTopologyChangeAbstractTest.java @@ -0,0 +1,129 @@ +/* + * 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; + +import org.apache.ignite.*; +import org.apache.ignite.cache.*; +import org.apache.ignite.cache.affinity.*; +import org.apache.ignite.cluster.*; +import org.apache.ignite.configuration.*; +import org.apache.ignite.internal.util.lang.*; +import org.apache.ignite.testframework.*; + +import java.util.*; + +import static org.apache.ignite.cache.CacheMode.*; + +/** + * + */ +public abstract class CacheNearUpdateTopologyChangeAbstractTest extends IgniteCacheAbstractTest { + /** {@inheritDoc} */ + @Override protected int gridCount() { + return 3; + } + + /** {@inheritDoc} */ + @Override protected CacheMode cacheMode() { + return PARTITIONED; + } + + /** {@inheritDoc} */ + @Override protected NearCacheConfiguration nearConfiguration() { + return new NearCacheConfiguration(); + } + + /** + * @throws Exception If failed. + */ + public void testNearUpdateTopologyChange() throws Exception { + final CacheAffinity<Integer> aff = grid(0).affinity(null); + + final Integer key = 9; + + IgniteCache<Integer, Integer> primaryCache = primaryCache(key, null); + + final Ignite primaryIgnite = primaryCache.unwrap(Ignite.class); + + log.info("Primary node: " + primaryIgnite.name()); + + primaryCache.put(key, 1); + + IgniteCache<Integer, Integer> nearCache = nearCache(key); + + log.info("Near node: " + nearCache.unwrap(Ignite.class).name()); + + assertEquals((Object)1, nearCache.get(key)); + + boolean gotNewPrimary = false; + + List<Ignite> newNodes = new ArrayList<>(); + + for (int i = 0; i < 10; i++) { + int idx = gridCount() + i; + + log.info("Start new node: " + i); + + Ignite ignite = startGrid(idx); + + awaitPartitionMapExchange(); + + newNodes.add(ignite); + + ClusterNode primaryNode = aff.mapKeyToNode(key); + + Ignite primary = grid(primaryNode); + + log.info("Primary node on new topology: " + primary.name()); + + if (!primaryNode.equals(primaryIgnite.cluster().localNode())) { + log.info("Update from new primary: " + primary.name()); + + primary = grid(primaryNode); + + gotNewPrimary = true; + + primary.cache(null).put(key, 2); + + break; + } + } + + assertTrue(gotNewPrimary); + + for (Ignite ignite : newNodes) { + log.info("Stop started node: " + ignite.name()); + + ignite.close(); + } + + awaitPartitionMapExchange(); + + GridTestUtils.waitForCondition(new GridAbsPredicate() { + @Override public boolean apply() { + return aff.isPrimary(primaryIgnite.cluster().localNode(), key); + } + }, 10_000); + + log.info("Primary node: " + primaryNode(key, null).name()); + + assertTrue(aff.isPrimary(primaryIgnite.cluster().localNode(), key)); + + assertEquals((Object)2, nearCache.get(key)); + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAtomicNearUpdateTopologyChangeTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAtomicNearUpdateTopologyChangeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAtomicNearUpdateTopologyChangeTest.java new file mode 100644 index 0000000..a69a9c3 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheAtomicNearUpdateTopologyChangeTest.java @@ -0,0 +1,39 @@ +/* + * 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; + +import org.apache.ignite.cache.*; +import org.apache.ignite.internal.processors.cache.*; + +import static org.apache.ignite.cache.CacheAtomicWriteOrderMode.*; +import static org.apache.ignite.cache.CacheAtomicityMode.*; + +/** + * + */ +public class CacheAtomicNearUpdateTopologyChangeTest extends CacheNearUpdateTopologyChangeAbstractTest { + /** {@inheritDoc} */ + @Override protected CacheAtomicityMode atomicityMode() { + return ATOMIC; + } + + /** {@inheritDoc} */ + @Override protected CacheAtomicWriteOrderMode atomicWriteOrderMode() { + return PRIMARY; + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheTxNearUpdateTopologyChangeTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheTxNearUpdateTopologyChangeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheTxNearUpdateTopologyChangeTest.java new file mode 100644 index 0000000..1eeb865 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheTxNearUpdateTopologyChangeTest.java @@ -0,0 +1,33 @@ +/* + * 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; + +import org.apache.ignite.cache.*; +import org.apache.ignite.internal.processors.cache.*; + +import static org.apache.ignite.cache.CacheAtomicityMode.*; + +/** + * + */ +public class CacheTxNearUpdateTopologyChangeTest extends CacheNearUpdateTopologyChangeAbstractTest { + /** {@inheritDoc} */ + @Override protected CacheAtomicityMode atomicityMode() { + return TRANSACTIONAL; + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java index be4cef7..1252326 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java @@ -139,14 +139,6 @@ public class GridCacheDhtEvictionNearReadersSelfTest extends GridCommonAbstractT } /** - * @param node Node. - * @return Grid for the given node. - */ - private Ignite grid(ClusterNode node) { - return G.ignite(node.id()); - } - - /** * @param g Grid. * @return Near cache. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionSelfTest.java index a177e00..64f26aa 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionSelfTest.java @@ -132,14 +132,6 @@ public class GridCacheDhtEvictionSelfTest extends GridCommonAbstractTest { } /** - * @param node Node. - * @return Grid for the given node. - */ - private Ignite grid(ClusterNode node) { - return G.ignite(node.id()); - } - - /** * @param g Grid. * @return Near cache. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtInternalEntrySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtInternalEntrySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtInternalEntrySelfTest.java index b944869..82bf5ae 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtInternalEntrySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtInternalEntrySelfTest.java @@ -198,12 +198,4 @@ public class GridCacheDhtInternalEntrySelfTest extends GridCommonAbstractTest { return F.t(primary, other); } - - /** - * @param node Node. - * @return Grid. - */ - private Ignite grid(ClusterNode node) { - return G.ignite(node.id()); - } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java index 29b832e..93d1d74 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java @@ -836,6 +836,14 @@ public abstract class GridAbstractTest extends TestCase { } /** + * @param node Node. + * @return Ignite instance with given local node. + */ + protected final Ignite grid(ClusterNode node) { + return G.ignite(node.id()); + } + + /** * Starts grid using provided grid name and spring config location. * <p> * Note that grids started this way should be stopped with {@code G.stop(..)} methods. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5d46399b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java index 9389018..143a3b7 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java @@ -731,4 +731,57 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest { return null; } + + /** + * @param key Key. + * @return Near cache for key. + */ + protected IgniteCache<Integer, Integer> nearCache(Integer key) { + List<Ignite> allGrids = Ignition.allGrids(); + + assertFalse("There are no alive nodes.", F.isEmpty(allGrids)); + + CacheAffinity<Integer> aff = allGrids.get(0).affinity(null); + + Collection<ClusterNode> nodes = aff.mapKeyToPrimaryAndBackups(key); + + for (Ignite ignite : allGrids) { + if (!nodes.contains(ignite.cluster().localNode())) + return ignite.cache(null); + } + + fail(); + + return null; + } + + /** + * @param key Key. + * @param cacheName Cache name. + * @return Near cache for key. + */ + protected IgniteCache<Integer, Integer> primaryCache(Integer key, String cacheName) { + return primaryNode(key, null).cache(null); + } + + /** + * @param key Key. + * @param cacheName Cache name. + * @return Ignite instance which has primary cache for given key. + */ + protected Ignite primaryNode(Object key, String cacheName) { + List<Ignite> allGrids = Ignition.allGrids(); + + assertFalse("There are no alive nodes.", F.isEmpty(allGrids)); + + Ignite ignite = allGrids.get(0); + + CacheAffinity<Object> aff = ignite.affinity(cacheName); + + ClusterNode node = aff.mapKeyToNode(key); + + assertNotNull("There are no cache affinity nodes", node); + + return grid(node); + } }