You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2014/09/15 02:49:28 UTC

svn commit: r1624928 - in /lucene/dev/trunk/solr: core/src/java/org/apache/solr/core/ core/src/test/org/apache/solr/core/ test-framework/src/java/org/apache/solr/core/

Author: uschindler
Date: Mon Sep 15 00:49:27 2014
New Revision: 1624928

URL: http://svn.apache.org/r1624928
Log:
SOLR-6518: CachingDirectoryFactory subclasses must init directory with NoLockFactory, because the real lock factory gets set later via injectLockFactory

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NIOFSDirectoryFactory.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NRTCachingDirectoryFactory.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java
    lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockFSDirectoryFactory.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -38,6 +38,7 @@ import org.apache.lucene.store.NoLockFac
 import org.apache.lucene.store.RateLimitedDirectoryWrapper;
 import org.apache.lucene.store.SimpleFSLockFactory;
 import org.apache.lucene.store.SingleInstanceLockFactory;
+import org.apache.lucene.util.IOUtils;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.util.NamedList;
@@ -347,18 +348,25 @@ public abstract class CachingDirectoryFa
         directory = cacheValue.directory;
       }
       
-      if (directory == null) { 
+      if (directory == null) {
         directory = create(fullPath, dirContext);
-        
-        directory = rateLimit(directory);
-        
-        CacheValue newCacheValue = new CacheValue(fullPath, directory);
-        
-        injectLockFactory(directory, fullPath, rawLockType);
-        
-        byDirectoryCache.put(directory, newCacheValue);
-        byPathCache.put(fullPath, newCacheValue);
-        log.info("return new directory for " + fullPath);
+        boolean success = false;
+        try {
+          directory = rateLimit(directory);
+          
+          CacheValue newCacheValue = new CacheValue(fullPath, directory);
+          
+          injectLockFactory(directory, fullPath, rawLockType);
+          
+          byDirectoryCache.put(directory, newCacheValue);
+          byPathCache.put(fullPath, newCacheValue);
+          log.info("return new directory for " + fullPath);
+          success = true;
+        } finally {
+          if (!success) {
+            IOUtils.closeWhileHandlingException(directory);
+          }
+        }
       } else {
         cacheValue.refCnt++;
         log.debug("Reusing cached directory: {}", cacheValue);

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/MMapDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -20,6 +20,7 @@ package org.apache.solr.core;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.LockFactory; // javadocs
 import org.apache.lucene.store.MMapDirectory;
+import org.apache.lucene.store.NoLockFactory;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.DirectoryFactory.DirContext;
@@ -59,7 +60,8 @@ public class MMapDirectoryFactory extend
 
   @Override
   protected Directory create(String path, DirContext dirContext) throws IOException {
-    MMapDirectory mapDirectory = new MMapDirectory(new File(path).toPath(), null, maxChunk);
+    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+    MMapDirectory mapDirectory = new MMapDirectory(new File(path).toPath(), NoLockFactory.getNoLockFactory(), maxChunk);
     try {
       mapDirectory.setUseUnmap(unmapHack);
     } catch (Exception e) {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NIOFSDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NIOFSDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NIOFSDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NIOFSDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -21,6 +21,7 @@ import java.io.IOException;
 
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.NIOFSDirectory;
+import org.apache.lucene.store.NoLockFactory;
 
 
 /**
@@ -31,7 +32,8 @@ public class NIOFSDirectoryFactory exten
 
   @Override
   protected Directory create(String path, DirContext dirContext) throws IOException {
-    return new NIOFSDirectory(new File(path).toPath());
+    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+    return new NIOFSDirectory(new File(path).toPath(), NoLockFactory.getNoLockFactory());
   }
   
   @Override

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NRTCachingDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NRTCachingDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NRTCachingDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/NRTCachingDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.NRTCachingDirectory;
+import org.apache.lucene.store.NoLockFactory;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 
@@ -51,7 +52,8 @@ public class NRTCachingDirectoryFactory 
 
   @Override
   protected Directory create(String path, DirContext dirContext) throws IOException {
-    return new NRTCachingDirectory(FSDirectory.open(new File(path).toPath()), maxMergeSizeMB, maxCachedMB);
+    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+    return new NRTCachingDirectory(FSDirectory.open(new File(path).toPath(), NoLockFactory.getNoLockFactory()), maxMergeSizeMB, maxCachedMB);
   }
   
   @Override

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.IOException;
 
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.NoLockFactory;
 import org.apache.lucene.store.SimpleFSDirectory;
 
 
@@ -31,7 +32,8 @@ public class SimpleFSDirectoryFactory ex
 
   @Override
   protected Directory create(String path, DirContext dirContext) throws IOException {
-    return new SimpleFSDirectory(new File(path).toPath());
+    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+    return new SimpleFSDirectory(new File(path).toPath(), NoLockFactory.getNoLockFactory());
   }
 
   @Override

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -24,6 +24,7 @@ import org.apache.lucene.store.Directory
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.NRTCachingDirectory;
+import org.apache.lucene.store.NoLockFactory;
 import org.apache.lucene.store.RateLimitedDirectoryWrapper;
 import org.apache.solr.core.CachingDirectoryFactory.CacheValue;
 
@@ -39,7 +40,8 @@ public class StandardDirectoryFactory ex
 
   @Override
   protected Directory create(String path, DirContext dirContext) throws IOException {
-    return FSDirectory.open(new File(path).toPath());
+    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+    return FSDirectory.open(new File(path).toPath(), NoLockFactory.getNoLockFactory());
   }
   
   @Override

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java Mon Sep 15 00:49:27 2014
@@ -22,6 +22,7 @@ import java.io.IOException;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.NoLockFactory;
 import org.apache.solr.SolrTestCaseJ4;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -58,7 +59,8 @@ public class AlternateDirectoryTest exte
     public Directory create(String path, DirContext dirContext) throws IOException {
       openCalled = true;
 
-      return dir = newFSDirectory(new File(path).toPath());
+      // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+      return dir = newFSDirectory(new File(path).toPath(), NoLockFactory.getNoLockFactory());
     }
 
   }

Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockFSDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockFSDirectoryFactory.java?rev=1624928&r1=1624927&r2=1624928&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockFSDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/core/MockFSDirectoryFactory.java Mon Sep 15 00:49:27 2014
@@ -24,6 +24,7 @@ import java.nio.file.Path;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.store.NRTCachingDirectory;
+import org.apache.lucene.store.NoLockFactory;
 import org.apache.lucene.store.RateLimitedDirectoryWrapper;
 import org.apache.lucene.store.TrackingDirectoryWrapper;
 import org.apache.lucene.util.LuceneTestCase;
@@ -35,7 +36,8 @@ public class MockFSDirectoryFactory exte
 
   @Override
   public Directory create(String path, DirContext dirContext) throws IOException {
-    Directory dir = LuceneTestCase.newFSDirectory(new File(path).toPath());
+    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
+    Directory dir = LuceneTestCase.newFSDirectory(new File(path).toPath(), NoLockFactory.getNoLockFactory());
     // we can't currently do this check because of how
     // Solr has to reboot a new Directory sometimes when replicating
     // or rolling back - the old directory is closed and the following