- some copier work needs to be improved

1. clickhouse create destionation table just once if success
2. support settings_push.replication_alter_partitions_sync =1 at attach partition 
3. ...
bool was_failed_pieces = false;
    bool was_active_pieces = false;
    for (size_t piece_number = 0; piece_number < total_number_of_pieces; piece_number++)
    {
        for (UInt64 try_num = 0; try_num < max_shard_partition_tries; ++try_num)
        {
            LOG_INFO(log, "Attempt number {} to process partition {} piece number {} on shard number {} with index {}.",
                try_num, task_partition.name, piece_number,
                task_partition.task_shard.numberInCluster(),
                task_partition.task_shard.indexInCluster());
            res = processPartitionPieceTaskImpl(timeouts, task_partition, piece_number, is_unprioritized_task);
            
            if (res == TaskStatus::Finished)
                break;
            
            if (res == TaskStatus::Active)
                break;
            
            std::this_thread::sleep_for(default_sleep_time);
        }
        was_active_pieces = (res == TaskStatus::Active);
        was_failed_pieces = (res == TaskStatus::Error);
    }
    if (was_failed_pieces)
        return TaskStatus::Error;
    if (was_active_pieces)
        return TaskStatus::Active;
    return TaskStatus::Finished;
}
TaskStatus ClusterCopier::processPartitionPieceTaskImpl(