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 deb3d7057955295c926f160b384efab28a226f54
Author: Robert Newson <[email protected]>
AuthorDate: Wed Aug 6 16:15:45 2025 +0100

    open latest version of index
---
 .../apache/couchdb/nouveau/core/IndexManager.java    | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

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 623963d81..909884aa2 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
@@ -40,11 +40,13 @@ import org.apache.couchdb.nouveau.lucene.LuceneIndex;
 import org.apache.lucene.analysis.Analyzer;
 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;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.Version;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -380,8 +382,11 @@ public final class IndexManager implements Managed {
         final Path path = indexPath(name);
         final IndexDefinition indexDefinition = loadIndexDefinition(name);
         final Analyzer analyzer = 
LuceneAnalyzerFactory.fromDefinition(indexDefinition);
-        final Directory dir = new 
DirectIODirectory(FSDirectory.open(path.resolve("10")));
+        final int version = getIndexVersion(path);
+        final Path indexPath = path.resolve(Integer.toString(version));
+        final Directory dir = new 
DirectIODirectory(FSDirectory.open(indexPath));
         final IndexWriterConfig config = new IndexWriterConfig(analyzer);
+        config.setOpenMode(version == Version.LATEST.major ? 
OpenMode.CREATE_OR_APPEND : OpenMode.APPEND);
         config.setUseCompoundFile(false);
         final IndexWriter writer = new IndexWriter(dir, config);
         final long updateSeq = getSeq(writer, "update_seq");
@@ -390,6 +395,19 @@ public final class IndexManager implements Managed {
         return new LuceneIndex(analyzer, writer, updateSeq, purgeSeq, 
searcherManager);
     }
 
+    /**
+     * Find highest version index on disk, or latest version if none.
+     */
+    private int getIndexVersion(final Path path) throws IOException {
+        if (Files.exists(path.resolve("10"))) {
+            return 10;
+        }
+        if (Files.exists(path.resolve("9"))) {
+            return 9;
+        }
+        return 10;
+    }
+
     private long getSeq(final IndexWriter writer, final String key) throws 
IOException {
         final Iterable<Map.Entry<String, String>> commitData = 
writer.getLiveCommitData();
         if (commitData == null) {

Reply via email to