You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2021/01/28 10:10:27 UTC
[ignite] 05/09: Add localCandidatesMax to reduce allocations
This is an automated email from the ASF dual-hosted git repository.
ptupitsyn pushed a commit to branch ignite-14067
in repository https://gitbox.apache.org/repos/asf/ignite.git
commit 9879c15722625bf60bf9aacc7a04ccbeae82025f
Author: Pavel Tupitsyn <pt...@apache.org>
AuthorDate: Thu Jan 28 12:38:33 2021 +0300
Add localCandidatesMax to reduce allocations
---
.../processors/cache/GridCacheEntryEx.java | 10 +++++++
.../processors/cache/GridCacheMapEntry.java | 17 +++++++++++
.../internal/processors/cache/GridCacheMvcc.java | 33 ++++++++++++++++++++++
.../distributed/dht/GridDhtTxPrepareFuture.java | 6 ++--
.../java/org/apache/ignite/cache/PutAllTxTest.java | 11 ++++----
5 files changed, 68 insertions(+), 9 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
index fb68256..cf765a5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
@@ -987,6 +987,16 @@ public interface GridCacheEntryEx {
throws GridCacheEntryRemovedException;
/**
+ * Gets all local candidates.
+ *
+ * @param maxVer Exclusive upper version boundary.
+ * @return All local candidates.
+ * @throws GridCacheEntryRemovedException If entry was removed.
+ */
+ public Collection<GridCacheMvccCandidate> localCandidatesMax(GridCacheVersion maxVer)
+ throws GridCacheEntryRemovedException;
+
+ /**
* Gets all remote versions.
*
* @param exclude Exclude version.
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 5f39b50..523d65f 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
@@ -3925,6 +3925,23 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
}
/** {@inheritDoc} */
+ @Override public Collection<GridCacheMvccCandidate> localCandidatesMax(GridCacheVersion maxVer)
+ throws GridCacheEntryRemovedException {
+ lockEntry();
+
+ try {
+ checkObsolete();
+
+ GridCacheMvcc mvcc = mvccExtras();
+
+ return mvcc == null ? Collections.<GridCacheMvccCandidate>emptyList() : mvcc.localCandidatesMax(maxVer);
+ }
+ finally {
+ unlockEntry();
+ }
+ }
+
+ /** {@inheritDoc} */
@Override public Collection<GridCacheMvccCandidate> remoteMvccSnapshot(GridCacheVersion... exclude) {
return Collections.emptyList();
}
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 be28ae7..ca4a66e 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
@@ -1381,6 +1381,14 @@ public final class GridCacheMvcc {
}
/**
+ * @param maxVers TODO.
+ * @return Collection of local candidates.
+ */
+ public Collection<GridCacheMvccCandidate> localCandidatesMax(GridCacheVersion maxVers) {
+ return candidates(locs, false, true, maxVers);
+ }
+
+ /**
* @param reentries Flag to include reentries.
* @param excludeVers Exclude versions.
* @return Collection of local candidates.
@@ -1427,6 +1435,31 @@ public final class GridCacheMvcc {
}
/**
+ * @param col Collection of candidates.
+ * @param reentries Reentry flag.
+ * @param cp Whether to copy or not.
+ * @param maxVers TODO.
+ * @return Collection of candidates minus the exclude versions.
+ */
+ private List<GridCacheMvccCandidate> candidates(List<GridCacheMvccCandidate> col,
+ boolean reentries, boolean cp, GridCacheVersion maxVers) {
+ if (col == null)
+ return Collections.emptyList();
+
+ assert !col.isEmpty();
+
+ List<GridCacheMvccCandidate> cands = new ArrayList<>(col.size());
+
+ for (GridCacheMvccCandidate c : col) {
+ // Don't include reentries.
+ if ((reentries || !c.reentry()) && c.version().isLess(maxVers))
+ cands.add(c);
+ }
+
+ return cands;
+ }
+
+ /**
* @param threadId Thread ID to check.
* @param exclude Versions to ignore.
* @return {@code True} if lock is owned by the thread with given ID.
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 5afa379..79d68c9 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
@@ -1757,9 +1757,9 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite
for (IgniteTxEntry entry : entries) {
try {
- for (GridCacheMvccCandidate cand : entry.cached().localCandidates()) {
- if (cand.version().isLess(baseVer))
- lessPending.add(cand.version());
+ Collection<GridCacheMvccCandidate> candidates = entry.cached().localCandidatesMax(baseVer);
+ for (GridCacheMvccCandidate cand : candidates) {
+ lessPending.add(cand.version());
}
}
catch (GridCacheEntryRemovedException ignored) {
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/PutAllTxTest.java b/modules/core/src/test/java/org/apache/ignite/cache/PutAllTxTest.java
index ccebf8c..da2be14 100644
--- a/modules/core/src/test/java/org/apache/ignite/cache/PutAllTxTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/cache/PutAllTxTest.java
@@ -18,16 +18,15 @@ public class PutAllTxTest extends GridCommonAbstractTest {
Ignition.start(getConfiguration("server2"));
Ignite ignite = Ignition.start(getConfiguration("client").setClientMode(true));
- IgniteCache<Integer, String> cache = ignite.createCache(
- new CacheConfiguration<Integer, String>("c")
+ IgniteCache<Integer, Integer> cache = ignite.createCache(
+ new CacheConfiguration<Integer, Integer>("c")
.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL));
- int count = 40000;
- int valSize = 1000;
+ int count = 50000;
- Map<Integer, String> data = new TreeMap<>();
+ Map<Integer, Integer> data = new TreeMap<>();
for (int i = 0; i < count; i++)
- data.put(i, new String(new char[valSize]) + UUID.randomUUID());
+ data.put(i, i);
long begin = System.nanoTime();