Repository: incubator-ignite Updated Branches: refs/heads/ignite-1090 [created] 8446d0fb5
# ignite-1090 finishTxs() should wait for rolling back transactions Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/8446d0fb Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/8446d0fb Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/8446d0fb Branch: refs/heads/ignite-1090 Commit: 8446d0fb55a92b218715e6ffacf2237a6e5eb6a8 Parents: f62744e Author: sboikov <sboi...@gridgain.com> Authored: Tue Jul 21 10:32:40 2015 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Tue Jul 21 12:41:44 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheMvccManager.java | 14 ++++++++++++++ .../distributed/dht/GridDhtTxFinishFuture.java | 13 ++++++++++++- .../preloader/GridDhtPartitionsExchangeFuture.java | 10 ++++++++-- .../near/GridNearOptimisticTxPrepareFuture.java | 4 +++- .../near/GridNearPessimisticTxPrepareFuture.java | 2 +- .../distributed/near/GridNearTxFinishFuture.java | 17 ++++++++++++++++- .../cache/transactions/IgniteTxManager.java | 5 ++--- .../GridCacheAbstractNodeRestartSelfTest.java | 6 ++++++ 8 files changed, 62 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java index bfb23e8..a0d9051 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java @@ -603,6 +603,20 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter { } /** + * @return Locked keys. + */ + public Collection<IgniteTxKey> lockedKeys() { + return locked.keySet(); + } + + /** + * @return Locked near keys. + */ + public Collection<IgniteTxKey> nearLockedKeys() { + return nearLocked.keySet(); + } + + /** * This method has poor performance, so use with care. It is currently only used by {@code DGC}. * * @return Remote candidates. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java index 7fd79e5..9aa9c17 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java @@ -466,7 +466,18 @@ public final class GridDhtTxFinishFuture<K, V> extends GridCompoundIdentityFutur /** {@inheritDoc} */ @Override public String toString() { - return S.toString(GridDhtTxFinishFuture.class, this, super.toString()); + Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() { + @SuppressWarnings("unchecked") + @Override public String apply(IgniteInternalFuture<?> f) { + return "[node=" + ((MiniFuture)f).node().id() + + ", loc=" + ((MiniFuture)f).node().isLocal() + + ", done=" + f.isDone() + "]"; + } + }); + + return S.toString(GridDhtTxFinishFuture.class, this, + "innerFuts", futs, + "super", super.toString()); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java index b3f19f6..3664220 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java @@ -741,13 +741,19 @@ public class GridDhtPartitionsExchangeFuture extends GridFutureAdapter<AffinityT U.warn(log, "Failed to wait for locks release future. " + "Dumping pending objects that might be the cause: " + cctx.localNodeId()); - U.warn(log, "Locked entries:"); + U.warn(log, "Locked keys:"); + + for (IgniteTxKey key : cctx.mvcc().lockedKeys()) + U.warn(log, "Locked key: " + key); + + for (IgniteTxKey key : cctx.mvcc().nearLockedKeys()) + U.warn(log, "Locked near key: " + key); Map<IgniteTxKey, Collection<GridCacheMvccCandidate>> locks = cctx.mvcc().unfinishedLocks(exchId.topologyVersion()); for (Map.Entry<IgniteTxKey, Collection<GridCacheMvccCandidate>> e : locks.entrySet()) - U.warn(log, "Locked entry [key=" + e.getKey() + ", mvcc=" + e.getValue() + ']'); + U.warn(log, "Awaited locked entry [key=" + e.getKey() + ", mvcc=" + e.getValue() + ']'); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java index 44b7997..234121b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java @@ -50,6 +50,7 @@ import static org.apache.ignite.transactions.TransactionState.*; public class GridNearOptimisticTxPrepareFuture extends GridNearTxPrepareFutureAdapter implements GridCacheMvccFuture<IgniteInternalTx> { /** */ + @GridToStringInclude private Collection<IgniteTxKey> lockKeys = new GridConcurrentHashSet<>(); /** @@ -662,7 +663,8 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearTxPrepareFutureAd }); return S.toString(GridNearOptimisticTxPrepareFuture.class, this, - "futs", futs, + "innerFuts", futs, + "tx", tx, "super", super.toString()); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java index 7006114..f51b4b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java @@ -265,7 +265,7 @@ public class GridNearPessimisticTxPrepareFuture extends GridNearTxPrepareFutureA }); return S.toString(GridNearPessimisticTxPrepareFuture.class, this, - "futs", futs, + "innerFuts", futs, "super", super.toString()); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java index 3052810..6e1195f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java @@ -403,7 +403,22 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu /** {@inheritDoc} */ @Override public String toString() { - return S.toString(GridNearTxFinishFuture.class, this, super.toString()); + Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() { + @SuppressWarnings("unchecked") + @Override public String apply(IgniteInternalFuture<?> f) { + if (isMini(f)) { + return "[node=" + ((MiniFuture) f).node().id() + + ", loc=" + ((MiniFuture) f).node().isLocal() + + ", done=" + f.isDone() + "]"; + } + else + return "[loc=true, done=" + f.isDone() + "]"; + } + }); + + return S.toString(GridNearTxFinishFuture.class, this, + "innerFuts", futs, + "super", super.toString()); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/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 ee634ab..630330e 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 @@ -538,10 +538,9 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter { TransactionState state = tx.state(); AffinityTopologyVersion txTopVer = tx.topologyVersion(); - if ((state == PREPARING || state == PREPARED || state == COMMITTING) - && txTopVer.compareTo(AffinityTopologyVersion.ZERO) > 0 && txTopVer.compareTo(topVer) < 0) { + if ((state != ACTIVE && state != COMMITTED && state != ROLLED_BACK && state != UNKNOWN) + && txTopVer.compareTo(AffinityTopologyVersion.ZERO) > 0 && txTopVer.compareTo(topVer) < 0) res.add(tx.finishFuture()); - } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8446d0fb/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheAbstractNodeRestartSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheAbstractNodeRestartSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheAbstractNodeRestartSelfTest.java index ec1a12c..311a3e9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheAbstractNodeRestartSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheAbstractNodeRestartSelfTest.java @@ -507,6 +507,8 @@ public abstract class GridCacheAbstractNodeRestartSelfTest extends GridCommonAbs info("Starting put thread: " + gridIdx); + Thread.currentThread().setName("put-worker-" + grid(gridIdx).name()); + IgniteCache<Integer, String> cache = grid(gridIdx).cache(CACHE_NAME); while (System.currentTimeMillis() < endTime && err.get() == null) { @@ -628,6 +630,8 @@ public abstract class GridCacheAbstractNodeRestartSelfTest extends GridCommonAbs Ignite ignite = grid(gridIdx); + Thread.currentThread().setName("put-worker-" + ignite.name()); + UUID locNodeId = ignite.cluster().localNode().id(); IgniteCache<Integer, String> cache = ignite.cache(CACHE_NAME); @@ -784,6 +788,8 @@ public abstract class GridCacheAbstractNodeRestartSelfTest extends GridCommonAbs Ignite ignite = grid(gridIdx); + Thread.currentThread().setName("put-worker-" + ignite.name()); + UUID locNodeId = ignite.cluster().localNode().id(); IgniteCache<Integer, String> cache = ignite.cache(CACHE_NAME);