[ https://issues.apache.org/jira/browse/SOLR-17413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17945729#comment-17945729 ]
ASF subversion and git services commented on SOLR-17413: -------------------------------------------------------- Commit 3dd3a96f09c89f5d6a9f2915256aface46a4a8a0 in solr's branch refs/heads/add-pki-caching from Jason Gerlowski [ https://gitbox.apache.org/repos/asf?p=solr.git;h=3dd3a96f09c ] SOLR-17413: ulog replay should copy SolrQueryRequest (#110) SolrQueryRequest is a non-threadsafe type, but was being shared across executor threads during UpdateLog replay. This introduces a number of issues, not the least being a ConcurrentModificationException if multiple threads happen to tweak the request 'context' simultaneously. This commit fixes this issue by giving each executor thread a unique LocalSolrQueryRequest instance to use. NOTE: This fix is on its way to 9.8 upstream, but may take a slightly different final form. Co-authored-by: Jason Gerlowski <gerlowsk...@apache.org> > UpdateLog Replay can throw ConcurrentModificationException from sharing the > request > ----------------------------------------------------------------------------------- > > Key: SOLR-17413 > URL: https://issues.apache.org/jira/browse/SOLR-17413 > Project: Solr > Issue Type: Bug > Reporter: David Smiley > Assignee: Jason Gerlowski > Priority: Major > Labels: newdev, pull-request-available > Fix For: 9.8 > > Time Spent: 1h 50m > Remaining Estimate: 0h > > I saw org.apache.solr.cloud.BasicDistributedZkTest fail with a stack trace > revealing we have a real issue with UpdateLog replay. Essentially, a > SolrQueryRequest is not threadsafe but we replay logs in parallel sharing the > same request instance. Creating DistributedUpdateProcessor ends up adding to > a shared HashMap in req.getContext() that should not be shared. > {noformat} > 2> WARNING: Uncaught exception in thread: > Thread[replayUpdatesExecutor-590-thread-2,5,TGRP-BasicDistributedZkTest] > 2> java.util.ConcurrentModificationException > 2> at __randomizedtesting.SeedInfo.seed([F2227B12A8FC234]:0) > 2> at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1135) > 2> at > org.apache.solr.update.processor.DistributedUpdateProcessorFactory.addParamToDistributedRequestWhitelist(DistributedUpdateProcessorFactory.java:46) > 2> at > org.apache.solr.update.processor.DistributedUpdateProcessor.<init>(DistributedUpdateProcessor.java:190) > 2> at > org.apache.solr.update.processor.DistributedUpdateProcessor.<init>(DistributedUpdateProcessor.java:160) > 2> at > org.apache.solr.update.processor.DistributedZkUpdateProcessor.<init>(DistributedZkUpdateProcessor.java:114) > 2> at > org.apache.solr.update.processor.DistributedUpdateProcessorFactory.getInstance(DistributedUpdateProcessorFactory.java:59) > 2> at > org.apache.solr.update.processor.UpdateRequestProcessorChain.createProcessor(UpdateRequestProcessorChain.java:242) > 2> at > org.apache.solr.update.processor.UpdateRequestProcessorChain.createProcessor(UpdateRequestProcessorChain.java:214) > 2> at > org.apache.solr.update.UpdateLog$LogReplayer.lambda$doReplay$0(UpdateLog.java:2103) > 2> at > java.base/java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:305) > 2> at java.base/java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:195) > 2> at java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172) > 2> at > org.apache.solr.update.UpdateLog$LogReplayer.lambda$execute$2(UpdateLog.java:2342) > 2> at > org.apache.solr.util.OrderedExecutor.lambda$execute$0(OrderedExecutor.java:68) > 2> at > org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$1(ExecutorUtil.java:449) > 2> at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > 2> at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > 2> at java.base/java.lang.Thread.run(Thread.java:829) > {noformat} -- 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