This is an automated email from the ASF dual-hosted git repository. dsmiley pushed a commit to branch branch_9x in repository https://gitbox.apache.org/repos/asf/solr.git
commit 996a8cf3bd81fdf8d23bd9fad98688ced757dfca Author: Surya Shukla <[email protected]> AuthorDate: Sat Aug 1 22:21:30 2026 +0530 SOLR-18183: Permit LockType.NONE for ephemeral directories (#4660) (cherry picked from commit 8fa14f1048f00decc7ade6fede1350a862e97d7e) --- .../java/org/apache/solr/core/ByteBuffersDirectoryFactory.java | 9 ++++++++- solr/core/src/java/org/apache/solr/core/RAMDirectoryFactory.java | 9 ++++++++- .../org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java | 6 ++++++ .../src/test/org/apache/solr/core/RAMDirectoryFactoryTest.java | 6 ++++++ 4 files changed, 28 insertions(+), 2 deletions(-) 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 0c1a1fa24f0..ccbd397483f 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 java.io.IOException; 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 cfe321a62cb..a7edaf8fb37 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 java.io.IOException; 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/org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java b/solr/core/src/test/org/apache/solr/core/ByteBuffersDirectoryFactoryTest.java index 2858acf723a..e7b245f751c 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 java.io.IOException; 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 6547cf48659..53d94cc506c 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 java.io.IOException; 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 class RAMDirectoryFactoryTest extends SolrTestCase { 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 =
