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