If a CMS configure a gateway chassis with string diffent of format "%s-%s" lrp-chassis and user wants to change priority of chassis using ovn-nbctl, it creates duplicate entries: lrp0_chassis1 1 --> inserted by cms lrp0-chassis1 2 --> change priority with ovn-nbctl lrp-set-gateway-chassis
This duplicate entries generate loop of messages in ovn-controller due to recalculation of priorities. This commit fix it changing the search by gateway chassis existent. Fix compares first the chassis name linked to LRP, second by uuid, and last, by lrp-chassis name. Signed-off-by: Lucas Vargas Dias <lucas.vd...@luizalabs.com> --- tests/ovn-nbctl.at | 16 +++++++++++++++- utilities/ovn-nbctl.c | 24 ++++++++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at index bdeb3aeee..fe4a984d0 100644 --- a/tests/ovn-nbctl.at +++ b/tests/ovn-nbctl.at @@ -1958,7 +1958,21 @@ AT_CHECK([ovn-nbctl lrp-get-gateway-chassis lrp0], [0], [dnl lrp0-chassis2 10 lrp0-chassis3 5 lrp0-chassis1 1 -])]) +]) +gc_uuid=$(ovn-nbctl --bare --colum _uuid find gateway_chassis name='lrp0-chassis1') +AT_CHECK([ovn-nbctl set gateway_chassis $gc_uuid name='lrp0_chassis1']) +AT_CHECK([ovn-nbctl lrp-get-gateway-chassis lrp0], [0], [dnl +lrp0-chassis2 10 +lrp0-chassis3 5 +lrp0_chassis1 1 +]) +AT_CHECK([ovn-nbctl lrp-set-gateway-chassis lrp0 chassis1 2]) +AT_CHECK([ovn-nbctl lrp-get-gateway-chassis lrp0], [0], [dnl +lrp0-chassis2 10 +lrp0-chassis3 5 +lrp0_chassis1 2 +]) +]) dnl --------------------------------------------------------------------- diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c index 56a513217..06839176a 100644 --- a/utilities/ovn-nbctl.c +++ b/utilities/ovn-nbctl.c @@ -5829,15 +5829,29 @@ lr_get_name(const struct nbrec_logical_router *lr, char uuid_s[UUID_LEN + 1], } static char * OVS_WARN_UNUSED_RESULT -gc_by_name_or_uuid(struct ctl_context *ctx, const char *id, bool must_exist, - const struct nbrec_gateway_chassis **gc_p) +gc_by_name_chassis_name_or_uuid(struct ctl_context *ctx, const char *id, + const char *chassis_name, bool must_exist, + const struct nbrec_gateway_chassis **gc_p, + const struct nbrec_logical_router_port *lrp) { const struct nbrec_gateway_chassis *gc = NULL; *gc_p = NULL; + if (lrp && chassis_name) { + for (size_t i = 0; i < lrp->n_gateway_chassis; i++) { + if (strlen(lrp->gateway_chassis[i]->chassis_name) == + strlen(chassis_name) && + !strcmp(lrp->gateway_chassis[i]->chassis_name, + chassis_name)) { + gc = lrp->gateway_chassis[i]; + break; + } + } + } + struct uuid gc_uuid; bool is_uuid = uuid_from_string(&gc_uuid, id); - if (is_uuid) { + if (is_uuid && !gc) { gc = nbrec_gateway_chassis_get_for_uuid(ctx->idl, &gc_uuid); } @@ -5867,6 +5881,7 @@ nbctl_pre_lrp_set_gateway_chassis(struct ctl_context *ctx) ovsdb_idl_add_column(ctx->idl, &nbrec_gateway_chassis_col_name); ovsdb_idl_add_column(ctx->idl, &nbrec_gateway_chassis_col_priority); + ovsdb_idl_add_column(ctx->idl, &nbrec_gateway_chassis_col_chassis_name); } static void @@ -5897,7 +5912,8 @@ nbctl_lrp_set_gateway_chassis(struct ctl_context *ctx) gc_name = xasprintf("%s-%s", lrp_name, chassis_name); const struct nbrec_gateway_chassis *gc; - error = gc_by_name_or_uuid(ctx, gc_name, false, &gc); + error = gc_by_name_chassis_name_or_uuid(ctx, gc_name, chassis_name, false, + &gc, lrp); if (error) { ctx->error = error; free(gc_name); -- 2.34.1 -- _'Esta mensagem é direcionada apenas para os endereços constantes no cabeçalho inicial. Se você não está listado nos endereços constantes no cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão imediatamente anuladas e proibidas'._ * **'Apesar do Magazine Luiza tomar todas as precauções razoáveis para assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por quaisquer perdas ou danos causados por esse e-mail ou por seus anexos'.* _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev