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

{
    extern const Metric ReplicatedSend;
}
namespace DB
{
namespace ErrorCodes
{
    extern const int DIRECTORY_ALREADY_EXISTS;
    extern const int NO_SUCH_DATA_PART;
    extern const int ABORTED;
    extern const int BAD_SIZE_OF_FILE_IN_DATA_PART;
    extern const int CANNOT_WRITE_TO_OSTREAM;
    extern const int CHECKSUM_DOESNT_MATCH;
    extern const int INSECURE_PATH;
    extern const int CORRUPTED_DATA;
    extern const int LOGICAL_ERROR;
    extern const int S3_ERROR;
    extern const int INCORRECT_PART_TYPE;
}
namespace DataPartsExchange
{
namespace
{
constexpr auto REPLICATION_PROTOCOL_VERSION_WITH_PARTS_SIZE = 1;
constexpr auto REPLICATION_PROTOCOL_VERSION_WITH_PARTS_SIZE_AND_TTL_INFOS = 2;
constexpr auto REPLICATION_PROTOCOL_VERSION_WITH_PARTS_TYPE = 3;
constexpr auto REPLICATION_PROTOCOL_VERSION_WITH_PARTS_DEFAULT_COMPRESSION = 4;
constexpr auto REPLICATION_PROTOCOL_VERSION_WITH_PARTS_UUID = 5;
constexpr auto REPLICATION_PROTOCOL_VERSION_WITH_PARTS_S3_COPY = 6;
std::string getEndpointId(const std::string & node_id)