[
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: [email protected]
For additional commands, e-mail: [email protected]