Repository: ignite
Updated Branches:
  refs/heads/ignite-1537 215ff1eb6 -> cb5bde5af


ignite-1.5 Fixed hang on metadata update inside put in atomic cache when 
topology read lock is held.


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

Branch: refs/heads/ignite-1537
Commit: cb5bde5afe160f99c130cd7191b3cd8f6f4ca346
Parents: 215ff1e
Author: sboikov <[email protected]>
Authored: Tue Dec 22 12:04:33 2015 +0300
Committer: sboikov <[email protected]>
Committed: Tue Dec 22 12:04:33 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/cache/GridCacheSharedContext.java | 2 +-
 .../distributed/dht/colocated/GridDhtColocatedLockFuture.java    | 3 +--
 .../processors/cache/distributed/near/GridNearLockFuture.java    | 3 +--
 .../near/GridNearOptimisticTxPrepareFutureAdapter.java           | 2 +-
 .../internal/processors/cache/transactions/IgniteTxManager.java  | 4 ++--
 5 files changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/cb5bde5a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
index f52e378..2221d3b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
@@ -575,7 +575,7 @@ public class GridCacheSharedContext<K, V> {
     @Nullable public AffinityTopologyVersion 
lockedTopologyVersion(IgniteInternalTx ignore) {
         long threadId = Thread.currentThread().getId();
 
-        AffinityTopologyVersion topVer = txMgr.anyActiveThreadTx(threadId, 
ignore);
+        AffinityTopologyVersion topVer = txMgr.lockedTopologyVersion(threadId, 
ignore);
 
         if (topVer == null)
             topVer = mvccMgr.lastExplicitLockTopologyVersion(threadId);

http://git-wip-us.apache.org/repos/asf/ignite/blob/cb5bde5a/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 7fba9bc..a5f5286 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
@@ -48,7 +48,6 @@ import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearLock
 import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockRequest;
 import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearLockResponse;
 import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal;
-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;
@@ -597,7 +596,7 @@ public final class GridDhtColocatedLockFuture extends 
GridCompoundIdentityFuture
 
         // If there is another system transaction in progress, use it's 
topology version to prevent deadlock.
         if (topVer == null && tx != null && tx.system())
-            topVer = 
cctx.tm().anyActiveThreadTx(Thread.currentThread().getId(), tx);
+            topVer = 
cctx.tm().lockedTopologyVersion(Thread.currentThread().getId(), tx);
 
         if (topVer != null && tx != null)
             tx.topologyVersion(topVer);

http://git-wip-us.apache.org/repos/asf/ignite/blob/cb5bde5a/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 413f5d8..55c5ab6 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
@@ -46,7 +46,6 @@ import 
org.apache.ignite.internal.processors.cache.distributed.GridDistributedCa
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTransactionalCacheAdapter;
-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;
@@ -724,7 +723,7 @@ public final class GridNearLockFuture extends 
GridCompoundIdentityFuture<Boolean
 
         // If there is another system transaction in progress, use it's 
topology version to prevent deadlock.
         if (topVer == null && tx != null && tx.system())
-            topVer = cctx.tm().anyActiveThreadTx(threadId, tx);
+            topVer = cctx.tm().lockedTopologyVersion(threadId, tx);
 
         if (topVer != null && tx != null)
             tx.topologyVersion(topVer);

http://git-wip-us.apache.org/repos/asf/ignite/blob/cb5bde5a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
index f29eda2..fa7020b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
@@ -56,7 +56,7 @@ public abstract class 
GridNearOptimisticTxPrepareFutureAdapter extends GridNearT
 
         // If there is another system transaction in progress, use it's 
topology version to prevent deadlock.
         if (topVer == null && tx != null && tx.system())
-            topVer = cctx.tm().anyActiveThreadTx(threadId, tx);
+            topVer = cctx.tm().lockedTopologyVersion(threadId, tx);
 
         if (topVer != null) {
             tx.topologyVersion(topVer);

http://git-wip-us.apache.org/repos/asf/ignite/blob/cb5bde5a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
index 0471443..6cad462 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
@@ -607,9 +607,9 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
     /**
      * @param threadId Thread ID.
      * @param ignore Transaction to ignore.
-     * @return Any transaction associated with the current thread.
+     * @return Not null topology version if current thread holds lock 
preventing topology change.
      */
-    public AffinityTopologyVersion anyActiveThreadTx(long threadId, 
IgniteInternalTx ignore) {
+    @Nullable public AffinityTopologyVersion lockedTopologyVersion(long 
threadId, IgniteInternalTx ignore) {
         IgniteInternalTx tx = threadMap.get(threadId);
 
         if (tx != null) {

Reply via email to