[ 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