You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "Chris M. Hostetter (Jira)" <ji...@apache.org> on 2024/05/07 17:25:00 UTC
[jira] [Commented] (SOLR-17280) SolrRangeQuery can trigger "IllegalStateException: Recursive update" in CaffeineCache / ConcurrentHashMap
[ https://issues.apache.org/jira/browse/SOLR-17280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17844401#comment-17844401 ]
Chris M. Hostetter commented on SOLR-17280:
-------------------------------------------
This can sometimes be reproduced by some of the sporadic jenkins failures that we've seen from {{TestFiltering.testRandomFiltering}} over the past 3 years ...
{noformat}
hossman@slate:~/lucene/solr [j11] [main] $ git rev-parse HEAD
d5b82412d8729a6bfa8056e7000a5a7be0b9b86e
hossman@slate:~/lucene/solr [j11] [main] $ ./gradlew clean test --tests TestFiltering -Dtests.seed=8B449AF7C2324BE4 -Dtests.multiplier=3 -Dtests.locale=fr-BE -Dtests.timezone=Europe/Sarajevo -Dtests.asserts=true -Dtests.file.encoding=UTF-8
...{noformat}
The root of the problem seems to be this bit of {{SolrRangeQuery}} ...
{noformat}
if (doCheck) {
answer = createDocSet(solrSearcher, count);
// This can be a naked put because the cache usually gets checked in SolrIndexSearcher
solrSearcher.getFilterCache().put(SolrRangeQuery.this, answer);
return segStates[context.ord] = new SegState(new SegmentDocIdSet(answer, context));
}
{noformat}
...for some reason the query is trying to inject itself directly into the cache, which can obviously cause a recursion problem when the query is being executed as part of a {{SimpleFacets.getFacetQueryCount -> SolrIndexSearcher.getAndCacheDocSet -> CaffeineCache.computeIfAbsent}} call stack
---
/ping [~mdrob] & [~magibney] as they are the last people to touch this chunk of code.
mdrob: in particular i note that you added the comment about the "naked put" as part of SOLR-15555, which was committed almost exactly when {{TestFiltering.testRandomFiltering}} started failing at a a very predictable rate...
http://fucit.org/solr-jenkins-reports/history-trend-of-recent-failures.html#series/org.apache.solr.search.TestFiltering.testRandomFiltering
> SolrRangeQuery can trigger "IllegalStateException: Recursive update" in CaffeineCache / ConcurrentHashMap
> ---------------------------------------------------------------------------------------------------------
>
> Key: SOLR-17280
> URL: https://issues.apache.org/jira/browse/SOLR-17280
> Project: Solr
> Issue Type: Bug
> Security Level: Public(Default Security Level. Issues are Public)
> Reporter: Chris M. Hostetter
> Priority: Major
>
> Sample stacktrace...
> {noformat}
> 2> => java.lang.IllegalStateException: Recursive update
> 2> at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1063)
> 2> java.lang.IllegalStateException: Recursive update
> 2> at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1063) ~[?:?]
> 2> at java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541) ~[?:?]
> 2> at com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2312) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at com.github.benmanes.caffeine.cache.BoundedLocalCache.put(BoundedLocalCache.java:2278) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at org.apache.solr.search.CaffeineCache.put(CaffeineCache.java:277) ~[main/:?]
> 2> at org.apache.solr.query.SolrRangeQuery$ConstWeight.getSegState(SolrRangeQuery.java:482) ~[main/:?]
> 2> at org.apache.solr.query.SolrRangeQuery$ConstWeight.scorer(SolrRangeQuery.java:552) ~[main/:?]
> 2> at org.apache.lucene.search.Weight.scorerSupplier(Weight.java:135) ~[lucene-core-9.10.0.jar:9.10.0 695c0ac84508438302cd346a812cfa2fdc5a10df - 2024-02-14 16:48:06]
> 2> at org.apache.lucene.search.BooleanWeight.requiredBulkScorer(BooleanWeight.java:289) ~[lucene-core-9.10.0.jar:9.10.0 695c0ac84508438302cd346a812cfa2fdc5a10df - 2024-02-14 16:48:06]
> 2> at org.apache.lucene.search.BooleanWeight.booleanScorer(BooleanWeight.java:402) ~[lucene-core-9.10.0.jar:9.10.0 695c0ac84508438302cd346a812cfa2fdc5a10df - 2024-02-14 16:48:06]
> 2> at org.apache.lucene.search.BooleanWeight.bulkScorer(BooleanWeight.java:443) ~[lucene-core-9.10.0.jar:9.10.0 695c0ac84508438302cd346a812cfa2fdc5a10df - 2024-02-14 16:48:06]
> 2> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:737) ~[lucene-core-9.10.0.jar:9.10.0 695c0ac84508438302cd346a812cfa2fdc5a10df - 2024-02-14 16:48:06]
> 2> at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:720) ~[main/:?]
> 2> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:552) ~[lucene-core-9.10.0.jar:9.10.0 695c0ac84508438302cd346a812cfa2fdc5a10df - 2024-02-14 16:48:06]
> 2> at org.apache.solr.search.DocSetUtil.createDocSetGeneric(DocSetUtil.java:154) ~[main/:?]
> 2> at org.apache.solr.search.DocSetUtil.createDocSet(DocSetUtil.java:141) ~[main/:?]
> 2> at org.apache.solr.search.SolrIndexSearcher.getDocSetNC(SolrIndexSearcher.java:1387) ~[main/:?]
> 2> at org.apache.solr.search.SolrIndexSearcher.lambda$getAndCacheDocSet$1(SolrIndexSearcher.java:991) ~[main/:?]
> 2> at org.apache.solr.search.CaffeineCache.lambda$computeIfAbsent$1(CaffeineCache.java:258) ~[main/:?]
> 2> at com.github.benmanes.caffeine.cache.LocalCache.lambda$statsAware$2(LocalCache.java:167) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2688) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908) ~[?:?]
> 2> at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2686) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2669) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:112) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62) ~[caffeine-3.1.8.jar:3.1.8]
> 2> at org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:253) ~[main/:?]
> 2> at org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:991) ~[main/:?]
> 2> at org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:946) ~[main/:?]
> 2> at org.apache.solr.search.SolrIndexSearcher.numDocs(SolrIndexSearcher.java:2367) ~[main/:?]
> 2> at org.apache.solr.request.SimpleFacets.getFacetQueryCount(SimpleFacets.java:320) ~[main/:?]
> 2> at org.apache.solr.request.SimpleFacets.getFacetQueryCounts(SimpleFacets.java:302) ~[main/:?]
> 2> at org.apache.solr.handler.component.FacetComponent.getFacetCounts(FacetComponent.java:331) ~[main/:?]
> 2> at org.apache.solr.handler.component.FacetComponent.process(FacetComponent.java:279) ~[main/:?]
> 2> at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:466) ~[main/:?]
> 2> at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:238) ~[main/:?]
> 2> at org.apache.solr.core.SolrCore.execute(SolrCore.java:2886) ~[main/:?]
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org