Author: tommaso
Date: Mon Feb 29 11:23:12 2016
New Revision: 1732857

URL: http://svn.apache.org/viewvc?rev=1732857&view=rev
Log:
OAK-4068 - adapted IndexDefinitionTest to new default of 10 mins

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.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=1732857&r1=1732856&r2=1732857&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
 Mon Feb 29 11:23:12 2016
@@ -245,6 +245,13 @@ public class LuceneIndexEditorContext {
             getWriter();
         }
 
+        boolean updateSuggestions = shouldUpdateSuggestions();
+        boolean forcedUpdateSuggester = false;
+        if (writer == null && updateSuggestions) {
+            forcedUpdateSuggester = true;
+            getWriter();
+        }
+
         if (writer != null) {
             if (log.isTraceEnabled()) {
                 trackIndexSizeInfo(writer, definition, directory);
@@ -252,8 +259,10 @@ public class LuceneIndexEditorContext {
 
             final long start = PERF_LOGGER.start();
 
-            updateSuggester(writer.getAnalyzer());
-            PERF_LOGGER.end(start, -1, "Completed suggester for directory {}", 
definition);
+            if (updateSuggestions) {
+                updateSuggester(writer.getAnalyzer());
+                PERF_LOGGER.end(start, -1, "Completed suggester for directory 
{}", definition);
+            }
 
             writer.close();
             PERF_LOGGER.end(start, -1, "Closed writer for directory {}", 
definition);
@@ -261,16 +270,21 @@ public class LuceneIndexEditorContext {
             directory.close();
             PERF_LOGGER.end(start, -1, "Closed directory for directory {}", 
definition);
 
-            //OAK-2029 Record the last updated status so
-            //as to make IndexTracker detect changes when index
-            //is stored in file system
-            NodeBuilder status = definitionBuilder.child(":status");
-            status.setProperty("lastUpdated", ISO8601.format(getCalendar()), 
Type.DATE);
-            status.setProperty("indexedNodes",indexedNodes);
+            if (!forcedUpdateSuggester) {
+                //OAK-2029 Record the last updated status so
+                //as to make IndexTracker detect changes when index
+                //is stored in file system
+                NodeBuilder status = definitionBuilder.child(":status");
+                status.setProperty("lastUpdated", 
ISO8601.format(getCalendar()), Type.DATE);
+                status.setProperty("indexedNodes", indexedNodes);
+            }
+
             PERF_LOGGER.end(start, -1, "Overall Closed IndexWriter for 
directory {}", definition);
 
-            textExtractionStats.log(reindex);
-            textExtractionStats.collectStats(extractedTextCache);
+            if (!forcedUpdateSuggester) {
+                textExtractionStats.log(reindex);
+                textExtractionStats.collectStats(extractedTextCache);
+            }
         }
     }
 
@@ -280,10 +294,24 @@ public class LuceneIndexEditorContext {
      * @param analyzer the analyzer used to update the suggester
      */
     private void updateSuggester(Analyzer analyzer) throws IOException {
+        NodeBuilder suggesterStatus = 
definitionBuilder.child(":suggesterStatus");
+        DirectoryReader reader = DirectoryReader.open(writer, false);
+        final OakDirectory suggestDirectory = new 
OakDirectory(definitionBuilder, ":suggest-data", definition, false);
+        try {
+            SuggestHelper.updateSuggester(suggestDirectory, analyzer, reader);
+            suggesterStatus.setProperty("lastUpdated", 
ISO8601.format(getCalendar()), Type.DATE);
+        } catch (Throwable e) {
+            log.warn("could not update suggester", e);
+        } finally {
+            suggestDirectory.close();
+            reader.close();
+        }
+    }
 
-        if (definition.isSuggestEnabled()) {
+    private boolean shouldUpdateSuggestions() {
+        boolean updateSuggestions = false;
 
-            boolean updateSuggester = false;
+        if (definition.isSuggestEnabled()) {
             NodeBuilder suggesterStatus = 
definitionBuilder.child(":suggesterStatus");
             if (suggesterStatus.hasProperty("lastUpdated")) {
                 PropertyState suggesterLastUpdatedValue = 
suggesterStatus.getProperty("lastUpdated");
@@ -291,26 +319,14 @@ public class LuceneIndexEditorContext {
                 int updateFrequency = 
definition.getSuggesterUpdateFrequencyMinutes();
                 suggesterLastUpdatedTime.add(Calendar.MINUTE, updateFrequency);
                 if (getCalendar().after(suggesterLastUpdatedTime)) {
-                    updateSuggester = true;
+                    updateSuggestions = true;
                 }
             } else {
-                updateSuggester = true;
-            }
-
-            if (updateSuggester) {
-                DirectoryReader reader = DirectoryReader.open(writer, false);
-                final OakDirectory suggestDirectory = new 
OakDirectory(definitionBuilder, ":suggest-data", definition, false);
-                try {
-                    SuggestHelper.updateSuggester(suggestDirectory, analyzer, 
reader);
-                    suggesterStatus.setProperty("lastUpdated", 
ISO8601.format(getCalendar()), Type.DATE);
-                } catch (Throwable e) {
-                    log.warn("could not update suggester", e);
-                } finally {
-                    suggestDirectory.close();
-                    reader.close();
-                }
+                updateSuggestions = true;
             }
         }
+
+        return updateSuggestions;
     }
 
     /** Only set for testing */

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1732857&r1=1732856&r2=1732857&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
 Mon Feb 29 11:23:12 2016
@@ -628,7 +628,7 @@ public class IndexDefinitionTest {
         //default config
         NodeBuilder indexRoot = builder;
         IndexDefinition idxDefn = new IndexDefinition(root, 
indexRoot.getNodeState());
-        assertEquals("Default config", 60, 
idxDefn.getSuggesterUpdateFrequencyMinutes());
+        assertEquals("Default config", 10, 
idxDefn.getSuggesterUpdateFrequencyMinutes());
 
         //namespaced config shadows old method
         indexRoot = builder.child("shadowConfigRoot");
@@ -636,7 +636,7 @@ public class IndexDefinitionTest {
         indexRoot.child(LuceneIndexConstants.SUGGESTION_CONFIG);
         idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
         assertEquals("Namespaced config node should shadow global config",
-                60, idxDefn.getSuggesterUpdateFrequencyMinutes());
+                10, idxDefn.getSuggesterUpdateFrequencyMinutes());
 
         //config for backward config
         indexRoot = builder.child("backwardCompatibilityRoot");

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java?rev=1732857&r1=1732856&r2=1732857&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
 Mon Feb 29 11:23:12 2016
@@ -144,4 +144,32 @@ public class SuggestionIntervalTest {
         assertEquals(1, suggestions.size());
         assertEquals("indexedNode", suggestions.iterator().next());
     }
+
+    //OAK-4068
+    @Test
+    public void suggestionUpdateWithoutIndexChange() throws Exception {
+        final String nodeType = "nt:unstructured";
+
+        createSuggestIndex(nodeType);
+        session.save();
+
+        long currTime = clock.getTime();
+        long toTime = currTime + 
TimeUnit.MINUTES.toMillis(IndexDefinition.DEFAULT_SUGGESTER_UPDATE_FREQUENCY_MINUTES);
+
+        root.addNode("indexedNode", nodeType);
+        session.save();
+
+        //wait for suggestions refresh time
+        clock.waitUntil(toTime);
+        clock.getTime();//get one more tick
+
+        //push a change which should not make any change in the index but yet 
should help update suggestions
+        root.addNode("some-non-index-change", "oak:Unstructured");
+        session.save();
+
+        Set<String> suggestions = getSuggestions(nodeType, "indexedn");
+
+        assertEquals(1, suggestions.size());
+        assertEquals("indexedNode", suggestions.iterator().next());
+    }
 }


Reply via email to