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 889bb681d68d4056499fd492986b5ec7d5b79fc0
Author: Robert Newson <rnew...@apache.org>
AuthorDate: Thu Aug 7 11:36:35 2025 +0100

    indicate whether upgrade is required in _nouveau_info
---
 .../main/java/org/apache/couchdb/nouveau/api/IndexInfo.java  | 12 ++++++++++--
 .../src/main/java/org/apache/couchdb/nouveau/core/Index.java |  6 ++++--
 .../java/org/apache/couchdb/nouveau/core/IndexManager.java   |  3 ++-
 .../java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java  |  3 ++-
 src/nouveau/src/nouveau_fabric_info.erl                      |  2 ++
 5 files changed, 20 insertions(+), 6 deletions(-)

diff --git 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java
index 9958c7780..1b34bbbcf 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java
@@ -33,15 +33,23 @@ public final class IndexInfo {
     @PositiveOrZero
     private final long diskSize;
 
+    private final boolean upgradeRequired;
+
     public IndexInfo(
             @JsonProperty("update_seq") final long updateSeq,
             @JsonProperty("purge_seq") final long purgeSeq,
             @JsonProperty("num_docs") final int numDocs,
-            @JsonProperty("disk_size") final long diskSize) {
+            @JsonProperty("disk_size") final long diskSize,
+            @JsonProperty("upgrade_required") final boolean upgradeRequired) {
         this.updateSeq = updateSeq;
         this.purgeSeq = purgeSeq;
         this.numDocs = numDocs;
         this.diskSize = diskSize;
+        this.upgradeRequired = upgradeRequired;
+    }
+
+    public boolean getUpgradeRequired() {
+        return upgradeRequired;
     }
 
     public int getNumDocs() {
@@ -63,6 +71,6 @@ public final class IndexInfo {
     @Override
     public String toString() {
         return "IndexInfo [updateSeq=" + updateSeq + ", purgeSeq=" + purgeSeq 
+ ", numDocs=" + numDocs + ", diskSize="
-                + diskSize + "]";
+                + diskSize + ", upgradeRequired=" + upgradeRequired + "]";
     }
 }
diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
index 35013bf8d..b8a03e1d1 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
@@ -37,17 +37,19 @@ public abstract class Index implements Closeable {
 
     private long updateSeq;
     private long purgeSeq;
+    private boolean upgradeRequired;
     private boolean deleteOnClose = false;
 
-    protected Index(final long updateSeq, final long purgeSeq) {
+    protected Index(final long updateSeq, final long purgeSeq, final boolean 
upgradeRequired) {
         this.updateSeq = updateSeq;
         this.purgeSeq = purgeSeq;
+        this.upgradeRequired = upgradeRequired;
     }
 
     public final IndexInfo info() throws IOException {
         final int numDocs = doNumDocs();
         final long diskSize = doDiskSize();
-        return new IndexInfo(updateSeq, purgeSeq, numDocs, diskSize);
+        return new IndexInfo(updateSeq, purgeSeq, numDocs, diskSize, 
upgradeRequired);
     }
 
     protected abstract int doNumDocs() throws IOException;
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 59f6148b5..da185aa2a 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
@@ -383,6 +383,7 @@ public final class IndexManager implements Managed {
         final IndexDefinition indexDefinition = loadIndexDefinition(name);
         final Analyzer analyzer = 
LuceneAnalyzerFactory.fromDefinition(indexDefinition);
         final int version = getIndexVersion(path);
+        final boolean upgradeRequired = version < Version.LATEST.major;
         final Path indexPath = path.resolve(Integer.toString(version));
         final Directory dir = new 
DirectIODirectory(FSDirectory.open(indexPath));
         final IndexWriterConfig config = new IndexWriterConfig(analyzer);
@@ -392,7 +393,7 @@ public final class IndexManager implements Managed {
         final long updateSeq = getSeq(writer, "update_seq");
         final long purgeSeq = getSeq(writer, "purge_seq");
         final SearcherManager searcherManager = new SearcherManager(writer, 
searcherFactory);
-        return new LuceneIndex(analyzer, writer, updateSeq, purgeSeq, 
searcherManager);
+        return new LuceneIndex(analyzer, writer, updateSeq, purgeSeq, 
upgradeRequired, searcherManager);
     }
 
     /**
diff --git 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
index e62ffdb5a..9709cd930 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
@@ -113,8 +113,9 @@ public class LuceneIndex extends Index {
             final IndexWriter writer,
             final long updateSeq,
             final long purgeSeq,
+            final boolean upgradeRequired,
             final SearcherManager searcherManager) {
-        super(updateSeq, purgeSeq);
+        super(updateSeq, purgeSeq, upgradeRequired);
         this.analyzer = Objects.requireNonNull(analyzer);
         this.writer = Objects.requireNonNull(writer);
         this.searcherManager = Objects.requireNonNull(searcherManager);
diff --git a/src/nouveau/src/nouveau_fabric_info.erl 
b/src/nouveau/src/nouveau_fabric_info.erl
index 0fe41af5a..45bdf177e 100644
--- a/src/nouveau/src/nouveau_fabric_info.erl
+++ b/src/nouveau/src/nouveau_fabric_info.erl
@@ -104,5 +104,7 @@ handle_message({'EXIT', _}, Worker, {Counters, Acc}) ->
 
 merge_info(signature, Val, Val) ->
     Val;
+merge_info(<<"upgrade_required">>, Val1, Val2) when is_boolean(Val1), 
is_boolean(Val2) ->
+    Val1 orelse Val2;
 merge_info(_Key, Val1, Val2) ->
     Val1 + Val2.

Reply via email to