ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yzhda...@apache.org
Subject ignite git commit: Debugging slowdowns
Date Fri, 16 Oct 2015 10:12:31 GMT
Repository: ignite
Updated Branches:
  refs/heads/ignite-1.4-slow-server-debug 96c6bebac -> 9f7b524ee


Debugging slowdowns


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9f7b524e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9f7b524e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9f7b524e

Branch: refs/heads/ignite-1.4-slow-server-debug
Commit: 9f7b524ee8524d1682dbf1f12e982b0c2dfc25ac
Parents: 96c6beb
Author: Yakov Zhdanov <yzhdanov@gridgain.com>
Authored: Fri Oct 16 13:12:28 2015 +0300
Committer: Yakov Zhdanov <yzhdanov@gridgain.com>
Committed: Fri Oct 16 13:12:28 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/internal/Bench.java  |  3 +-
 .../processors/cache/GridCacheMvccManager.java  | 59 +++++++++++---------
 2 files changed, 34 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9f7b524e/modules/core/src/main/java/org/apache/ignite/internal/Bench.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/Bench.java b/modules/core/src/main/java/org/apache/ignite/internal/Bench.java
index 994156e..1d5f544 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/Bench.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/Bench.java
@@ -35,6 +35,7 @@ public class Bench {
             false));
 
         final boolean client = false;
+        final boolean forceRnd = false;
 
         final Ignite ignite = Ignition.start(config("0",
             client));
@@ -59,7 +60,7 @@ public class Bench {
                         for (;;) {
                             int key;
 
-                            if (client)
+                            if (client || forceRnd)
                                 key = ThreadLocalRandom.current().nextInt(10000);
 
                             else

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f7b524e/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 bc0f634..1731802 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
@@ -52,6 +52,7 @@ import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentHashMap8;
 import org.jsr166.ConcurrentLinkedDeque8;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -144,17 +145,20 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter
{
                 Collection<? extends GridCacheFuture> futCol = futs.get(owner.version());
 
                 if (futCol != null) {
-                    for (GridCacheFuture fut : futCol) {
-                        if (fut instanceof GridCacheMvccFuture && !fut.isDone())
{
-                            GridCacheMvccFuture<Boolean> mvccFut =
-                                (GridCacheMvccFuture<Boolean>)fut;
-
-                            // Since this method is called outside of entry synchronization,
-                            // we can safely invoke any method on the future.
-                            // Also note that we don't remove future here if it is done.
-                            // The removal is initiated from within future itself.
-                            if (mvccFut.onOwnerChanged(entry, owner))
-                                return;
+                    synchronized (futCol) {
+                        for (GridCacheFuture fut : futCol) {
+                            if (fut instanceof GridCacheMvccFuture && !fut.isDone())
{
+                                GridCacheMvccFuture<Boolean> mvccFut = (GridCacheMvccFuture<Boolean>)fut;
+
+                                // Since this method is called outside of entry synchronization,
+                                // we can safely invoke any method on the future.
+                                // Also note that we don't remove future here if it is done.
+                                // The removal is initiated from within future itself.
+                                if (mvccFut.onOwnerChanged(
+                                    entry,
+                                    owner))
+                                    return;
+                            }
                         }
                     }
                 }
@@ -444,7 +448,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter
{
             return true;
 
         while (true) {
-            // TODO Properly optimize
             Collection<GridCacheFuture<?>> col = new HashSet<GridCacheFuture<?>>(U.capacity(4),
0.75f) {
                 {
                     // Make sure that we add future to queue before
@@ -461,8 +464,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter
{
                 }
             };
 
-            Collection<GridCacheFuture<?>> old = futs.putIfAbsent(fut.version(),
-                col);
+            Collection<GridCacheFuture<?>> old = futs.putIfAbsent(fut.version(),
col);
 
             if (old != null) {
                 boolean empty, dup = false;
@@ -471,13 +473,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter
{
                     empty = old.isEmpty();
 
                     if (!empty)
-                        dup = old.contains(fut);
-
-                    if (!empty && !dup)
-                        old.add(fut);
-
-                    if (old.size() > 4)
-                        System.out.println("Old: " + old);
+                        dup = !old.add(fut);
                 }
 
                 // Future is being removed, so we force-remove here and try again.
@@ -586,13 +582,16 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter
{
         Collection<? extends GridCacheFuture> futs = this.futs.get(ver);
 
         if (futs != null)
-            for (GridCacheFuture<?> fut : futs)
-                if (fut.futureId().equals(futId)) {
-                    if (log.isDebugEnabled())
-                        log.debug("Found future in futures map: " + fut);
+            synchronized (futs) {
+                for (GridCacheFuture<?> fut : futs) {
+                    if (fut.futureId().equals(futId)) {
+                        if (log.isDebugEnabled())
+                            log.debug("Found future in futures map: " + fut);
 
-                    return fut;
+                        return fut;
+                    }
                 }
+            }
 
         if (log.isDebugEnabled())
             log.debug("Failed to find future in futures map [ver=" + ver + ", futId=" + futId
+ ']');
@@ -610,7 +609,13 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter
{
     public <T> Collection<? extends IgniteInternalFuture<T>> futures(GridCacheVersion
ver) {
         Collection c = futs.get(ver);
 
-        return c == null ? Collections.<IgniteInternalFuture<T>>emptyList() :
(Collection<IgniteInternalFuture<T>>)c;
+        if (c == null)
+            return Collections.<IgniteInternalFuture<T>>emptyList();
+        else {
+            synchronized (c) {
+                return new ArrayList<>((Collection<IgniteInternalFuture<T>>)c);
+            }
+        }
     }
 
     /**


Mime
View raw message