This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch lucene-10
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit b45d0f338b90ce76bb14c6dc6a72ffc47743b043
Author: Robert Newson <[email protected]>
AuthorDate: Sat Aug 23 23:39:41 2025 +0100

    gracefully handle attempt to create old index
---
 .../main/java/org/apache/couchdb/nouveau/core/IndexManager.java   | 8 ++++----
 src/nouveau/src/nouveau_api.erl                                   | 2 ++
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
index d5d50978e..863d47d25 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
@@ -38,9 +38,9 @@ import org.apache.couchdb.nouveau.api.IndexDefinition;
 import org.apache.couchdb.nouveau.lucene.LuceneAnalyzerFactory;
 import org.apache.couchdb.nouveau.lucene.LuceneIndex;
 import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.misc.store.DirectIODirectory;
 import org.apache.lucene.search.SearcherFactory;
 import org.apache.lucene.search.SearcherManager;
@@ -384,11 +384,11 @@ public final class IndexManager implements Managed {
         final Analyzer analyzer = 
LuceneAnalyzerFactory.fromDefinition(indexDefinition);
         final Directory dir = new DirectIODirectory(
                 
FSDirectory.open(path.resolve(Integer.toString(indexDefinition.getLuceneVersion()))));
+        if (indexDefinition.getLuceneVersion() < Version.LATEST.major && 
!DirectoryReader.indexExists(dir)) {
+            throw new WebApplicationException("cannot create an index with old 
lucene version", Status.FORBIDDEN);
+        }
         final IndexWriterConfig config = new IndexWriterConfig(analyzer);
         config.setUseCompoundFile(false);
-        if (indexDefinition.getLuceneVersion() < Version.LATEST.major) {
-            config.setOpenMode(OpenMode.APPEND);
-        }
         final IndexWriter writer = new IndexWriter(dir, config);
         final long updateSeq = getSeq(writer, "update_seq");
         final long purgeSeq = getSeq(writer, "purge_seq");
diff --git a/src/nouveau/src/nouveau_api.erl b/src/nouveau/src/nouveau_api.erl
index cfc88af4f..b523e5623 100644
--- a/src/nouveau/src/nouveau_api.erl
+++ b/src/nouveau/src/nouveau_api.erl
@@ -234,6 +234,8 @@ search_path(#index{} = Index) ->
 
 jaxrs_error(400, Body) ->
     {bad_request, message(Body)};
+jaxrs_error(403, Body) ->
+    {forbidden, message(Body)};
 jaxrs_error(404, Body) ->
     {not_found, message(Body)};
 jaxrs_error(405, Body) ->

Reply via email to