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) ->
