IGNITE-96 - Fixed Full API test.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/2dd61e07 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/2dd61e07 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/2dd61e07 Branch: refs/heads/sprint-1 Commit: 2dd61e076bc72ad3658d2b978aff458ca350e688 Parents: 7a35d38 Author: Alexey Goncharuk <agoncha...@gridgain.com> Authored: Tue Feb 10 15:30:44 2015 -0800 Committer: Alexey Goncharuk <agoncha...@gridgain.com> Committed: Tue Feb 10 15:30:44 2015 -0800 ---------------------------------------------------------------------- .../processors/cache/GridCacheMapEntry.java | 51 +-- .../colocated/GridDhtDetachedCacheEntry.java | 3 - .../cache/GridCacheAbstractFullApiSelfTest.java | 83 ++-- ...idCacheNearOnlyMultiNodeFullApiSelfTest.java | 403 +++++++++++-------- ...achePartitionedMultiNodeFullApiSelfTest.java | 8 +- .../junits/common/GridCommonAbstractTest.java | 4 +- 6 files changed, 335 insertions(+), 217 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2dd61e07/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java index 5802227..9a18247 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java @@ -57,9 +57,6 @@ import static org.apache.ignite.transactions.IgniteTxState.*; "NonPrivateFieldAccessedInSynchronizedContext", "TooBroadScope", "FieldAccessedSynchronizedAndUnsynchronized"}) public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> { /** */ - private static final long serialVersionUID = 0L; - - /** */ private static final sun.misc.Unsafe UNSAFE = GridUnsafe.unsafe(); /** */ @@ -1165,8 +1162,6 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> subjId, null, taskName); } - CacheMode mode = cctx.config().getCacheMode(); - if (cctx.isLocal() || cctx.isReplicated() || (tx != null && tx.local() && !isNear())) cctx.continuousQueries().onEntryUpdate(this, key, val, valueBytesUnlocked(), old, oldBytes, false); @@ -1326,8 +1321,6 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> null, taskName); } - CacheMode mode = cctx.config().getCacheMode(); - if (cctx.isLocal() || cctx.isReplicated() || (tx != null && tx.local() && !isNear())) cctx.continuousQueries().onEntryUpdate(this, key, null, null, old, oldBytes, false); @@ -1674,16 +1667,12 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> if (isNew()) unswap(true, retval); - boolean newTtlResolved = false; - - boolean drNeedResolve = false; - Object transformClo = null; if (drResolve) { GridCacheVersion oldDrVer = version().drVersion(); - drNeedResolve = cctx.conflictNeedResolve(oldDrVer, drVer); + boolean drNeedResolve = cctx.conflictNeedResolve(oldDrVer, drVer); if (drNeedResolve) { // Get old value. @@ -1714,8 +1703,6 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> newExpireTime = CU.toExpireTime(newTtl); } - newTtlResolved = true; - GridCacheVersionedEntryEx<K, V> oldEntry = versionedEntry(); GridCacheVersionedEntryEx<K, V> newEntry = new GridCachePlainVersionedEntry<>(k, (V)writeObj, newTtl, newExpireTime, drVer); @@ -1870,7 +1857,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> expiryPlc.ttlUpdated(key, getOrMarshalKeyBytes(), version(), - hasReaders() ? ((GridDhtCacheEntry) this).readers() : null); + hasReaders() ? ((GridDhtCacheEntry<K, V>) this).readers() : null); } } @@ -4349,20 +4336,38 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> } /** {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override public V getValue() { - for (;;) { - GridCacheEntryEx<K, V> e = cctx.cache().peekEx(key); + try { + IgniteInternalTx<K, V> tx = cctx.tm().userTx(); - if (e == null) - return null; + if (tx != null) { + GridTuple<V> peek = tx.peek(cctx, false, key, null); - try { - return e.peek(GridCachePeekMode.GLOBAL, CU.<K, V>empty()); + if (peek != null) + return peek.get(); } - catch (GridCacheEntryRemovedException ignored) { - // No-op. + + if (detached()) + return rawGet(); + + for (;;) { + GridCacheEntryEx<K, V> e = cctx.cache().peekEx(key); + + if (e == null) + return null; + + try { + return e.peek(GridCachePeekMode.GLOBAL, CU.<K, V>empty()); + } + catch (GridCacheEntryRemovedException ignored) { + // No-op. + } } } + catch (GridCacheFilterFailedException ignored) { + throw new IgniteException("Should never happen."); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2dd61e07/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtDetachedCacheEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtDetachedCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtDetachedCacheEntry.java index 25d35fc..549e552 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtDetachedCacheEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtDetachedCacheEntry.java @@ -28,9 +28,6 @@ import org.jetbrains.annotations.*; * Detached cache entry. */ public class GridDhtDetachedCacheEntry<K, V> extends GridDistributedCacheEntry<K, V> { - /** */ - private static final long serialVersionUID = 0L; - /** * @param ctx Cache context. * @param key Cache key. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2dd61e07/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java index a292655..6863835 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java @@ -162,6 +162,13 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract } /** + * @return A not near-only cache. + */ + protected IgniteCache<String, Integer> fullCache() { + return jcache(); + } + + /** * @throws Exception In case of error. */ public void testSize() throws Exception { @@ -1566,14 +1573,14 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract IgniteFuture<Integer> fut1 = cacheAsync.future(); assert fut1.get() == null; - assert cache.get("key") != null && cache.get("key") == 1; + assertEquals((Integer)1, cache.get("key")); cacheAsync.getAndPutIfAbsent("key", 2); IgniteFuture<Integer> fut2 = cacheAsync.future(); - assert fut2.get() != null && fut2.get() == 1; - assert cache.get("key") != null && cache.get("key") == 1; + assertEquals((Integer)1, fut2.get()); + assertEquals((Integer)1, cache.get("key")); if (tx != null) tx.commit(); @@ -2987,20 +2994,23 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract final String key = primaryKeysForCache(jcache(), 1).get(0); - if (oldEntry) - c.put(key, 1); - - GridCacheAdapter<Object, Object> internalCache = ((IgniteKernal)grid(0)).internalCache(); + GridCacheAdapter<String, Integer> internalCache = internalCache(fullCache()); if (internalCache.isNear()) internalCache = internalCache.context().near().dht(); - GridCacheEntryEx entry = internalCache.peekEx(key); + GridCacheEntryEx entry; - assert entry != null; + if (oldEntry) { + c.put(key, 1); - assertEquals(0, entry.ttl()); - assertEquals(0, entry.expireTime()); + entry = internalCache.peekEx(key); + + assert entry != null; + + assertEquals(0, entry.ttl()); + assertEquals(0, entry.expireTime()); + } long startTime = System.currentTimeMillis(); @@ -3015,10 +3025,12 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract tx.rollback(); } - entry = internalCache.peekEx(key); + if (oldEntry) { + entry = internalCache.peekEx(key); - assertEquals(0, entry.ttl()); - assertEquals(0, entry.expireTime()); + assertEquals(0, entry.ttl()); + assertEquals(0, entry.expireTime()); + } } // Now commit transaction and check that ttl and expire time have been saved. @@ -3039,8 +3051,12 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract for (int i = 0; i < gridCount(); i++) { if (grid(i).affinity(null).isPrimaryOrBackup(grid(i).localNode(), key)) { - GridCacheEntryEx<Object, Object> curEntry = - internalCache.peekEx(key); + GridCacheAdapter<String, Integer> cache = internalCache(jcache(i)); + + if (cache.context().isNear()) + cache = cache.context().near().dht(); + + GridCacheEntryEx<String, Integer> curEntry = cache.peekEx(key); assertEquals(ttl, curEntry.ttl()); @@ -3068,8 +3084,12 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract for (int i = 0; i < gridCount(); i++) { if (grid(i).affinity(null).isPrimaryOrBackup(grid(i).localNode(), key)) { - GridCacheEntryEx<Object, Object> curEntry = - internalCache.peekEx(key); + GridCacheAdapter<String, Integer> cache = internalCache(jcache(i)); + + if (cache.context().isNear()) + cache = cache.context().near().dht(); + + GridCacheEntryEx<String, Integer> curEntry = cache.peekEx(key); assertEquals(ttl, curEntry.ttl()); @@ -3097,8 +3117,12 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract for (int i = 0; i < gridCount(); i++) { if (grid(i).affinity(null).isPrimaryOrBackup(grid(i).localNode(), key)) { - GridCacheEntryEx<Object, Object> curEntry = - internalCache.peekEx(key); + GridCacheAdapter<String, Integer> cache = internalCache(jcache(i)); + + if (cache.context().isNear()) + cache = cache.context().near().dht(); + + GridCacheEntryEx<String, Integer> curEntry = cache.peekEx(key); assertEquals(ttl, curEntry.ttl()); @@ -3130,8 +3154,12 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract for (int i = 0; i < gridCount(); i++) { if (grid(i).affinity(null).isPrimaryOrBackup(grid(i).localNode(), key)) { - GridCacheEntryEx<Object, Object> curEntry = - internalCache.peekEx(key); + GridCacheAdapter<String, Integer> cache = internalCache(jcache(i)); + + if (cache.context().isNear()) + cache = cache.context().near().dht(); + + GridCacheEntryEx<String, Integer> curEntry = cache.peekEx(key); assertEquals(ttl, curEntry.ttl()); assertEquals(expireTimes[i], curEntry.expireTime()); @@ -3143,7 +3171,7 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicateX() { @SuppressWarnings("unchecked") - @Override public boolean applyx() throws IgniteCheckedException { + @Override public boolean applyx() { try { Integer val = c.get(key); @@ -3173,11 +3201,16 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract if (internalCache.isLocal()) return; + assert c.get(key) == null; + + internalCache = internalCache(fullCache()); + + if (internalCache.isNear()) + internalCache = internalCache.context().near().dht(); + // Ensure that old TTL and expire time are not longer "visible". entry = internalCache.peekEx(key); - assert c.get(key) == null; - assertEquals(0, entry.ttl()); assertEquals(0, entry.expireTime()); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2dd61e07/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java index 15b56b3..b4f6654 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java @@ -24,10 +24,14 @@ import org.apache.ignite.configuration.*; import org.apache.ignite.events.*; import org.apache.ignite.internal.*; import org.apache.ignite.internal.processors.cache.*; +import org.apache.ignite.internal.util.lang.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; +import org.apache.ignite.testframework.*; +import org.apache.ignite.transactions.*; +import javax.cache.expiry.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; @@ -119,7 +123,7 @@ public class GridCacheNearOnlyMultiNodeFullApiSelfTest extends GridCachePartitio /** * @return A not near-only cache. */ - protected IgniteCache<String, Integer> fullCache() { + @Override protected IgniteCache<String, Integer> fullCache() { return nearIdx == 0 ? jcache(1) : jcache(0); } @@ -202,167 +206,242 @@ public class GridCacheNearOnlyMultiNodeFullApiSelfTest extends GridCachePartitio * @throws Exception */ private void checkReaderTtl(boolean inTx) throws Exception { - assert false : "ignite-96"; - -// int ttl = 1000; -// -// final ExpiryPolicy expiry = new TouchedExpiryPolicy(new Duration(MILLISECONDS, ttl)); -// -// final GridCache<String, Integer> c = cache(); -// -// final String key = primaryKeysForCache(jcache(), 1).get(0); -// -// c.put(key, 1); -// -// Cache.Entry<String, Integer> entry = c.entry(key); -// -// assert entry != null; -// -// assertEquals(0, entry.timeToLive()); -// assertEquals(0, entry.expirationTime()); -// -// long startTime = System.currentTimeMillis(); -// -// int fullIdx = nearIdx == 0 ? 1 : 0; -// -// // Now commit transaction and check that ttl and expire time have been saved. -// IgniteTx tx = inTx ? grid(fullIdx).transactions().txStart() : null; -// -// try { -// jcache(fullIdx).withExpiryPolicy(expiry).put(key, 1); -// -// if (tx != null) -// tx.commit(); -// } -// finally { -// if (tx != null) -// tx.close(); -// } -// -// long[] expireTimes = new long[gridCount()]; -// -// for (int i = 0; i < gridCount(); i++) { -// CacheEntry<String, Integer> curEntry = cache(i).entry(key); -// -// if (curEntry.primary() || curEntry.backup() || i == nearIdx) { -// assertEquals(ttl, curEntry.timeToLive()); -// -// assert curEntry.expirationTime() > startTime; -// -// expireTimes[i] = curEntry.expirationTime(); -// } -// } -// -// // One more update from the same cache entry to ensure that expire time is shifted forward. -// U.sleep(100); -// -// tx = inTx ? grid(fullIdx).transactions().txStart() : null; -// -// try { -// jcache(fullIdx).withExpiryPolicy(expiry).put(key, 2); -// -// if (tx != null) -// tx.commit(); -// } -// finally { -// if (tx != null) -// tx.close(); -// } -// -// for (int i = 0; i < gridCount(); i++) { -// CacheEntry<String, Integer> curEntry = cache(i).entry(key); -// -// if (curEntry.primary() || curEntry.backup() || i == nearIdx) { -// assertEquals(ttl, curEntry.timeToLive()); -// -// assert curEntry.expirationTime() > expireTimes[i]; -// -// expireTimes[i] = curEntry.expirationTime(); -// } -// } -// -// // And one more update to ensure that ttl is not changed and expire time is not shifted forward. -// U.sleep(100); -// -// tx = inTx ? grid(fullIdx).transactions().txStart() : null; -// -// try { -// jcache(fullIdx).put(key, 4); -// } -// finally { -// if (tx != null) -// tx.commit(); -// } -// -// for (int i = 0; i < gridCount(); i++) { -// CacheEntry<String, Integer> curEntry = cache(i).entry(key); -// -// if (curEntry.primary() || curEntry.backup() || i == nearIdx) { -// assertEquals(ttl, curEntry.timeToLive()); -// assertEquals(expireTimes[i], curEntry.expirationTime()); -// } -// } -// -// // Avoid reloading from store. -// map.remove(key); -// -// assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicateX() { -// @SuppressWarnings("unchecked") -// @Override public boolean applyx() throws IgniteCheckedException { -// try { -// Integer val = c.get(key); -// -// if (val != null) { -// info("Value is in cache [key=" + key + ", val=" + val + ']'); -// -// return false; -// } -// -// // Get "cache" field from GridCacheProxyImpl. -// GridCacheAdapter c0 = GridTestUtils.getFieldValue(c, "cache"); -// -// if (!c0.context().deferredDelete()) { -// GridCacheEntryEx e0 = c0.peekEx(key); -// -// return e0 == null || (e0.rawGet() == null && e0.valueBytes() == null); -// } -// else -// return true; -// } -// catch (GridCacheEntryRemovedException e) { -// throw new RuntimeException(e); -// } -// } -// }, Math.min(ttl * 10, getTestTimeout()))); -// -// // Ensure that old TTL and expire time are not longer "visible". -// entry = c.entry(key); -// -// assert entry.get() == null; -// -// assertEquals(0, entry.timeToLive()); -// assertEquals(0, entry.expirationTime()); -// -// // Ensure that next update will not pick old expire time. -// -// tx = inTx ? c.txStart() : null; -// -// try { -// entry.set(10); -// } -// finally { -// if (tx != null) -// tx.commit(); -// } -// -// U.sleep(2000); -// -// entry = c.entry(key); -// -// assertEquals((Integer)10, entry.get()); -// -// assertEquals(0, entry.timeToLive()); -// assertEquals(0, entry.expirationTime()); + int ttl = 1000; + + final ExpiryPolicy expiry = new TouchedExpiryPolicy(new Duration(TimeUnit.MILLISECONDS, ttl)); + + final GridCache<String, Integer> c = cache(); + + final String key = primaryKeysForCache(fullCache(), 1).get(0); + + c.put(key, 1); + + info("Finished first put."); + + { + GridCacheAdapter<String, Integer> dht = internalCache(fullCache()); + + if (dht.context().isNear()) + dht = dht.context().near().dht(); + + GridCacheEntryEx<String, Integer> entry = dht.peekEx(key); + + assert entry != null; + + assertEquals(0, entry.ttl()); + assertEquals(0, entry.expireTime()); + } + + long startTime = System.currentTimeMillis(); + + int fullIdx = nearIdx == 0 ? 1 : 0; + + // Now commit transaction and check that ttl and expire time have been saved. + IgniteTx tx = inTx ? grid(fullIdx).transactions().txStart() : null; + + try { + jcache(fullIdx).withExpiryPolicy(expiry).put(key, 1); + + if (tx != null) + tx.commit(); + } + finally { + if (tx != null) + tx.close(); + } + + long[] expireTimes = new long[gridCount()]; + + for (int i = 0; i < gridCount(); i++) { + info("Checking grid: " + grid(i).localNode().id()); + + GridCacheEntryEx<String, Integer> entry = null; + + if (cache(i).affinity().isPrimaryOrBackup(grid(i).localNode(), key)) { + GridCacheAdapter<String, Integer> dht = internalCache(jcache(i)); + + if (dht.context().isNear()) + dht = dht.context().near().dht(); + + entry = dht.peekEx(key); + + assert entry != null; + } + else if (i == nearIdx) { + GridCacheAdapter<String, Integer> near = internalCache(jcache(i)); + + entry = near.peekEx(key); + + assert entry != null; + } + + if (entry != null) { + assertEquals(ttl, entry.ttl()); + assert entry.expireTime() > startTime; + expireTimes[i] = entry.expireTime(); + } + } + + // One more update from the same cache entry to ensure that expire time is shifted forward. + U.sleep(100); + + tx = inTx ? grid(fullIdx).transactions().txStart() : null; + + try { + jcache(fullIdx).withExpiryPolicy(expiry).put(key, 2); + + if (tx != null) + tx.commit(); + } + finally { + if (tx != null) + tx.close(); + } + + for (int i = 0; i < gridCount(); i++) { + GridCacheEntryEx<String, Integer> entry = null; + + if (cache(i).affinity().isPrimaryOrBackup(grid(i).localNode(), key)) { + GridCacheAdapter<String, Integer> dht = internalCache(jcache(i)); + + if (dht.context().isNear()) + dht = dht.context().near().dht(); + + entry = dht.peekEx(key); + + assert entry != null; + } + else if (i == nearIdx) { + GridCacheAdapter<String, Integer> near = internalCache(jcache(i)); + + entry = near.peekEx(key); + + assert entry != null; + } + + if (entry != null) { + assertEquals(ttl, entry.ttl()); + assert entry.expireTime() > expireTimes[i]; + expireTimes[i] = entry.expireTime(); + } + } + + // And one more update to ensure that ttl is not changed and expire time is not shifted forward. + U.sleep(100); + + tx = inTx ? grid(fullIdx).transactions().txStart() : null; + + try { + jcache(fullIdx).put(key, 4); + } + finally { + if (tx != null) + tx.commit(); + } + + for (int i = 0; i < gridCount(); i++) { + GridCacheEntryEx<String, Integer> entry = null; + + if (cache(i).affinity().isPrimaryOrBackup(grid(i).localNode(), key)) { + GridCacheAdapter<String, Integer> dht = internalCache(jcache(i)); + + if (dht.context().isNear()) + dht = dht.context().near().dht(); + + entry = dht.peekEx(key); + + assert entry != null; + } + else if (i == nearIdx) { + GridCacheAdapter<String, Integer> near = internalCache(jcache(i)); + + entry = near.peekEx(key); + + assert entry != null; + } + + if (entry != null) { + assertEquals(ttl, entry.ttl()); + assertEquals(expireTimes[i], entry.expireTime()); + } + } + + // Avoid reloading from store. + map.remove(key); + + assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicateX() { + @SuppressWarnings("unchecked") + @Override public boolean applyx() throws IgniteCheckedException { + try { + Integer val = c.get(key); + + if (val != null) { + info("Value is in cache [key=" + key + ", val=" + val + ']'); + + return false; + } + + // Get "cache" field from GridCacheProxyImpl. + GridCacheAdapter c0 = GridTestUtils.getFieldValue(c, "cache"); + + if (!c0.context().deferredDelete()) { + GridCacheEntryEx e0 = c0.peekEx(key); + + return e0 == null || (e0.rawGet() == null && e0.valueBytes() == null); + } + else + return true; + } + catch (GridCacheEntryRemovedException e) { + throw new RuntimeException(e); + } + } + }, Math.min(ttl * 10, getTestTimeout()))); + + // Ensure that old TTL and expire time are not longer "visible". + { + GridCacheAdapter<String, Integer> dht = internalCache(fullCache()); + + if (dht.context().isNear()) + dht = dht.context().near().dht(); + + GridCacheEntryEx<String, Integer> entry = dht.peekEx(key); + + assert entry != null; + + assertEquals(0, entry.ttl()); + assertEquals(0, entry.expireTime()); + } + + // Ensure that next update will not pick old expire time. + tx = inTx ? c.txStart() : null; + + try { + c.put(key, 10); + + if (tx != null) + tx.commit(); + } + finally { + if (tx != null) + tx.close(); + } + + U.sleep(2000); + + { + GridCacheAdapter<String, Integer> dht = internalCache(fullCache()); + + if (dht.context().isNear()) + dht = dht.context().near().dht(); + + GridCacheEntryEx<String, Integer> entry = dht.peekEx(key); + + assert entry != null; + + assertEquals(0, entry.ttl()); + assertEquals(0, entry.expireTime()); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2dd61e07/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java index 538b5a4..4af2550 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java @@ -236,11 +236,12 @@ public class GridCachePartitionedMultiNodeFullApiSelfTest extends GridCacheParti assertEquals((Integer)1, c.localPeek("key", BACKUP)); } else if (!c.unwrap(Ignite.class).affinity(null).isPrimaryOrBackup(grid(i).localNode(), "key")) { + // Initialize near reader. + assertEquals((Integer)1, jcache(i).get("key")); + assertEquals(nearPeekVal, c.localPeek("key", NEAR)); assertNull(c.localPeek("key", PRIMARY, BACKUP)); - - assertEquals((Integer)1, jcache(i).get("key")); } } } @@ -264,6 +265,9 @@ public class GridCachePartitionedMultiNodeFullApiSelfTest extends GridCacheParti assert c.peek("key", Arrays.asList(PARTITIONED_ONLY)) == 1; } else if (!c.affinity().isPrimaryOrBackup(grid(i).localNode(), "key")) { + // Initialize near reader. + assertEquals((Integer)1, jcache(i).get("key")); + assertEquals(nearPeekVal, c.peek("key", Arrays.asList(NEAR_ONLY))); assert c.peek("key", Arrays.asList(PARTITIONED_ONLY)) == null; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2dd61e07/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 eb005e2..40bb49f 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 @@ -121,8 +121,8 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest { /** * @param cache Cache. */ - protected <K, V> GridCache<K, V> internalCache(IgniteCache<K, V> cache) { - return ((IgniteKernal)cache.unwrap(Ignite.class)).cache(cache.getName()); + protected <K, V> GridCacheAdapter<K, V> internalCache(IgniteCache<K, V> cache) { + return ((IgniteKernal)cache.unwrap(Ignite.class)).internalCache(cache.getName()); } /**