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

ASF GitHub Bot updated SOLR-18584:
----------------------------------
    Labels: pull-request-available  (was: )

> A failed RESTORE to a new collection leaves its shards in CONSTRUCTION, and 
> retrying the restore doesn't fix them
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-18584
>                 URL: https://issues.apache.org/jira/browse/SOLR-18584
>             Project: Solr
>          Issue Type: Bug
>          Components: Backup/Restore
>            Reporter: Boyi Dai
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When RESTORE targets a collection that doesn't exist, RestoreCmd 
> (RestoreOnANewCollection) creates the collection, marks all its shards 
> CONSTRUCTION, creates one replica per shard, installs the backed up data on 
> each shard, and only then marks the shards ACTIVE. If installing the data 
> fails for a shard, requestShardsToRestore() throws and 
> markAllShardsAsActive() is never called. The collection is left in ZooKeeper 
> with every shard in CONSTRUCTION.
> Unlike a failure to create the initial replicas, which deletes the 
> collection, nothing cleans this up. Retrying the same RESTORE now finds the 
> collection, so it takes the existing collection path 
> (RestoreOnExistingCollection). That path restores the data and reports 
> success, but never marks CONSTRUCTION shards ACTIVE. Updates to the 
> collection are then rejected because no active shard covers their hash range.
> This was found through code analysis, and I reproduced it with a test using 
> the test framework's error-throwing backup repository. It happens when 
> RESTORE is called synchronously. An async RESTORE doesn't abort when 
> restoring a shard fails (see the TODO in 
> ShardRequestTracker.processResponses): it reports FAILED, but still marks the 
> shards ACTIVE and leaves the collection in place without the data that failed 
> to restore.
> *Steps to reproduce:*
> # Back up a collection.
> # Synchronously RESTORE the backup to a new collection T, with restoring the 
> shard data failing (e.g. the backup repository fails to copy an index file).
> # Retry the same RESTORE once the repository works again.
> # Result: the retry succeeds, but T's shards stay in CONSTRUCTION, so updates 
> to T fail.
> *Expected:* a failed restore to a new collection shouldn't leave a 
> half-restored collection behind, and a retry should produce a usable 
> collection.
> *Proposed fix:* if anything fails after the collection is created and before 
> its shards are marked ACTIVE, delete the collection, as is already done when 
> the initial replicas can't be created, and treat a shard restore failure 
> recorded by an async request the same way. A retry then restores to a new 
> collection again. I have a patch with a test and will open a PR.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to