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 <[email protected]> Authored: Fri Aug 5 19:40:51 2016 +0700 Committer: Alexey Kuznetsov <[email protected]> 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; }
