On Tue, Aug 2, 2022 at 10:22 AM Mohammad Heib <[email protected]> wrote:
>
> ovn-northd re-create sbrec row for lport of type
> virtual when the type explicitly updated in NBDB.
>
> This approach was applied to handle container lport
> type updates and avoid handling issues in the ovn-controller,
> this patch expanded that approach to handle lport of type
> virtual in the same way.
>
> Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2099288
> Fixes: cd3b685043fa (northd: handle container lport type update)
> Signed-off-by: Mohammad Heib <[email protected]>
> Acked-by: Dumitru Ceara <[email protected]>

Thanks.  Applied the patch to main and backported upto branch-21.12

Numan

> ---
>  northd/northd.c | 31 ++++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/northd/northd.c b/northd/northd.c
> index d31cb1688..5ce352666 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -1856,9 +1856,9 @@ localnet_can_learn_mac(const struct 
> nbrec_logical_switch_port *nbsp)
>  static bool
>  lsp_is_type_changed(const struct sbrec_port_binding *sb,
>                  const struct nbrec_logical_switch_port *nbsp,
> -                bool *is_old_container_lport)
> +                bool *update_sbrec)
>  {
> -    *is_old_container_lport = false;
> +    *update_sbrec = false;
>      if (!sb || !nbsp) {
>          return false;
>      }
> @@ -1870,13 +1870,19 @@ lsp_is_type_changed(const struct sbrec_port_binding 
> *sb,
>           */
>          if ((!sb->parent_port && nbsp->parent_name) ||
>                          (sb->parent_port && !nbsp->parent_name)) {
> -            *is_old_container_lport = true;
> +            *update_sbrec = true;
>              return true;
>          } else {
>              return false;
>          }
>      }
>
> +    /* Cover cases where port changed to/from virtual port */
> +    if (!strcmp(sb->type, "virtual") ||
> +                !strcmp(nbsp->type, "virtual")) {
> +        *update_sbrec = true;
> +    }
> +
>      /* Both lports are not "VIF's" it is safe to use strcmp. */
>      if (sb->type[0] && nbsp->type[0]) {
>          return strcmp(sb->type, nbsp->type);
> @@ -2598,19 +2604,18 @@ join_logical_ports(struct northd_input *input_data,
>                       *    created one and recompute everything that is needed
>                       *    for this lport.
>                       *
> -                     * This change will affect container lport type changes
> -                     * only for now, this change is needed in container
> -                     * lport cases to avoid port type conflicts in the
> -                     * ovn-controller when the user clears the parent_port
> -                     * field in the container lport.
> +                     * This change will affect container/virtual lport type
> +                     * changes only for now, this change is needed in
> +                     * contaier/virtual lport cases to avoid port type
> +                     * conflicts in the ovn-controller when the user clears
> +                     * the parent_port field in the container lport or 
> updated
> +                     * the lport type.
>                       *
> -                     * This approach can be applied to all other lport types
> -                     * changes by removing the is_old_container_lport.
>                       */
> -                    bool is_old_container_lport = false;
> +                    bool update_sbrec = false;
>                      if (op->sb && lsp_is_type_changed(op->sb, nbsp,
> -                                                      
> &is_old_container_lport)
> -                                   && is_old_container_lport) {
> +                                                      &update_sbrec)
> +                                   && update_sbrec) {
>                          ovs_list_remove(&op->list);
>                          sbrec_port_binding_delete(op->sb);
>                          ovn_port_destroy(ports, op);
> --
> 2.34.1
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to