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

Michael Gibney commented on SOLR-16173:
---------------------------------------

Just dropping a quick note in here to close the loop, since when I proposed the 
solution above, I didn't really understand the reason why upgrading to 
CaffeineCache would fix this. LRUCache and LFUCache {{computeIfAbsent()}} 
methods are synchronous and invoke the provided mapping function as part of the 
atomic cache consultation, so these are vulnerable to the same issue discussed 
in SOLR-16707 (wrt CaffeineCache non-async configuration).

Basically: I'd strongly recommend always using CaffeineCache (with async=true, 
the default configuration) on Solr 8.10+. If you have a custom cache 
implementation, ensure that the {{computeIfAbsent()}} implementation supports 
recursive updates (i.e., it is ok for the mapping function to modify the same 
cache). This is supported with caffeine-backed async caches (which is why 
upgrading to use CaffeineCache fixed this issue), but the simplest way to allow 
such support is for {{computeIfAbsent()}} to actually call get-then-put under 
the hood.

> java.util.ConcurrentModificationException after Upgrading from 8.9 to 8.11
> --------------------------------------------------------------------------
>
>                 Key: SOLR-16173
>                 URL: https://issues.apache.org/jira/browse/SOLR-16173
>             Project: Solr
>          Issue Type: Bug
>    Affects Versions: 8.11.1
>            Reporter: Stefan Schwarz
>            Priority: Major
>
> After Upgrading our 3 Node Solr Cluster (official Docker Container) to 8.11.1 
> we are experiencing ConcurrentModificationException. Downgrading to 8.9 again 
> fixed the issue.
>  
> Full exception:
> {code:java}
>  2022-04-28 14:59:18.413 ERROR (qtp2106165633-3238) [c:articles s:shard1 
> r:core_node3 x:articles_shard1_replica_n1] o.a.s.h.RequestHandlerBase 
> java.util.ConcurrentModificationException => 
> java.util.ConcurrentModificationException
>       at java.base/java.util.HashMap.computeIfAbsent(Unknown Source)
> java.util.ConcurrentModificationException: null
>       at java.util.HashMap.computeIfAbsent(Unknown Source) ~[?:?]
>       at org.apache.solr.search.LRUCache.computeIfAbsent(LRUCache.java:275) 
> ~[?:?]
>       at 
> org.apache.solr.search.SolrIndexSearcher.getAndCacheDocSet(SolrIndexSearcher.java:876)
>  ~[?:?]
>       at 
> org.apache.solr.search.SolrIndexSearcher.getPositiveDocSet(SolrIndexSearcher.java:844)
>  ~[?:?]
>       at 
> org.apache.solr.search.SolrIndexSearcher.getProcessedFilter(SolrIndexSearcher.java:1035)
>  ~[?:?]
>       at 
> org.apache.solr.search.SolrIndexSearcher.getDocListAndSetNC(SolrIndexSearcher.java:1670)
>  ~[?:?]
>       at 
> org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1435)
>  ~[?:?]
>       at 
> org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:596) 
> ~[?:?]
>       at 
> org.apache.solr.handler.component.QueryComponent.doProcessUngroupedSearch(QueryComponent.java:1511)
>  ~[?:?]
>       at 
> org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:390)
>  ~[?:?]
>       at 
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:368)
>  ~[?:?]
>       at 
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:216)
>  ~[?:?]
>       at org.apache.solr.core.SolrCore.execute(SolrCore.java:2637) ~[?:?]
>       at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:794) 
> ~[?:?]
>       at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:567) 
> ~[?:?]
>       at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:427)
>  ~[?:?]
>       at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:357)
>  ~[?:?]
>       at 
> org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201) 
> ~[jetty-servlet-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
>  ~[jetty-servlet-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) 
> ~[jetty-servlet-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) 
> ~[jetty-security-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) 
> ~[jetty-servlet-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
>  ~[jetty-rewrite-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:763)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
>  ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at org.eclipse.jetty.server.Server.handle(Server.java:516) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) 
> ~[jetty-server-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
>  ~[jetty-io-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) 
> ~[jetty-io-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) 
> ~[jetty-io-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
>  ~[jetty-util-9.4.44.v20210927.jar:9.4.44.v20210927]
>       at java.lang.Thread.run(Unknown Source) [?:?]{code}
>  
> This seems to be triggered by adding a {{fq=attribute:*}} filter.
> Let me know if you need more information. Sadly i cant share the full setup. 
> Thanks!



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to