[ovs-dev] [PATCH 08/11] ovn-nbctl: Propagate error thru the context.

Jakub Sitnicki jkbs at redhat.com
Tue Jul 17 13:34:12 UTC 2018


Instead of dying let the main loop handle the error.
This will allow us to report errors when running in daemon mode.

This is a result of applying the following semantic patch:

@@
identifier F;
identifier C;
identifier E;
@@
  static void F(struct ctl_context *C) {
<...
      if (E) {
-         ctl_fatal("%s", E);
+         C->error = E;
+         return;
      }
...>
  }

Signed-off-by: Jakub Sitnicki <jkbs at redhat.com>
---
 ovn/utilities/ovn-nbctl.c | 135 ++++++++++++++++++++++++++++++----------------
 1 file changed, 90 insertions(+), 45 deletions(-)

diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c
index cf49a6b11..cf2b8eced 100644
--- a/ovn/utilities/ovn-nbctl.c
+++ b/ovn/utilities/ovn-nbctl.c
@@ -813,7 +813,8 @@ nbctl_show(struct ctl_context *ctx)
     if (ctx->argc == 2) {
         char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], false, &ls);
         if (error) {
-            ctl_fatal("%s", error);
+            ctx->error = error;
+            return;
         }
         if (ls) {
             print_ls(ls, &ctx->output);
@@ -828,7 +829,8 @@ nbctl_show(struct ctl_context *ctx)
     if (ctx->argc == 2) {
         char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], false, &lr);
         if (error) {
-            ctl_fatal("%s", error);
+            ctx->error = error;
+            return;
         }
         if (lr) {
             print_lr(lr, &ctx->output);
@@ -1126,7 +1128,8 @@ nbctl_lsp_del(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, ctx->argv[1], must_exist, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (!lsp) {
         return;
@@ -1158,7 +1161,8 @@ nbctl_lsp_list(struct ctl_context *ctx)
 
     char *error = ls_by_name_or_uuid(ctx, id, true, &ls);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     smap_init(&lsps);
@@ -1183,7 +1187,8 @@ nbctl_lsp_get_parent(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, ctx->argv[1], true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (lsp->parent_name) {
         ds_put_format(&ctx->output, "%s\n", lsp->parent_name);
@@ -1197,7 +1202,8 @@ nbctl_lsp_get_tag(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, ctx->argv[1], true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (lsp->n_tag > 0) {
         ds_put_format(&ctx->output, "%"PRId64"\n", lsp->tag[0]);
@@ -1212,7 +1218,8 @@ nbctl_lsp_set_addresses(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     int i;
@@ -1245,7 +1252,8 @@ nbctl_lsp_get_addresses(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     svec_init(&addresses);
@@ -1267,7 +1275,8 @@ nbctl_lsp_set_port_security(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     nbrec_logical_switch_port_set_port_security(lsp,
             (const char **) ctx->argv + 2, ctx->argc - 2);
@@ -1284,7 +1293,8 @@ nbctl_lsp_get_port_security(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     svec_init(&addrs);
     for (i = 0; i < lsp->n_port_security; i++) {
@@ -1305,7 +1315,8 @@ nbctl_lsp_get_up(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     ds_put_format(&ctx->output,
                   "%s\n", (lsp->up && *lsp->up) ? "up" : "down");
@@ -1336,12 +1347,14 @@ nbctl_lsp_set_enabled(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     bool enabled;
     error = parse_enabled(state, &enabled);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     nbrec_logical_switch_port_set_enabled(lsp, &enabled, 1);
 }
@@ -1354,7 +1367,8 @@ nbctl_lsp_get_enabled(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     ds_put_format(&ctx->output, "%s\n",
                   !lsp->enabled || *lsp->enabled ? "enabled" : "disabled");
@@ -1389,7 +1403,8 @@ nbctl_lsp_get_type(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     ds_put_format(&ctx->output, "%s\n", lsp->type);
 }
@@ -1404,7 +1419,8 @@ nbctl_lsp_set_options(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     for (i = 2; i < ctx->argc; i++) {
         char *key, *value;
@@ -1430,7 +1446,8 @@ nbctl_lsp_get_options(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     SMAP_FOR_EACH(node, &lsp->options) {
         ds_put_format(&ctx->output, "%s=%s\n", node->key, node->value);
@@ -1445,13 +1462,15 @@ nbctl_lsp_set_dhcpv4_options(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     const struct nbrec_dhcp_options *dhcp_opt = NULL;
     if (ctx->argc == 3 ) {
         error = dhcp_options_get(ctx, ctx->argv[2], true, &dhcp_opt);
         if (error) {
-            ctl_fatal("%s", error);
+            ctx->error = error;
+            return;
         }
     }
 
@@ -1475,13 +1494,15 @@ nbctl_lsp_set_dhcpv6_options(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     const struct nbrec_dhcp_options *dhcp_opt = NULL;
     if (ctx->argc == 3) {
         error = dhcp_options_get(ctx, ctx->argv[2], true, &dhcp_opt);
         if (error) {
-            ctl_fatal("%s", error);
+            ctx->error = error;
+            return;
         }
     }
 
@@ -1505,7 +1526,8 @@ nbctl_lsp_get_dhcpv4_options(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (lsp->dhcpv4_options) {
         ds_put_format(&ctx->output, UUID_FMT " (%s)\n",
@@ -1522,7 +1544,8 @@ nbctl_lsp_get_dhcpv6_options(struct ctl_context *ctx)
 
     char *error = lsp_by_name_or_uuid(ctx, id, true, &lsp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (lsp->dhcpv6_options) {
         ds_put_format(&ctx->output, UUID_FMT " (%s)\n",
@@ -1623,7 +1646,8 @@ nbctl_acl_list(struct ctl_context *ctx)
 
     char *error = acl_cmd_get_pg_or_ls(ctx, &ls, &pg);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     size_t n_acls = pg ? pg->n_acls : ls->n_acls;
@@ -1802,7 +1826,8 @@ nbctl_acl_del(struct ctl_context *ctx)
 
     char *error = acl_cmd_get_pg_or_ls(ctx, &ls, &pg);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     if (ctx->argc == 2) {
@@ -1821,7 +1846,8 @@ nbctl_acl_del(struct ctl_context *ctx)
     const char *direction;
     error = parse_direction(ctx->argv[2], &direction);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     size_t n_acls = pg ? pg->n_acls : ls->n_acls;
@@ -1852,7 +1878,8 @@ nbctl_acl_del(struct ctl_context *ctx)
     int64_t priority;
     error = parse_priority(ctx->argv[3], &priority);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     if (ctx->argc == 4) {
@@ -1892,7 +1919,8 @@ nbctl_qos_list(struct ctl_context *ctx)
 
     char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     qos_rules = xmalloc(sizeof *qos_rules * ls->n_qos_rules);
@@ -2046,7 +2074,8 @@ nbctl_qos_del(struct ctl_context *ctx)
     const struct nbrec_logical_switch *ls;
     char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     if (ctx->argc == 2) {
@@ -2086,7 +2115,8 @@ nbctl_qos_del(struct ctl_context *ctx)
     int64_t priority;
     error = parse_priority(ctx->argv[3], &priority);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     if (ctx->argc == 4) {
@@ -2433,7 +2463,8 @@ nbctl_lr_lb_del(struct ctl_context *ctx)
     const struct nbrec_load_balancer *del_lb;
     char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], true, &lr);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     if (ctx->argc == 2) {
@@ -2446,7 +2477,8 @@ nbctl_lr_lb_del(struct ctl_context *ctx)
 
     error = lb_by_name_or_uuid(ctx, ctx->argv[2], true, &del_lb);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     for (size_t i = 0; i < lr->n_load_balancer; i++) {
         const struct nbrec_load_balancer *lb
@@ -2484,7 +2516,8 @@ nbctl_lr_lb_list(struct ctl_context *ctx)
 
     char *error = lr_by_name_or_uuid(ctx, lr_name, true, &lr);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     for (int i = 0; i < lr->n_load_balancer; i++) {
         const struct nbrec_load_balancer *lb
@@ -2554,7 +2587,8 @@ nbctl_ls_lb_del(struct ctl_context *ctx)
     const struct nbrec_load_balancer *del_lb;
     char *error = ls_by_name_or_uuid(ctx, ctx->argv[1], true, &ls);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     if (ctx->argc == 2) {
@@ -2567,7 +2601,8 @@ nbctl_ls_lb_del(struct ctl_context *ctx)
 
     error = lb_by_name_or_uuid(ctx, ctx->argv[2], true, &del_lb);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     for (size_t i = 0; i < ls->n_load_balancer; i++) {
         const struct nbrec_load_balancer *lb
@@ -2605,7 +2640,8 @@ nbctl_ls_lb_list(struct ctl_context *ctx)
 
     char *error = ls_by_name_or_uuid(ctx, ls_name, true, &ls);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     for (int i = 0; i < ls->n_load_balancer; i++) {
         const struct nbrec_load_balancer *lb
@@ -2762,7 +2798,8 @@ nbctl_dhcp_options_set_options(struct ctl_context *ctx)
     const struct nbrec_dhcp_options *dhcp_opts;
     char *error = dhcp_options_get(ctx, ctx->argv[1], true, &dhcp_opts);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     struct smap dhcp_options = SMAP_INITIALIZER(&dhcp_options);
@@ -2786,7 +2823,8 @@ nbctl_dhcp_options_get_options(struct ctl_context *ctx)
     const struct nbrec_dhcp_options *dhcp_opts;
     char *error = dhcp_options_get(ctx, ctx->argv[1], true, &dhcp_opts);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     struct smap_node *node;
@@ -2804,7 +2842,8 @@ nbctl_dhcp_options_del(struct ctl_context *ctx)
 
     char *error = dhcp_options_get(ctx, id, must_exist, &dhcp_opts);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (!dhcp_opts) {
         return;
@@ -3265,7 +3304,8 @@ nbctl_lr_nat_list(struct ctl_context *ctx)
     const struct nbrec_logical_router *lr;
     char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], true, &lr);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     struct smap lr_nats = SMAP_INITIALIZER(&lr_nats);
@@ -3422,7 +3462,8 @@ nbctl_lrp_set_gateway_chassis(struct ctl_context *ctx)
     const struct nbrec_gateway_chassis *existing_gc;
     error = gc_by_name_or_uuid(ctx, gc_name, false, &existing_gc);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (existing_gc) {
         nbrec_gateway_chassis_set_priority(existing_gc, priority);
@@ -3714,7 +3755,8 @@ nbctl_lrp_del(struct ctl_context *ctx)
 
     char *error = lrp_by_name_or_uuid(ctx, ctx->argv[1], must_exist, &lrp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (!lrp) {
         return;
@@ -3747,7 +3789,8 @@ nbctl_lrp_list(struct ctl_context *ctx)
 
     char *error = lr_by_name_or_uuid(ctx, id, true, &lr);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     smap_init(&lrps);
@@ -3800,7 +3843,8 @@ nbctl_lrp_get_enabled(struct ctl_context *ctx)
 
     char *error = lrp_by_name_or_uuid(ctx, id, true, &lrp);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
     if (!lrp) {
         return;
@@ -3883,7 +3927,8 @@ nbctl_lr_route_list(struct ctl_context *ctx)
 
     char *error = lr_by_name_or_uuid(ctx, ctx->argv[1], true, &lr);
     if (error) {
-        ctl_fatal("%s", error);
+        ctx->error = error;
+        return;
     }
 
     ipv4_routes = xmalloc(sizeof *ipv4_routes * lr->n_static_routes);
-- 
2.14.4



More information about the dev mailing list