On 8/4/25 10:22 PM, Jacob Tanenbaum wrote:
> This patch handles the logical router creation incrementally in the
> northd engine node. This patch covers the depended node lr-nat but
> further dependant nodes will be handled in upcoming patches.
> 
> This is built on Mark Michelson's patch series located here
> 
> https://patchwork.ozlabs.org/project/ovn/list/?series=465828
> 
> this is required because the datapath refactor was required in order to
> accomplish incremental processing of the logical routers
> 
> also built with the first two patches of this series by Lorenzo Bianconi
> located  https://patchwork.ozlabs.org/project/ovn/list/?series=466579.
> He brought in some changes required to dynamically allocate the sizes of
> the datapaths array.
> 
> Reported-by: Dumitru Ceara <dce...@redhat.com>
> Reported-at: https://issues.redhat.com/browse/FDP-757
> Signed-off-by: Jacob Tanenbaum <jtane...@redhat.com>
> 

Hi Jacob,

I know you're working on rebasing this but I wanted to share a comment
that I think needs to be addressed as a minimal prerequisite for getting
this series merged.

> @@ -5097,13 +5099,37 @@ northd_handle_lr_changes(const struct northd_input 
> *ni,
>                           struct northd_data *nd)
>  {
>      const struct nbrec_logical_router *changed_lr;
> +    const struct nbrec_logical_router *new_lr;
>  
> -    if (!hmapx_is_empty(&ni->synced_lrs->new) ||
> -        !hmapx_is_empty(&ni->synced_lrs->deleted)) {
> +    if (!hmapx_is_empty(&ni->synced_lrs->deleted)) {
>          goto fail;
>      }
>  
>      struct hmapx_node *node;
> +    HMAPX_FOR_EACH (node, &ni->synced_lrs->new) {
> +        const struct ovn_synced_logical_router *synced = node->data;
> +        new_lr = synced->nb;
> +
> +        if (new_lr->n_ports > 0
> +            || new_lr->n_policies > 0
> +            || new_lr->n_static_routes > 0
> +            || !lrouter_is_enabled(new_lr)
> +            || !smap_is_empty(&new_lr->options)
> +            || !smap_is_empty(&new_lr->external_ids)) {
> +            goto fail;
> +        }

This is extremely restrictive, it essentially translates to CMS
inserting a transaction that's the exact equivalent of "ovn-nbctl lr-add
lr".

In practice CMS almost never do that.  The transaction that creates the
router normally also adds ports to it (otherwise the router is useless)
and almost always adds some routes and/or options.  Probably also
external IDs.

So, while this would maybe pass on simple tests like "lr-add lr" in
practice it won't provide any benefit to CMS.

I think the next revision should try to handle more common cases than v2
does.

Which also makes me think that, unfortunately, this might have to slip
to the next development cycle.

Regards,
Dumitru

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to