You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dg...@apache.org on 2019/04/10 10:42:07 UTC
[ignite] branch master updated: IGNITE-11684 Fix
CacheSerializableTransactionsTest#testGetRemoveTxNearCache2 (and 1) is
flaky - Fixes #6410.
This is an automated email from the ASF dual-hosted git repository.
dgovorukhin 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 a167a06 IGNITE-11684 Fix CacheSerializableTransactionsTest#testGetRemoveTxNearCache2 (and 1) is flaky - Fixes #6410.
a167a06 is described below
commit a167a064081329285eab6bb90db26ebd6f0ed344
Author: ibessonov <be...@gmail.com>
AuthorDate: Wed Apr 10 13:37:36 2019 +0300
IGNITE-11684 Fix CacheSerializableTransactionsTest#testGetRemoveTxNearCache2 (and 1) is flaky - Fixes #6410.
Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>
---
.../processors/cache/GridCacheMapEntry.java | 28 ++++++++++++++++++++--
.../internal/processors/cache/GridCacheMvcc.java | 2 +-
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index 2428290..352ca0c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -22,6 +22,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.ReadWriteLock;
@@ -1735,8 +1736,31 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
if (mvcc == null || mvcc.isEmpty(tx.xidVersion()))
clearReaders();
- else
- clearReader(tx.originatingNodeId());
+ else {
+ // Optimize memory usage - do not allocate additional array.
+ List<GridCacheMvccCandidate> locs = mvcc.localCandidatesNoCopy(false);
+
+ GridCacheVersion txVer = tx.xidVersion();
+
+ UUID originatingNodeId = tx.originatingNodeId();
+
+ boolean hasOriginatingNodeId = false;
+
+ for (GridCacheMvccCandidate c : locs) {
+ if (c.reentry() || Objects.equals(c.version(), txVer))
+ continue;
+
+ if (Objects.equals(c.otherNodeId(), originatingNodeId)) {
+ hasOriginatingNodeId = true;
+
+ break;
+ }
+ }
+
+ // Remove reader only if there are no other active transactions from it.
+ if (!hasOriginatingNodeId)
+ clearReader(originatingNodeId);
+ }
}
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
index 52523b1..9ba8c63 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
@@ -1401,7 +1401,7 @@ public final class GridCacheMvcc {
for (GridCacheMvccCandidate c : col) {
// Don't include reentries.
- if ((!c.reentry() || (reentries && c.reentry())) && !U.containsObjectArray(excludeVers, c.version()))
+ if ((reentries || !c.reentry()) && !U.containsObjectArray(excludeVers, c.version()))
cands.add(c);
}