Author: chetanm
Date: Tue Jul 11 08:45:54 2017
New Revision: 1801572

URL: http://svn.apache.org/viewvc?rev=1801572&view=rev
Log:
OAK-6432 - Make dynamic reference greedy and static to simplify 
LuceneIndexProviderService

Keep PreExtractedTextProvider and NodeAggregator as dynamic to prevent
 LuceneIndexEditor from re-registering which caused whole repository
 to restart

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

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1801572&r1=1801571&r2=1801572&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
 Tue Jul 11 08:45:54 2017
@@ -109,10 +109,9 @@ public class LuceneIndexProviderService
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Reference(
-            cardinality = ReferenceCardinality.OPTIONAL_UNARY,
-            policy = ReferencePolicy.STATIC,
-            policyOption = ReferencePolicyOption.GREEDY
+    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+            policyOption = ReferencePolicyOption.GREEDY,
+            policy = ReferencePolicy.DYNAMIC
     )
     private QueryIndex.NodeAggregator nodeAggregator;
 
@@ -272,9 +271,8 @@ public class LuceneIndexProviderService
     @Reference
     private StatisticsProvider statisticsProvider;
 
-    @Reference(
+    @Reference(policy = ReferencePolicy.DYNAMIC,
             cardinality = ReferenceCardinality.OPTIONAL_UNARY,
-            policy = ReferencePolicy.STATIC,
             policyOption = ReferencePolicyOption.GREEDY
     )
     private volatile PreExtractedTextProvider extractedTextProvider;
@@ -342,10 +340,10 @@ public class LuceneIndexProviderService
         initializeIndexDir(bundleContext, config);
         initializeExtractedTextCache(bundleContext, config);
         IndexTracker tracker = createTracker(bundleContext, config);
-        initializeIndexProvider(tracker);
-
+        indexProvider = new LuceneIndexProvider(tracker, scorerFactory, 
augmentorFactory);
         initializeActiveBlobCollector(whiteboard, config);
         initializeLogging(config);
+        initialize();
 
         
regs.add(bundleContext.registerService(QueryIndexProvider.class.getName(), 
indexProvider, null));
         registerObserver(bundleContext, config);
@@ -433,12 +431,16 @@ public class LuceneIndexProviderService
         return extractedTextCache;
     }
 
-    private void initializeIndexProvider(IndexTracker tracker) {
-        indexProvider = new LuceneIndexProvider(tracker, scorerFactory, 
augmentorFactory);
+    private void initialize(){
+        if(indexProvider == null){
+            return;
+        }
+
         if(nodeAggregator != null){
             log.debug("Using NodeAggregator {}", nodeAggregator.getClass());
-            indexProvider.setAggregator(nodeAggregator);
         }
+
+        indexProvider.setAggregator(nodeAggregator);
     }
 
     private void initializeLogging(Map<String, ?> config) {
@@ -659,8 +661,10 @@ public class LuceneIndexProviderService
                         "always" : "only during reindexing phase";
                 log.info("Registering PreExtractedTextProvider {} with 
extracted text cache. " +
                         "It would be used {}",  provider, usage);
-                extractedTextCache.setExtractedTextProvider(provider);
+            } else {
+                log.info("Unregistering PreExtractedTextProvider with 
extracted text cache");
             }
+            extractedTextCache.setExtractedTextProvider(provider);
         }
     }
 
@@ -740,4 +744,24 @@ public class LuceneIndexProviderService
 
         return timestamp;
     }
+
+    protected void bindNodeAggregator(QueryIndex.NodeAggregator aggregator) {
+        this.nodeAggregator = aggregator;
+        initialize();
+    }
+
+    protected void unbindNodeAggregator(QueryIndex.NodeAggregator aggregator) {
+        this.nodeAggregator = null;
+        initialize();
+    }
+
+    protected void bindExtractedTextProvider(PreExtractedTextProvider 
preExtractedTextProvider){
+        this.extractedTextProvider = preExtractedTextProvider;
+        registerExtractedTextProvider(preExtractedTextProvider);
+    }
+
+    protected void unbindExtractedTextProvider(PreExtractedTextProvider 
preExtractedTextProvider){
+        this.extractedTextProvider = null;
+        registerExtractedTextProvider(null);
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java?rev=1801572&r1=1801571&r2=1801572&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderServiceTest.java
 Tue Jul 11 08:45:54 2017
@@ -41,6 +41,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.AsyncIndexInfoService;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.IndexPathService;
+import org.apache.jackrabbit.oak.plugins.index.fulltext.ExtractedText;
 import 
org.apache.jackrabbit.oak.plugins.index.fulltext.PreExtractedTextProvider;
 import org.apache.jackrabbit.oak.plugins.index.importer.IndexImporterProvider;
 import 
org.apache.jackrabbit.oak.plugins.index.lucene.score.ScorerProviderFactory;
@@ -211,18 +212,16 @@ public class LuceneIndexProviderServiceT
         
assertNull(editorProvider.getExtractedTextCache().getExtractedTextProvider());
         
assertFalse(editorProvider.getExtractedTextCache().isAlwaysUsePreExtractedCache());
 
-        context.registerService(PreExtractedTextProvider.class, 
mock(PreExtractedTextProvider.class));
-        reactivate();
+        //Mock OSGi does not support components
+        //context.registerService(PreExtractedTextProvider.class, new 
DummyProvider());
+        
service.bindExtractedTextProvider(mock(PreExtractedTextProvider.class));
 
-        editorProvider =
-                (LuceneIndexEditorProvider) 
context.getService(IndexEditorProvider.class);
         
assertNotNull(editorProvider.getExtractedTextCache().getExtractedTextProvider());
     }
 
     @Test
     public void preExtractedProviderBindBeforeActivate() throws Exception{
-        context.registerService(PreExtractedTextProvider.class, 
mock(PreExtractedTextProvider.class));
-        MockOsgi.injectServices(service, context.bundleContext());
+        
service.bindExtractedTextProvider(mock(PreExtractedTextProvider.class));
         MockOsgi.activate(service, context.bundleContext(), 
getDefaultConfig());
         LuceneIndexEditorProvider editorProvider =
                 (LuceneIndexEditorProvider) 
context.getService(IndexEditorProvider.class);


Reply via email to