I am reading clickhouse mutation code. In StorageMergeTree->selectPartsToMutate() function, there is a check 
`if (current_ast_elements + commands_size >= max_ast_elements)
                break;`

I think if there are many mutations then the check result will be true, so that it will skip the remaining mutations.
But the new part's mutation is set to the last one in mutation map, and it does not apply the remaining mutations actually.
`new_part_info.mutation = current_mutations_by_version.rbegin()->first;`

Then the new part will miss the remaining mutations in future mutation job.

I think it's wrong here. Am I right?

If it is right, I will submit a PR 

{
            if (throw_if_noop)
                throw Exception("Part " + part_name
                                + " is currently participating in a background operation (mutation/merge)"
                                + ", try again later", ErrorCodes::PART_IS_TEMPORARILY_LOCKED);
            return false;
        }
        if (partIsLastQuorumPart(part->info))
        {
            if (throw_if_noop)
                throw Exception("Part " + part_name + " is last inserted part with quorum in partition. Cannot drop",
                                ErrorCodes::NOT_IMPLEMENTED);
            return false;
        }
        if (partIsInsertingWithParallelQuorum(part->info))
        {
            if (throw_if_noop)
                throw Exception("Part " + part_name + " is inserting with parallel quorum. Cannot drop",
                                ErrorCodes::NOT_IMPLEMENTED);
            return false;
        }
        Coordination::Requests ops;
        getClearBlocksInPartitionOps(ops, *zookeeper, part_info.partition_id, part_info.min_block, part_info.max_block);
        size_t clear_block_ops_size = ops.size();
        
        
        entry.type = LogEntry::DROP_RANGE;
        entry.source_replica = replica_name;