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