version 21.5.5.12 (official build)

I'm trying to change data type for a column that is used in the TTL expression.
It works well when the table is empty.
When the table is not empty, the mutation fails.
As a result the table ends up in an inconsistent state.

```
create table test
(
InsertionDateTime DateTime,
TTLDays Int32 DEFAULT CAST(365, 'Int32')
)
Engine=MergeTree()
order by tuple()
TTL InsertionDateTime + toIntervalDay(TTLDays);

Ok.

insert into test values (now(), 23);

Ok.

ALTER TABLE test modify column TTLDays Int16 DEFAULT CAST(365, 'Int16');

Code: 341, e.displayText() = DB::Exception: Exception happened during execution of mutation 'mutation_2.txt' with part 'all_1_1_0' reason: 'Code: 10, e.displayText() = DB::Exception: Not found column InsertionDateTime in block. There are only columns: TTLDays (version 21.5.5.12 (official build))'. This error maybe retryable or not. In case of unretryable error, mutation can be killed with KILL MUTATION query (version 21.5.5.12 (official build)) [DB Errorcode=341]

insert into test values (now(), 23);

Ok.

select table, column, type, sum(rows) rows, sum(column_bytes_on_disk) on_disk
from system.parts_columns where column like 'TTLDays'
group by database, table, column, type

table | column  | type  | rows | on_disk
------+---------+-------+------+--------
test  | TTLDays | Int32 |    1 |      86
test  | TTLDays | Int16 |    1 |      84
```
: data(data_), background_pool_size(background_pool_size_), log(&Poco::Logger::get(data.getLogName() + " (MergerMutator)"))
{
}
UInt64 MergeTreeDataMergerMutator::getMaxSourcePartsSizeForMerge() const
{
    size_t busy_threads_in_pool = CurrentMetrics::values[CurrentMetrics::BackgroundPoolTask].load(std::memory_order_relaxed);
    return getMaxSourcePartsSizeForMerge(background_pool_size, busy_threads_in_pool);
}
UInt64 MergeTreeDataMergerMutator::getMaxSourcePartsSizeForMerge(size_t pool_size, size_t pool_used) const
{
    if (pool_used > pool_size)
        throw Exception("Logical error: invalid arguments passed to getMaxSourcePartsSize: pool_used > pool_size", ErrorCodes::LOGICAL_ERROR);
    size_t free_entries = pool_size - pool_used;
    const auto data_settings = data.getSettings();
    
    
    
    UInt64 max_size = 0;
    if (pool_used <= 1 || free_entries >= data_settings->number_of_free_entries_in_pool_to_lower_max_size_of_merge)
        max_size = data_settings->max_bytes_to_merge_at_max_space_in_pool;
    else
        max_size = interpolateExponential(
            data_settings->max_bytes_to_merge_at_min_space_in_pool,
            data_settings->max_bytes_to_merge_at_max_space_in_pool,
            static_cast<double>(free_entries) / data_settings->number_of_free_entries_in_pool_to_lower_max_size_of_merge);
    return std::min(max_size, static_cast<UInt64>(data.getStoragePolicy()->getMaxUnreservedFreeSpace() / DISK_USAGE_COEFFICIENT_TO_SELECT));
}
UInt64 MergeTreeDataMergerMutator::getMaxSourcePartSizeForMutation() const