You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2014/11/27 12:51:38 UTC

svn commit: r1642119 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query: Query.java QueryEngineImpl.java QueryImpl.java UnionQueryImpl.java

Author: chetanm
Date: Thu Nov 27 11:51:37 2014
New Revision: 1642119

URL: http://svn.apache.org/r1642119
Log:
OAK-2302 - Simplify query debugging with MDC

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1642119&r1=1642118&r2=1642119&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java Thu Nov 27 11:51:37 2014
@@ -92,4 +92,5 @@ public interface Query {
 
     Tree getTree(String path);
 
+    boolean isMeasureOrExplainEnabled();
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1642119&r1=1642118&r2=1642119&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java Thu Nov 27 11:51:37 2014
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.api.QueryEngine;
@@ -36,12 +37,17 @@ import org.apache.jackrabbit.oak.query.x
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
 
 /**
  * The query engine implementation.
  */
 public abstract class QueryEngineImpl implements QueryEngine {
 
+    private static final AtomicInteger ID_COUNTER = new AtomicInteger();
+    private static final String MDC_QUERY_ID = "oak.query.id";
+    private static final String OAK_QUERY_ANALYZE = "oak.query.analyze";
+
     static final String SQL2 = "JCR-SQL2";
     static final String SQL = "sql";
     static final String XPATH = "xpath";
@@ -164,12 +170,40 @@ public abstract class QueryEngineImpl im
             }
         }
         q.setTraversalEnabled(traversalEnabled);
-        q.prepare();
-        return q.executeQuery();
+
+        boolean mdc = false;
+        try {
+            mdc = setupMDC(q);
+            q.prepare();
+            return q.executeQuery();
+        } finally {
+            if (mdc) {
+                clearMDC();
+            }
+        }
     }
 
     protected void setTraversalEnabled(boolean traversalEnabled) {
         this.traversalEnabled = traversalEnabled;
     }
 
+    private boolean setupMDC(Query q){
+        boolean mdcEnabled = false;
+        if (q.isMeasureOrExplainEnabled()){
+            MDC.put(OAK_QUERY_ANALYZE, Boolean.TRUE.toString());
+            mdcEnabled = true;
+        }
+
+        if (LOG.isDebugEnabled()){
+            MDC.put(MDC_QUERY_ID, String.valueOf(ID_COUNTER.incrementAndGet()));
+            mdcEnabled = true;
+        }
+        return mdcEnabled;
+    }
+
+    private void clearMDC() {
+        MDC.remove(MDC_QUERY_ID);
+        MDC.remove(OAK_QUERY_ANALYZE);
+    }
+
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java?rev=1642119&r1=1642118&r2=1642119&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java Thu Nov 27 11:51:37 2014
@@ -885,6 +885,11 @@ public class QueryImpl implements Query 
         return context.getRoot().getTree(path);
     }
 
+    @Override
+    public boolean isMeasureOrExplainEnabled() {
+        return explain || measure;
+    }
+
     /**
      * Validate the path is syntactically correct, and convert it to an Oak
      * internal path (including namespace remapping if needed).

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java?rev=1642119&r1=1642118&r2=1642119&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java Thu Nov 27 11:51:37 2014
@@ -205,7 +205,12 @@ public class UnionQueryImpl implements Q
     public Tree getTree(String path) {
         return left.getTree(path);
     }
-    
+
+    @Override
+    public boolean isMeasureOrExplainEnabled() {
+        return explain || measure;
+    }
+
     @Override
     public int getColumnIndex(String columnName) {
         if (columns == null) {