<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.TimerTrigger$TimerTriggerCause'><shortDescription>Started by timer</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>3766</buildNumber><marked><SHA1>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</SHA1><branch><SHA1>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</SHA1><branch><SHA1>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</SHA1><branch><SHA1>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://gitbox.apache.org/repos/asf/lucene.git</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='hudson.model.ParametersAction'></action><action _class='hudson.tasks.junit.TestResultAction'><failCount>0</failCount><skipCount>778</skipCount><totalCount>17691</totalCount><urlName>testReport</urlName></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><description>Java: 64bit/hotspot/jdk-26 -XX:+UseCompressedOops -XX:+UseZGC</description><displayName>#3766</displayName><duration>861459</duration><estimatedDuration>649785</estimatedDuration><fullDisplayName>Lucene-MMAPv2-Windows #3766</fullDisplayName><id>3766</id><inProgress>false</inProgress><keepLog>false</keepLog><number>3766</number><queueId>224905</queueId><result>SUCCESS</result><timestamp>1783431215974</timestamp><url>https://jenkins.thetaphi.de/view/Lucene/job/Lucene-MMAPv2-Windows/3766/</url><builtOn>Windows VM</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>lucene/monitor/src/test/org/apache/lucene/monitor/TestForceNoBulkScoringQuery.java</affectedPath><commitId>062c53046076264cab858527eb79fc9f84945d02</commitId><timestamp>1783408778000</timestamp><author><absoluteUrl>https://jenkins.thetaphi.de/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Fix seed-dependent failure in TestForceNoBulkScoringQuery (#16369)

The sanity check added in #16350 assumes that searching the un-wrapped
ThrowsOnBulkScoreQuery always calls ScorerSupplier#bulkScorer. With
newSearcher(reader) the searcher may be an AssertingIndexSearcher,
whose ScorerSupplier sometimes builds the bulk scorer from scorer()
instead of delegating, so the expected AssertionError is never thrown:

  gradlew -p lucene/monitor test --tests TestForceNoBulkScoringQuery \
    -Dtests.seed=BDD18A3ADD885193

Use a plain IndexSearcher so the dispatch under test is deterministic.
</comment><date>2026-07-07 09:19:38 +0200</date><id>062c53046076264cab858527eb79fc9f84945d02</id><msg>Fix seed-dependent failure in TestForceNoBulkScoringQuery (#16369)</msg><path><editType>edit</editType><file>lucene/monitor/src/test/org/apache/lucene/monitor/TestForceNoBulkScoringQuery.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>lucene/core/src/test/org/apache/lucene/index/TestInfoStream.java</affectedPath><commitId>4c9b5e656743085206b75ebed9b5e2c561ffe0e5</commitId><timestamp>1783415688000</timestamp><author><absoluteUrl>https://jenkins.thetaphi.de/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Fix occasional ConcurrentModificationException in TestInfoStream (#16364)

IndexWriter merge threads might still be writing to the InfoStream
after the writer is closed.  Synchronize on the infostream List so
that we don't get CMEs when iterating over it to check messages.
</comment><date>2026-07-07 10:14:48 +0100</date><id>4c9b5e656743085206b75ebed9b5e2c561ffe0e5</id><msg>Fix occasional ConcurrentModificationException in TestInfoStream (#16364)</msg><path><editType>edit</editType><file>lucene/core/src/test/org/apache/lucene/index/TestInfoStream.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>lucene/core/src/java/org/apache/lucene/search/DocValuesRangeIterator.java</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/search/TestSkipBlockRangeIteratorBitSetOperations.java</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/search/TestSkipBlockRangeIteratorIntoBitSet.java</affectedPath><affectedPath>lucene/CHANGES.txt</affectedPath><affectedPath>lucene/core/src/java/org/apache/lucene/search/DenseConjunctionBulkScorer.java</affectedPath><affectedPath>lucene/core/src/java/org/apache/lucene/search/TwoPhaseIterator.java</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/search/TestTwoPhaseIterator.java</affectedPath><commitId>9b6ca1356f532a252a9e710abf6d4931b9604463</commitId><timestamp>1783417525000</timestamp><author><absoluteUrl>https://jenkins.thetaphi.de/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add TwoPhaseIterator.applyMask() method (#16362)

TwoPhaseIterator.intoBitSet() can vectorize two-phase matching across a
window of documents, but it does not take into account any previous
conjunction clauses that could have excluded documents in the window from
consideration.  This can cause inefficiencies in DenseConjunctionBulkScorer,
where we use intoBitSet for windows that we know have more than 25%
matches - for example, a window with 26% matching documents when combined
with a two-phase iterator whose approximation matches everything will
call `match()` on the 74% of documents in the window that have already
been excluded.

This adds a complementary method `applyMask()` to TwoPhaseIterator that
will call matches() on all documents marked as selected in a passed-in
BitSet, and clear them if they do not pass. DocValuesRangeIterator
can use a bulk implementation, while the default implementation
still avoids matching documents already excluded by earlier clauses.
DenseConjunctionBulkScorer always calls applyMask() when presented
with a TwoPhaseIterator as a trailing clause.
</comment><date>2026-07-07 10:45:25 +0100</date><id>9b6ca1356f532a252a9e710abf6d4931b9604463</id><msg>Add TwoPhaseIterator.applyMask() method (#16362)</msg><path><editType>edit</editType><file>lucene/core/src/java/org/apache/lucene/search/TwoPhaseIterator.java</file></path><path><editType>add</editType><file>lucene/core/src/test/org/apache/lucene/search/TestSkipBlockRangeIteratorBitSetOperations.java</file></path><path><editType>add</editType><file>lucene/core/src/test/org/apache/lucene/search/TestTwoPhaseIterator.java</file></path><path><editType>delete</editType><file>lucene/core/src/test/org/apache/lucene/search/TestSkipBlockRangeIteratorIntoBitSet.java</file></path><path><editType>edit</editType><file>lucene/core/src/java/org/apache/lucene/search/DocValuesRangeIterator.java</file></path><path><editType>edit</editType><file>lucene/CHANGES.txt</file></path><path><editType>edit</editType><file>lucene/core/src/java/org/apache/lucene/search/DenseConjunctionBulkScorer.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>lucene/CHANGES.txt</affectedPath><affectedPath>lucene/core/src/test/org/apache/lucene/search/TestDenseConjunctionBulkScorer.java</affectedPath><affectedPath>lucene/core/src/java/org/apache/lucene/search/DenseConjunctionBulkScorer.java</affectedPath><commitId>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</commitId><timestamp>1783427941000</timestamp><author><absoluteUrl>https://jenkins.thetaphi.de/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Order two-phase iterators in DenseConjunctionBulkScorer by matchCost (#16370)

Currently two-phase iterators are ordered by their approximation
cost. Many two-phase implementations use maxDoc as their approximation,
however, meaning that we don't necessarily get a good ordering
between them and more expensive matches can be called unnecessarily.

This adds an additional comparison layer for two-phase iterators
that orders by matchCost.
</comment><date>2026-07-07 13:39:01 +0100</date><id>c4e4e9b1cf80ebe4c258aba2b0cce16a1bd2d0e5</id><msg>Order two-phase iterators in DenseConjunctionBulkScorer by matchCost (#16370)</msg><path><editType>edit</editType><file>lucene/CHANGES.txt</file></path><path><editType>edit</editType><file>lucene/core/src/test/org/apache/lucene/search/TestDenseConjunctionBulkScorer.java</file></path><path><editType>edit</editType><file>lucene/core/src/java/org/apache/lucene/search/DenseConjunctionBulkScorer.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.thetaphi.de/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit></freeStyleBuild>