http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java deleted file mode 100644 index b7a4dbe..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedDebugTest.java +++ /dev/null @@ -1,977 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.affinity.consistenthash.*; -import org.apache.ignite.cache.store.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.internal.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.transactions.*; -import org.gridgain.grid.kernal.processors.cache.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; -import org.apache.ignite.internal.util.typedef.*; -import org.apache.ignite.internal.util.typedef.internal.*; -import org.gridgain.testframework.junits.common.*; - -import javax.cache.configuration.*; -import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.atomic.*; - -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; -import static org.apache.ignite.transactions.IgniteTxConcurrency.*; -import static org.apache.ignite.transactions.IgniteTxIsolation.*; -import static org.apache.ignite.cache.GridCacheWriteSynchronizationMode.*; - -/** - * Tests for colocated cache. - */ -public class GridCacheColocatedDebugTest extends GridCommonAbstractTest { - /** IP finder. */ - private static final TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); - - /** Test thread count. */ - private static final int THREAD_CNT = 10; - - /** Store enable flag. */ - private boolean storeEnabled; - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(gridName); - - TcpDiscoverySpi spi = new TcpDiscoverySpi(); - - spi.setIpFinder(ipFinder); - - cfg.setDiscoverySpi(spi); - - CacheConfiguration cacheCfg = defaultCacheConfiguration(); - - cacheCfg.setCacheMode(PARTITIONED); - cacheCfg.setDistributionMode(PARTITIONED_ONLY); - cacheCfg.setAffinity(new GridCacheConsistentHashAffinityFunction(false, 30)); - cacheCfg.setBackups(1); - cacheCfg.setWriteSynchronizationMode(FULL_SYNC); - cacheCfg.setSwapEnabled(false); - - if (storeEnabled) { - cacheCfg.setCacheStoreFactory(new FactoryBuilder.SingletonFactory(new GridCacheTestStore())); - cacheCfg.setReadThrough(true); - cacheCfg.setWriteThrough(true); - cacheCfg.setLoadPreviousValue(true); - } - else - cacheCfg.setCacheStoreFactory(null); - - cfg.setCacheConfiguration(cacheCfg); - - return cfg; - } - - /** - * @throws Exception If failed. - */ - public void testSimplestPessimistic() throws Exception { - checkSinglePut(false, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testSimpleOptimistic() throws Exception { - checkSinglePut(true, OPTIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testReentry() throws Exception { - checkReentry(PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedInTxSeparatePessimistic() throws Exception { - checkDistributedPut(true, true, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedInTxPessimistic() throws Exception { - checkDistributedPut(true, false, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedSeparatePessimistic() throws Exception { - checkDistributedPut(false, true, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedPessimistic() throws Exception { - checkDistributedPut(false, false, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedNonLocalInTxSeparatePessimistic() throws Exception { - checkNonLocalPuts(true, true, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedNonLocalInTxPessimistic() throws Exception { - checkNonLocalPuts(true, false, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedNonLocalSeparatePessimistic() throws Exception { - checkNonLocalPuts(false, true, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedNonLocalPessimistic() throws Exception { - checkNonLocalPuts(false, false, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testRollbackSeparatePessimistic() throws Exception { - checkRollback(true, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedInTxSeparateOptimistic() throws Exception { - checkDistributedPut(true, true, OPTIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedInTxOptimistic() throws Exception { - checkDistributedPut(true, false, OPTIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedNonLocalInTxSeparateOptimistic() throws Exception { - checkNonLocalPuts(true, true, OPTIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testDistributedNonLocalInTxOptimistic() throws Exception { - checkNonLocalPuts(true, false, OPTIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testRollbackSeparateOptimistic() throws Exception { - checkRollback(true, OPTIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testRollback() throws Exception { - checkRollback(false, PESSIMISTIC, REPEATABLE_READ); - } - - /** - * @throws Exception If failed. - */ - public void testPutsMultithreadedColocated() throws Exception { - checkPutsMultithreaded(true, false, 100000); - } - - /** - * @throws Exception If failed. - */ - public void testPutsMultithreadedRemote() throws Exception { - checkPutsMultithreaded(false, true, 100000); - } - - /** - * @throws Exception If failed. - */ - public void testPutsMultithreadedMixed() throws Exception { - checkPutsMultithreaded(true, true, 100000); - } - - /** - * @param loc Local puts. - * @param remote Remote puts. - * @param maxIterCnt Number of iterations. - * @throws Exception If failed. - */ - public void checkPutsMultithreaded(boolean loc, boolean remote, final long maxIterCnt) throws Exception { - storeEnabled = false; - - assert loc || remote; - - startGridsMultiThreaded(3); - - try { - final Ignite g0 = grid(0); - Ignite g1 = grid(1); - - final Collection<Integer> keys = new ConcurrentLinkedQueue<>(); - - if (loc) { - Integer key = -1; - - for (int i = 0; i < 20; i++) { - key = forPrimary(g0, key); - - keys.add(key); - } - } - - if (remote) { - Integer key = -1; - - for (int i = 0; i < 20; i++) { - key = forPrimary(g1, key); - - keys.add(key); - } - } - - final AtomicLong iterCnt = new AtomicLong(); - - final int keysCnt = 10; - - IgniteFuture<?> fut = multithreadedAsync(new Runnable() { - @Override public void run() { - // Make thread-local copy to shuffle keys. - List<Integer> threadKeys = new ArrayList<>(keys); - - long threadId = Thread.currentThread().getId(); - - try { - long itNum; - - while ((itNum = iterCnt.getAndIncrement()) < maxIterCnt) { - Collections.shuffle(threadKeys); - - List<Integer> iterKeys = threadKeys.subList(0, keysCnt); - - Collections.sort(iterKeys); - - Map<Integer, String> vals = U.newLinkedHashMap(keysCnt); - - for (Integer key : iterKeys) - vals.put(key, String.valueOf(key) + threadId); - - cache(0).putAll(vals); - - if (itNum > 0 && itNum % 5000 == 0) - info(">>> " + itNum + " iterations completed."); - } - } - catch (IgniteCheckedException e) { - fail("Unexpected exception caught: " + e); - } - } - }, THREAD_CNT); - - fut.get(); - - Thread.sleep(1000); - // Check that all transactions are committed. - for (int i = 0; i < 3; i++) { - GridCacheAdapter<Object, Object> cache = ((GridKernal)grid(i)).internalCache(); - - for (Integer key : keys) { - GridCacheEntryEx<Object, Object> entry = cache.peekEx(key); - - if (entry != null) { - Collection<GridCacheMvccCandidate<Object>> locCands = entry.localCandidates(); - Collection<GridCacheMvccCandidate<Object>> rmtCands = entry.remoteMvccSnapshot(); - - assert locCands == null || locCands.isEmpty() : "Local candidates is not empty [idx=" + i + - ", entry=" + entry + ']'; - assert rmtCands == null || rmtCands.isEmpty() : "Remote candidates is not empty [idx=" + i + - ", entry=" + entry + ']'; - } - } - } - } - finally { - stopAllGrids(); - } - } - - /** - * @throws Exception If failed. - */ - public void testLockLockedLocal() throws Exception { - checkLockLocked(true); - } - - /** - * @throws Exception If failed. - */ - public void testLockLockedRemote() throws Exception { - checkLockLocked(false); - } - - /** - * - * @param loc Flag indicating local or remote key should be checked. - * @throws Exception If failed. - */ - private void checkLockLocked(boolean loc) throws Exception { - storeEnabled = false; - - startGridsMultiThreaded(3); - - try { - final Ignite g0 = grid(0); - Ignite g1 = grid(1); - - final Integer key = forPrimary(loc ? g0 : g1); - - final CountDownLatch lockLatch = new CountDownLatch(1); - final CountDownLatch unlockLatch = new CountDownLatch(1); - - IgniteFuture<?> unlockFut = multithreadedAsync(new Runnable() { - @Override public void run() { - try { - CacheLock lock = g0.jcache(null).lock(key); - - lock.lock(); - - try { - lockLatch.countDown(); - - U.await(unlockLatch); - } - finally { - lock.unlock(); - } - } - catch (IgniteCheckedException e) { - fail("Unexpected exception: " + e); - } - - } - }, 1); - - U.await(lockLatch); - - assert g0.jcache(null).isLocked(key); - assert !g0.jcache(null).isLockedByThread(key) : "Key can not be locked by current thread."; - - CacheLock lock = g0.jcache(null).lock(key); - - assert !lock.tryLock(); - - assert g0.cache(null).isLocked(key); - assert !g0.cache(null).isLockedByThread(key) : "Key can not be locked by current thread."; - - unlockLatch.countDown(); - unlockFut.get(); - - assert lock.tryLock(); - - lock.unlock(); - } - finally { - stopAllGrids(); - } - } - - /** - * @throws Exception If failed. - */ - public void testPessimisticGet() throws Exception { - storeEnabled = false; - - startGridsMultiThreaded(3); - - Ignite g0 = grid(0); - - try { - for (int i = 0; i < 100; i++) - g0.cache(null).put(i, i); - - for (int i = 0; i < 100; i++) { - try (IgniteTx tx = g0.cache(null).txStart(PESSIMISTIC, REPEATABLE_READ)) { - Integer val = (Integer) g0.cache(null).get(i); - - assertEquals((Integer) i, val); - } - } - } - finally { - stopAllGrids(); - } - } - - /** - * @param explicitTx Whether or not start implicit tx. - * @param concurrency Tx concurrency. - * @param isolation Tx isolation. - * @throws Exception If failed. - */ - private void checkSinglePut(boolean explicitTx, IgniteTxConcurrency concurrency, IgniteTxIsolation isolation) - throws Exception { - startGrid(); - - try { - IgniteTx tx = explicitTx ? cache().txStart(concurrency, isolation) : null; - - try { - cache().putAll(F.asMap(1, "Hello", 2, "World")); - - if (tx != null) - tx.commit(); - - System.out.println(cache().metrics()); - - assertEquals("Hello", cache().get(1)); - assertEquals("World", cache().get(2)); - assertNull(cache().get(3)); - } - finally { - if (tx != null) - tx.close(); - } - } - finally { - stopAllGrids(); - } - } - - /** - * @param concurrency Tx concurrency. - * @param isolation Tx isolation. - * @throws Exception If failed. - */ - private void checkReentry(IgniteTxConcurrency concurrency, IgniteTxIsolation isolation) throws Exception { - startGrid(); - - try { - IgniteTx tx = cache().txStart(concurrency, isolation); - - try { - String old = (String)cache().get(1); - - assert old == null; - - String replaced = (String)cache().put(1, "newVal"); - - assert replaced == null; - - replaced = (String)cache().put(1, "newVal2"); - - assertEquals("newVal", replaced); - - if (tx != null) - tx.commit(); - - assertEquals("newVal2", cache().get(1)); - assertNull(cache().get(3)); - } - finally { - if (tx != null) - tx.close(); - } - } - finally { - stopAllGrids(); - } - } - - /** - * @param explicitTx Use explicit transactions. - * @param separate Use one-key puts instead of batch. - * @param concurrency Transactions concurrency. - * @param isolation Transaction isolation. - * @throws Exception If failed. - */ - @SuppressWarnings("AssertEqualsBetweenInconvertibleTypes") - private void checkDistributedPut(boolean explicitTx, boolean separate, IgniteTxConcurrency concurrency, - IgniteTxIsolation isolation) throws Exception { - storeEnabled = false; - - startGridsMultiThreaded(3); - - Ignite g0 = grid(0); - Ignite g1 = grid(1); - Ignite g2 = grid(2); - - try { - Integer k0 = forPrimary(g0); - Integer k1 = forPrimary(g1); - Integer k2 = forPrimary(g2); - - Map<Integer, String> map = F.asMap(k0, "val" + k0, k1, "val" + k1, k2, "val" + k2); - - IgniteTx tx = explicitTx ? g0.cache(null).txStart(concurrency, isolation) : null; - - try { - if (separate) { - g0.cache(null).put(k0, "val" + k0); - g0.cache(null).put(k1, "val" + k1); - g0.cache(null).put(k2, "val" + k2); - } - else - g0.cache(null).putAll(map); - - if (tx != null) - tx.commit(); - } - finally { - if (tx != null) - tx.close(); - } - - if (separate) { - assertEquals("val" + k0, g0.cache(null).get(k0)); - assertEquals("val" + k1, g0.cache(null).get(k1)); - assertEquals("val" + k2, g0.cache(null).get(k2)); - } - else { - Map<Object, Object> res = g0.cache(null).getAll(map.keySet()); - - assertEquals(map, res); - } - - tx = explicitTx ? g0.cache(null).txStart(concurrency, isolation) : null; - - try { - if (separate) { - g0.cache(null).remove(k0); - g0.cache(null).remove(k1); - g0.cache(null).remove(k2); - } - else - g0.cache(null).removeAll(map.keySet()); - - if (tx != null) - tx.commit(); - } - finally { - if (tx != null) - tx.close(); - } - - if (separate) { - assertEquals(null, g0.cache(null).get(k0)); - assertEquals(null, g0.cache(null).get(k1)); - assertEquals(null, g0.cache(null).get(k2)); - } - else { - Map<Object, Object> res = g0.cache(null).getAll(map.keySet()); - - assertTrue(res.isEmpty()); - } - } - finally { - stopAllGrids(); - } - } - - /** - * @param explicitTx Use explicit transactions. - * @param separate Use one-key puts instead of batch. - * @param concurrency Transactions concurrency. - * @param isolation Transaction isolation. - * @throws Exception If failed. - */ - @SuppressWarnings("AssertEqualsBetweenInconvertibleTypes") - private void checkNonLocalPuts(boolean explicitTx, boolean separate, IgniteTxConcurrency concurrency, - IgniteTxIsolation isolation) throws Exception { - storeEnabled = false; - - startGridsMultiThreaded(3); - - Ignite g0 = grid(0); - Ignite g1 = grid(1); - Ignite g2 = grid(2); - - try { - Integer k1 = forPrimary(g1); - Integer k2 = forPrimary(g2); - - Map<Integer, String> map = F.asMap(k1, "val" + k1, k2, "val" + k2); - - IgniteTx tx = explicitTx ? g0.cache(null).txStart(concurrency, isolation) : null; - - try { - if (separate) { - g0.cache(null).put(k1, "val" + k1); - g0.cache(null).put(k2, "val" + k2); - } - else - g0.cache(null).putAll(map); - - if (tx != null) - tx.commit(); - } - finally { - if (tx != null) - tx.close(); - } - - if (separate) { - assertEquals("val" + k1, g0.cache(null).get(k1)); - assertEquals("val" + k2, g0.cache(null).get(k2)); - } - else { - Map<Object, Object> res = g0.cache(null).getAll(map.keySet()); - - assertEquals(map, res); - } - - tx = explicitTx ? g0.cache(null).txStart(concurrency, isolation) : null; - - try { - if (separate) { - g0.cache(null).remove(k1); - g0.cache(null).remove(k2); - } - else - g0.cache(null).removeAll(map.keySet()); - - if (tx != null) - tx.commit(); - } - finally { - if (tx != null) - tx.close(); - } - - if (separate) { - assertEquals(null, g0.cache(null).get(k1)); - assertEquals(null, g0.cache(null).get(k2)); - } - else { - Map<Object, Object> res = g0.cache(null).getAll(map.keySet()); - - assertTrue(res.isEmpty()); - } - } - finally { - stopAllGrids(); - } - } - - /** - * @throws Exception If failed. - */ - public void testWriteThrough() throws Exception { - storeEnabled = true; - - startGridsMultiThreaded(3); - - Ignite g0 = grid(0); - Ignite g1 = grid(1); - Ignite g2 = grid(2); - - try { - // Check local commit. - int k0 = forPrimary(g0); - int k1 = forPrimary(g0, k0); - int k2 = forPrimary(g0, k1); - - checkStoreWithValues(F.asMap(k0, String.valueOf(k0), k1, String.valueOf(k1), k2, String.valueOf(k2))); - - // Reassign keys. - k1 = forPrimary(g1); - k2 = forPrimary(g2); - - checkStoreWithValues(F.asMap(k0, String.valueOf(k0), k1, String.valueOf(k1), k2, String.valueOf(k2))); - - // Check remote only. - - checkStoreWithValues(F.asMap(k1, String.valueOf(k1), k2, String.valueOf(k2))); - } - finally { - stopAllGrids(); - } - } - - /** - * @param map Values to check. - * @throws Exception If failed. - */ - private void checkStoreWithValues(Map<Integer, String> map) throws Exception { - Ignite g0 = grid(0); - Ignite g1 = grid(1); - Ignite g2 = grid(2); - - g0.cache(null).putAll(map); - - checkStore(g0, map); - checkStore(g1, Collections.<Integer, String>emptyMap()); - checkStore(g2, Collections.<Integer, String>emptyMap()); - - clearStores(3); - - try (IgniteTx tx = g0.cache(null).txStart(OPTIMISTIC, READ_COMMITTED)) { - g0.cache(null).putAll(map); - - tx.commit(); - - checkStore(g0, map); - checkStore(g1, Collections.<Integer, String>emptyMap()); - checkStore(g2, Collections.<Integer, String>emptyMap()); - - clearStores(3); - } - } - - /** - * @param ignite Grid to take store from. - * @param map Expected values in store. - * @throws Exception If failed. - */ - private void checkStore(Ignite ignite, Map<Integer, String> map) throws Exception { - String cacheName = ignite.configuration().getCacheConfiguration()[0].getName(); - - GridCacheContext ctx = ((GridKernal)grid()).context().cache().internalCache(cacheName).context(); - - CacheStore store = ctx.store().configuredStore(); - - assertEquals(map, ((GridCacheTestStore)store).getMap()); - } - - /** - * Clears all stores. - * - * @param cnt Grid count. - */ - private void clearStores(int cnt) { - for (int i = 0; i < cnt; i++) { - String cacheName = grid(i).configuration().getCacheConfiguration()[0].getName(); - - GridCacheContext ctx = ((GridKernal)grid()).context().cache().internalCache(cacheName).context(); - - CacheStore store = ctx.store().configuredStore(); - - ((GridCacheTestStore)store).reset(); - } - } - - /** - * @param separate Use one-key puts instead of batch. - * @param concurrency Transactions concurrency. - * @param isolation Transaction isolation. - * @throws Exception If failed. - */ - @SuppressWarnings("AssertEqualsBetweenInconvertibleTypes") - private void checkRollback(boolean separate, IgniteTxConcurrency concurrency, IgniteTxIsolation isolation) - throws Exception { - storeEnabled = false; - - startGridsMultiThreaded(3); - - Ignite g0 = grid(0); - Ignite g1 = grid(1); - Ignite g2 = grid(2); - - try { - Integer k0 = forPrimary(g0); - Integer k1 = forPrimary(g1); - Integer k2 = forPrimary(g2); - - Map<Integer, String> map0 = F.asMap(k0, "val" + k0, k1, "val" + k1, k2, "val" + k2); - - g0.cache(null).putAll(map0); - - Map<Integer, String> map = F.asMap(k0, "value" + k0, k1, "value" + k1, k2, "value" + k2); - - IgniteTx tx = g0.cache(null).txStart(concurrency, isolation); - - try { - if (separate) { - g0.cache(null).put(k0, "value" + k0); - g0.cache(null).put(k1, "value" + k1); - g0.cache(null).put(k2, "value" + k2); - } - else - g0.cache(null).putAll(map); - - tx.rollback(); - } - finally { - tx.close(); - } - - if (separate) { - assertEquals("val" + k0, g0.cache(null).get(k0)); - assertEquals("val" + k1, g0.cache(null).get(k1)); - assertEquals("val" + k2, g0.cache(null).get(k2)); - } - else { - Map<Object, Object> res = g0.cache(null).getAll(map.keySet()); - - assertEquals(map0, res); - } - - tx = g0.cache(null).txStart(concurrency, isolation); - - try { - if (separate) { - g0.cache(null).remove(k0); - g0.cache(null).remove(k1); - g0.cache(null).remove(k2); - } - else - g0.cache(null).removeAll(map.keySet()); - - tx.rollback(); - } - finally { - tx.close(); - } - - if (separate) { - assertEquals("val" + k0, g0.cache(null).get(k0)); - assertEquals("val" + k1, g0.cache(null).get(k1)); - assertEquals("val" + k2, g0.cache(null).get(k2)); - } - else { - Map<Object, Object> res = g0.cache(null).getAll(map.keySet()); - - assertEquals(map0, res); - } - } - finally { - stopAllGrids(); - } - } - - /** - * @throws Exception If failed. - */ - public void testExplicitLocks() throws Exception { - storeEnabled = false; - - startGrid(); - - try { - IgniteCache<Object, Object> cache = jcache(); - - cache.lock(1).lock(); - - assertNull(cache.getAndPut(1, "key1")); - assertEquals("key1", cache.getAndPut(1, "key2")); - assertEquals("key2", cache.get(1)); - - cache.lock(1).unlock(); - } - finally { - stopAllGrids(); - } - } - - /** - * @throws Exception If failed. - */ - public void testExplicitLocksDistributed() throws Exception { - storeEnabled = false; - - startGridsMultiThreaded(3); - - Ignite g0 = grid(0); - Ignite g1 = grid(1); - Ignite g2 = grid(2); - - try { - Integer k0 = forPrimary(g0); - Integer k1 = forPrimary(g1); - Integer k2 = forPrimary(g2); - - IgniteCache<Object, Object> cache = jcache(0); - - cache.lock(k0).lock(); - cache.lock(k1).lock(); - cache.lock(k2).lock(); - - cache.put(k0, "val0"); - - cache.putAll(F.asMap(k1, "val1", k2, "val2")); - - assertEquals("val0", cache.get(k0)); - assertEquals("val1", cache.get(k1)); - assertEquals("val2", cache.get(k2)); - - cache.lock(k0).unlock(); - cache.lock(k1).unlock(); - cache.lock(k2).unlock(); - } - finally { - stopAllGrids(); - } - } - - /** - * Gets key for which given node is primary. - * - * @param g Grid. - * @return Key. - */ - private static Integer forPrimary(Ignite g) { - return forPrimary(g, -1); - } - - /** - * Gets next key for which given node is primary, starting with (prev + 1) - * - * @param g Grid. - * @param prev Previous key. - * @return Key. - */ - private static Integer forPrimary(Ignite g, int prev) { - for (int i = prev + 1; i < 10000; i++) { - if (g.cache(null).affinity().mapKeyToNode(i).id().equals(g.cluster().localNode().id())) - return i; - } - - throw new IllegalArgumentException("Can not find key being primary for node: " + g.cluster().localNode().id()); - } -}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedFailoverSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedFailoverSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedFailoverSelfTest.java deleted file mode 100644 index 720754d..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedFailoverSelfTest.java +++ /dev/null @@ -1,39 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.*; - -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * Failover tests for colocated cache. - */ -public class GridCacheColocatedFailoverSelfTest extends GridCacheAbstractFailoverSelfTest { - /** {@inheritDoc} */ - @Override protected GridCacheMode cacheMode() { - return PARTITIONED; - } - - /** {@inheritDoc} */ - @Override protected GridCacheDistributionMode distributionMode() { - return PARTITIONED_ONLY; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedOptimisticTransactionSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedOptimisticTransactionSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedOptimisticTransactionSelfTest.java deleted file mode 100644 index 16bbd46..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedOptimisticTransactionSelfTest.java +++ /dev/null @@ -1,156 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.transactions.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; -import org.apache.ignite.spi.swapspace.file.*; -import org.apache.ignite.internal.util.typedef.*; -import org.gridgain.testframework.junits.common.*; - -import static org.apache.ignite.cache.GridCacheAtomicityMode.*; -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; -import static org.apache.ignite.transactions.IgniteTxIsolation.*; -import static org.apache.ignite.transactions.IgniteTxConcurrency.*; -import static org.apache.ignite.cache.GridCacheWriteSynchronizationMode.*; - -/** - * Test ensuring that values are visible inside OPTIMISTIC transaction in co-located cache. - */ -public class GridCacheColocatedOptimisticTransactionSelfTest extends GridCommonAbstractTest { - /** Grid count. */ - private static final int GRID_CNT = 3; - - /** Cache name. */ - private static final String CACHE = "cache"; - - /** Key. */ - private static final Integer KEY = 1; - - /** Value. */ - private static final String VAL = "val"; - - /** Shared IP finder. */ - private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); - - /** Grids. */ - private static Ignite[] ignites; - - /** Regular caches. */ - private static GridCache<Integer, String>[] caches; - - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { - IgniteConfiguration c = super.getConfiguration(gridName); - - c.getTransactionsConfiguration().setTxSerializableEnabled(true); - - TcpDiscoverySpi disco = new TcpDiscoverySpi(); - - disco.setIpFinder(IP_FINDER); - - CacheConfiguration cc = new CacheConfiguration(); - - cc.setName(CACHE); - cc.setCacheMode(PARTITIONED); - cc.setAtomicityMode(TRANSACTIONAL); - cc.setDistributionMode(PARTITIONED_ONLY); - cc.setBackups(1); - cc.setWriteSynchronizationMode(FULL_SYNC); - cc.setSwapEnabled(true); - cc.setEvictSynchronized(false); - cc.setEvictNearSynchronized(false); - - c.setDiscoverySpi(disco); - c.setCacheConfiguration(cc); - c.setSwapSpaceSpi(new FileSwapSpaceSpi()); - - return c; - } - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override protected void beforeTest() throws Exception { - ignites = new Ignite[GRID_CNT]; - caches = new GridCache[GRID_CNT]; - - for (int i = 0; i < GRID_CNT; i++) { - ignites[i] = startGrid(i); - - caches[i] = ignites[i].cache(CACHE); - } - } - - /** {@inheritDoc} */ - @Override protected void afterTest() throws Exception { - stopAllGrids(); - - caches = null; - ignites = null; - } - - /** - * Perform test. - * - * @throws Exception If failed. - */ - public void testOptimisticTransaction() throws Exception { - for (GridCache<Integer, String> cache : caches) { - IgniteTx tx = cache.txStart(OPTIMISTIC, REPEATABLE_READ); - - try { - cache.put(KEY, VAL); - - tx.commit(); - } - finally { - tx.close(); - } - - for (GridCache<Integer, String> cacheInner : caches) { - tx = cacheInner.txStart(OPTIMISTIC, REPEATABLE_READ); - - try { - assert F.eq(VAL, cacheInner.get(KEY)); - - tx.commit(); - } - finally { - tx.close(); - } - } - - tx = cache.txStart(OPTIMISTIC, REPEATABLE_READ); - - try { - cache.remove(KEY); - - tx.commit(); - } - finally { - tx.close(); - } - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPreloadRestartSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPreloadRestartSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPreloadRestartSelfTest.java deleted file mode 100644 index 03298f3..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPreloadRestartSelfTest.java +++ /dev/null @@ -1,30 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.gridgain.grid.kernal.processors.cache.distributed.*; - -/** - * Colocated preload restart test. - */ -public class GridCacheColocatedPreloadRestartSelfTest extends GridCachePreloadRestartAbstractSelfTest { - /** {@inheritDoc} */ - @Override protected boolean nearEnabled() { - return false; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPrimarySyncSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPrimarySyncSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPrimarySyncSelfTest.java deleted file mode 100644 index 88e9c40..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedPrimarySyncSelfTest.java +++ /dev/null @@ -1,33 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.distributed.*; - -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * Test ensuring that PRIMARY_SYNC mode works correctly for co-located cache. - */ -public class GridCacheColocatedPrimarySyncSelfTest extends GridCacheAbstractPrimarySyncSelfTest { - /** {@inheritDoc} */ - @Override protected GridCacheDistributionMode distributionMode() { - return PARTITIONED_ONLY; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedReloadAllSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedReloadAllSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedReloadAllSelfTest.java deleted file mode 100644 index c99a79d..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedReloadAllSelfTest.java +++ /dev/null @@ -1,30 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.gridgain.grid.kernal.processors.cache.distributed.*; - -/** - * Tests reloadAll for colocated cache. - */ -public class GridCacheColocatedReloadAllSelfTest extends GridCachePartitionedReloadAllAbstractSelfTest { - /** {@inheritDoc} */ - @Override protected boolean nearEnabled() { - return false; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxExceptionSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxExceptionSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxExceptionSelfTest.java deleted file mode 100644 index 6d43d99..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxExceptionSelfTest.java +++ /dev/null @@ -1,39 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.*; - -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * Tests colocated cache. - */ -public class GridCacheColocatedTxExceptionSelfTest extends IgniteTxExceptionAbstractSelfTest { - /** {@inheritDoc} */ - @Override protected GridCacheMode cacheMode() { - return PARTITIONED; - } - - /** {@inheritDoc} */ - @Override protected GridCacheDistributionMode distributionMode() { - return PARTITIONED_ONLY; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxPessimisticOriginatingNodeFailureSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxPessimisticOriginatingNodeFailureSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxPessimisticOriginatingNodeFailureSelfTest.java deleted file mode 100644 index 978709d..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxPessimisticOriginatingNodeFailureSelfTest.java +++ /dev/null @@ -1,49 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.distributed.*; -import org.apache.ignite.internal.processors.cache.distributed.near.*; -import org.apache.ignite.internal.util.typedef.*; - -import java.util.*; - -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * Test pessimistic tx failures in colocated cache. - */ -public class GridCacheColocatedTxPessimisticOriginatingNodeFailureSelfTest extends - IgniteTxPessimisticOriginatingNodeFailureAbstractSelfTest { - /** {@inheritDoc} */ - @Override protected Collection<Class<?>> ignoreMessageClasses() { - return F.asList((Class<?>)GridNearTxFinishRequest.class, GridDhtTxFinishRequest.class); - } - - /** {@inheritDoc} */ - @Override protected GridCacheMode cacheMode() { - return PARTITIONED; - } - - /** {@inheritDoc} */ - @Override protected GridCacheDistributionMode distributionMode() { - return PARTITIONED_ONLY; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxSingleThreadedSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxSingleThreadedSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxSingleThreadedSelfTest.java deleted file mode 100644 index 89a3b36..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheColocatedTxSingleThreadedSelfTest.java +++ /dev/null @@ -1,107 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.apache.ignite.configuration.*; -import org.apache.log4j.*; -import org.gridgain.grid.kernal.processors.cache.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; - -import static org.apache.ignite.cache.GridCacheAtomicityMode.*; -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCachePreloadMode.*; - -/** - * Test txs in single-threaded mode for colocated cache. - */ -public class GridCacheColocatedTxSingleThreadedSelfTest extends IgniteTxSingleThreadedAbstractTest { - /** Cache debug flag. */ - private static final boolean CACHE_DEBUG = false; - - /** */ - private TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); - - /** {@inheritDoc} */ - @SuppressWarnings({"ConstantConditions"}) - @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { - IgniteConfiguration c = super.getConfiguration(gridName); - - c.getTransactionsConfiguration().setTxSerializableEnabled(true); - - CacheConfiguration cc = defaultCacheConfiguration(); - - cc.setCacheMode(PARTITIONED); - cc.setBackups(1); - cc.setDistributionMode(GridCacheDistributionMode.PARTITIONED_ONLY); - cc.setAtomicityMode(TRANSACTIONAL); - - cc.setEvictionPolicy(null); - - cc.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_ASYNC); - - cc.setPreloadMode(NONE); - - TcpDiscoverySpi spi = new TcpDiscoverySpi(); - - spi.setIpFinder(ipFinder); - spi.setMaxMissedHeartbeats(Integer.MAX_VALUE); - - c.setDiscoverySpi(spi); - - c.setCacheConfiguration(cc); - - if (CACHE_DEBUG) - resetLog4j(Level.DEBUG, false, GridCacheProcessor.class.getPackage().getName()); - - return c; - } - - /** {@inheritDoc} */ - @Override protected int gridCount() { - return 4; - } - - /** {@inheritDoc} */ - @Override protected int keyCount() { - return 3; - } - - /** {@inheritDoc} */ - @Override protected int maxKeyValue() { - return 3; - } - - /** {@inheritDoc} */ - @Override protected int iterations() { - return 3000; - } - - /** {@inheritDoc} */ - @Override protected boolean isTestDebug() { - return false; - } - - /** {@inheritDoc} */ - @Override protected boolean printMemoryStats() { - return true; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDaemonNodePartitionedSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDaemonNodePartitionedSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDaemonNodePartitionedSelfTest.java deleted file mode 100644 index f9d1c50..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDaemonNodePartitionedSelfTest.java +++ /dev/null @@ -1,31 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.*; - -/** - * Tests partitioned cache with daemon node. - */ -public class GridCacheDaemonNodePartitionedSelfTest extends GridCacheDaemonNodeAbstractSelfTest { - /** {@inheritDoc} */ - @Override protected GridCacheMode cacheMode() { - return GridCacheMode.PARTITIONED; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicEvictionNearReadersSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicEvictionNearReadersSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicEvictionNearReadersSelfTest.java deleted file mode 100644 index c71c23e..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicEvictionNearReadersSelfTest.java +++ /dev/null @@ -1,32 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; - -import static org.apache.ignite.cache.GridCacheAtomicityMode.*; - -/** - * Test for atomic cache. - */ -public class GridCacheDhtAtomicEvictionNearReadersSelfTest extends GridCacheDhtEvictionNearReadersSelfTest { - /** {@inheritDoc} */ - @Override public GridCacheAtomicityMode atomicityMode() { - return ATOMIC; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicRemoveFailureTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicRemoveFailureTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicRemoveFailureTest.java deleted file mode 100644 index 7f4aceb..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtAtomicRemoveFailureTest.java +++ /dev/null @@ -1,51 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.*; - -import static org.apache.ignite.cache.GridCacheAtomicityMode.*; -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * Tests that removes are not lost when topology changes. - */ -public class GridCacheDhtAtomicRemoveFailureTest extends GridCacheAbstractRemoveFailureTest { - /** {@inheritDoc} */ - @Override protected GridCacheMode cacheMode() { - return PARTITIONED; - } - - /** {@inheritDoc} */ - @Override protected GridCacheAtomicityMode atomicityMode() { - return ATOMIC; - } - - /** {@inheritDoc} */ - @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception { - CacheConfiguration cfg = super.cacheConfiguration(gridName); - - cfg.setDistributionMode(PARTITIONED_ONLY); - cfg.setBackups(1); - - return cfg; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySelfTest.java deleted file mode 100644 index d7e20f0..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySelfTest.java +++ /dev/null @@ -1,314 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.affinity.*; -import org.apache.ignite.cache.affinity.consistenthash.*; -import org.apache.ignite.cluster.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.internal.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.transactions.*; -import org.apache.ignite.internal.processors.cache.distributed.near.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; -import org.apache.ignite.internal.util.typedef.*; -import org.gridgain.testframework.junits.common.*; - -import java.util.*; - -import static org.apache.ignite.cache.GridCacheAtomicityMode.*; -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * Unit tests for dht entry. - */ -public class GridCacheDhtEntrySelfTest extends GridCommonAbstractTest { - /** Grid count. */ - private static final int GRID_CNT = 2; - - /** */ - private TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); - - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(gridName); - - TcpDiscoverySpi spi = new TcpDiscoverySpi(); - - spi.setIpFinder(ipFinder); - - cfg.setDiscoverySpi(spi); - - CacheConfiguration cacheCfg = defaultCacheConfiguration(); - - cacheCfg.setCacheMode(PARTITIONED); - cacheCfg.setAffinity(new GridCacheConsistentHashAffinityFunction(false, 10)); - cacheCfg.setBackups(0); - cacheCfg.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_SYNC); - cacheCfg.setSwapEnabled(false); - cacheCfg.setAtomicityMode(TRANSACTIONAL); - cacheCfg.setDistributionMode(NEAR_PARTITIONED); - - cfg.setCacheConfiguration(cacheCfg); - - return cfg; - } - - /** {@inheritDoc} */ - @Override protected void beforeTestsStarted() throws Exception { - startGridsMultiThreaded(GRID_CNT); - } - - /** {@inheritDoc} */ - @Override protected void afterTestsStopped() throws Exception { - stopAllGrids(); - } - - /** {@inheritDoc} */ - @SuppressWarnings({"SizeReplaceableByIsEmpty"}) - @Override protected void beforeTest() throws Exception { - for (int i = 0; i < GRID_CNT; i++) { - assert near(grid(i)).size() == 0 : "Near cache size is not zero for grid: " + i; - assert dht(grid(i)).size() == 0 : "DHT cache size is not zero for grid: " + i; - - assert near(grid(i)).isEmpty() : "Near cache is not empty for grid: " + i; - assert dht(grid(i)).isEmpty() : "DHT cache is not empty for grid: " + i; - } - } - - /** {@inheritDoc} */ - @SuppressWarnings({"SizeReplaceableByIsEmpty"}) - @Override protected void afterTest() throws Exception { - for (int i = 0; i < GRID_CNT; i++) { - near(grid(i)).removeAll(F.<GridCacheEntry<Integer, String>>alwaysTrue()); - - assertEquals("Near cache size is not zero for grid: " + i, 0, near(grid(i)).size()); - assertEquals("DHT cache size is not zero for grid: " + i, 0, dht(grid(i)).size()); - - assert near(grid(i)).isEmpty() : "Near cache is not empty for grid: " + i; - assert dht(grid(i)).isEmpty() : "DHT cache is not empty for grid: " + i; - } - - for (int i = 0; i < GRID_CNT; i++) { - IgniteTx tx = grid(i).cache(null).tx(); - - if (tx != null) - tx.close(); - } - } - - /** - * @param g Grid. - * @return Near cache. - */ - private GridCacheProjection<Integer, String> near(Ignite g) { - return g.cache(null); - } - - /** - * @param g Grid. - * @return Dht cache. - */ - @SuppressWarnings({"unchecked", "TypeMayBeWeakened"}) - private GridDhtCacheAdapter<Integer, String> dht(Ignite g) { - return ((GridNearCacheAdapter)((GridKernal)g).internalCache()).dht(); - } - - /** - * @param nodeId Node ID. - * @return Grid. - */ - private Ignite grid(UUID nodeId) { - return G.ignite(nodeId); - } - - /** @throws Exception If failed. */ - public void testClearWithReaders() throws Exception { - Integer key = 1; - - IgniteBiTuple<ClusterNode, ClusterNode> t = getNodes(key); - - ClusterNode primary = t.get1(); - ClusterNode other = t.get2(); - - GridCacheProjection<Integer, String> near0 = near(grid(primary.id())); - GridCacheProjection<Integer, String> near1 = near(grid(other.id())); - - assert near0 != near1; - - GridDhtCacheAdapter<Integer, String> dht0 = dht(grid(primary.id())); - GridDhtCacheAdapter<Integer, String> dht1 = dht(grid(other.id())); - - // Put on primary node. - String val = "v1"; - - near0.put(key, val); - - GridDhtCacheEntry<Integer, String> e0 = (GridDhtCacheEntry<Integer, String>)dht0.peekEx(key); - GridDhtCacheEntry<Integer, String> e1 = (GridDhtCacheEntry<Integer, String>)dht1.peekEx(key); - - assert e0 == null || e0.readers().isEmpty(); - assert e1 == null || e1.readers().isEmpty(); - - // Get value on other node. - assertEquals(val, near1.get(key)); - - assert e0 != null; - - assert e0.readers().contains(other.id()); - assert e1 == null || e1.readers().isEmpty(); - - assert !near0.clear(key); - - assertEquals(1, near0.size()); - assertEquals(1, dht0.size()); - - assertEquals(1, near1.size()); - assertEquals(0, dht1.size()); - } - - /** @throws Exception If failed. */ - public void testRemoveWithReaders() throws Exception { - Integer key = 1; - - IgniteBiTuple<ClusterNode, ClusterNode> t = getNodes(key); - - ClusterNode primary = t.get1(); - ClusterNode other = t.get2(); - - GridCacheProjection<Integer, String> near0 = near(grid(primary.id())); - GridCacheProjection<Integer, String> near1 = near(grid(other.id())); - - assert near0 != near1; - - GridDhtCacheAdapter<Integer, String> dht0 = dht(grid(primary.id())); - GridDhtCacheAdapter<Integer, String> dht1 = dht(grid(other.id())); - - // Put on primary node. - String val = "v1"; - - near0.put(key, val); - - GridDhtCacheEntry<Integer, String> e0 = (GridDhtCacheEntry<Integer, String>)dht0.peekEx(key); - GridDhtCacheEntry<Integer, String> e1 = (GridDhtCacheEntry<Integer, String>)dht1.peekEx(key); - - assert e0 == null || e0.readers().isEmpty(); - assert e1 == null || e1.readers().isEmpty(); - - // Get value on other node. - assertEquals(val, near1.get(key)); - - assert e0 != null; - - assert e0.readers().contains(other.id()); - assert e1 == null || e1.readers().isEmpty(); - - assert near0.removex(key); - - assertEquals(0, near0.size()); - assertEquals(0, dht0.size()); - - assertEquals(0, near1.size()); - assertEquals(0, dht1.size()); - } - - /** @throws Exception If failed. */ - @SuppressWarnings({"AssertWithSideEffects"}) - public void testEvictWithReaders() throws Exception { - Integer key = 1; - - IgniteBiTuple<ClusterNode, ClusterNode> t = getNodes(key); - - ClusterNode primary = t.get1(); - ClusterNode other = t.get2(); - - GridCacheProjection<Integer, String> near0 = near(grid(primary.id())); - GridCacheProjection<Integer, String> near1 = near(grid(other.id())); - - assert near0 != near1; - - GridDhtCacheAdapter<Integer, String> dht0 = dht(grid(primary.id())); - GridDhtCacheAdapter<Integer, String> dht1 = dht(grid(other.id())); - - // Put on primary node. - String val = "v1"; - - near0.put(key, val); - - GridDhtCacheEntry<Integer, String> e0 = (GridDhtCacheEntry<Integer, String>)dht0.peekEx(key); - GridDhtCacheEntry<Integer, String> e1 = (GridDhtCacheEntry<Integer, String>)dht1.peekEx(key); - - assert e0 == null || e0.readers().isEmpty(); - assert e1 == null || e1.readers().isEmpty(); - - // Get value on other node. - assertEquals(val, near1.get(key)); - - assert e0 != null; - - assert e0.readers().contains(other.id()); - assert e1 == null || e1.readers().isEmpty(); - - assert !e0.evictInternal(false, dht0.context().versions().next(), null); - - assertEquals(1, near0.size()); - assertEquals(1, dht0.size()); - - assertEquals(1, near1.size()); - assertEquals(0, dht1.size()); - - assert !e0.evictInternal(true, dht0.context().versions().next(), null); - - assertEquals(1, near0.size()); - assertEquals(1, dht0.size()); - - assertEquals(1, near1.size()); - assertEquals(0, dht1.size()); - } - - /** - * @param key Key. - * @return For the given key pair {primary node, some other node}. - */ - private IgniteBiTuple<ClusterNode, ClusterNode> getNodes(Integer key) { - GridCacheAffinity<Integer> aff = grid(0).<Integer, Object>cache(null).affinity(); - - int part = aff.partition(key); - - ClusterNode primary = aff.mapPartitionToNode(part); - - assert primary != null; - - Collection<ClusterNode> nodes = new ArrayList<>(grid(0).nodes()); - - nodes.remove(primary); - - ClusterNode other = F.first(nodes); - - assert other != null; - - assert !F.eqNodes(primary, other); - - return F.t(primary, other); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySetSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySetSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySetSelfTest.java deleted file mode 100644 index 8cd2df1..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEntrySetSelfTest.java +++ /dev/null @@ -1,46 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.*; -import org.gridgain.grid.kernal.processors.cache.distributed.*; - -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; - -/** - * - */ -public class GridCacheDhtEntrySetSelfTest extends GridCacheEntrySetAbstractSelfTest { - /** {@inheritDoc} */ - @Override protected GridCacheMode cacheMode() { - return PARTITIONED; - } - - /** {@inheritDoc} */ - @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception { - CacheConfiguration cfg = super.cacheConfiguration(gridName); - - cfg.setDistributionMode(PARTITIONED_ONLY); - - cfg.setBackups(gridCount()); - - return cfg; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b77f2a59/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java deleted file mode 100644 index b4d97d4..0000000 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java +++ /dev/null @@ -1,297 +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.gridgain.grid.kernal.processors.cache.distributed.dht; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.affinity.consistenthash.*; -import org.apache.ignite.cache.eviction.fifo.*; -import org.apache.ignite.cluster.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.events.*; -import org.apache.ignite.internal.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.internal.processors.cache.distributed.near.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; -import org.apache.ignite.internal.util.typedef.*; -import org.gridgain.testframework.junits.common.*; - -import java.util.*; - -import static org.apache.ignite.cache.GridCacheAtomicityMode.*; -import static org.apache.ignite.cache.GridCacheMode.*; -import static org.apache.ignite.cache.GridCacheDistributionMode.*; -import static org.apache.ignite.cache.GridCachePreloadMode.*; -import static org.apache.ignite.events.IgniteEventType.*; - -/** - * Tests for dht cache eviction. - */ -public class GridCacheDhtEvictionNearReadersSelfTest extends GridCommonAbstractTest { - /** */ - private static final int GRID_CNT = 4; - - /** */ - private TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); - - /** Default constructor. */ - public GridCacheDhtEvictionNearReadersSelfTest() { - super(false /* don't start grid. */); - } - - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(gridName); - - TcpDiscoverySpi disco = new TcpDiscoverySpi(); - - disco.setIpFinder(ipFinder); - - cfg.setDiscoverySpi(disco); - - CacheConfiguration cacheCfg = defaultCacheConfiguration(); - - cacheCfg.setCacheMode(PARTITIONED); - cacheCfg.setWriteSynchronizationMode(GridCacheWriteSynchronizationMode.FULL_SYNC); - cacheCfg.setSwapEnabled(false); - cacheCfg.setEvictSynchronized(true); - cacheCfg.setEvictNearSynchronized(true); - cacheCfg.setPreloadMode(SYNC); - cacheCfg.setAtomicityMode(atomicityMode()); - cacheCfg.setDistributionMode(NEAR_PARTITIONED); - cacheCfg.setBackups(1); - - // Set eviction queue size explicitly. - cacheCfg.setEvictSynchronizedKeyBufferSize(1); - cacheCfg.setEvictMaxOverflowRatio(0); - cacheCfg.setEvictionPolicy(new GridCacheFifoEvictionPolicy(10)); - cacheCfg.setNearEvictionPolicy(new GridCacheFifoEvictionPolicy(10)); - - cfg.setCacheConfiguration(cacheCfg); - - return cfg; - } - - /** - * @return Atomicity mode. - */ - public GridCacheAtomicityMode atomicityMode() { - return TRANSACTIONAL; - } - - /** {@inheritDoc} */ - @SuppressWarnings({"ConstantConditions"}) - @Override protected void beforeTestsStarted() throws Exception { - super.beforeTestsStarted(); - - if (GRID_CNT < 2) - throw new IgniteCheckedException("GRID_CNT must not be less than 2."); - - startGridsMultiThreaded(GRID_CNT); - } - - /** {@inheritDoc} */ - @Override protected void afterTestsStopped() throws Exception { - super.afterTestsStopped(); - - stopAllGrids(); - } - - /** {@inheritDoc} */ - @SuppressWarnings({"SizeReplaceableByIsEmpty"}) - @Override protected void beforeTest() throws Exception { - for (int i = 0; i < GRID_CNT; i++) { - assert near(grid(i)).size() == 0; - assert dht(grid(i)).size() == 0; - - assert near(grid(i)).isEmpty(); - assert dht(grid(i)).isEmpty(); - } - } - - /** {@inheritDoc} */ - @SuppressWarnings({"unchecked"}) - @Override protected void afterTest() throws Exception { - for (int i = 0; i < GRID_CNT; i++) { - near(grid(i)).removeAll(new IgnitePredicate[] {F.alwaysTrue()}); - - assert near(grid(i)).isEmpty() : "Near cache is not empty [idx=" + i + "]"; - assert dht(grid(i)).isEmpty() : "Dht cache is not empty [idx=" + i + "]"; - } - } - - /** - * @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. - */ - @SuppressWarnings({"unchecked"}) - private GridNearCacheAdapter<Integer, String> near(Ignite g) { - return (GridNearCacheAdapter)((GridKernal)g).internalCache(); - } - - /** - * @param g Grid. - * @return Dht cache. - */ - @SuppressWarnings({"unchecked", "TypeMayBeWeakened"}) - private GridDhtCacheAdapter<Integer, String> dht(Ignite g) { - return ((GridNearCacheAdapter)((GridKernal)g).internalCache()).dht(); - } - - /** - * @param idx Index. - * @return Affinity. - */ - private GridCacheConsistentHashAffinityFunction affinity(int idx) { - return (GridCacheConsistentHashAffinityFunction)grid(idx).cache(null).configuration().getAffinity(); - } - - /** - * @param key Key. - * @return Primary node for the given key. - */ - private Collection<ClusterNode> keyNodes(Object key) { - GridCacheConsistentHashAffinityFunction aff = affinity(0); - - return aff.nodes(aff.partition(key), grid(0).nodes(), 1); - } - - /** - * @param nodeId Node id. - * @return Predicate for events belonging to specified node. - */ - private IgnitePredicate<IgniteEvent> nodeEvent(final UUID nodeId) { - assert nodeId != null; - - return new P1<IgniteEvent>() { - @Override public boolean apply(IgniteEvent e) { - info("Predicate called [e.nodeId()=" + e.node().id() + ", nodeId=" + nodeId + ']'); - - return e.node().id().equals(nodeId); - } - }; - } - - /** - * JUnit. - * - * @throws Exception If failed. - */ - public void testReaders() throws Exception { - Integer key = 1; - - Collection<ClusterNode> nodes = new ArrayList<>(keyNodes(key)); - - ClusterNode primary = F.first(nodes); - - assert primary != null; - - nodes.remove(primary); - - ClusterNode backup = F.first(nodes); - - assert backup != null; - - // Now calculate other node that doesn't own the key. - nodes = new ArrayList<>(grid(0).nodes()); - - nodes.remove(primary); - nodes.remove(backup); - - ClusterNode other = F.first(nodes); - - assert !F.eqNodes(primary, backup); - assert !F.eqNodes(primary, other); - assert !F.eqNodes(backup, other); - - info("Primary node: " + primary.id()); - info("Backup node: " + backup.id()); - info("Other node: " + other.id()); - - GridNearCacheAdapter<Integer, String> nearPrimary = near(grid(primary)); - GridDhtCacheAdapter<Integer, String> dhtPrimary = dht(grid(primary)); - - GridNearCacheAdapter<Integer, String> nearBackup = near(grid(backup)); - GridDhtCacheAdapter<Integer, String> dhtBackup = dht(grid(backup)); - - GridNearCacheAdapter<Integer, String> nearOther = near(grid(other)); - GridDhtCacheAdapter<Integer, String> dhtOther = dht(grid(other)); - - String val = "v1"; - - // Put on primary node. - nearPrimary.put(key, val); - - GridDhtCacheEntry<Integer, String> entryPrimary = dhtPrimary.peekExx(key); - GridDhtCacheEntry<Integer, String> entryBackup = dhtBackup.peekExx(key); - - assert entryPrimary != null; - assert entryBackup != null; - assert nearOther.peekExx(key) == null; - assert dhtOther.peekExx(key) == null; - - IgniteFuture<IgniteEvent> futOther = - waitForLocalEvent(grid(other).events(), nodeEvent(other.id()), EVT_CACHE_ENTRY_EVICTED); - - IgniteFuture<IgniteEvent> futBackup = - waitForLocalEvent(grid(backup).events(), nodeEvent(backup.id()), EVT_CACHE_ENTRY_EVICTED); - - IgniteFuture<IgniteEvent> futPrimary = - waitForLocalEvent(grid(primary).events(), nodeEvent(primary.id()), EVT_CACHE_ENTRY_EVICTED); - - // Get value on other node, it should be loaded to near cache. - assertEquals(val, nearOther.get(key, true, null)); - - entryPrimary = dhtPrimary.peekExx(key); - entryBackup = dhtBackup.peekExx(key); - - assert entryPrimary != null; - assert entryBackup != null; - - assertEquals(val, nearOther.peek(key)); - - assertTrue(!entryPrimary.readers().isEmpty()); - - // Evict on primary node. - // It will trigger dht eviction and eviction on backup node. - grid(primary).cache(null).evict(key); - - futOther.get(3000); - futBackup.get(3000); - futPrimary.get(3000); - - assertNull(dhtPrimary.peek(key)); - assertNull(nearPrimary.peek(key)); - - assertNull(dhtBackup.peek(key)); - assertNull(nearBackup.peek(key)); - - assertNull(dhtOther.peek(key)); - assertNull(nearOther.peek(key)); - } -}