You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2016/08/05 12:42:38 UTC

ignite git commit: IGNITE-3443 WIP.

Repository: ignite
Updated Branches:
  refs/heads/ignite-3443 d8b92b4b4 -> c257f5f1d


IGNITE-3443 WIP.


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

Branch: refs/heads/ignite-3443
Commit: c257f5f1dcf9e62198cbfdabfc407aca66c7bed4
Parents: d8b92b4
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Fri Aug 5 19:40:51 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Aug 5 19:40:51 2016 +0700

----------------------------------------------------------------------
 .../configuration/CacheConfiguration.java       | 30 ++++++++++++++++
 .../cache/query/GridCacheQueryAdapter.java      |  4 +--
 .../cache/query/GridCacheQueryManager.java      |  4 +--
 .../query/GridCacheQueryMetricsAdapter.java     | 36 ++++++++++++++------
 4 files changed, 59 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c257f5f1/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 64b7e1f..b76883b 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -206,6 +206,9 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     /** Default timeout after which long query warning will be printed. */
     public static final long DFLT_LONG_QRY_WARN_TIMEOUT = 3000;
 
+    /** Default metrics history size for latest queries. */
+    public static final int DFLT_QRY_METRICS_HISTORY_SIZE = 0;
+
     /** Default size for onheap SQL row cache size. */
     public static final int DFLT_SQL_ONHEAP_ROW_CACHE_SIZE = 10 * 1024;
 
@@ -355,6 +358,9 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     /** */
     private long longQryWarnTimeout = DFLT_LONG_QRY_WARN_TIMEOUT;
 
+    /** */
+    private int qryMetricsHistSz = DFLT_QRY_METRICS_HISTORY_SIZE;
+
     /**
      * Flag indicating whether data can be read from backup.
      * If {@code false} always get data from primary node (never from backup).
@@ -454,6 +460,7 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         listenerConfigurations = cc.listenerConfigurations;
         loadPrevVal = cc.isLoadPreviousValue();
         longQryWarnTimeout = cc.getLongQueryWarningTimeout();
+        qryMetricsHistSz = cc.getQueryMetricsHistorySize();
         offHeapMaxMem = cc.getOffHeapMaxMemory();
         maxConcurrentAsyncOps = cc.getMaxConcurrentAsyncOperations();
         memMode = cc.getMemoryMode();
@@ -1793,6 +1800,29 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     }
 
     /**
+     * Gets size of queries metrics history that will be stored in memory for monitoring purposes.
+     * If {@code 0} then history will not be collected.
+     * Note, Larger number may lead to higher memory consumption.
+     *
+     * @return Maximum number of query metrics that will be stored in memory.
+     */
+    public int getQueryMetricsHistorySize() {
+        return qryMetricsHistSz;
+    }
+
+    /**
+     * Sets size of queries metrics history that will be stored in memory for monitoring purposes.
+     *
+     * @param qryMetricsHistSz Maximum number of latest queries metrics that will be stored in memory.
+     * @return {@code this} for chaining.
+     */
+    public CacheConfiguration<K, V> setQueryMetricsHistorySize(int qryMetricsHistSz) {
+        this.qryMetricsHistSz = qryMetricsHistSz;
+
+        return this;
+    }
+
+    /**
      * Gets custom name of the sql schema. If custom sql schema is not set then {@code null} will be returned and
      * quoted case sensitive name will be used as sql schema.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/c257f5f1/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
index 3414766..6183c2b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
@@ -156,7 +156,7 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
 
         log = cctx.logger(getClass());
 
-        metrics = new GridCacheQueryMetricsAdapter();
+        metrics = new GridCacheQueryMetricsAdapter(5); // TODO: IGNITE-3443 take from cfg.;
     }
 
     /**
@@ -424,7 +424,7 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
 
     /** {@inheritDoc} */
     @Override public void resetMetrics() {
-        metrics = new GridCacheQueryMetricsAdapter();
+        metrics = new GridCacheQueryMetricsAdapter(5); // TODO: IGNITE-3443 take from cfg.
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c257f5f1/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index d9973a5..c14bb1d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -147,7 +147,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
     private int maxIterCnt;
 
     /** */
-    private volatile GridCacheQueryMetricsAdapter metrics = new GridCacheQueryMetricsAdapter();
+    private volatile GridCacheQueryMetricsAdapter metrics = new GridCacheQueryMetricsAdapter(5); // TODO: IGNITE-3443 take from cfg.
 
     /** */
     private final ConcurrentMap<UUID, RequestFutureMap> qryIters =
@@ -2060,7 +2060,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
      * Resets metrics.
      */
     public void resetMetrics() {
-        metrics = new GridCacheQueryMetricsAdapter();
+        metrics = new GridCacheQueryMetricsAdapter(5); // TODO: IGNITE-3443 take from cfg.
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c257f5f1/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
index eaf65be..5ffeef5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
@@ -22,7 +22,9 @@ import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.cache.query.QueryDetailsMetrics;
 import org.apache.ignite.cache.query.QueryMetrics;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -36,15 +38,24 @@ public class GridCacheQueryMetricsAdapter extends GridCacheQueryBaseMetricsAdapt
     /** */
     private static final long serialVersionUID = 0L;
 
-    /** TODO IGNITE-3443 */
-    private static final int MAX_CAP = 5;
+    /** History size. */
+    private final int detailsHistSz;
 
-    /** TODO IGNITE-3443 */
-    private final ConcurrentLinkedHashMap<QueryMetricsKey, GridCacheQueryDetailsMetricsAdapter> details = new ConcurrentLinkedHashMap<>(MAX_CAP, 0.75f, 64, MAX_CAP);
+    /** Map with metrics history for latest queries. */
+    private final ConcurrentMap<QueryMetricsKey, GridCacheQueryDetailsMetricsAdapter> details;
+
+    /**
+     * @param detailsHistSz Query metrics history size.
+     */
+    public GridCacheQueryMetricsAdapter(int detailsHistSz) {
+        this.detailsHistSz = detailsHistSz;
+
+        details = new ConcurrentLinkedHashMap<>(detailsHistSz, 0.75f, 16, detailsHistSz > 0 ? detailsHistSz : 1);
+    }
 
     /** {@inheritDoc} */
     @Override public List<QueryDetailsMetrics> details() {
-        return new ArrayList<QueryDetailsMetrics>(details.values());
+        return detailsHistSz > 0 ? new ArrayList<QueryDetailsMetrics>(details.values()) : Collections.<QueryDetailsMetrics>emptyList();
     }
 
     /**
@@ -60,12 +71,14 @@ public class GridCacheQueryMetricsAdapter extends GridCacheQueryBaseMetricsAdapt
 
         QueryMetricsKey key = new QueryMetricsKey(qryType, qry);
 
-        if (!details.contains(key))
-            details.putIfAbsent(key, new GridCacheQueryDetailsMetricsAdapter());
+        if (detailsHistSz > 0) {
+            if (!details.containsKey(key))
+                details.putIfAbsent(key, new GridCacheQueryDetailsMetricsAdapter());
 
-        GridCacheQueryDetailsMetricsAdapter dm = details.get(key);
+            GridCacheQueryDetailsMetricsAdapter dm = details.get(key);
 
-        dm.onQueryCompleted(duration, fail);
+            dm.onQueryCompleted(duration, fail);
+        }
     }
 
     /**
@@ -74,12 +87,13 @@ public class GridCacheQueryMetricsAdapter extends GridCacheQueryBaseMetricsAdapt
      * @return Copy.
      */
     public GridCacheQueryMetricsAdapter copy() {
-        GridCacheQueryMetricsAdapter m = new GridCacheQueryMetricsAdapter();
+        GridCacheQueryMetricsAdapter m = new GridCacheQueryMetricsAdapter(detailsHistSz);
 
         // Not synchronized because accuracy isn't critical.
         copy(m);
 
-        m.details.putAll(details);
+        if (detailsHistSz > 0)
+            m.details.putAll(details);
 
         return m;
     }