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 =

Reply via email to