You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/12/23 11:41:42 UTC
ignite git commit: IGNITE-2234: Attempt to optimize
GridCacheMvccManager.
Repository: ignite
Updated Branches:
refs/heads/ignite-2232 [created] 34eaf5a18
IGNITE-2234: Attempt to optimize GridCacheMvccManager.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/34eaf5a1
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/34eaf5a1
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/34eaf5a1
Branch: refs/heads/ignite-2232
Commit: 34eaf5a180d8c950b5da87b145aae0cc727ba735
Parents: 66b33bc
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Dec 23 12:47:32 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Dec 23 12:47:32 2015 +0300
----------------------------------------------------------------------
.../processors/cache/GridCacheMvccManager.java | 50 +++++++++++---------
1 file changed, 28 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/34eaf5a1/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
index dbc6992..a297773 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
@@ -17,17 +17,6 @@
package org.apache.ignite.internal.processors.cache;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ConcurrentMap;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.events.DiscoveryEvent;
@@ -63,6 +52,18 @@ import org.jetbrains.annotations.Nullable;
import org.jsr166.ConcurrentHashMap8;
import org.jsr166.ConcurrentLinkedDeque8;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentMap;
+
import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
import static org.apache.ignite.internal.util.GridConcurrentFactory.newMap;
@@ -76,12 +77,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
private static final int MAX_REMOVED_LOCKS = 10240;
/** Pending locks per thread. */
- private final ThreadLocal<LinkedList<GridCacheMvccCandidate>> pending =
- new ThreadLocal<LinkedList<GridCacheMvccCandidate>>() {
- @Override protected LinkedList<GridCacheMvccCandidate> initialValue() {
- return new LinkedList<>();
- }
- };
+ private final ThreadLocal<ArrayList<GridCacheMvccCandidate>> pending = new MvccCandidateThreadLocal();
/** Pending near local locks and topology version per thread. */
private ConcurrentMap<Long, GridCacheExplicitLockSpan> pendingExplicit;
@@ -725,14 +721,14 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
if (cacheCtx.isNear() || cand.singleImplicit())
return true;
- LinkedList<GridCacheMvccCandidate> queue = pending.get();
+ ArrayList<GridCacheMvccCandidate> pending0 = pending.get();
GridCacheMvccCandidate prev = null;
- if (!queue.isEmpty())
- prev = queue.getLast();
+ if (!pending0.isEmpty())
+ prev = pending0.get(pending0.size() - 1);
- queue.add(cand);
+ pending0.add(cand);
if (prev != null) {
prev.next(cand);
@@ -750,7 +746,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
* Reset MVCC context.
*/
public void contextReset() {
- pending.set(new LinkedList<GridCacheMvccCandidate>());
+ pending.get().clear();
}
/**
@@ -1221,4 +1217,14 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
return S.toString(FinishLockFuture.class, this, super.toString());
}
}
+
+ /**
+ * Thread local for pending MVCC candidates.
+ */
+ private static class MvccCandidateThreadLocal extends ThreadLocal<ArrayList<GridCacheMvccCandidate>> {
+ /** {@inheritDoc} */
+ @Override protected ArrayList<GridCacheMvccCandidate> initialValue() {
+ return new ArrayList<>();
+ }
+ }
}