From f272b281e87c2683fcf01630f2217260ebbe2c16 Mon Sep 17 00:00:00 2001
From: Vikas Saurabh <vsaurabh@adobe.com>
Date: Thu, 24 Dec 2015 18:33:18 +0530
Subject: [PATCH] OAK-3826: Lucene index augmentation doesn't work in Osgi
 environment

---
 .../index/lucene/IndexAugmentorFactory.java        | 19 ++++++++++------
 .../index/lucene/LuceneIndexProviderService.java   | 26 ----------------------
 .../index/lucene/IndexAugmentorFactoryTest.java    |  4 ----
 .../index/lucene/LuceneIndexAugmentTest.java       |  2 --
 4 files changed, 12 insertions(+), 39 deletions(-)

diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
index 96373d2..e2650bc 100644
--- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
+++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
@@ -51,8 +51,18 @@ public class IndexAugmentorFactory {
     private volatile Map<String, CompositeFulltextQueryTermsProvider> fulltextQueryTermsProviderMap;
 
     public IndexAugmentorFactory(Whiteboard whiteboard) {
-        indexFieldProviderTracker = whiteboard.track(IndexFieldProvider.class);
-        fulltextQueryTermsProviderTracker = whiteboard.track(FulltextQueryTermsProvider.class);
+        indexFieldProviderTracker = whiteboard.track(IndexFieldProvider.class, new Runnable() {
+            @Override
+            public void run() {
+                refreshIndexFieldProviderServices();
+            }
+        });
+        fulltextQueryTermsProviderTracker = whiteboard.track(FulltextQueryTermsProvider.class, new Runnable() {
+            @Override
+            public void run() {
+                refreshFulltextQueryTermsProviderServices();
+            }
+        });
 
         indexFieldProviderMap = Maps.newHashMap();
         fulltextQueryTermsProviderMap = Maps.newHashMap();
@@ -70,11 +80,6 @@ public class IndexAugmentorFactory {
         return (provider != null) ? provider : FulltextQueryTermsProvider.DEFAULT;
     }
 
-    public void refreshServices() {
-        refreshIndexFieldProviderServices();
-        refreshFulltextQueryTermsProviderServices();
-    }
-
     private void refreshIndexFieldProviderServices() {
         ListMultimap<String, IndexFieldProvider> indexFieldProviderListMultimap =
                 LinkedListMultimap.create();
diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
index c29981c..2c0fa56 100644
--- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
+++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
@@ -35,7 +35,6 @@ import javax.management.NotCompliantMBeanException;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -45,7 +44,6 @@ import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.ReferencePolicyOption;
-import org.apache.felix.scr.annotations.References;
 import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
 import org.apache.jackrabbit.oak.cache.CacheStats;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
@@ -53,8 +51,6 @@ import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.aggregate.NodeAggregator;
 import org.apache.jackrabbit.oak.plugins.index.fulltext.PreExtractedTextProvider;
-import org.apache.jackrabbit.oak.plugins.index.lucene.spi.FulltextQueryTermsProvider;
-import org.apache.jackrabbit.oak.plugins.index.lucene.spi.IndexFieldProvider;
 import org.apache.jackrabbit.oak.spi.commit.BackgroundObserver;
 import org.apache.jackrabbit.oak.plugins.index.lucene.score.ScorerProviderFactory;
 import org.apache.jackrabbit.oak.spi.commit.BackgroundObserverMBean;
@@ -77,20 +73,6 @@ import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerM
 
 @SuppressWarnings("UnusedDeclaration")
 @Component(metatype = true, label = "Apache Jackrabbit Oak LuceneIndexProvider")
-@References({
-        @Reference(name = "IndexFieldProvider",
-                policy = ReferencePolicy.DYNAMIC,
-                cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
-                referenceInterface = IndexFieldProvider.class,
-                bind = "indexFieldProviderServiceUpdated",
-                unbind = "indexFieldProviderServiceUpdated"),
-        @Reference(name = "FulltextQueryTermsProvider",
-                policy = ReferencePolicy.DYNAMIC,
-                cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
-                referenceInterface = FulltextQueryTermsProvider.class,
-                bind = "indexFulltextQueryTermsProviderServiceUpdated",
-                unbind = "indexFulltextQueryTermsProviderServiceUpdated")
-})
 public class LuceneIndexProviderService {
     public static final String REPOSITORY_HOME = "repository.home";
 
@@ -490,12 +472,4 @@ public class LuceneIndexProviderService {
         this.extractedTextProvider = null;
         registerExtractedTextProvider(null);
     }
-
-    private void indexFieldProviderServiceUpdated(IndexFieldProvider indexFieldProvider) {
-        augmentorFactory.refreshServices();
-    }
-
-    private void indexFulltextQueryTermsProviderServiceUpdated(FulltextQueryTermsProvider fulltextQueryTermsProvider) {
-        augmentorFactory.refreshServices();
-    }
 }
diff --git a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
index 7e20e9a..a95eea4 100644
--- a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
+++ b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
@@ -68,8 +68,6 @@ public class IndexAugmentorFactoryTest {
         new IdentifiableIndexFiledProvider("2", Sets.newHashSet(typeC));
         new IdentifiableIndexFiledProvider("3", Sets.newHashSet(typeA, typeB));
 
-        indexAugmentorFactory.refreshServices();
-
         validateComposedFields(typeA, "1", "3");
         validateComposedFields(typeC, "2");
         validateComposedFields(typeD);
@@ -89,8 +87,6 @@ public class IndexAugmentorFactoryTest {
         new IdentifiableQueryTermsProvider("3", Sets.newHashSet(typeA, typeB));
         new IdentifiableQueryTermsProvider(null, Sets.newHashSet(typeE));
 
-        indexAugmentorFactory.refreshServices();
-
         validateComposedQueryTerms(typeA, "1", "3");
         validateComposedQueryTerms(typeC, "2");
         validateComposedQueryTerms(typeD);
diff --git a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java
index 741126a..a57b350 100644
--- a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java
+++ b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java
@@ -655,12 +655,10 @@ public class LuceneIndexAugmentTest extends AbstractQueryTest {
 
         void registerIndexFieldProvider(IndexFieldProvider provider) {
             whiteboard.register(IndexFieldProvider.class, provider, null);
-            refreshServices();
         }
 
         void registerQueryTermsProvider(FulltextQueryTermsProvider provider) {
             whiteboard.register(FulltextQueryTermsProvider.class, provider, null);
-            refreshServices();
         }
 
         @Nonnull
-- 
2.6.2

