You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Cao Manh Dat (JIRA)" <ji...@apache.org> on 2018/01/29 09:02:00 UTC

[jira] [Resolved] (SOLR-10525) Stacked recovery requests do no cancel an in progress recovery first.

     [ https://issues.apache.org/jira/browse/SOLR-10525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Cao Manh Dat resolved SOLR-10525.
---------------------------------
       Resolution: Fixed
         Assignee: Cao Manh Dat  (was: Mark Miller)
    Fix Version/s: 7.3
                   master (8.0)

Committed by SOLR-11702

> Stacked recovery requests do no cancel an in progress recovery first.
> ---------------------------------------------------------------------
>
>                 Key: SOLR-10525
>                 URL: https://issues.apache.org/jira/browse/SOLR-10525
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: SolrCloud
>            Reporter: Mike Drob
>            Assignee: Cao Manh Dat
>            Priority: Major
>             Fix For: master (8.0), 7.3
>
>         Attachments: SOLR-10525.patch, SOLR-10525.patch
>
>
> https://github.com/apache/lucene-solr/blob/master/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java#L300-L310
> Two issues with this code:
> {code}
>           boolean locked = recoveryLock.tryLock();
>           try {
>             if (!locked) {
>               if (recoveryWaiting.get() > 0) { // line 1
>                 return;
>               }
>               recoveryWaiting.incrementAndGet(); // line 2
>             } else {
>               recoveryWaiting.incrementAndGet();
>               cancelRecovery(); // line 3
> }
> {code}
> The {{cancelRecovery}} on line 3 call will only hit when there are no recoveries to actually cancel (since we got the lock that means there are no recoveries in progress). Instead it should be moved either to the either branch of the if, or outside after the if since we know we will be running a recovery at that point.
> This code doesn't always prevent multiple requests from stacking. If there is a recovery running, but no recoveries currently waiting, multiple requests can check the count at line 1 before any of them will increment the count at line 2 and thus all of them will hit the increment.
> I don't have specific tests for this, but it's causing failures for me on my SOLR-9555 work in progress.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org