Author: thomasm
Date: Wed Jul 6 09:35:45 2016
New Revision: 1751646
URL: http://svn.apache.org/viewvc?rev=1751646&view=rev
Log:
OAK-4538 IndexDefinition.createCodec class loading deadlock
Modified:
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
Modified:
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1751646&r1=1751645&r2=1751646&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
(original)
+++
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
Wed Jul 6 09:35:45 2016
@@ -1296,7 +1296,14 @@ class IndexDefinition implements Aggrega
String codecName = getOptionalValue(definition,
LuceneIndexConstants.CODEC_NAME, null);
Codec codec = null;
if (codecName != null) {
+ // prevent LUCENE-6482
+ // (also done in LuceneIndexProviderService, just to be save)
+ OakCodec ensureLucene46CodecLoaded = new OakCodec();
+ // to ensure the JVM doesn't optimize away object creation
+ // (probably not really needed; just to be save)
+ log.debug("Lucene46Codec is loaded: {}",
ensureLucene46CodecLoaded);
codec = Codec.forName(codecName);
+ log.debug("Codec is loaded: {}", codecName);
} else if (fullTextEnabled) {
codec = new OakCodec();
}
Modified:
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1751646&r1=1751645&r2=1751646&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
(original)
+++
jackrabbit/oak/branches/1.4/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
Wed Jul 6 09:35:45 2016
@@ -227,6 +227,7 @@ public class LuceneIndexProviderService
configureBooleanClauseLimit(config);
initializeFactoryClassLoaders(getClass().getClassLoader());
+ initializeClasses();
whiteboard = new OsgiWhiteboard(bundleContext);
threadPoolSize =
PropertiesUtil.toInteger(config.get(PROP_THREAD_POOL_SIZE),
PROP_THREAD_POOL_SIZE_DEFAULT);
initializeExtractedTextCache(bundleContext, config);
@@ -445,6 +446,15 @@ public class LuceneIndexProviderService
TokenFilterFactory.reloadTokenFilters(classLoader);
}
+ private void initializeClasses() {
+ // prevent LUCENE-6482
+ // (also done in IndexDefinition, just to be save)
+ OakCodec ensureLucene46CodecLoaded = new OakCodec();
+ // to ensure the JVM doesn't optimize away object creation
+ // (probably not really needed; just to be save)
+ log.debug("Lucene46Codec is loaded: {}", ensureLucene46CodecLoaded);
+ }
+
private void initializeExtractedTextCache(BundleContext bundleContext,
Map<String, ?> config) {
int cacheSizeInMB =
PropertiesUtil.toInteger(config.get(PROP_EXTRACTED_TEXT_CACHE_SIZE),
PROP_EXTRACTED_TEXT_CACHE_SIZE_DEFAULT);