Author: tommaso
Date: Mon Dec 10 15:55:03 2018
New Revision: 1848593

URL: http://svn.apache.org/viewvc?rev=1848593&view=rev
Log:
OAK-7954 - record index unavailable metric

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

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=1848593&r1=1848592&r2=1848593&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
 Mon Dec 10 15:55:03 2018
@@ -92,6 +92,9 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
+import org.apache.jackrabbit.oak.stats.HistogramStats;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -112,7 +115,9 @@ public class QueryImpl implements Query
     public final static int MAX_UNION = Integer.getInteger("oak.sql2MaxUnion", 
1000);
 
     private static final Logger LOG = LoggerFactory.getLogger(QueryImpl.class);
-    
+
+    private static final String INDEX_UNAVAILABLE = "INDEX-UNAVAILABLE";
+
     private final QueryExecutionStats stats;
 
     private boolean potentiallySlowTraversalQueryLogged;
@@ -1082,7 +1087,19 @@ public class QueryImpl implements Query
                 }
             }
         }
-        return new SelectorExecutionPlan(filter.getSelector(), bestIndex, 
+
+        if (potentiallySlowTraversalQuery || bestIndex == null) {
+            LOG.debug("no proper index was found for filter {}", filter);
+            StatisticsProvider statisticsProvider = 
getSettings().getStatisticsProvider();
+            if (statisticsProvider != null) {
+                HistogramStats histogram = 
statisticsProvider.getHistogram(INDEX_UNAVAILABLE, StatsOptions.METRICS_ONLY);
+                if (histogram != null) {
+                    histogram.update(1);
+                }
+            }
+        }
+
+        return new SelectorExecutionPlan(filter.getSelector(), bestIndex,
                 bestPlan, bestCost);
     }
     


Reply via email to