This is an automated email from the ASF dual-hosted git repository. agoncharuk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new 0421c46 IGNITE-11171 Do not fail node when transaction is concurrently rolled back - Fixes #6057. 0421c46 is described below commit 0421c464d0088e235da26d88d229248502776aad Author: Aleksei Scherbakov <alexey.scherbak...@gmail.com> AuthorDate: Tue Feb 26 15:26:12 2019 +0300 IGNITE-11171 Do not fail node when transaction is concurrently rolled back - Fixes #6057. Signed-off-by: Alexey Goncharuk <alexey.goncha...@gmail.com> --- .../cache/distributed/dht/GridDhtTransactionalCacheAdapter.java | 6 ++++-- .../processors/cache/distributed/dht/GridDhtTxPrepareFuture.java | 8 +++++--- .../cache/transactions/TxRollbackOnTimeoutOnePhaseCommitTest.java | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java index f295361..3fa51f0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java @@ -1441,11 +1441,13 @@ public abstract class GridDhtTransactionalCacheAdapter<K, V> extends GridDhtCach req.keepBinary()); } - assert e.lockedBy(mappedVer) || ctx.mvcc().isRemoved(e.context(), mappedVer) : + assert e.lockedBy(mappedVer) || + ctx.mvcc().isRemoved(e.context(), mappedVer) || + tx != null && tx.isRollbackOnly(): "Entry does not own lock for tx [locNodeId=" + ctx.localNodeId() + ", entry=" + e + ", mappedVer=" + mappedVer + ", ver=" + ver + - ", tx=" + tx + ", req=" + req + ']'; + ", tx=" + CU.txString(tx) + ", req=" + req + ']'; boolean filterPassed = false; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java index 3453380..e8ed7af 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java @@ -534,9 +534,12 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite } catch (IgniteCheckedException e) { U.error(log, "Failed to get result value for cache entry: " + cached, e); + + onError(e); } catch (GridCacheEntryRemovedException e) { - assert false : "Got entry removed exception while holding transactional lock on entry [e=" + e + ", cached=" + cached + ']'; + // Entry was unlocked by concurrent rollback. + onError(tx.rollbackException()); } finally { cctx.database().checkpointReadUnlock(); @@ -1977,8 +1980,7 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite lockKeys.clear(); } - onError(new IgniteTxTimeoutCheckedException("Failed to acquire lock within " + - "provided timeout for transaction [timeout=" + tx.timeout() + ", tx=" + tx + ']')); + onError(tx.timeoutException()); } /** {@inheritDoc} */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutOnePhaseCommitTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutOnePhaseCommitTest.java index 1ba0761..28516e9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutOnePhaseCommitTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRollbackOnTimeoutOnePhaseCommitTest.java @@ -144,7 +144,7 @@ public class TxRollbackOnTimeoutOnePhaseCommitTest extends GridCommonAbstractTes tx.commit(); - // fail(); // TODO IGNITE-10027 throw timeout exception for optimistic timeout. + fail(); } catch (Exception e) { assertTrue(e.getClass().getName(), X.hasCause(e, TransactionTimeoutException.class));