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.