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