You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ca...@apache.org on 2016/01/14 17:42:44 UTC
svn commit: r1724653 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: catholicon
Date: Thu Jan 14 16:42:44 2016
New Revision: 1724653
URL: http://svn.apache.org/viewvc?rev=1724653&view=rev
Log:
OAK-3826: Lucene index augmentation doesn't work in Osgi environment
OAK-3815 was marked won't fix, so we're back to using bind/unbind in IndexAugmentFactory.
Removed tracker usage altogether.
Adjusted IndexAugmentorFactoryTest to use MockOsgi. Unfortunately, I couldn't find a way to unbind references - so, that's not covered.
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/package-info.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java?rev=1724653&r1=1724652&r2=1724653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactory.java Thu Jan 14 16:42:44 2016
@@ -16,15 +16,23 @@
*/
package org.apache.jackrabbit.oak.plugins.index.lucene;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+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.References;
+import org.apache.felix.scr.annotations.Service;
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.state.NodeState;
-import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
-import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.util.PerfLogger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Field;
@@ -39,23 +47,40 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+@SuppressWarnings("UnusedDeclaration")
+@Component
+@Service(value = IndexAugmentorFactory.class)
+@References({
+ @Reference(name = "IndexFieldProvider",
+ policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+ referenceInterface = IndexFieldProvider.class),
+ @Reference(name = "FulltextQueryTermsProvider",
+ policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+ referenceInterface = FulltextQueryTermsProvider.class)
+})
public class IndexAugmentorFactory {
private static final PerfLogger PERFLOG = new PerfLogger(
LoggerFactory.getLogger(IndexAugmentorFactory.class.getName() + ".perf"));
- private final Tracker<IndexFieldProvider> indexFieldProviderTracker;
- private final Tracker<FulltextQueryTermsProvider> fulltextQueryTermsProviderTracker;
+ private final Set<IndexFieldProvider> indexFieldProviders;
+ private final Set<FulltextQueryTermsProvider> fulltextQueryTermsProviders;
private volatile Map<String, CompositeIndexFieldProvider> indexFieldProviderMap;
private volatile Map<String, CompositeFulltextQueryTermsProvider> fulltextQueryTermsProviderMap;
- public IndexAugmentorFactory(Whiteboard whiteboard) {
- indexFieldProviderTracker = whiteboard.track(IndexFieldProvider.class);
- fulltextQueryTermsProviderTracker = whiteboard.track(FulltextQueryTermsProvider.class);
+ public IndexAugmentorFactory() {
+ indexFieldProviders = Sets.newIdentityHashSet();
+ fulltextQueryTermsProviders = Sets.newIdentityHashSet();
- indexFieldProviderMap = Maps.newHashMap();
- fulltextQueryTermsProviderMap = Maps.newHashMap();
+ resetState();
+ }
+
+ @Deactivate
+ private synchronized void deactivate() {
+ resetState();
}
@Nonnull
@@ -70,51 +95,81 @@ public class IndexAugmentorFactory {
return (provider != null) ? provider : FulltextQueryTermsProvider.DEFAULT;
}
- public void refreshServices() {
- refreshIndexFieldProviderServices();
- refreshFulltextQueryTermsProviderServices();
+ synchronized void bindIndexFieldProvider(IndexFieldProvider indexFieldProvider) {
+ indexFieldProviders.add(indexFieldProvider);
+ refreshIndexFieldProviders();
+ }
+
+ synchronized void unbindIndexFieldProvider(IndexFieldProvider indexFieldProvider) {
+ indexFieldProviders.remove(indexFieldProvider);
+ refreshIndexFieldProviders();
}
- private void refreshIndexFieldProviderServices() {
- ListMultimap<String, IndexFieldProvider> indexFieldProviderListMultimap =
+ synchronized void bindFulltextQueryTermsProvider(FulltextQueryTermsProvider fulltextQueryTermsProvider) {
+ fulltextQueryTermsProviders.add(fulltextQueryTermsProvider);
+ refreshFulltextQueryTermsProviders();
+ }
+
+ synchronized void unbindFulltextQueryTermsProvider(FulltextQueryTermsProvider fulltextQueryTermsProvider) {
+ fulltextQueryTermsProviders.remove(fulltextQueryTermsProvider);
+ refreshFulltextQueryTermsProviders();
+ }
+
+ private void refreshIndexFieldProviders() {
+ ListMultimap<String, IndexFieldProvider> providerMultimap =
LinkedListMultimap.create();
- for (IndexFieldProvider provider : indexFieldProviderTracker.getServices()) {
+ for (IndexFieldProvider provider : indexFieldProviders) {
Set<String> supportedNodeTypes = provider.getSupportedTypes();
for (String nodeType : supportedNodeTypes) {
- indexFieldProviderListMultimap.put(nodeType, provider);
+ providerMultimap.put(nodeType, provider);
}
}
- Map<String, CompositeIndexFieldProvider> tempMap = Maps.newHashMap();
- for (String nodeType : indexFieldProviderListMultimap.keySet()) {
- List<IndexFieldProvider> providers = indexFieldProviderListMultimap.get(nodeType);
+ Map<String, CompositeIndexFieldProvider> providerMap = Maps.newHashMap();
+ for (String nodeType : providerMultimap.keySet()) {
+ List<IndexFieldProvider> providers = providerMultimap.get(nodeType);
CompositeIndexFieldProvider compositeIndexFieldProvider =
new CompositeIndexFieldProvider(nodeType, providers);
- tempMap.put(nodeType, compositeIndexFieldProvider);
+ providerMap.put(nodeType, compositeIndexFieldProvider);
}
- indexFieldProviderMap = tempMap;
+ indexFieldProviderMap = ImmutableMap.copyOf(providerMap);
}
- private void refreshFulltextQueryTermsProviderServices() {
- ListMultimap<String, FulltextQueryTermsProvider> fulltextQueryTermsProviderLinkedListMultimap =
+ private void refreshFulltextQueryTermsProviders() {
+ ListMultimap<String, FulltextQueryTermsProvider> providerMultimap =
LinkedListMultimap.create();
- for (FulltextQueryTermsProvider provider : fulltextQueryTermsProviderTracker.getServices()) {
+ for (FulltextQueryTermsProvider provider : fulltextQueryTermsProviders) {
Set<String> supportedNodeTypes = provider.getSupportedTypes();
for (String nodeType : supportedNodeTypes) {
- fulltextQueryTermsProviderLinkedListMultimap.put(nodeType, provider);
+ providerMultimap.put(nodeType, provider);
}
}
- Map<String, CompositeFulltextQueryTermsProvider> tempMap = Maps.newHashMap();
- for (String nodeType : fulltextQueryTermsProviderLinkedListMultimap.keySet()) {
- List<FulltextQueryTermsProvider> providers = fulltextQueryTermsProviderLinkedListMultimap.get(nodeType);
+ Map<String, CompositeFulltextQueryTermsProvider> providerMap = Maps.newHashMap();
+ for (String nodeType : providerMultimap.keySet()) {
+ List<FulltextQueryTermsProvider> providers = providerMultimap.get(nodeType);
CompositeFulltextQueryTermsProvider compositeFulltextQueryTermsProvider =
new CompositeFulltextQueryTermsProvider(nodeType, providers);
- tempMap.put(nodeType, compositeFulltextQueryTermsProvider);
+ providerMap.put(nodeType, compositeFulltextQueryTermsProvider);
}
- fulltextQueryTermsProviderMap = tempMap;
+ fulltextQueryTermsProviderMap = ImmutableMap.copyOf(providerMap);
+ }
+
+ private void resetState() {
+ indexFieldProviders.clear();
+ fulltextQueryTermsProviders.clear();
+
+ indexFieldProviderMap = Collections.EMPTY_MAP;
+ fulltextQueryTermsProviderMap = Collections.EMPTY_MAP;
+ }
+
+ boolean isStateEmpty() {
+ return indexFieldProviders.size() == 0 &&
+ indexFieldProviderMap.size() == 0 &&
+ fulltextQueryTermsProviders.size() == 0 &&
+ fulltextQueryTermsProviderMap.size() == 0;
}
class CompositeIndexFieldProvider implements IndexFieldProvider {
@@ -124,7 +179,7 @@ public class IndexAugmentorFactory {
CompositeIndexFieldProvider(String nodeType, List<IndexFieldProvider> providers) {
this.nodeType = nodeType;
- this.providers = providers;
+ this.providers = ImmutableList.copyOf(providers);
}
@Nonnull
@@ -158,7 +213,7 @@ public class IndexAugmentorFactory {
CompositeFulltextQueryTermsProvider(String nodeType, List<FulltextQueryTermsProvider> providers) {
this.nodeType = nodeType;
- this.providers = providers;
+ this.providers = ImmutableList.copyOf(providers);
}
@Override
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=1724653&r1=1724652&r2=1724653&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 Thu Jan 14 16:42:44 2016
@@ -45,7 +45,6 @@ import org.apache.felix.scr.annotations.
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 +52,6 @@ import org.apache.jackrabbit.oak.osgi.Os
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 +74,6 @@ import static org.apache.jackrabbit.oak.
@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";
@@ -194,6 +177,7 @@ public class LuceneIndexProviderService
@Reference
ScorerProviderFactory scorerFactory;
+ @Reference
private IndexAugmentorFactory augmentorFactory;
@Reference(policy = ReferencePolicy.DYNAMIC,
@@ -226,7 +210,6 @@ public class LuceneIndexProviderService
whiteboard = new OsgiWhiteboard(bundleContext);
threadPoolSize = PropertiesUtil.toInteger(config.get(PROP_THREAD_POOL_SIZE), PROP_THREAD_POOL_SIZE_DEFAULT);
initializeExtractedTextCache(bundleContext, config);
- augmentorFactory = new IndexAugmentorFactory(whiteboard);
indexProvider = new LuceneIndexProvider(createTracker(bundleContext, config), scorerFactory, augmentorFactory);
initializeLogging(config);
initialize();
@@ -490,12 +473,4 @@ public class LuceneIndexProviderService
this.extractedTextProvider = null;
registerExtractedTextProvider(null);
}
-
- private void indexFieldProviderServiceUpdated(IndexFieldProvider indexFieldProvider) {
- augmentorFactory.refreshServices();
- }
-
- private void indexFulltextQueryTermsProviderServiceUpdated(FulltextQueryTermsProvider fulltextQueryTermsProvider) {
- augmentorFactory.refreshServices();
- }
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/package-info.java?rev=1724653&r1=1724652&r2=1724653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/package-info.java Thu Jan 14 16:42:44 2016
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("3.1.0")
+@Version("4.0.0")
@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak.plugins.index.lucene;
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java?rev=1724653&r1=1724652&r2=1724653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexAugmentorFactoryTest.java Thu Jan 14 16:42:44 2016
@@ -25,8 +25,6 @@ import com.google.common.collect.Sets;
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.state.NodeState;
-import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
-import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
@@ -35,26 +33,27 @@ import org.apache.lucene.search.BooleanC
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
+import org.apache.sling.testing.mock.osgi.MockOsgi;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.hamcrest.CoreMatchers;
-import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import javax.annotation.Nonnull;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
import static org.apache.lucene.search.BooleanClause.Occur.SHOULD;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
public class IndexAugmentorFactoryTest {
- private IndexAugmentorFactory indexAugmentorFactory;
- private Whiteboard whiteboard = new DefaultWhiteboard();
+ private IndexAugmentorFactory indexAugmentorFactory = new IndexAugmentorFactory();
- @Before
- public void initializeFactory() {
- indexAugmentorFactory = new IndexAugmentorFactory(whiteboard);
- }
+ @Rule
+ public final OsgiContext context = new OsgiContext();
@Test
public void compositeIndexProvider()
@@ -64,15 +63,23 @@ public class IndexAugmentorFactoryTest {
final String typeC = "type:C";
final String typeD = "type:D";
+ context.registerInjectActivateService(indexAugmentorFactory);
+
new IdentifiableIndexFiledProvider("1", Sets.newHashSet(typeA, typeB));
new IdentifiableIndexFiledProvider("2", Sets.newHashSet(typeC));
new IdentifiableIndexFiledProvider("3", Sets.newHashSet(typeA, typeB));
- indexAugmentorFactory.refreshServices();
+ //register an instance which would be unregistered before validation
+ IndexFieldProvider unreg = new IdentifiableIndexFiledProvider("4", Sets.newHashSet(typeD));
+ indexAugmentorFactory.unbindIndexFieldProvider(unreg);
validateComposedFields(typeA, "1", "3");
validateComposedFields(typeC, "2");
validateComposedFields(typeD);
+
+ MockOsgi.deactivate(indexAugmentorFactory, context.bundleContext(), Collections.EMPTY_MAP);
+
+ validateDeactivatedService();
}
@Test
@@ -84,21 +91,35 @@ public class IndexAugmentorFactoryTest {
final String typeD = "type:D";
final String typeE = "type:E";
+ context.registerInjectActivateService(indexAugmentorFactory);
+
new IdentifiableQueryTermsProvider("1", Sets.newHashSet(typeA, typeB));
new IdentifiableQueryTermsProvider("2", Sets.newHashSet(typeC));
new IdentifiableQueryTermsProvider("3", Sets.newHashSet(typeA, typeB));
new IdentifiableQueryTermsProvider(null, Sets.newHashSet(typeE));
- indexAugmentorFactory.refreshServices();
+ //register an instance which would be unregistered before validation
+ FulltextQueryTermsProvider unreg = new IdentifiableQueryTermsProvider("4", Sets.newHashSet(typeD));
+ indexAugmentorFactory.unbindFulltextQueryTermsProvider(unreg);
validateComposedQueryTerms(typeA, "1", "3");
validateComposedQueryTerms(typeC, "2");
validateComposedQueryTerms(typeD);
validateComposedQueryTerms(typeE);
+
+ MockOsgi.deactivate(indexAugmentorFactory, context.bundleContext(), Collections.EMPTY_MAP);
+
+ validateDeactivatedService();
}
void validateComposedFields(String type, String ... expected) {
IndexFieldProvider compositeIndexProvider = indexAugmentorFactory.getIndexFieldProvider(type);
+
+ if (expected.length > 0) {
+ assertTrue("Composed index field provider doesn't declare correct supported type",
+ compositeIndexProvider.getSupportedTypes().contains(type));
+ }
+
Iterable<Field> fields = compositeIndexProvider.getAugmentedFields(null, null, null);
Set<String> ids = Sets.newHashSet();
for (Field f : fields) {
@@ -111,6 +132,12 @@ public class IndexAugmentorFactoryTest {
void validateComposedQueryTerms(String type, String ... expected) {
FulltextQueryTermsProvider compositeQueryTermsProvider = indexAugmentorFactory.getFulltextQueryTermsProvider(type);
+
+ if (expected.length > 0) {
+ assertTrue("Composed query terms provider doesn't declare correct supported type",
+ compositeQueryTermsProvider.getSupportedTypes().contains(type));
+ }
+
Query q = compositeQueryTermsProvider.getQueryTerm(null, null, null);
if (q == null) {
assertEquals("No query terms generated for " + type + ".", 0, expected.length);
@@ -136,6 +163,10 @@ public class IndexAugmentorFactoryTest {
}
}
+ private void validateDeactivatedService() {
+ assertTrue("All data structures must be empty after deactivate", indexAugmentorFactory.isStateEmpty());
+ }
+
class IdentifiableIndexFiledProvider implements IndexFieldProvider {
private final Field id;
private final Set<String> nodeTypes;
@@ -143,8 +174,7 @@ public class IndexAugmentorFactoryTest {
IdentifiableIndexFiledProvider(String id, Set<String> nodeTypes) {
this.id = new StringField("id", id, Field.Store.NO);
this.nodeTypes = nodeTypes;
-
- whiteboard.register(IndexFieldProvider.class, this, null);
+ context.registerService(IndexFieldProvider.class, this);
}
@Nonnull
@@ -167,8 +197,7 @@ public class IndexAugmentorFactoryTest {
IdentifiableQueryTermsProvider(String id, Set<String> nodeTypes) {
this.id = (id == null)?null:new TermQuery(new Term(id, "1"));
this.nodeTypes = nodeTypes;
-
- whiteboard.register(FulltextQueryTermsProvider.class, this, null);
+ context.registerService(FulltextQueryTermsProvider.class, this);
}
@Override
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java?rev=1724653&r1=1724652&r2=1724653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAugmentTest.java Thu Jan 14 16:42:44 2016
@@ -36,8 +36,6 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
-import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
@@ -319,6 +317,22 @@ public class LuceneIndexAugmentTest exte
}
};
checkSimpleBehavior(rootTree, testIndex++);
+
+ //setup composite query term provider with one returning null query
+ factory.registerQueryTermsProvider(new FulltextQueryTermsProvider() {
+ @Override
+ public Query getQueryTerm(String text, Analyzer analyzer, NodeState indexDefinition) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public Set<String> getSupportedTypes() {
+ return Collections.singleton(TestUtil.NT_TEST);
+ }
+ });
+ factory.useSuperBehavior = true;
+ checkSimpleBehavior(rootTree, testIndex++);
}
//OAK-3576
@@ -642,25 +656,13 @@ public class LuceneIndexAugmentTest exte
IndexFieldProvider indexFieldProvider = null;
FulltextQueryTermsProvider fulltextQueryTermsProvider = null;
private boolean useSuperBehavior = false;
- private final Whiteboard whiteboard;
-
- SimpleIndexAugmentorFactory() {
- this(new DefaultWhiteboard());
- }
-
- SimpleIndexAugmentorFactory(Whiteboard whiteboard) {
- super(whiteboard);
- this.whiteboard = whiteboard;
- }
void registerIndexFieldProvider(IndexFieldProvider provider) {
- whiteboard.register(IndexFieldProvider.class, provider, null);
- refreshServices();
+ bindIndexFieldProvider(provider);
}
void registerQueryTermsProvider(FulltextQueryTermsProvider provider) {
- whiteboard.register(FulltextQueryTermsProvider.class, provider, null);
- refreshServices();
+ bindFulltextQueryTermsProvider(provider);
}
@Nonnull