
**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.

const StorageMetadataPtr & metadata_snapshot,
    const String & part_name,
    const String & replica_path,
    const String & host,
    int port,
    const ConnectionTimeouts & timeouts,
    const String & user,
    const String & password,
    const String & interserver_scheme,
    bool to_detached,
    const String & tmp_prefix_,
    std::optional<CurrentlySubmergingEmergingTagger> * tagger_ptr,
    bool try_use_s3_copy,
    const DiskPtr disk_s3)
{
    if (blocker.isCancelled())
        throw Exception("Fetching of part was cancelled", ErrorCodes::ABORTED);
    
    auto part_info = MergeTreePartInfo::fromPartName(part_name, data.format_version);
    const auto data_settings = data.getSettings();
    Poco::URI uri;
    uri.setScheme(interserver_scheme);
    uri.setHost(host);
    uri.setPort(port);
    uri.setQueryParameters(
    {
        {"endpoint",                getEndpointId(replica_path)},
        {"part",                    part_name},