ignite-656: fixing get() for pessimistic mode

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/8d18956f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/8d18956f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/8d18956f

Branch: refs/heads/ignite-286
Commit: 8d18956fd5ab04288dd72dde6f59e7fae2187c34
Parents: 56a6348
Author: Denis Magda <dma...@gridgain.com>
Authored: Tue Apr 14 18:15:51 2015 +0300
Committer: Denis Magda <dma...@gridgain.com>
Committed: Tue Apr 14 18:15:51 2015 +0300

----------------------------------------------------------------------
 .../colocated/GridDhtColocatedLockFuture.java   |  3 +-
 .../distributed/near/GridNearLockFuture.java    |  3 +-
 .../distributed/near/GridNearLockRequest.java   |  5 +-
 .../cache/GridCacheAbstractFullApiSelfTest.java | 71 ++++++++++++++++++--
 4 files changed, 73 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8d18956f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
index 7b05065..515e5f7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
@@ -746,7 +746,8 @@ public final class GridDhtColocatedLockFuture<K, V> extends 
GridCompoundIdentity
                                     key,
                                     retval,
                                     dhtVer, // Include DHT version to match 
remote DHT entry.
-                                    cctx);
+                                    cctx,
+                                    entry.context().skipStore());
                             }
 
                             explicit = inTx() && cand == null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8d18956f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
index 789fd93..68d98e7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
@@ -882,7 +882,8 @@ public final class GridNearLockFuture<K, V> extends 
GridCompoundIdentityFuture<B
                                         key,
                                         retval && dhtVer == null,
                                         dhtVer, // Include DHT version to 
match remote DHT entry.
-                                        cctx);
+                                        cctx,
+                                        entry.context().skipStore());
                                 }
 
                                 if (cand.reentry())

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8d18956f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
index 3bbc45c..8f9a81f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockRequest.java
@@ -287,12 +287,13 @@ public class GridNearLockRequest extends 
GridDistributedLockRequest {
         KeyCacheObject key,
         boolean retVal,
         @Nullable GridCacheVersion dhtVer,
-        GridCacheContext ctx
+        GridCacheContext ctx,
+        boolean skipStore
     ) throws IgniteCheckedException {
         dhtVers[idx] = dhtVer;
 
         // Delegate to super.
-        addKeyBytes(key, retVal, (Collection<GridCacheMvccCandidate>)null, 
ctx, false); //TODO: revisit
+        addKeyBytes(key, retVal, (Collection<GridCacheMvccCandidate>)null, 
ctx, skipStore);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8d18956f/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 b2368ff..684b5b5 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
@@ -4426,8 +4426,19 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
         assertTrue(map.size() == 0);
 
         if (atomicityMode() == CacheAtomicityMode.TRANSACTIONAL) {
-            checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.OPTIMISTIC,
+            /*checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.OPTIMISTIC,
                 TransactionIsolation.READ_COMMITTED);
+            checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.OPTIMISTIC,
+                TransactionIsolation.REPEATABLE_READ);
+            checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.OPTIMISTIC,
+                TransactionIsolation.SERIALIZABLE);*/
+
+            //checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.PESSIMISTIC,
+            //    TransactionIsolation.READ_COMMITTED);
+            checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.PESSIMISTIC,
+               TransactionIsolation.REPEATABLE_READ);
+            //checkSkipStoreWithTransaction(cache, cacheSkipStore, data, keys, 
TransactionConcurrency.PESSIMISTIC,
+            //    TransactionIsolation.SERIALIZABLE);
         }
     }
 
@@ -4472,6 +4483,16 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
         }
     }
 
+    /**
+     * @param cache Cache instance.
+     * @param cacheSkipStore Cache skip store projection.
+     * @param data Data set.
+     * @param keys Keys list.
+     * @param txConcurrency Concurrency mode.
+     * @param txIsolation Isolation mode.
+     *
+     * @throws Exception If failed.
+     */
     private void checkSkipStoreWithTransaction(IgniteCache<String, Integer> 
cache,
         IgniteCache<String, Integer> cacheSkipStore,
         Map<String, Integer> data,
@@ -4480,10 +4501,7 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
         TransactionIsolation txIsolation) throws  Exception {
 
         cache.removeAll(data.keySet());
-
-        assertTrue(cache.size(CachePeekMode.ALL) == 0);
-        assertTrue(cacheSkipStore.size(CachePeekMode.ALL) == 0);
-        assertTrue(map.size() == 0);
+        checkEmpty(cache, cacheSkipStore);
 
         IgniteTransactions txs = grid(0).transactions();
 
@@ -4522,6 +4540,8 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
 
         tx.commit();
 
+        assertTrue(map.size() == 0);
+
         // cache putAll(..)/removeAll(..) check
         tx = txs.txStart(txConcurrency, txIsolation);
 
@@ -4543,6 +4563,8 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
 
         tx.commit();
 
+        assertTrue(map.size() == 0);
+
         // putAll(..) from both cacheSkipStore and cache
         tx = txs.txStart(txConcurrency, txIsolation);
 
@@ -4590,6 +4612,45 @@ public abstract class GridCacheAbstractFullApiSelfTest 
extends GridCacheAbstract
             assertNull(cache.get(key));
             assertFalse(map.containsKey(key));
         }
+
+        // Check that read-through is disabled when cacheSkipStore is used
+        for (int i = 0; i < keys.size(); i++)
+            putToStore(keys.get(i), i);
+
+        assertTrue(cacheSkipStore.size(CachePeekMode.ALL) == 0);
+        assertTrue(cache.size(CachePeekMode.ALL) == 0);
+        assertTrue(map.size() != 0);
+
+        tx = txs.txStart(txConcurrency, txIsolation);
+
+        //assertTrue(cacheSkipStore.getAll(data.keySet()).size() == 0);
+
+        for (String key : keys) {
+            assertNull(cacheSkipStore.get(key));
+
+            if (txIsolation == READ_COMMITTED) {
+                assertNotNull(cache.get(key));
+                assertNotNull(cacheSkipStore.get(key));
+            }
+        }
+
+        tx.commit();
+
+        cache.removeAll(data.keySet());
+        checkEmpty(cache, cacheSkipStore);
+    }
+
+    /**
+     * @param cache Cache instance.
+     * @param cacheSkipStore Cache skip store projection.
+     *
+     * @throws Exception If failed.
+     */
+    private void checkEmpty(IgniteCache<String, Integer> cache, 
IgniteCache<String, Integer> cacheSkipStore)
+        throws Exception {
+        assertTrue(cache.size(CachePeekMode.ALL) == 0);
+        assertTrue(cacheSkipStore.size(CachePeekMode.ALL) == 0);
+        assertTrue(map.size() == 0);
     }
 
     /**

Reply via email to