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) {