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);


Reply via email to