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);