Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-709_1 8eaa7da90 -> 8d3e65fd3


ignite-446


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

Branch: refs/heads/ignite-709_1
Commit: 842bf40ac3dad7a35f1e8bb8239e017e625f0a65
Parents: 5619659
Author: avinogradov <avinogra...@gridgain.com>
Authored: Tue Apr 21 14:01:07 2015 +0300
Committer: avinogradov <avinogra...@gridgain.com>
Committed: Tue Apr 21 14:01:07 2015 +0300

----------------------------------------------------------------------
 .../GridCachePartitionExchangeManager.java      |  5 +--
 .../colocated/GridDhtColocatedLockFuture.java   | 11 ++++++
 .../distributed/near/GridNearLockFuture.java    | 11 ++++++
 ...gniteTopologyValidatorAbstractCacheTest.java |  7 +++-
 ...iteTopologyValidatorAbstractTxCacheTest.java | 39 ++++++++++++++++----
 5 files changed, 61 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/842bf40a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 7a1324f..851fc44 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -471,9 +471,8 @@ public class GridCachePartitionExchangeManager<K, V> 
extends GridCacheSharedMana
     /**
      * @return Exchange futures.
      */
-    @SuppressWarnings( {"unchecked", "RedundantCast"})
-    public List<IgniteInternalFuture<?>> exchangeFutures() {
-        return (List<IgniteInternalFuture<?>>)(List)exchFuts.values();
+    public List<GridDhtPartitionsExchangeFuture> exchangeFutures() {
+        return exchFuts.values();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/842bf40a/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 c6746ba..336e890 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
@@ -528,6 +528,17 @@ public final class GridDhtColocatedLockFuture<K, V> 
extends GridCompoundIdentity
             topVer = tx.topologyVersionSnapshot();
 
         if (topVer != null) {
+            for (GridDhtTopologyFuture fut : 
cctx.shared().exchange().exchangeFutures()){
+                if (fut.topologyVersion().equals(topVer)){
+                    if (!fut.isCacheTopologyValid(cctx)) {
+                        onDone(new IgniteCheckedException("Failed to perform 
cache operation (cache topology is not valid): " +
+                            cctx.name()));
+
+                        return;
+                    }
+                }
+            }
+
             // Continue mapping on the same topology version as it was before.
             this.topVer.compareAndSet(null, topVer);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/842bf40a/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 58b7c4d..70c45bc 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
@@ -660,6 +660,17 @@ public final class GridNearLockFuture<K, V> extends 
GridCompoundIdentityFuture<B
             topVer = tx.topologyVersionSnapshot();
 
         if (topVer != null) {
+            for (GridDhtTopologyFuture fut : 
cctx.shared().exchange().exchangeFutures()){
+                if (fut.topologyVersion().equals(topVer)){
+                    if (!fut.isCacheTopologyValid(cctx)) {
+                        onDone(new IgniteCheckedException("Failed to perform 
cache operation (cache topology is not valid): " +
+                            cctx.name()));
+
+                        return;
+                    }
+                }
+            }
+
             // Continue mapping on the same topology version as it was before.
             this.topVer.compareAndSet(null, topVer);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/842bf40a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractCacheTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractCacheTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractCacheTest.java
index 167c535..420dc91 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractCacheTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractCacheTest.java
@@ -116,6 +116,7 @@ public abstract class 
IgniteTopologyValidatorAbstractCacheTest extends IgniteCac
 
     /**
      * Commits with error.
+     *
      * @param tx transaction.
      */
     protected void commitFailed(Transaction tx) {
@@ -129,18 +130,20 @@ public abstract class 
IgniteTopologyValidatorAbstractCacheTest extends IgniteCac
     }
 
     /**
-     * Removes key-value
+     * Removes key-value.
      *
      * @param cacheName cache name.
      */
     public void remove(String cacheName) {
+        assert grid(0).cache(cacheName).get(KEY_VALUE) != null;
+
         grid(0).cache(cacheName).remove(KEY_VALUE);
     }
 
     /**
      * Asserts that cache doesn't contains key.
      *
-     * @param cacheName
+     * @param cacheName cache name.
      */
     public void assertEmpty(String cacheName) {
         assert grid(0).cache(cacheName).get(KEY_VALUE) == null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/842bf40a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractTxCacheTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractTxCacheTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractTxCacheTest.java
index 3db22d3..ac02734 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractTxCacheTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTopologyValidatorAbstractTxCacheTest.java
@@ -59,15 +59,15 @@ public abstract class 
IgniteTopologyValidatorAbstractTxCacheTest extends IgniteT
 
         assertEmpty(null); // rolled back
         assertEmpty(CACHE_NAME_1); // rolled back
+        assertEmpty(CACHE_NAME_2); // rolled back
 
-//        try (Transaction tx = 
grid(0).transactions().txStart(TransactionConcurrency.PESSIMISTIC, 
TransactionIsolation.REPEATABLE_READ)) {
-//            putValid(null);
-//            putInvalid(CACHE_NAME_1);
-//        }
-//
-//        assertEmpty(null); // rolled back
-//        assertEmpty(CACHE_NAME_1); // rolled back
+        try (Transaction tx = 
grid(0).transactions().txStart(TransactionConcurrency.PESSIMISTIC, 
TransactionIsolation.REPEATABLE_READ)) {
+            putValid(null);
+            putInvalid(CACHE_NAME_1);
+        }
 
+        assertEmpty(null); // rolled back
+        assertEmpty(CACHE_NAME_1); // rolled back
 
         startGrid(1);
 
@@ -87,6 +87,14 @@ public abstract class 
IgniteTopologyValidatorAbstractTxCacheTest extends IgniteT
 
         startGrid(2);
 
+        try (Transaction tx = 
grid(0).transactions().txStart(TransactionConcurrency.PESSIMISTIC, 
TransactionIsolation.REPEATABLE_READ)) {
+            putValid(null);
+            putInvalid(CACHE_NAME_1);
+        }
+
+        assertEmpty(null); // rolled back
+        assertEmpty(CACHE_NAME_1); // rolled back
+
         try (Transaction tx = 
grid(0).transactions().txStart(TransactionConcurrency.OPTIMISTIC, 
TransactionIsolation.REPEATABLE_READ)) {
             putValid(CACHE_NAME_1);
             commitFailed(tx);
@@ -96,5 +104,22 @@ public abstract class 
IgniteTopologyValidatorAbstractTxCacheTest extends IgniteT
             putInvalid(CACHE_NAME_1);
         }
 
+        try (Transaction tx = 
grid(0).transactions().txStart(TransactionConcurrency.OPTIMISTIC, 
TransactionIsolation.REPEATABLE_READ)) {
+            putValid(null);
+            putValid(CACHE_NAME_2);
+            tx.commit();
+        }
+
+        remove(null);
+        remove(CACHE_NAME_2);
+
+        try (Transaction tx = 
grid(0).transactions().txStart(TransactionConcurrency.PESSIMISTIC, 
TransactionIsolation.REPEATABLE_READ)) {
+            putValid(null);
+            putValid(CACHE_NAME_2);
+            tx.commit();
+        }
+
+        remove(null);
+        remove(CACHE_NAME_2);
     }
 }

Reply via email to