You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "Mike Drob (Jira)" <ji...@apache.org> on 2021/09/14 14:25:00 UTC

[jira] [Comment Edited] (SOLR-15555) Use filterCache.computeIfAbsent in SolrIndexSearcher

    [ https://issues.apache.org/jira/browse/SOLR-15555?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17414967#comment-17414967 ] 

Mike Drob edited comment on SOLR-15555 at 9/14/21, 2:24 PM:
------------------------------------------------------------

Jenkins found a failure that I was able to reproduce locally after a few tries - [https://jenkins.thetaphi.de/view/Solr/job/Solr-main-MacOSX/339/console]

{{gradlew :solr:core:test --tests "org.apache.solr.search.facet.TestCloudJSONFacetJoinDomain.testRandom"}}
{noformat}
  2> 5781 ERROR (qtp922858695-113) [n:127.0.0.1:50870_solr c:org.apache.solr.search.facet.TestCloudJSONFacetJoinDomain_collection s:shard1 r:core_node2 x:org.apache.solr.search.facet.TestCloudJSONFacetJoinDomain_collection_shard1_replica_n1 ] o.a.s.h.RequestHandlerBase java.lang.IllegalStateException: Recursive update
  2>    at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1983)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2411)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2394)
  2>    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)
  2>    at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
  2>    at org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:248)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1099)
  2>    at org.apache.solr.search.JoinQuery$JoinQueryWeight.getDocSetEnumerate(JoinQuery.java:340)
  2>    at org.apache.solr.search.JoinQuery$JoinQueryWeight.getDocSet(JoinQuery.java:221)
  2>    at org.apache.solr.search.JoinQuery$JoinQueryWeight.scorer(JoinQuery.java:156)
  2>    at org.apache.lucene.search.Weight.bulkScorer(Weight.java:166)
  2>    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:745)
  2>    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:533)
  2>    at org.apache.solr.search.DocSetUtil.createDocSetGeneric(DocSetUtil.java:145)
  2>    at org.apache.solr.search.DocSetUtil.createDocSet(DocSetUtil.java:134)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSetNC(SolrIndexSearcher.java:1173)
  2>    at org.apache.solr.search.SolrIndexSearcher.lambda$getAndCacheDocSet$1(SolrIndexSearcher.java:854)
  2>    at org.apache.solr.search.CaffeineCache.lambda$computeIfAbsent$1(CaffeineCache.java:251)
  2>    at com.github.benmanes.caffeine.cache.LocalCache.lambda$statsAware$0(LocalCache.java:139)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2413)
  2>    at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2411)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2394)
  2>    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)
  2>    at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
  2>    at org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:248)
  2>    at org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:854)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1217)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1185)
  2>    at org.apache.solr.search.facet.FacetProcessor.handleJoinField(FacetProcessor.java:246)
  2>    at org.apache.solr.search.facet.FacetProcessor.handleDomainChanges(FacetProcessor.java:169)
  2>    at org.apache.solr.search.facet.FacetProcessor.process(FacetProcessor.java:70)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:93)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetProcessor.processSubs(FacetProcessor.java:477)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.fillBucketFromSlot(FacetFieldProcessor.java:548)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.findTopSlots(FacetFieldProcessor.java:448)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.calcFacets(FacetFieldProcessorByArray.java:152)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:94)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetProcessor.processSubs(FacetProcessor.java:477)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.fillBucketFromSlot(FacetFieldProcessor.java:548)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.findTopSlots(FacetFieldProcessor.java:448)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.calcFacets(FacetFieldProcessorByArray.java:152)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:94)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetProcessor.processSubs(FacetProcessor.java:477)
  2>    at org.apache.solr.search.facet.FacetProcessor.fillBucket(FacetProcessor.java:433)
  2>    at org.apache.solr.search.facet.FacetQueryProcessor.process(FacetQuery.java:64)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetModule.process(FacetModule.java:151)
  2>    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:367)
  2>    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:212)
  2>    at org.apache.solr.core.SolrCore.execute(SolrCore.java:2617) {noformat}


was (Author: mdrob):
Jenkins found a failure that I was able to reproduce locally after a few tries - [https://jenkins.thetaphi.de/view/Solr/job/Solr-main-MacOSX/339/console]
{noformat}
  2> 5781 ERROR (qtp922858695-113) [n:127.0.0.1:50870_solr c:org.apache.solr.search.facet.TestCloudJSONFacetJoinDomain_collection s:shard1 r:core_node2 x:org.apache.solr.search.facet.TestCloudJSONFacetJoinDomain_collection_shard1_replica_n1 ] o.a.s.h.RequestHandlerBase java.lang.IllegalStateException: Recursive update
  2>    at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1983)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2411)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2394)
  2>    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)
  2>    at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
  2>    at org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:248)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1099)
  2>    at org.apache.solr.search.JoinQuery$JoinQueryWeight.getDocSetEnumerate(JoinQuery.java:340)
  2>    at org.apache.solr.search.JoinQuery$JoinQueryWeight.getDocSet(JoinQuery.java:221)
  2>    at org.apache.solr.search.JoinQuery$JoinQueryWeight.scorer(JoinQuery.java:156)
  2>    at org.apache.lucene.search.Weight.bulkScorer(Weight.java:166)
  2>    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:745)
  2>    at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:533)
  2>    at org.apache.solr.search.DocSetUtil.createDocSetGeneric(DocSetUtil.java:145)
  2>    at org.apache.solr.search.DocSetUtil.createDocSet(DocSetUtil.java:134)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSetNC(SolrIndexSearcher.java:1173)
  2>    at org.apache.solr.search.SolrIndexSearcher.lambda$getAndCacheDocSet$1(SolrIndexSearcher.java:854)
  2>    at org.apache.solr.search.CaffeineCache.lambda$computeIfAbsent$1(CaffeineCache.java:251)
  2>    at com.github.benmanes.caffeine.cache.LocalCache.lambda$statsAware$0(LocalCache.java:139)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$14(BoundedLocalCache.java:2413)
  2>    at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2411)
  2>    at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2394)
  2>    at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)
  2>    at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
  2>    at org.apache.solr.search.CaffeineCache.computeIfAbsent(CaffeineCache.java:248)
  2>    at org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:854)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1217)
  2>    at org.apache.solr.search.SolrIndexSearcher.getDocSet(SolrIndexSearcher.java:1185)
  2>    at org.apache.solr.search.facet.FacetProcessor.handleJoinField(FacetProcessor.java:246)
  2>    at org.apache.solr.search.facet.FacetProcessor.handleDomainChanges(FacetProcessor.java:169)
  2>    at org.apache.solr.search.facet.FacetProcessor.process(FacetProcessor.java:70)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:93)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetProcessor.processSubs(FacetProcessor.java:477)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.fillBucketFromSlot(FacetFieldProcessor.java:548)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.findTopSlots(FacetFieldProcessor.java:448)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.calcFacets(FacetFieldProcessorByArray.java:152)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:94)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetProcessor.processSubs(FacetProcessor.java:477)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.fillBucketFromSlot(FacetFieldProcessor.java:548)
  2>    at org.apache.solr.search.facet.FacetFieldProcessor.findTopSlots(FacetFieldProcessor.java:448)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.calcFacets(FacetFieldProcessorByArray.java:152)
  2>    at org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:94)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetProcessor.processSubs(FacetProcessor.java:477)
  2>    at org.apache.solr.search.facet.FacetProcessor.fillBucket(FacetProcessor.java:433)
  2>    at org.apache.solr.search.facet.FacetQueryProcessor.process(FacetQuery.java:64)
  2>    at org.apache.solr.search.facet.FacetRequest.process(FacetRequest.java:425)
  2>    at org.apache.solr.search.facet.FacetModule.process(FacetModule.java:151)
  2>    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:367)
  2>    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:212)
  2>    at org.apache.solr.core.SolrCore.execute(SolrCore.java:2617) {noformat}

> Use filterCache.computeIfAbsent in SolrIndexSearcher
> ----------------------------------------------------
>
>                 Key: SOLR-15555
>                 URL: https://issues.apache.org/jira/browse/SOLR-15555
>             Project: Solr
>          Issue Type: Improvement
>      Security Level: Public(Default Security Level. Issues are Public) 
>            Reporter: Mike Drob
>            Priority: Major
>          Time Spent: 5h
>  Remaining Estimate: 0h
>
> When multiple concurrent queries come in at the same time, in several cases they can trigger concurrent computations of a DocSet for the cache. We should investigate where this happens and possibly take care to only do a single computation when possible.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org