Author: catholicon
Date: Fri Jan 22 15:37:08 2016
New Revision: 1726237

URL: http://svn.apache.org/viewvc?rev=1726237&view=rev
Log:
OAK-2477: Move suggester specific config to own configuration node

Suggestion configuration to be read from <indexDef>/suggestion. Although, for 
backward compatibility, setting those properties on <indexDef> would continue 
to work.
Added index config tests for these. Also, adjusted existing text using these 
config to use the new location.

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/LuceneIndexConstants.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SuggestTest.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/LuceneIndexSuggestionTest.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=1726237&r1=1726236&r2=1726237&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 Jan 22 15:37:08 2016
@@ -270,13 +270,13 @@ class IndexDefinition implements Aggrega
         this.analyzer = createAnalyzer();
         this.hasCustomTikaConfig = getTikaConfigNode().exists();
         this.maxExtractLength = determineMaxExtractLength();
-        this.suggesterUpdateFrequencyMinutes = getOptionalValue(defn, 
LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, 60);
+        this.suggesterUpdateFrequencyMinutes = 
evaluateSuggesterUpdateFrequencyMinutes(defn, 60);
         this.scorerProviderName = getOptionalValue(defn, 
LuceneIndexConstants.PROP_SCORER_PROVIDER, null);
         this.reindexCount = determineReindexCount(defn, defnb);
         this.pathFilter = PathFilter.from(new ReadOnlyBuilder(defn));
         this.queryPaths = getQueryPaths(defn);
         this.saveDirListing = getOptionalValue(defn, 
LuceneIndexConstants.SAVE_DIR_LISTING, true);
-        this.suggestAnalyzed = getOptionalValue(defn, 
LuceneIndexConstants.SUGGEST_ANALYZED, false);
+        this.suggestAnalyzed = evaluateSuggestAnalyzed(defn, false);
         this.secureFacets = defn.hasChildNode(FACETS) && 
getOptionalValue(defn.getChildNode(FACETS), PROP_SECURE_FACETS, true);
         this.suggestEnabled = evaluateSuggestionEnabled();
         this.spellcheckEnabled = evaluateSpellcheckEnabled();
@@ -318,6 +318,17 @@ class IndexDefinition implements Aggrega
         return entryCount;
     }
 
+    private int evaluateSuggesterUpdateFrequencyMinutes(NodeState defn, int 
defaultValue) {
+        NodeState suggestionConfig = 
defn.getChildNode(LuceneIndexConstants.SUGGESTION_CONFIG);
+
+        if (!suggestionConfig.exists()) {
+            //handle backward compatibility
+            return getOptionalValue(defn, 
LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, defaultValue);
+        }
+
+        return getOptionalValue(suggestionConfig, 
LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, defaultValue);
+    }
+
     public int getSuggesterUpdateFrequencyMinutes() {
         return suggesterUpdateFrequencyMinutes;
     }
@@ -646,6 +657,17 @@ class IndexDefinition implements Aggrega
         return definition.getString(LuceneIndexConstants.INDEX_PATH);
     }
 
+    private boolean evaluateSuggestAnalyzed(NodeState defn, boolean 
defaultValue) {
+        NodeState suggestionConfig = 
defn.getChildNode(LuceneIndexConstants.SUGGESTION_CONFIG);
+
+        if (!suggestionConfig.exists()) {
+            //handle backward compatibility
+            return getOptionalValue(defn, 
LuceneIndexConstants.SUGGEST_ANALYZED, defaultValue);
+        }
+
+        return getOptionalValue(suggestionConfig, 
LuceneIndexConstants.SUGGEST_ANALYZED, defaultValue);
+    }
+
     public boolean isSuggestAnalyzed() {
         return suggestAnalyzed;
     }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java?rev=1726237&r1=1726236&r2=1726237&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexConstants.java
 Fri Jan 22 15:37:08 2016
@@ -244,6 +244,11 @@ public interface LuceneIndexConstants {
     String PROP_USE_IN_SUGGEST = "useInSuggest";
 
     /**
+     * subnode holding configuration for suggestions
+     */
+    String SUGGESTION_CONFIG = "suggestion";
+
+    /**
      * update frequency of the suggester in minutes
      */
     String SUGGEST_UPDATE_FREQUENCY_MINUTES = "suggestUpdateFrequencyMinutes";

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java?rev=1726237&r1=1726236&r2=1726237&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java
 Fri Jan 22 15:37:08 2016
@@ -85,7 +85,9 @@ public class LuceneOakRepositoryStub ext
                         .setProperty(TYPE_PROPERTY_NAME, TYPE_LUCENE)
                         .setProperty(REINDEX_PROPERTY_NAME, true)
                         .setProperty(LuceneIndexConstants.TEST_MODE, true)
-                        
.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true)
+                        
.setProperty(LuceneIndexConstants.EVALUATE_PATH_RESTRICTION, true);
+                index.child(LuceneIndexConstants.SUGGESTION_CONFIG)
+                        .setProperty(JCR_PRIMARYTYPE, "nt:unstructured", NAME)
                         
.setProperty(LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, 10);
 
                 NodeBuilder rules = 
index.child(LuceneIndexConstants.INDEX_RULES);

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SuggestTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SuggestTest.java?rev=1726237&r1=1726236&r2=1726237&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SuggestTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/SuggestTest.java
 Fri Jan 22 15:37:08 2016
@@ -33,6 +33,9 @@ import org.apache.jackrabbit.core.query.
 import org.junit.After;
 import org.junit.Before;
 
+import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.SUGGESTION_CONFIG;
+import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES;
+
 /**
  * Tests the suggest support.
  */
@@ -43,13 +46,15 @@ public class SuggestTest extends Abstrac
         super.setUp();
 
         // change suggester update frequency
-        
superuser.getNode("/oak:index/luceneGlobal").setProperty("suggestUpdateFrequencyMinutes",
 0);
+        superuser.getNode("/oak:index/luceneGlobal/" + SUGGESTION_CONFIG)
+                .setProperty(SUGGEST_UPDATE_FREQUENCY_MINUTES, 0);
     }
 
     @After
     public void tearDown() throws Exception {
         // reset suggester update frequency
-        
superuser.getNode("/oak:index/luceneGlobal").setProperty("suggestUpdateFrequencyMinutes",
 10);
+        superuser.getNode("/oak:index/luceneGlobal/" + SUGGESTION_CONFIG)
+                .setProperty(SUGGEST_UPDATE_FREQUENCY_MINUTES, 10);
 
         super.tearDown();
     }

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=1726237&r1=1726236&r2=1726237&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
 Fri Jan 22 15:37:08 2016
@@ -621,6 +621,64 @@ public class IndexDefinitionTest {
         
assertTrue(!idxDefn.getApplicableIndexingRule(TestUtil.NT_TEST).getNotNullCheckEnabledProperties().isEmpty());
     }
 
+    //OAK-2477
+    @Test
+    public void testSuggestFrequency() throws Exception {
+        int suggestFreq = 40;
+        //default config
+        NodeBuilder indexRoot = builder;
+        IndexDefinition idxDefn = new IndexDefinition(root, 
indexRoot.getNodeState());
+        assertEquals("Default config", 60, 
idxDefn.getSuggesterUpdateFrequencyMinutes());
+
+        //namespaced config shadows old method
+        indexRoot = builder.child("shadowConfigRoot");
+        
indexRoot.setProperty(LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, 
suggestFreq);
+        indexRoot.child(LuceneIndexConstants.SUGGESTION_CONFIG);
+        idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
+        assertEquals("Namespaced config node should shadow global config",
+                60, idxDefn.getSuggesterUpdateFrequencyMinutes());
+
+        //config for backward config
+        indexRoot = builder.child("backwardCompatibilityRoot");
+        
indexRoot.setProperty(LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, 
suggestFreq);
+        idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
+        assertEquals("Backward compatibility config", suggestFreq, 
idxDefn.getSuggesterUpdateFrequencyMinutes());
+
+        indexRoot = builder.child("indexRoot");
+        indexRoot.child(LuceneIndexConstants.SUGGESTION_CONFIG)
+                
.setProperty(LuceneIndexConstants.SUGGEST_UPDATE_FREQUENCY_MINUTES, 
suggestFreq);
+        idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
+        assertEquals("Set config", suggestFreq, 
idxDefn.getSuggesterUpdateFrequencyMinutes());
+    }
+
+    //OAK-2477
+    @Test
+    public void testSuggestAnalyzed() throws Exception {
+        //default config
+        NodeBuilder indexRoot = builder;
+        IndexDefinition idxDefn = new IndexDefinition(root, 
indexRoot.getNodeState());
+        assertFalse("Default config", idxDefn.isSuggestAnalyzed());
+
+        //namespaced config shadows old method
+        indexRoot = builder.child("shadowConfigRoot");
+        indexRoot.setProperty(LuceneIndexConstants.SUGGEST_ANALYZED, true);
+        indexRoot.child(LuceneIndexConstants.SUGGESTION_CONFIG);
+        idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
+        assertFalse("Namespaced config node should shadow global config", 
idxDefn.isSuggestAnalyzed());
+
+        //config for backward config
+        indexRoot = builder.child("backwardCompatibilityRoot");
+        indexRoot.setProperty(LuceneIndexConstants.SUGGEST_ANALYZED, true);
+        idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
+        assertTrue("Backward compatibility config", 
idxDefn.isSuggestAnalyzed());
+
+        indexRoot = builder.child("indexRoot");
+        indexRoot.child(LuceneIndexConstants.SUGGESTION_CONFIG)
+                .setProperty(LuceneIndexConstants.SUGGEST_ANALYZED, true);
+        idxDefn = new IndexDefinition(root, indexRoot.getNodeState());
+        assertTrue("Set config", idxDefn.isSuggestAnalyzed());
+    }
+
     @Test
     public void testSuggestEnabledOnNamedProp() throws Exception {
         NodeBuilder rules = builder.child(INDEX_RULES);

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java?rev=1726237&r1=1726236&r2=1726237&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexSuggestionTest.java
 Fri Jan 22 15:37:08 2016
@@ -85,7 +85,7 @@ public class LuceneIndexSuggestionTest {
         def.setProperty("name", name);
         def.setProperty(LuceneIndexConstants.COMPAT_MODE, 
IndexFormatVersion.V2.getVersion());
         if (suggestAnalyzed) {
-            def.setProperty("suggestAnalyzed", suggestAnalyzed);
+            
def.addNode(LuceneIndexConstants.SUGGESTION_CONFIG).setProperty("suggestAnalyzed",
 suggestAnalyzed);
         }
 
 


Reply via email to