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

Jason Gerlowski commented on SOLR-17413:
----------------------------------------

The failure shows very rarely, but I am able to reproduce it on my local 
machine when using a very high number of iterations:

{code}
./gradlew -p solr/core test --tests BasicDistributedZkTest -Ptests.iters=300 
-Ptests.dups=4
{code}

I've created a PR for the fix [here|https://github.com/apache/solr/pull/2765], 
which allows BasicDistributedZkTest to reliably succeed.  Will kick off a few 
more high-iteration runs to make sure I haven't just gotten "lucky", but seems 
like this works (y)

> 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
>            Priority: Major
>              Labels: newdev, pull-request-available
>          Time Spent: 10m
>  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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to