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/3097d8d8 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3097d8d8 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3097d8d8 Branch: refs/heads/ignite-6181-1 Commit: 3097d8d81872a353970031ef115b4f18a67c19e2 Parents: 12669b8 Author: ascherbakoff <[email protected]> Authored: Sat Sep 9 17:23:36 2017 +0300 Committer: ascherbakoff <[email protected]> Committed: Sat Sep 9 17:23:36 2017 +0300 ---------------------------------------------------------------------- .../cache/distributed/near/GridNearTxLocal.java | 6 ++-- .../transactions/TxRollbackOnTimeoutTest.java | 29 ++++++++++++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/3097d8d8/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 8d15e87..fb4c5e1 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 @@ -3266,9 +3266,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou if (log.isDebugEnabled()) log.debug("Rolling back near tx: " + this); - if (remainingTime() > 0 && !implicit()) - cctx.time().removeTimeoutObject(this); - if (fastFinish()) { state(PREPARING); state(PREPARED); @@ -3696,6 +3693,9 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou /** {@inheritDoc} */ @Override public void close() throws IgniteCheckedException { + if (timeout() > 0 && !implicit()) + cctx.time().removeTimeoutObject(this); + TransactionState state = state(); if (state != ROLLING_BACK && state != ROLLED_BACK && state != COMMITTING && state != COMMITTED) http://git-wip-us.apache.org/repos/asf/ignite/blob/3097d8d8/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 d854cf0..3d25d10 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 @@ -30,11 +30,13 @@ import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor; import org.apache.ignite.internal.util.GridConcurrentSkipListSet; +import org.apache.ignite.internal.util.typedef.X; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.apache.ignite.transactions.Transaction; +import org.apache.ignite.transactions.TransactionTimeoutException; import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL; import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC; @@ -209,10 +211,20 @@ public class TxRollbackOnTimeoutTest extends GridCommonAbstractTest { IgniteEx client = (IgniteEx)startGrid("client"); for (int i = 0; i < 5; i++) - testTimeoutRemoval(grid(0), i); + testTimeoutRemoval0(grid(0), i, TX_TIMEOUT); for (int i = 0; i < 5; i++) - testTimeoutRemoval(client, i); + testTimeoutRemoval0(client, i, TX_TIMEOUT); + + for (int i = 0; i < 5; i++) + testTimeoutRemoval0(grid(0), i, 1); + + for (int i = 0; i < 5; i++) + testTimeoutRemoval0(client, i, 1); + + // Repeat with more iterations to make sure everything is cleared. + for (int i = 0; i < 500; i++) + testTimeoutRemoval0(client, 2, 1); } /** @@ -220,10 +232,10 @@ public class TxRollbackOnTimeoutTest extends GridCommonAbstractTest { * @param mode Test mode. * @throws Exception If failed. */ - private void testTimeoutRemoval(IgniteEx near, int mode) throws Exception { + private void testTimeoutRemoval0(IgniteEx near, int mode, long timeout) throws Exception { GridTimeoutProcessor timeProc = near.context().cache().context().time(); - try (Transaction tx = near.transactions().txStart()) { + try (Transaction tx = near.transactions().txStart(PESSIMISTIC, REPEATABLE_READ, timeout, 1)) { near.cache(CACHE_NAME).put(1, 1); switch (mode) { @@ -250,11 +262,18 @@ public class TxRollbackOnTimeoutTest extends GridCommonAbstractTest { fail(); } } + catch (TransactionTimeoutException e) { + // No-op. + } + catch (CacheException e) { + assertTrue("Only timeout exception is possible", X.hasCause(e, TransactionTimeoutException.class)); + } GridConcurrentSkipListSet set = U.field(timeProc, "timeoutObjs"); for (Object obj : set) - assertFalse("Not remove for mode: " + mode, obj.getClass().isAssignableFrom(GridNearTxLocal.class)); + assertFalse("Not remove for mode=" + mode + " and timeout=" + timeout, + obj.getClass().isAssignableFrom(GridNearTxLocal.class)); } /**
