From 95f452f7460f0bee54a748ea74ddae3add291d46 Mon Sep 17 00:00:00 2001 From: Surya Shukla Date: Fri, 24 Jul 2026 21:38:22 +0530 Subject: [PATCH 1/2] fix(core): permit none lock for ephemeral dirs Refs SOLR-18183 --- .../apache/solr/core/ByteBuffersDirectoryFactory.java | 9 ++++++++- .../java/org/apache/solr/core/RAMDirectoryFactory.java | 9 ++++++++- .../solr/core/ByteBuffersDirectoryFactoryTest.java | 6 ++++++ .../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 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/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 = From 404a2611276757c4c280d56d17b6a24a89c2d575 Mon Sep 17 00:00:00 2001 From: Surya Shukla Date: Sat, 25 Jul 2026 10:49:47 +0530 Subject: [PATCH 2/2] test(core): use none lock in ZipFS config --- .../src/test-files/solr/configsets/zipfs/conf/solrconfig.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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