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) {
