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 2016/12/08 05:17:53 UTC

svn commit: r1773178 - in /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene: IndexTracker.java LuceneIndexMBean.java LuceneIndexMBeanImpl.java

Author: chetanm
Date: Thu Dec  8 05:17:52 2016
New Revision: 1773178

URL: http://svn.apache.org/viewvc?rev=1773178&view=rev
Log:
OAK-4400 - Correlate index with the index definition used to build it

Add MBean operation to access stored index definition

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java?rev=1773178&r1=1773177&r2=1773178&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java Thu Dec  8 05:17:52 2016
@@ -199,6 +199,10 @@ public class IndexTracker {
         return badIndexTracker;
     }
 
+    NodeState getRoot() {
+        return root;
+    }
+
     private synchronized IndexNode findIndexNode(String path) {
         // Retry the lookup from acquireIndexNode now that we're
         // synchronized. The acquire() call is guaranteed to succeed

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java?rev=1773178&r1=1773177&r2=1773178&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java Thu Dec  8 05:17:52 2016
@@ -59,7 +59,10 @@ public interface LuceneIndexMBean {
     String[] getFieldInfo(
             @Name("indexPath")
             @Description("The index path (empty for all indexes)")
-            String indexPath
-            ) throws IOException;
+                    String indexPath
+    ) throws IOException;
+
+    @Description("Returns the stored index definition for index at given path in string form")
+    String getStoredIndexDefinition(@Name("indexPath") String indexPath);
 
 }

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java?rev=1773178&r1=1773177&r2=1773178&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java Thu Dec  8 05:17:52 2016
@@ -19,10 +19,6 @@
 
 package org.apache.jackrabbit.oak.plugins.index.lucene;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
-import static org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newAncestorTerm;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -42,10 +38,16 @@ import javax.management.openmbean.Tabula
 import javax.management.openmbean.TabularDataSupport;
 import javax.management.openmbean.TabularType;
 
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import com.google.common.collect.TreeTraverser;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.jmx.AnnotatedStandardMBean;
+import org.apache.jackrabbit.oak.commons.jmx.Name;
 import org.apache.jackrabbit.oak.plugins.index.lucene.BadIndexTracker.BadIndexInfo;
 import org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex.PathStoredFieldVisitor;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.Fields;
 import org.apache.lucene.index.IndexReader;
@@ -64,9 +66,10 @@ import org.apache.lucene.store.IOContext
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
-import com.google.common.collect.TreeTraverser;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition.INDEX_DEFINITION_NODE;
+import static org.apache.jackrabbit.oak.plugins.index.lucene.TermFactory.newAncestorTerm;
 
 public class LuceneIndexMBeanImpl extends AnnotatedStandardMBean implements LuceneIndexMBean {
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -180,7 +183,7 @@ public class LuceneIndexMBeanImpl extend
         }
         return new String[0];
     }
-    
+
     @Override
     public String[] getFieldInfo(String indexPath) throws IOException {
         TreeSet<String> indexes = new TreeSet<String>();
@@ -207,16 +210,20 @@ public class LuceneIndexMBeanImpl extend
         return list.toArray(new String[0]);
     }
 
-    private static ArrayList<String> getFieldInfo(String path, IndexSearcher searcher) throws IOException {
-        ArrayList<String> list = new ArrayList<String>();
-        IndexReader reader = searcher.getIndexReader();
-        Fields fields = MultiFields.getFields(reader);
-        if (fields != null) {
-            for(String f : fields) {
-                list.add(path + " " + f + " " + reader.getDocCount(f));
-            }
+    @Override
+    public String getStoredIndexDefinition(@Name("indexPath") String indexPath) {
+        IndexDefinition defn = indexTracker.getIndexDefinition(indexPath);
+        NodeState state;
+        if (defn != null){
+            state = defn.getDefinitionNodeState();
+        } else {
+            state = NodeStateUtils.getNode(indexTracker.getRoot(), indexPath + "/" + INDEX_DEFINITION_NODE);
         }
-        return list;
+
+        if (state.exists()){
+            return NodeStateUtils.toString(state);
+        }
+        return "No index found at given path";
     }
 
     public void dumpIndexContent(String sourcePath, String destPath) throws IOException {
@@ -243,6 +250,18 @@ public class LuceneIndexMBeanImpl extend
         }
     }
 
+    private static ArrayList<String> getFieldInfo(String path, IndexSearcher searcher) throws IOException {
+        ArrayList<String> list = new ArrayList<String>();
+        IndexReader reader = searcher.getIndexReader();
+        Fields fields = MultiFields.getFields(reader);
+        if (fields != null) {
+            for(String f : fields) {
+                list.add(path + " " + f + " " + reader.getDocCount(f));
+            }
+        }
+        return list;
+    }
+
     private static String[] determineIndexedPaths(IndexSearcher searcher, final int maxLevel, int maxPathCount)
             throws IOException {
         Set<String> paths = Sets.newHashSet();