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.
virtual MutationCommands getFirstAlterMutationCommandsForPart(const DataPartPtr & part) const = 0;
    
    bool movePartsToSpace(const DataPartsVector & parts, SpacePtr space);
    static void incrementInsertedPartsProfileEvent(MergeTreeDataPartType type);
    static void incrementMergedPartsProfileEvent(MergeTreeDataPartType type);
private:
    
    
    
    struct CurrentlyMovingPartsTagger
    {
        MergeTreeMovingParts parts_to_move;
        MergeTreeData & data;
        CurrentlyMovingPartsTagger(MergeTreeMovingParts && moving_parts_, MergeTreeData & data_);
        ~CurrentlyMovingPartsTagger();
    };
    using CurrentlyMovingPartsTaggerPtr = std::shared_ptr<CurrentlyMovingPartsTagger>;
    
    bool moveParts(const CurrentlyMovingPartsTaggerPtr & moving_tagger);
    
    CurrentlyMovingPartsTaggerPtr selectPartsForMove();
    
    CurrentlyMovingPartsTaggerPtr checkPartsForMove(const DataPartsVector & parts, SpacePtr space);
    bool canUsePolymorphicParts(const MergeTreeSettings & settings, String * out_reason = nullptr) const;
    std::mutex write_ahead_log_mutex;
    WriteAheadLogPtr write_ahead_log;
    virtual void startBackgroundMovesIfNeeded() = 0;
    bool allow_nullable_key{};
    void addPartContributionToDataVolume(const DataPartPtr & part);
    void removePartContributionToDataVolume(const DataPartPtr & part);