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 th...@apache.org on 2016/07/06 09:34:41 UTC

svn commit: r1751644 - in /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene: IndexDefinition.java LuceneIndexProviderService.java

Author: thomasm
Date: Wed Jul  6 09:34:41 2016
New Revision: 1751644

URL: http://svn.apache.org/viewvc?rev=1751644&view=rev
Log:
OAK-4538 IndexDefinition.createCodec class loading deadlock

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1751644&r1=1751643&r2=1751644&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Wed Jul  6 09:34:41 2016
@@ -1323,7 +1323,14 @@ public final class IndexDefinition imple
         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/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=1751644&r1=1751643&r2=1751644&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 Wed Jul  6 09:34:41 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);