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