Author: chetanm
Date: Fri Jul  7 06:03:03 2017
New Revision: 1801121

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

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=1801121&r1=1801120&r2=1801121&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
 Fri Jul  7 06:03:03 2017
@@ -91,6 +91,7 @@ import org.slf4j.LoggerFactory;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.util.Collections.emptyMap;
 import static org.apache.commons.io.FileUtils.ONE_MB;
+import static 
org.apache.jackrabbit.oak.spi.blob.osgi.SplitBlobStoreService.ONLY_STANDALONE_TARGET;
 import static 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
 import static 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.scheduleWithFixedDelay;
 
@@ -106,9 +107,10 @@ public class LuceneIndexProviderService
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
-            policyOption = ReferencePolicyOption.GREEDY,
-            policy = ReferencePolicy.DYNAMIC
+    @Reference(
+            cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+            policy = ReferencePolicy.STATIC,
+            policyOption = ReferencePolicyOption.GREEDY
     )
     private QueryIndex.NodeAggregator nodeAggregator;
 
@@ -268,8 +270,9 @@ public class LuceneIndexProviderService
     @Reference
     private StatisticsProvider statisticsProvider;
 
-    @Reference(policy = ReferencePolicy.DYNAMIC,
+    @Reference(
             cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+            policy = ReferencePolicy.STATIC,
             policyOption = ReferencePolicyOption.GREEDY
     )
     private volatile PreExtractedTextProvider extractedTextProvider;
@@ -286,9 +289,11 @@ public class LuceneIndexProviderService
     @Reference
     private AsyncIndexInfoService asyncIndexInfoService;
 
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
-        policyOption = ReferencePolicyOption.GREEDY,
-        policy = ReferencePolicy.DYNAMIC
+    @Reference(
+            cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+            policy = ReferencePolicy.STATIC,
+            policyOption = ReferencePolicyOption.GREEDY,
+            target = ONLY_STANDALONE_TARGET
     )
     private GarbageCollectableBlobStore blobStore;
 
@@ -335,10 +340,10 @@ public class LuceneIndexProviderService
         initializeIndexDir(bundleContext, config);
         initializeExtractedTextCache(bundleContext, config);
         IndexTracker tracker = createTracker(bundleContext, config);
-        indexProvider = new LuceneIndexProvider(tracker, scorerFactory, 
augmentorFactory);
+        initializeIndexProvider(tracker);
+
         initializeActiveBlobCollector(whiteboard, config);
         initializeLogging(config);
-        initialize();
 
         
regs.add(bundleContext.registerService(QueryIndexProvider.class.getName(), 
indexProvider, null));
         registerObserver(bundleContext, config);
@@ -425,16 +430,12 @@ public class LuceneIndexProviderService
         return extractedTextCache;
     }
 
-    private void initialize(){
-        if(indexProvider == null){
-            return;
-        }
-
+    private void initializeIndexProvider(IndexTracker tracker) {
+        indexProvider = new LuceneIndexProvider(tracker, scorerFactory, 
augmentorFactory);
         if(nodeAggregator != null){
             log.debug("Using NodeAggregator {}", nodeAggregator.getClass());
+            indexProvider.setAggregator(nodeAggregator);
         }
-
-        indexProvider.setAggregator(nodeAggregator);
     }
 
     private void initializeLogging(Map<String, ?> config) {
@@ -655,10 +656,8 @@ public class LuceneIndexProviderService
                         "always" : "only during reindexing phase";
                 log.info("Registering PreExtractedTextProvider {} with 
extracted text cache. " +
                         "It would be used {}",  provider, usage);
-            } else {
-                log.info("Unregistering PreExtractedTextProvider with 
extracted text cache");
+                extractedTextCache.setExtractedTextProvider(provider);
             }
-            extractedTextCache.setExtractedTextProvider(provider);
         }
     }
 
@@ -692,17 +691,6 @@ public class LuceneIndexProviderService
         oakRegs.add(whiteboard.register(GCMonitor.class, gcMonitor, 
emptyMap()));
     }
 
-    private void registerBlobStore(GarbageCollectableBlobStore blobStore) {
-        if (editorProvider != null){
-            if (blobStore != null){
-                log.info("Registering blobStore {} with editorProvider. ", 
blobStore);
-            } else {
-                log.info("Unregistering blobStore");
-            }
-            editorProvider.setBlobStore(blobStore);
-        }
-    }
-
     private void registerIndexInfoProvider(BundleContext bundleContext) {
         IndexInfoProvider infoProvider = new 
LuceneIndexInfoProvider(nodeStore, asyncIndexInfoService, getIndexCheckDir());
         
regs.add(bundleContext.registerService(IndexInfoProvider.class.getName(), 
infoProvider, null));
@@ -744,34 +732,4 @@ 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);
-    }
-
-    protected void bindBlobStore(GarbageCollectableBlobStore blobStore) {
-        this.blobStore = blobStore;
-        registerBlobStore(blobStore);
-    }
-
-    protected void unbindBlobStore(GarbageCollectableBlobStore blobStore) {
-        this.blobStore = null;
-        registerBlobStore(blobStore);
-    }
 }

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=1801121&r1=1801120&r2=1801121&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
 Fri Jul  7 06:03:03 2017
@@ -27,13 +27,11 @@ import static org.junit.Assert.assertTru
 import static org.mockito.Mockito.mock;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
-import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
 import org.apache.jackrabbit.oak.api.jmx.CheckpointMBean;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.CachingFileDataStore;
@@ -43,10 +41,10 @@ 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.lucene.score.ScorerProviderFactory;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.commit.BackgroundObserver;
 import org.apache.jackrabbit.oak.spi.commit.Observer;
 import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
@@ -211,16 +209,18 @@ public class LuceneIndexProviderServiceT
         
assertNull(editorProvider.getExtractedTextCache().getExtractedTextProvider());
         
assertFalse(editorProvider.getExtractedTextCache().isAlwaysUsePreExtractedCache());
 
-        //Mock OSGi does not support components
-        //context.registerService(PreExtractedTextProvider.class, new 
DummyProvider());
-        service.bindExtractedTextProvider(new DummyProvider());
+        context.registerService(PreExtractedTextProvider.class, 
mock(PreExtractedTextProvider.class));
+        reactivate();
 
+        editorProvider =
+                (LuceneIndexEditorProvider) 
context.getService(IndexEditorProvider.class);
         
assertNotNull(editorProvider.getExtractedTextCache().getExtractedTextProvider());
     }
 
     @Test
     public void preExtractedProviderBindBeforeActivate() throws Exception{
-        service.bindExtractedTextProvider(new DummyProvider());
+        context.registerService(PreExtractedTextProvider.class, 
mock(PreExtractedTextProvider.class));
+        MockOsgi.injectServices(service, context.bundleContext());
         MockOsgi.activate(service, context.bundleContext(), 
getDefaultConfig());
         LuceneIndexEditorProvider editorProvider =
                 (LuceneIndexEditorProvider) 
context.getService(IndexEditorProvider.class);
@@ -268,22 +268,25 @@ public class LuceneIndexProviderServiceT
             .createCachingFDS(folder.newFolder().getAbsolutePath(),
                 folder.newFolder().getAbsolutePath());
 
-        service.bindBlobStore(new DataStoreBlobStore(ds));
+        context.registerService(GarbageCollectableBlobStore.class, new 
DataStoreBlobStore(ds));
+        reactivate();
 
+        editorProvider =
+                (LuceneIndexEditorProvider) 
context.getService(IndexEditorProvider.class);
         assertNotNull(editorProvider.getBlobStore());
     }
 
+    private void reactivate() {
+        MockOsgi.deactivate(service, context.bundleContext());
+        service = new LuceneIndexProviderService();
+
+        MockOsgi.injectServices(service, context.bundleContext());
+        MockOsgi.activate(service, context.bundleContext(), 
getDefaultConfig());
+    }
+
     private Map<String,Object> getDefaultConfig(){
         Map<String,Object> config = new HashMap<String, Object>();
         config.put("localIndexDir", folder.getRoot().getAbsolutePath());
         return config;
     }
-
-    private static class DummyProvider implements PreExtractedTextProvider {
-
-        @Override
-        public ExtractedText getText(String propertyPath, Blob blob) throws 
IOException {
-            return null;
-        }
-    }
 }


Reply via email to