Repository: ignite
Updated Branches:
  refs/heads/ignite-1607 ff71a6177 -> 833154efe


ignite-1607 WIP


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

Branch: refs/heads/ignite-1607
Commit: 833154efeac8191d7dfe116f906f7ae289b2c5e2
Parents: ff71a61
Author: sboikov <[email protected]>
Authored: Wed Oct 21 16:46:22 2015 +0300
Committer: sboikov <[email protected]>
Committed: Wed Oct 21 16:46:22 2015 +0300

----------------------------------------------------------------------
 ...arOptimisticSerializableTxPrepareFuture.java | 30 +++++++++++++++-----
 1 file changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/833154ef/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
index a77f22a..e665dbb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
@@ -39,11 +39,11 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate;
 import org.apache.ignite.internal.processors.cache.GridCacheMvccFuture;
 import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import 
org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxMapping;
-import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxMapping;
 import 
org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import 
org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException;
 import 
org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException;
 import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException;
@@ -51,7 +51,6 @@ import org.apache.ignite.internal.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.util.future.GridCompoundFuture;
 import org.apache.ignite.internal.util.future.GridFinishedFuture;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
-import org.apache.ignite.internal.util.lang.GridPlainRunnable;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.C1;
@@ -108,12 +107,29 @@ public class 
GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim
         if (log.isDebugEnabled())
             log.debug("Transaction future received owner changed callback: " + 
entry);
 
-        if ((entry.context().isNear() || entry.context().isLocal())
-            && owner != null &&
-            tx.entry(entry.txKey()) != null) {
-            keyLockFut.onKeyLocked(entry.txKey());
+        if ((entry.context().isNear() || entry.context().isLocal()) && owner 
!= null) {
+            IgniteTxEntry txEntry = tx.entry(entry.txKey());
 
-            return true;
+            if (txEntry != null) {
+                if (entry.context().isLocal()) {
+                    GridCacheVersion serReadVer = 
txEntry.serializableReadVersion();
+
+                    if (serReadVer != null && 
!entry.checkSerializableReadVersion(serReadVer)) {
+                        GridCacheContext ctx = entry.context();
+
+                        IgniteTxOptimisticCheckedException err0 =
+                            new IgniteTxOptimisticCheckedException("Failed to 
prepare transaction, " +
+                            "read/write conflict [key=" + 
entry.key().value(ctx.cacheObjectContext(), false) +
+                            ", cache=" + ctx.name() + ']');
+
+                        err.compareAndSet(null, err0);
+                    }
+                }
+
+                keyLockFut.onKeyLocked(entry.txKey());
+
+                return true;
+            }
         }
 
         return false;

Reply via email to