Repository: ignite
Updated Branches:
  refs/heads/ignite-3443 5b9a042a3 -> aeb4f88f2


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/aeb4f88f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/aeb4f88f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/aeb4f88f

Branch: refs/heads/ignite-3443
Commit: aeb4f88f2e7b550c305222327366ba8c95b67ed9
Parents: 5b9a042
Author: Alexey Kuznetsov <akuznet...@apache.org>
Authored: Wed Oct 19 14:50:04 2016 +0700
Committer: Alexey Kuznetsov <akuznet...@apache.org>
Committed: Wed Oct 19 14:50:04 2016 +0700

----------------------------------------------------------------------
 .../VisorCacheQueryMetricsCollectorTask.java    | 41 ++++++++++++--------
 1 file changed, 24 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/aeb4f88f/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryMetricsCollectorTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryMetricsCollectorTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryMetricsCollectorTask.java
index d008f33..8cf3b0d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryMetricsCollectorTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheQueryMetricsCollectorTask.java
@@ -42,13 +42,13 @@ import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.isSyste
  * Task to collect cache query metrics.
  */
 @GridInternal
-public class VisorCacheQueryMetricsCollectorTask extends 
VisorMultiNodeTask<Void, Collection<? extends QueryDetailsMetrics>,
+public class VisorCacheQueryMetricsCollectorTask extends 
VisorMultiNodeTask<Long, Collection<? extends QueryDetailsMetrics>,
     Collection<? extends QueryDetailsMetrics>> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheQueryMetricsCollectorJob job(Void arg) {
+    @Override protected VisorCacheQueryMetricsCollectorJob job(Long arg) {
         return new VisorCacheQueryMetricsCollectorJob(arg, debug);
     }
 
@@ -63,7 +63,7 @@ public class VisorCacheQueryMetricsCollectorTask extends 
VisorMultiNodeTask<Void
 
             Collection<QueryDetailsMetrics> metrics = res.getData();
 
-            VisorCacheQueryMetricsCollectorJob.aggregateMetrics(taskRes, 
metrics);
+            VisorCacheQueryMetricsCollectorJob.aggregateMetrics(-1, taskRes, 
metrics);
         }
 
         return new ArrayList<>(taskRes.values());
@@ -72,43 +72,50 @@ public class VisorCacheQueryMetricsCollectorTask extends 
VisorMultiNodeTask<Void
     /**
      * Job that will actually collect query metrics.
      */
-    private static class VisorCacheQueryMetricsCollectorJob extends 
VisorJob<Void, Collection<? extends QueryDetailsMetrics>> {
+    private static class VisorCacheQueryMetricsCollectorJob extends 
VisorJob<Long, Collection<? extends QueryDetailsMetrics>> {
         /** */
         private static final long serialVersionUID = 0L;
 
         /**
          * Create job with specified argument.
          *
-         * @param arg Job argument.
+         * @param arg Last time when metrics were collected.
          * @param debug Debug flag.
          */
-        protected VisorCacheQueryMetricsCollectorJob(@Nullable Void arg, 
boolean debug) {
+        protected VisorCacheQueryMetricsCollectorJob(@Nullable Long arg, 
boolean debug) {
             super(arg, debug);
         }
 
         /**
+         * @param since Time when metrics were collected last time.
          * @param res Response.
          * @param metrics Metrics.
          */
-        private static void aggregateMetrics(Map<Integer, 
GridCacheQueryDetailsMetricsAdapter> res,
+        private static void aggregateMetrics(long since, Map<Integer, 
GridCacheQueryDetailsMetricsAdapter> res,
             Collection<QueryDetailsMetrics> metrics) {
-            for (QueryDetailsMetrics m : metrics) {
-                Integer qryHashCode = 
GridCacheQueryDetailsMetricsAdapter.queryHashCode(m);
+            if (!metrics.isEmpty()) {
+                for (QueryDetailsMetrics m : metrics) {
+                    if (m.lastStartTime() > since) {
+                        Integer qryHashCode = 
GridCacheQueryDetailsMetricsAdapter.queryHashCode(m);
 
-                GridCacheQueryDetailsMetricsAdapter aggMetrics = 
res.get(qryHashCode);
+                        GridCacheQueryDetailsMetricsAdapter aggMetrics = 
res.get(qryHashCode);
 
-                if (aggMetrics == null) {
-                    aggMetrics = new 
GridCacheQueryDetailsMetricsAdapter(m.queryType(), m.query());
+                        if (aggMetrics == null) {
+                            aggMetrics = new 
GridCacheQueryDetailsMetricsAdapter(m.queryType(), m.query());
 
-                    res.put(qryHashCode, aggMetrics);
-                }
+                            res.put(qryHashCode, aggMetrics);
+                        }
 
-                aggMetrics.aggregate(m);
+                        aggMetrics.aggregate(m);
+                    }
+                }
             }
         }
 
         /** {@inheritDoc} */
-        @Override protected Collection<? extends QueryDetailsMetrics> 
run(@Nullable Void arg) throws IgniteException {
+        @Override protected Collection<? extends QueryDetailsMetrics> 
run(@Nullable Long arg) throws IgniteException {
+            assert arg != null;
+
             IgniteConfiguration cfg = ignite.configuration();
 
             GridCacheProcessor cacheProc = ignite.context().cache();
@@ -124,7 +131,7 @@ public class VisorCacheQueryMetricsCollectorTask extends 
VisorMultiNodeTask<Void
                     if (cache == null || !cache.context().started())
                         continue;
 
-                    aggregateMetrics(jobRes, 
cache.context().queries().detailsMetrics());
+                    aggregateMetrics(arg, jobRes, 
cache.context().queries().detailsMetrics());
                 }
             }
 

Reply via email to