IGNITE-6181 wip.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/225d4f52 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/225d4f52 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/225d4f52 Branch: refs/heads/ignite-6181-1 Commit: 225d4f52a777ac14d4a941f7eb9de505947962ff Parents: 4c3df8f Author: Aleksei Scherbakov <[email protected]> Authored: Tue Sep 12 20:11:32 2017 +0300 Committer: Aleksei Scherbakov <[email protected]> Committed: Tue Sep 12 20:11:32 2017 +0300 ---------------------------------------------------------------------- .../cache/distributed/near/GridNearTxLocal.java | 6 ++++-- .../cache/transactions/IgniteTxLocalAdapter.java | 3 +++ .../cache/transactions/TxRollbackOnTimeoutTest.java | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/225d4f52/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java index aa0c85b..2308d71 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java @@ -230,7 +230,7 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou mappings = implicitSingle ? new IgniteTxMappingsSingleImpl() : new IgniteTxMappingsImpl(); - if (this.timeout() > 0 && !implicit()) + if (this.timeout() > 0 && !implicit() && !cctx.tm().deadlockDetectionEnabled()) cctx.time().addTimeoutObject(this); initResult(); @@ -4014,7 +4014,7 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou * Removes timeout handler used for eager rollbacks on timeouts. */ private void removeTimeoutHandler() { - if (timeout() > 0 && !implicit() && !timedOut()) + if (timeout() > 0 && !implicit() && !timedOut() && !cctx.tm().deadlockDetectionEnabled()) cctx.time().removeTimeoutObject(this); } @@ -4033,6 +4033,8 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou if (state(MARKED_ROLLBACK, true)) { cctx.kernalContext().closure().runLocalSafe(new Runnable() { @Override public void run() { + log().error("Transaction is timed out and will be rolled back: " + GridNearTxLocal.this); + rollbackNearTxLocalAsync(); } }); http://git-wip-us.apache.org/repos/asf/ignite/blob/225d4f52/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java index ea105ae..7f30981 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java @@ -1237,6 +1237,9 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter implements Ig * @throws IgniteCheckedException If transaction check failed. */ protected void checkValid() throws IgniteCheckedException { + if (local() && !dht() && remainingTime() == -1 && cctx.tm().deadlockDetectionEnabled()) + state(MARKED_ROLLBACK, true); + if (isRollbackOnly()) { if (remainingTime() == -1) throw new IgniteTxTimeoutCheckedException("Cache transaction timed out: " + this); http://git-wip-us.apache.org/repos/asf/ignite/blob/225d4f52/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java index 529fdc3..0a2601d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutTest.java @@ -22,6 +22,7 @@ import javax.cache.CacheException; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.TransactionConfiguration; @@ -43,6 +44,7 @@ import org.jsr166.ThreadLocalRandom8; import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL; import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC; import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ; +import static org.apache.ignite.IgniteSystemProperties.IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS; /** * Tests an ability to eagerly rollback timed out transactions. @@ -95,6 +97,20 @@ public class TxRollbackOnTimeoutTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ + @Override protected void beforeTestsStarted() throws Exception { + super.beforeTestsStarted(); + + System.setProperty(IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS, "0"); + } + + /** {@inheritDoc} */ + @Override protected void afterTestsStopped() throws Exception { + super.afterTestsStopped(); + + System.clearProperty(IGNITE_TX_DEADLOCK_DETECTION_MAX_ITERS); + } + + /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { super.beforeTest();
