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 2017/05/12 07:08:21 UTC

svn commit: r1794936 - in /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene: IndexDefinition.java LuceneIndexEditorContext.java LuceneIndexInfoProvider.java

Author: chetanm
Date: Fri May 12 07:08:21 2017
New Revision: 1794936

URL: http://svn.apache.org/viewvc?rev=1794936&view=rev
Log:
OAK-6192 - Lucene IndexInfoProvider implementation

Also provide info on last updated time. This is the checkpoint time as per OAK-6194

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexInfoProvider.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1794936&r1=1794935&r2=1794936&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Fri May 12 07:08:21 2017
@@ -144,6 +144,13 @@ public final class IndexDefinition imple
     static final String STATUS_NODE = ":status";
 
     /**
+     * Property on status node which refers to the date when the index was lastUpdated
+     * This may not be the same time as when index was closed but the time of checkpoint
+     * upto which index is upto date (OAK-6194)
+     */
+    static final String STATUS_LAST_UPDATED = "lastUpdated";
+
+    /**
      * Meta property which provides the unique id
      */
     static final String PROP_UID = "uid";

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1794936&r1=1794935&r2=1794936&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java Fri May 12 07:08:21 2017
@@ -23,6 +23,7 @@ import javax.annotation.Nullable;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
 import org.apache.jackrabbit.oak.plugins.index.IndexingContext;
 import org.apache.jackrabbit.oak.plugins.index.lucene.binary.BinaryTextExtractor;
@@ -30,6 +31,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.lucene.util.FacetsConfigProvider;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriter;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterFactory;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
@@ -139,7 +141,7 @@ public class LuceneIndexEditorContext im
             //as to make IndexTracker detect changes when index
             //is stored in file system
             NodeBuilder status = definitionBuilder.child(":status");
-            status.setProperty("lastUpdated", ISO8601.format(currentTime), Type.DATE);
+            status.setProperty(IndexDefinition.STATUS_LAST_UPDATED, getUpdatedTime(currentTime), Type.DATE);
             status.setProperty("indexedNodes", indexedNodes);
 
             PERF_LOGGER.end(start, -1, "Overall Closed IndexWriter for directory {}", definition);
@@ -149,6 +151,16 @@ public class LuceneIndexEditorContext im
             }
         }
     }
+
+    private String getUpdatedTime(Calendar currentTime) {
+        CommitInfo info = getIndexingContext().getCommitInfo();
+        String checkpointTime = (String) info.getInfo().get(IndexConstants.CHECKPOINT_CREATION_TIME);
+        if (checkpointTime != null) {
+            return checkpointTime;
+        }
+        return ISO8601.format(currentTime);
+    }
+
     /** Only set for testing */
     static void setClock(Clock c) {
         checkNotNull(c);

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexInfoProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexInfoProvider.java?rev=1794936&r1=1794935&r2=1794936&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexInfoProvider.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexInfoProvider.java Fri May 12 07:08:21 2017
@@ -39,6 +39,7 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder;
+import org.apache.jackrabbit.util.ISO8601;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.store.Directory;
 
@@ -86,6 +87,7 @@ public class LuceneIndexInfoProvider imp
 
         LuceneIndexInfo info = new LuceneIndexInfo(indexPath);
         computeSize(idxState, info);
+        computeLastUpdatedTime(idxState, info);
         computeAsyncIndexInfo(idxState, indexPath, info);
         return info;
     }
@@ -122,12 +124,23 @@ public class LuceneIndexInfoProvider imp
         }
     }
 
+    private static void computeLastUpdatedTime(NodeState idxState, LuceneIndexInfo info) {
+        NodeState status = idxState.getChildNode(IndexDefinition.STATUS_NODE);
+        if (status.exists()){
+            PropertyState updatedTime = status.getProperty(IndexDefinition.STATUS_LAST_UPDATED);
+            if (updatedTime != null) {
+                info.lastUpdatedTime = ISO8601.parse(updatedTime.getValue(Type.DATE)).getTimeInMillis();
+            }
+        }
+    }
+
     private static class LuceneIndexInfo implements IndexInfo {
         String indexPath;
         String asyncName;
         long numEntries;
         long size;
         long indexedUptoTime;
+        long lastUpdatedTime;
 
         public LuceneIndexInfo(String indexPath) {
             this.indexPath = indexPath;
@@ -150,7 +163,7 @@ public class LuceneIndexInfoProvider imp
 
         @Override
         public long getLastUpdatedTime() {
-            return 0; //TODO To be computed
+            return lastUpdatedTime;
         }
 
         @Override