diff --git a/solr/core/src/java/org/apache/solr/core/ByteBuffersDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/ByteBuffersDirectoryFactory.java
index aeed5d589f47..aab134a266ef 100644
--- a/solr/core/src/java/org/apache/solr/core/ByteBuffersDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/ByteBuffersDirectoryFactory.java
@@ -20,6 +20,7 @@
import org.apache.lucene.store.ByteBuffersDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockFactory;
+import org.apache.lucene.store.NoLockFactory;
import org.apache.lucene.store.SingleInstanceLockFactory;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -29,13 +30,19 @@ public class ByteBuffersDirectoryFactory extends EphemeralDirectoryFactory {
@Override
protected LockFactory createLockFactory(String rawLockType) throws IOException {
+ if (rawLockType != null
+ && DirectoryFactory.LOCK_TYPE_NONE.equalsIgnoreCase(rawLockType.trim())) {
+ return NoLockFactory.INSTANCE;
+ }
if (!(rawLockType == null
|| DirectoryFactory.LOCK_TYPE_SINGLE.equalsIgnoreCase(rawLockType.trim()))) {
throw new SolrException(
ErrorCode.FORBIDDEN,
"ByteBuffersDirectory can only be used with the '"
+ DirectoryFactory.LOCK_TYPE_SINGLE
- + "' lock factory type.");
+ + "' or '"
+ + DirectoryFactory.LOCK_TYPE_NONE
+ + "' lock factory types.");
}
return new SingleInstanceLockFactory();
}
diff --git a/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java
index 052dc0106f19..9b171806280e 100644
--- a/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java
@@ -20,6 +20,7 @@
import org.apache.lucene.store.ByteBuffersDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockFactory;
+import org.apache.lucene.store.NoLockFactory;
import org.apache.lucene.store.SingleInstanceLockFactory;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -29,13 +30,19 @@ public class RAMDirectoryFactory extends EphemeralDirectoryFactory {
@Override
protected LockFactory createLockFactory(String rawLockType) throws IOException {
+ if (rawLockType != null
+ && DirectoryFactory.LOCK_TYPE_NONE.equalsIgnoreCase(rawLockType.trim())) {
+ return NoLockFactory.INSTANCE;
+ }
if (!(rawLockType == null
|| DirectoryFactory.LOCK_TYPE_SINGLE.equalsIgnoreCase(rawLockType.trim()))) {
throw new SolrException(
ErrorCode.FORBIDDEN,
"RAMDirectory can only be used with the '"
+ DirectoryFactory.LOCK_TYPE_SINGLE
- + "' lock factory type.");
+ + "' or '"
+ + DirectoryFactory.LOCK_TYPE_NONE
+ + "' lock factory types.");
}
return new SingleInstanceLockFactory();
}
diff --git a/solr/core/src/test-files/solr/configsets/zipfs/conf/solrconfig.xml b/solr/core/src/test-files/solr/configsets/zipfs/conf/solrconfig.xml
index 1beded14516e..b16b37fd10c3 100644
--- a/solr/core/src/test-files/solr/configsets/zipfs/conf/solrconfig.xml
+++ b/solr/core/src/test-files/solr/configsets/zipfs/conf/solrconfig.xml
@@ -23,7 +23,7 @@
- single
+ none
diff --git a/solr/core/src/test/org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java b/solr/core/src/test/org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java
index ba3c04ab6df7..1c72b2fa48c1 100644
--- a/solr/core/src/test/org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java
@@ -20,12 +20,18 @@
import org.apache.lucene.store.ByteBuffersDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockFactory;
+import org.apache.lucene.store.NoLockFactory;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.core.DirectoryFactory.DirContext;
/** Test-case for ByteBuffersDirectoryFactory */
public class ByteBuffersDirectoryFactoryTest extends SolrTestCaseJ4 {
+ public void testLockTypeNone() throws IOException {
+ ByteBuffersDirectoryFactory factory = new ByteBuffersDirectoryFactory();
+ assertSame(NoLockFactory.INSTANCE, factory.createLockFactory(DirectoryFactory.LOCK_TYPE_NONE));
+ }
+
public void testOpenReturnsTheSameForSamePath() throws IOException {
final Directory directory = new ByteBuffersDirectory();
ByteBuffersDirectoryFactory factory =
diff --git a/solr/core/src/test/org/apache/solr/core/RAMDirectoryFactoryTest.java b/solr/core/src/test/org/apache/solr/core/RAMDirectoryFactoryTest.java
index c0c418f8f827..70543e824e77 100644
--- a/solr/core/src/test/org/apache/solr/core/RAMDirectoryFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/core/RAMDirectoryFactoryTest.java
@@ -20,6 +20,7 @@
import org.apache.lucene.store.ByteBuffersDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockFactory;
+import org.apache.lucene.store.NoLockFactory;
import org.apache.solr.SolrTestCase;
import org.apache.solr.core.DirectoryFactory.DirContext;
@@ -31,6 +32,11 @@ public void test() throws Exception {
dotestOpenSucceedForEmptyDir();
}
+ public void testLockTypeNone() throws IOException {
+ RAMDirectoryFactory factory = new RAMDirectoryFactory();
+ assertSame(NoLockFactory.INSTANCE, factory.createLockFactory(DirectoryFactory.LOCK_TYPE_NONE));
+ }
+
private void dotestOpenReturnsTheSameForSamePath() throws IOException {
final Directory directory = new ByteBuffersDirectory();
RAMDirectoryFactory factory =