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.
restore_part_tasks.push_back(
                std::make_unique<RestorePartTask>(storage, sink, part_name, *part_info, backup, data_path_in_backup));
        }
        return restore_part_tasks;
    }
private:
    std::shared_ptr<StorageReplicatedMergeTree> storage;
    std::unordered_set<String> partition_ids;
    BackupPtr backup;
    StorageRestoreSettings restore_settings;
    std::shared_ptr<IRestoreCoordination> restore_coordination;
    class RestorePartTask : public IRestoreTask
    {
    public:
        RestorePartTask(
            const std::shared_ptr<StorageReplicatedMergeTree> & storage_,
            const std::shared_ptr<ReplicatedMergeTreeSink> & sink_,
            const String & part_name_,
            const MergeTreePartInfo & part_info_,
            const BackupPtr & backup_,
            const String & data_path_in_backup_)
            : storage(storage_)
            , sink(sink_)
            , part_name(part_name_)
            , part_info(part_info_)
            , backup(backup_)
            , data_path_in_backup(data_path_in_backup_)
        {
        }
        RestoreTasks run() override