
**Describe the bug**
While using quorum replication, one of shards was found in a state when quorum was not being achieved because 3 replicas out of 4 were reporting the same error:
```
"Directory tmp_fetch_XXX already exists."
```

 which is thrown here: https://github.com/ClickHouse/ClickHouse/blob/master/src/Storages/MergeTree/DataPartsExchange.cpp#L340

After manually removing this temp folder on one of the replicas the replica has successfully downloaded the missing part and has caught up.

Looking at the code closely, once this temp dir is created there seems to be no code path that would remove it.
In several other places in the same function, there is 
```
disk->removeRecursive(part_download_path);
throw ...
```
kind of code that clears up the temp opening up a path for successful retry. But in the case above retries will fail forever.

{
    int client_protocol_version = parse<int>(params.get("client_protocol_version", "0"));
    String part_name = params.get("part");
    const auto data_settings = data.getSettings();
    
    MergeTreePartInfo::fromPartName(part_name, data.format_version);
    static std::atomic_uint total_sends {0};
    if ((data_settings->replicated_max_parallel_sends
            && total_sends >= data_settings->replicated_max_parallel_sends)
        || (data_settings->replicated_max_parallel_sends_for_table
            && data.current_table_sends >= data_settings->replicated_max_parallel_sends_for_table))
    {
        response.setStatus(std::to_string(HTTP_TOO_MANY_REQUESTS));
        response.setReason("Too many concurrent fetches, try again later");
        response.set("Retry-After", "10");
        response.setChunkedTransferEncoding(false);
        return;
    }
    
    response.addCookie({"server_protocol_version", toString(std::min(client_protocol_version, REPLICATION_PROTOCOL_VERSION_WITH_PARTS_S3_COPY))});
    ++total_sends;
    SCOPE_EXIT({--total_sends;});
    ++data.current_table_sends;
    SCOPE_EXIT({--data.current_table_sends;});
    LOG_TRACE(log, "Sending part {}", part_name);
    try
    {
        MergeTreeData::DataPartPtr part = findPart(part_name);