For some reasons when we delete a MergeTree Part in atomic way something may go wrong - and leave the `delete_tmp_*` folder or it's part on disk. This may lead to a disk space consumption over time.

It's suggested to delete this folders at least at server start-up. Current solution with `clearOldTemporaryDirectories()` doesn't work because this method is called periodically from a thread without any locks or advisory on folders - it may cause the race conditions.
const String &, const String & detached_replica_name, const String & detached_zookeeper_path)
{
    bool keep_shared = false;
    zkutil::ZooKeeperPtr zookeeper = getZooKeeper();
    NameSet files_not_to_remove;
    fs::path checksums = fs::path(path) / IMergeTreeDataPart::FILE_FOR_REFERENCES_CHECK;
    if (disk->exists(checksums))
    {
        if (disk->getRefCount(checksums) == 0)
        {
            String id = disk->getUniqueId(checksums);
            bool can_remove = false;
            std::tie(can_remove, files_not_to_remove) = StorageReplicatedMergeTree::unlockSharedDataByID(id, table_uuid, part_name,
                detached_replica_name, disk, zookeeper, getContext()->getReplicatedMergeTreeSettings(), log,
                detached_zookeeper_path);
            keep_shared = !can_remove;
        }
        else
            keep_shared = true;
    }
    disk->removeSharedRecursive(path, keep_shared, files_not_to_remove);
    return keep_shared;
}
void StorageReplicatedMergeTree::createAndStoreFreezeMetadata(DiskPtr disk, DataPartPtr, String backup_part_path) const