This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch nouveau-fixes in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 272a447a64c00d13284d0f3c5225c6b9249cfee5 Author: Robert Newson <[email protected]> AuthorDate: Tue Aug 18 20:30:29 2026 +0100 refresh searchermanager only when index changes --- .../main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java index 300c73ec0..cabf2b225 100644 --- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java +++ b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.couchdb.nouveau.api.DocumentDeleteRequest; @@ -107,6 +108,7 @@ public class LuceneIndex extends Index { private final Analyzer analyzer; private final IndexWriter writer; private final SearcherManager searcherManager; + private final AtomicBoolean searcherManagerStale = new AtomicBoolean(false); private final LuceneIndexSchema schema; public LuceneIndex( @@ -147,11 +149,13 @@ public class LuceneIndex extends Index { final Document doc = toDocument(docId, request); schema.update(request.fields()); writer.updateDocument(docIdTerm, doc); + searcherManagerStale.set(true); } @Override public void doDelete(final String docId, final DocumentDeleteRequest request) throws IOException { writer.deleteDocuments(docIdTerm(docId)); + searcherManagerStale.set(true); } @Override @@ -208,7 +212,9 @@ public class LuceneIndex extends Index { cm = new MultiCollectorManager(hits); } - searcherManager.maybeRefreshBlocking(); + if (searcherManagerStale.getAndSet(false)) { + searcherManager.maybeRefreshBlocking(); + } final IndexSearcher searcher = searcherManager.acquire(); try {
