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 ca...@apache.org on 2016/02/27 15:50:50 UTC

svn commit: r1732647 - /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java

Author: catholicon
Date: Sat Feb 27 14:50:50 2016
New Revision: 1732647

URL: http://svn.apache.org/viewvc?rev=1732647&view=rev
Log:
OAK-4070: Refactor LuceneIndexEditorContext to allow for switchable clock for testing

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

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=1732647&r1=1732646&r2=1732647&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 Sat Feb 27 14:50:50 2016
@@ -37,6 +37,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.lucene.util.SuggestHelper;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.stats.Clock;
 import org.apache.jackrabbit.oak.util.PerfLogger;
 import org.apache.jackrabbit.util.ISO8601;
 import org.apache.lucene.analysis.Analyzer;
@@ -156,6 +157,10 @@ public class LuceneIndexEditorContext {
      */
     private Set<MediaType> supportedMediaTypes;
 
+    //Intentionally static, so that it can be set without passing around clock objects
+    //Set for testing ONLY
+    private static Clock clock = Clock.SIMPLE;
+
     LuceneIndexEditorContext(NodeState root, NodeBuilder definition, IndexUpdateCallback updateCallback,
                              @Nullable IndexCopier indexCopier, ExtractedTextCache extractedTextCache,
                              IndexAugmentorFactory augmentorFactory) {
@@ -260,7 +265,7 @@ public class LuceneIndexEditorContext {
             //as to make IndexTracker detect changes when index
             //is stored in file system
             NodeBuilder status = definitionBuilder.child(":status");
-            status.setProperty("lastUpdated", ISO8601.format(Calendar.getInstance()), Type.DATE);
+            status.setProperty("lastUpdated", ISO8601.format(getCalendar()), Type.DATE);
             status.setProperty("indexedNodes",indexedNodes);
             PERF_LOGGER.end(start, -1, "Overall Closed IndexWriter for directory {}", definition);
 
@@ -285,7 +290,7 @@ public class LuceneIndexEditorContext {
                 Calendar suggesterLastUpdatedTime = ISO8601.parse(suggesterLastUpdatedValue.getValue(Type.DATE));
                 int updateFrequency = definition.getSuggesterUpdateFrequencyMinutes();
                 suggesterLastUpdatedTime.add(Calendar.MINUTE, updateFrequency);
-                if (Calendar.getInstance().after(suggesterLastUpdatedTime)) {
+                if (getCalendar().after(suggesterLastUpdatedTime)) {
                     updateSuggester = true;
                 }
             } else {
@@ -297,7 +302,7 @@ public class LuceneIndexEditorContext {
                 final OakDirectory suggestDirectory = new OakDirectory(definitionBuilder, ":suggest-data", definition, false);
                 try {
                     SuggestHelper.updateSuggester(suggestDirectory, analyzer, reader);
-                    suggesterStatus.setProperty("lastUpdated", ISO8601.format(Calendar.getInstance()), Type.DATE);
+                    suggesterStatus.setProperty("lastUpdated", ISO8601.format(getCalendar()), Type.DATE);
                 } catch (Throwable e) {
                     log.warn("could not update suggester", e);
                 } finally {
@@ -308,6 +313,18 @@ public class LuceneIndexEditorContext {
         }
     }
 
+    /** Only set for testing */
+    static void setClock(Clock c) {
+        checkNotNull(c);
+        clock = c;
+    }
+
+    static private Calendar getCalendar() {
+        Calendar ret = Calendar.getInstance();
+        ret.setTime(clock.getDate());
+        return ret;
+    }
+
     public void enableReindexMode(){
         reindex = true;
         IndexFormatVersion version = IndexDefinition.determineVersionForFreshIndex(definitionBuilder);