Repository: ignite Updated Branches: refs/heads/ignite-7324 [created] fb511a022
IGNITE-7324 Fixing assertion when deadlock is detected Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fb511a02 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fb511a02 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fb511a02 Branch: refs/heads/ignite-7324 Commit: fb511a02249353de9de7bdb58a546b61d58b47aa Parents: 3c5d376 Author: Alexey Goncharuk <[email protected]> Authored: Thu Dec 28 14:16:52 2017 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Thu Dec 28 14:16:52 2017 +0300 ---------------------------------------------------------------------- .../distributed/dht/GridDhtLockFuture.java | 22 ++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/fb511a02/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java index e0a0260..8b773e2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java @@ -45,8 +45,8 @@ import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; import org.apache.ignite.internal.processors.cache.GridCacheEntryInfo; import org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException; import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; -import org.apache.ignite.internal.processors.cache.GridCacheVersionedFuture; import org.apache.ignite.internal.processors.cache.GridCacheOperation; +import org.apache.ignite.internal.processors.cache.GridCacheVersionedFuture; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.distributed.GridCacheMappedVersion; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedCacheEntry; @@ -775,7 +775,8 @@ public final class GridDhtLockFuture extends GridCacheCompoundIdentityFuture<Boo */ private void map(Iterable<GridDhtCacheEntry> entries) { synchronized (this) { - if (mapped) + // Leave fast if timed out. + if (mapped || timedOut) return; mapped = true; @@ -820,6 +821,23 @@ public final class GridDhtLockFuture extends GridCacheCompoundIdentityFuture<Boo } } catch (GridDhtInvalidPartitionException e) { + synchronized (this) { + if (!timedOut) { + String msg = "Got entry removed exception after the MVCC candidate was added to the " + + "entry (fill fail the lock future) [entry=" + entry + ", fut=" + this + ']'; + + U.error(log, msg, msg, e); + + onDone(new IgniteCheckedException(msg, e)); + } + else { + U.warn(log, "Got entry removed exception after MVCC candidate was added to the entry " + + "(most likely, a deadlock was detected) [entry=" + entry + + ", tx=" + CU.txString(tx) + ']'); + + return; + } + } assert false : "DHT lock should never get invalid partition [err=" + e + ", fut=" + this + ']'; } }
