Configuration of Gateway Chassis with different name than the default
format of "$lrp-$chassis" could lead to duplicates when priority was
changed for the GW Chassis with different name e.g.:

lrp0_chassis1     1  --> inserted by cms
lrp0-chassis1     2  --> change priority with ovn-nbctl lrp-set-gateway-chassis

ovn-controller would then create a log message every time it tried
recalculate priorities.

Search the GW Chassis linked to specified LRP by chassis_name first
before resorting to uuid or name search.

Signed-off-by: Lucas Vargas Dias <lucas.vd...@luizalabs.com>
---
 tests/ovn-nbctl.at    | 16 +++++++++++++++-
 utilities/ovn-nbctl.c | 18 +++++++++++++++---
 2 files changed, 30 insertions(+), 4 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..34caf599b 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -5829,12 +5829,22 @@ 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_chassis_name_or_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;
 
+    for (size_t i = 0; i < lrp->n_gateway_chassis; i++) {
+        if (!strcmp(lrp->gateway_chassis[i]->chassis_name, chassis_name)) {
+            *gc_p = lrp->gateway_chassis[i];
+            return NULL;
+        }
+    }
+
     struct uuid gc_uuid;
     bool is_uuid = uuid_from_string(&gc_uuid, id);
     if (is_uuid) {
@@ -5867,6 +5877,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 +5908,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_chassis_name_or_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

Reply via email to