You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/02/17 09:59:29 UTC
[19/50] [abbrv] ignite git commit: IGNITE-3699 (Backported from
master) CreatedExpiryPolicy doesn't work if entry is loaded from store
http://git-wip-us.apache.org/repos/asf/ignite/blob/e832ef9c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyWithStoreAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyWithStoreAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyWithStoreAbstractTest.java
index 78c59ac..1f6ec2d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyWithStoreAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyWithStoreAbstractTest.java
@@ -17,6 +17,11 @@
package org.apache.ignite.internal.processors.cache.expiry;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.cache.configuration.Factory;
import javax.cache.expiry.Duration;
@@ -25,6 +30,7 @@ import javax.cache.integration.CompletionListenerFuture;
import javax.cache.processor.EntryProcessor;
import javax.cache.processor.MutableEntry;
import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteTransactions;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CachePeekMode;
import org.apache.ignite.cache.store.CacheStore;
@@ -36,6 +42,9 @@ import org.apache.ignite.internal.processors.cache.GridCacheEntryEx;
import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractTest;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.transactions.Transaction;
+import org.apache.ignite.transactions.TransactionConcurrency;
+import org.apache.ignite.transactions.TransactionIsolation;
/**
*
@@ -174,6 +183,99 @@ public abstract class IgniteCacheExpiryPolicyWithStoreAbstractTest extends Ignit
}
/**
+ * @throws Exception If failed.
+ */
+ public void testGetReadThrough() throws Exception {
+ getReadThrough(false, null, null);
+ getReadThrough(true, null, null);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ protected void getReadThrough(boolean withExcPlc,
+ TransactionConcurrency txConcurrency,
+ TransactionIsolation txIsolation) throws Exception {
+ IgniteCache<Integer, Integer> cache = jcache(0);
+
+ if (withExcPlc)
+ cache = cache.withExpiryPolicy(new ExpiryPolicy() {
+ @Override public Duration getExpiryForCreation() {
+ return new Duration(TimeUnit.MILLISECONDS, 501);
+ }
+
+ @Override public Duration getExpiryForAccess() {
+ return new Duration(TimeUnit.MILLISECONDS, 601);
+ }
+
+ @Override public Duration getExpiryForUpdate() {
+ return new Duration(TimeUnit.MILLISECONDS, 701);
+ }
+ });
+
+ Integer prim = primaryKeys(cache, 1, 1000).get(0);
+ Integer back = backupKeys(cache, 1, 1000).get(0);
+ Integer near = nearKeys(cache, 1, 1000).get(0);
+
+ Set<Integer> prims = new HashSet<>(primaryKeys(cache, 10, prim + 1));
+ Set<Integer> backs = new HashSet<>(backupKeys(cache, 10, back + 1));
+ Set<Integer> nears = new HashSet<>(nearKeys(cache, 10, near + 1));
+
+ Set<Integer> keys = new HashSet<>();
+
+ keys.add(prim);
+ keys.add(back);
+ keys.add(near);
+
+ keys.addAll(prims);
+ keys.addAll(backs);
+ keys.addAll(nears);
+
+ for (Integer key : keys)
+ storeMap.put(key, key);
+
+ IgniteTransactions transactions = grid(0).transactions();
+
+ Transaction tx = txConcurrency != null ? transactions.txStart(txConcurrency, txIsolation) : null;
+
+ try {
+ Collection<Integer> singleKeys = new HashSet<>();
+
+ singleKeys.add(prim);
+ singleKeys.add(back);
+ singleKeys.add(near);
+
+ assertEquals(3, singleKeys.size());
+
+ for (Integer key : singleKeys)
+ assertEquals(key, cache.get(key));
+
+ Map<Integer, Integer> res = new HashMap<>();
+
+ res.putAll(cache.getAll(prims));
+ res.putAll(cache.getAll(backs));
+ res.putAll(cache.getAll(nears));
+
+ assertEquals(30, res.size());
+
+ for (Map.Entry<Integer, Integer> e : res.entrySet())
+ assertEquals(e.getKey(), e.getValue());
+ }
+ finally {
+ if (tx != null)
+ tx.rollback();
+ }
+
+ for (Integer key : keys)
+ checkTtl(key, withExcPlc ? 501 : 500, true);
+
+ U.sleep(600);
+
+ for (Integer key : keys)
+ checkExpired(key);
+ }
+
+ /**
* @param key Key.
*/
private void checkExpired(Integer key) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/e832ef9c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxExpiryPolicyWithStoreTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxExpiryPolicyWithStoreTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxExpiryPolicyWithStoreTest.java
index 4b9b61a..f5888f8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxExpiryPolicyWithStoreTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxExpiryPolicyWithStoreTest.java
@@ -19,6 +19,8 @@ package org.apache.ignite.internal.processors.cache.expiry;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.transactions.TransactionConcurrency;
+import org.apache.ignite.transactions.TransactionIsolation;
import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
@@ -41,4 +43,23 @@ public class IgniteCacheTxExpiryPolicyWithStoreTest extends IgniteCacheExpiryPol
@Override protected CacheAtomicityMode atomicityMode() {
return TRANSACTIONAL;
}
+
+ /** {@inheritDoc} */
+ @Override public void testGetReadThrough() throws Exception {
+ super.testGetReadThrough();
+
+ getReadThrough(false, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.READ_COMMITTED);
+ getReadThrough(true, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.READ_COMMITTED);
+ getReadThrough(false, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.REPEATABLE_READ);
+ getReadThrough(true, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.REPEATABLE_READ);
+ getReadThrough(false, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.SERIALIZABLE);
+ getReadThrough(true, TransactionConcurrency.OPTIMISTIC, TransactionIsolation.SERIALIZABLE);
+
+ getReadThrough(false, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.READ_COMMITTED);
+ getReadThrough(true, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.READ_COMMITTED);
+ getReadThrough(false, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.REPEATABLE_READ);
+ getReadThrough(true, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.REPEATABLE_READ);
+ getReadThrough(false, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.SERIALIZABLE);
+ getReadThrough(true, TransactionConcurrency.PESSIMISTIC, TransactionIsolation.SERIALIZABLE);
+ }
}
\ No newline at end of file