You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by al...@apache.org on 2011/10/31 12:53:40 UTC

svn commit: r1195423 - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/ jackrabbit-core/s...

Author: alexparvulescu
Date: Mon Oct 31 11:53:40 2011
New Revision: 1195423

URL: http://svn.apache.org/viewvc?rev=1195423&view=rev
Log:
JCR-3133 Query Stats should use the TimeSeries mechanism

Removed:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/util/CachingOpsPerSecondDto.java
Modified:
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/QueryStat.java
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/QueryStatImpl.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java

Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/QueryStat.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/QueryStat.java?rev=1195423&r1=1195422&r2=1195423&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/QueryStat.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/QueryStat.java Mon Oct 31 11:53:40 2011
@@ -44,10 +44,6 @@ public interface QueryStat {
      */
     void clearSlowQueriesQueue();
 
-    double getQueriesPerSecond();
-
-    double getAvgQueryTime();
-
     /** -- GENERAL OPS -- **/
 
     /**

Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java?rev=1195423&r1=1195422&r2=1195423&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/stats/RepositoryStatistics.java Mon Oct 31 11:53:40 2011
@@ -42,7 +42,10 @@ public interface RepositoryStatistics {
         SESSION_WRITE_DURATION(true),
         SESSION_WRITE_AVERAGE(false),
         SESSION_LOGIN_COUNTER(true),
-        SESSION_COUNT(false);
+        SESSION_COUNT(false),
+        QUERY_COUNT(true),
+        QUERY_DURATION(true),
+        QUERY_AVERAGE(true);
 
         private final boolean resetValueEachSecond;
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java?rev=1195423&r1=1195422&r2=1195423&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java Mon Oct 31 11:53:40 2011
@@ -33,8 +33,10 @@ import javax.jcr.query.InvalidQueryExcep
 import javax.jcr.query.QueryResult;
 import javax.jcr.version.VersionException;
 
+import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
 import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.core.session.SessionOperation;
+import org.apache.jackrabbit.core.stats.RepositoryStatisticsImpl;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.commons.conversion.NameException;
 import org.slf4j.Logger;
@@ -122,21 +124,27 @@ public class QueryImpl extends AbstractQ
      */
     public QueryResult execute() throws RepositoryException {
         checkInitialized();
-        long time = System.currentTimeMillis();
+        long time = System.nanoTime();
         QueryResult result = sessionContext.getSessionState().perform(
                 new SessionOperation<QueryResult>() {
                     public QueryResult perform(SessionContext context)
                             throws RepositoryException {
                         return query.execute(offset, limit);
                     }
+
                     public String toString() {
                         return "query.execute(" + statement + ")";
                     }
                 });
-        time = System.currentTimeMillis() - time;
-        log.debug("executed in {} ms. ({})", time, statement);
+        time = System.nanoTime() - time;
+        final long timeMs = time / 1000;
+        log.debug("executed in {} ms. ({})", timeMs, statement);
+        RepositoryStatisticsImpl statistics = sessionContext
+                .getRepositoryContext().getRepositoryStatistics();
+        statistics.getCounter(Type.QUERY_COUNT).incrementAndGet();
+        statistics.getCounter(Type.QUERY_DURATION).addAndGet(time);
         sessionContext.getRepositoryContext().getStatManager().getQueryStat()
-                .logQuery(language, statement, time);
+                .logQuery(language, statement, timeMs);
         return result;
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java?rev=1195423&r1=1195422&r2=1195423&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java Mon Oct 31 11:53:40 2011
@@ -30,12 +30,14 @@ import javax.jcr.query.qom.Ordering;
 import javax.jcr.query.qom.QueryObjectModel;
 import javax.jcr.query.qom.Source;
 
+import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
 import org.apache.jackrabbit.commons.query.QueryObjectModelBuilderRegistry;
 import org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory;
 import org.apache.jackrabbit.core.query.lucene.SearchIndex;
 import org.apache.jackrabbit.core.query.lucene.join.QueryEngine;
 import org.apache.jackrabbit.core.session.SessionContext;
 import org.apache.jackrabbit.core.session.SessionOperation;
+import org.apache.jackrabbit.core.stats.RepositoryStatisticsImpl;
 import org.apache.jackrabbit.spi.commons.query.qom.BindVariableValueImpl;
 import org.apache.jackrabbit.spi.commons.query.qom.DefaultTraversingQOMTreeVisitor;
 import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelTree;
@@ -117,7 +119,7 @@ public class QueryObjectModelImpl extend
     }
 
     public QueryResult execute() throws RepositoryException {
-        long time = System.currentTimeMillis();
+        long time = System.nanoTime();
         final QueryResult result = sessionContext.getSessionState().perform(
                 new SessionOperation<QueryResult>() {
                     public QueryResult perform(SessionContext context)
@@ -127,12 +129,17 @@ public class QueryObjectModelImpl extend
                         return engine.execute(getColumns(), getSource(),
                                 getConstraint(), getOrderings(), offset, limit);
                     }
+
                     public String toString() {
                         return "query.execute(" + statement + ")";
                     }
                 });
-        time = System.currentTimeMillis() - time;
-        log.debug("executed in {} ms. ({})", time, statement);
+        time = System.nanoTime() - time;
+        log.debug("executed in {} ms. ({})", time / 1000, statement);
+        RepositoryStatisticsImpl statistics = sessionContext
+                .getRepositoryContext().getRepositoryStatistics();
+        statistics.getCounter(Type.QUERY_COUNT).incrementAndGet();
+        statistics.getCounter(Type.QUERY_DURATION).addAndGet(time);
         sessionContext.getRepositoryContext().getStatManager().getQueryStat()
                 .logQuery(language, statement, time);
         return result;

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/QueryStatImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/QueryStatImpl.java?rev=1195423&r1=1195422&r2=1195423&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/QueryStatImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/QueryStatImpl.java Mon Oct 31 11:53:40 2011
@@ -20,7 +20,6 @@ import java.util.Comparator;
 import java.util.PriorityQueue;
 
 import org.apache.jackrabbit.api.stats.QueryStatDto;
-import org.apache.jackrabbit.core.stats.util.CachingOpsPerSecondDto;
 
 /**
  * Default {@link QueryStatCore} implementation
@@ -35,8 +34,6 @@ public class QueryStatImpl implements Qu
     private PriorityQueue<QueryStatDto> queries = new PriorityQueue<QueryStatDto>(
             queueSize + 1, comparator);
 
-    private CachingOpsPerSecondDto qps = new CachingOpsPerSecondDto();
-
     private boolean enabled = false;
 
     public QueryStatImpl() {
@@ -76,7 +73,6 @@ public class QueryStatImpl implements Qu
             if (queries.size() > queueSize) {
                 queries.remove();
             }
-            qps.onOp(durationMs);
         }
     }
 
@@ -93,12 +89,4 @@ public class QueryStatImpl implements Qu
     public QueryStatDto[] getSlowQueries() {
         return queries.toArray(new QueryStatDto[queries.size()]);
     }
-
-    public double getQueriesPerSecond() {
-        return qps.getOpsPerSecond();
-    }
-
-    public double getAvgQueryTime() {
-        return qps.getOpAvgTime();
-    }
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java?rev=1195423&r1=1195422&r2=1195423&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/stats/RepositoryStatisticsImpl.java Mon Oct 31 11:53:40 2011
@@ -42,21 +42,21 @@ public class RepositoryStatisticsImpl im
         getOrCreateRecorder(Type.SESSION_COUNT);
         getOrCreateRecorder(Type.SESSION_LOGIN_COUNTER);
 
-        TimeSeries src = getOrCreateRecorder(Type.SESSION_READ_COUNTER);
-        TimeSeries srd = getOrCreateRecorder(Type.SESSION_READ_DURATION);
-        avg.put(Type.SESSION_READ_AVERAGE, new TimeSeriesAverage(srd, src));
-
-        TimeSeries swc = getOrCreateRecorder(Type.SESSION_WRITE_COUNTER);
-        TimeSeries swd = getOrCreateRecorder(Type.SESSION_WRITE_DURATION);
-        avg.put(Type.SESSION_WRITE_AVERAGE, new TimeSeriesAverage(swd, swc));
-
-        TimeSeries brc = getOrCreateRecorder(Type.BUNDLE_CACHE_MISS_COUNTER);
-        TimeSeries brd = getOrCreateRecorder(Type.BUNDLE_CACHE_MISS_DURATION);
-        avg.put(Type.BUNDLE_CACHE_MISS_AVERAGE, new TimeSeriesAverage(brd, brc));
-
-        TimeSeries bwc = getOrCreateRecorder(Type.BUNDLE_WRITE_COUNTER);
-        TimeSeries bwd = getOrCreateRecorder(Type.BUNDLE_WRITE_DURATION);
-        avg.put(Type.BUNDLE_WRITE_AVERAGE, new TimeSeriesAverage(bwd, bwc));
+        createAvg(Type.SESSION_READ_COUNTER, Type.SESSION_READ_DURATION,
+                Type.SESSION_READ_AVERAGE);
+        createAvg(Type.SESSION_WRITE_COUNTER, Type.SESSION_WRITE_DURATION,
+                Type.SESSION_WRITE_AVERAGE);
+        createAvg(Type.BUNDLE_CACHE_MISS_COUNTER,
+                Type.BUNDLE_CACHE_MISS_DURATION, Type.BUNDLE_CACHE_MISS_AVERAGE);
+        createAvg(Type.BUNDLE_WRITE_COUNTER, Type.BUNDLE_WRITE_DURATION,
+                Type.BUNDLE_WRITE_AVERAGE);
+        createAvg(Type.QUERY_COUNT, Type.QUERY_DURATION, Type.QUERY_AVERAGE);
+
+    }
+
+    private void createAvg(Type count, Type duration, Type avgTs) {
+        avg.put(avgTs, new TimeSeriesAverage(getOrCreateRecorder(duration),
+                getOrCreateRecorder(count)));
     }
 
     public RepositoryStatisticsImpl(ScheduledExecutorService executor) {