[ovs-dev] [PATCH 15/23] db-ctl-base: Stop using die_if_error().

Jakub Sitnicki jkbs at redhat.com
Mon Jul 2 10:50:11 UTC 2018


Propagate the error via the context for the caller to handle it.

Result of applying the following semantic patch (Coccinelle):

@@
expression s;
@@
- die_if_error(s);
+ ctx->error = s;
+ if (ctx->error) {
+     return;
+ }

Signed-off-by: Jakub Sitnicki <jkbs at redhat.com>
---
 lib/db-ctl-base.c | 294 ++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 229 insertions(+), 65 deletions(-)

diff --git a/lib/db-ctl-base.c b/lib/db-ctl-base.c
index 14cdff6eb..2fff7127b 100644
--- a/lib/db-ctl-base.c
+++ b/lib/db-ctl-base.c
@@ -880,14 +880,20 @@ pre_cmd_get(struct ctl_context *ctx)
                   "possibly erroneous");
     }
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
     for (i = 3; i < ctx->argc; i++) {
         if (!strcasecmp(ctx->argv[i], "_uuid")
             || !strcasecmp(ctx->argv[i], "-uuid")) {
             continue;
         }
 
-        die_if_error(pre_parse_column_key_value(ctx, ctx->argv[i], table));
+        ctx->error = pre_parse_column_key_value(ctx, ctx->argv[i], table);
+        if (ctx->error) {
+            return;
+        }
     }
 }
 
@@ -907,8 +913,14 @@ cmd_get(struct ctl_context *ctx)
         ctl_fatal("--if-exists and --id may not be specified together");
     }
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(ctl_get_row(ctx, table, record_id, must_exist, &row));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = ctl_get_row(ctx, table, record_id, must_exist, &row);
+    if (ctx->error) {
+        return;
+    }
     if (!row) {
         return;
     }
@@ -917,7 +929,10 @@ cmd_get(struct ctl_context *ctx)
         struct ovsdb_symbol *symbol;
         bool new;
 
-        die_if_error(create_symbol(ctx->symtab, id, &symbol, &new));
+        ctx->error = create_symbol(ctx->symtab, id, &symbol, &new);
+        if (ctx->error) {
+            return;
+        }
         if (!new) {
             ctl_fatal("row id \"%s\" specified on \"get\" command was used "
                       "before it was defined", id);
@@ -942,9 +957,11 @@ cmd_get(struct ctl_context *ctx)
             continue;
         }
 
-        die_if_error(parse_column_key_value(ctx->argv[i], table,
-                                            &column, &key_string,
-                                            NULL, NULL, 0, NULL));
+        ctx->error = parse_column_key_value(ctx->argv[i], table, &column,
+                                            &key_string, NULL, NULL, 0, NULL);
+        if (ctx->error) {
+            return;
+        }
 
         ovsdb_idl_txn_verify(row, column);
         datum = ovsdb_idl_read(row, column);
@@ -957,9 +974,11 @@ cmd_get(struct ctl_context *ctx)
                           column->name);
             }
 
-            die_if_error(ovsdb_atom_from_string(&key, NULL,
-                                                &column->type.key,
-                                                key_string, ctx->symtab));
+            ctx->error = ovsdb_atom_from_string(&key, NULL, &column->type.key,
+                                                key_string, ctx->symtab);
+            if (ctx->error) {
+                return;
+            }
 
             idx = ovsdb_datum_find_key(datum, &key,
                                        column->type.key.type);
@@ -1071,8 +1090,14 @@ pre_cmd_list(struct ctl_context *ctx)
     const char *table_name = ctx->argv[1];
     const struct ovsdb_idl_table_class *table;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
-    die_if_error(pre_list_columns(ctx, table, column_names));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = pre_list_columns(ctx, table, column_names);
+    if (ctx->error) {
+        return;
+    }
 }
 
 static struct table *
@@ -1143,15 +1168,24 @@ cmd_list(struct ctl_context *ctx)
     size_t n_columns;
     int i;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(parse_column_names(column_names, table, &columns, &n_columns));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = parse_column_names(column_names, table, &columns, &n_columns);
+    if (ctx->error) {
+        return;
+    }
     out = ctx->table = list_make_table(columns, n_columns);
     if (ctx->argc > 2) {
         for (i = 2; i < ctx->argc; i++) {
             const struct ovsdb_idl_row *row;
 
-            die_if_error(ctl_get_row(ctx, table, ctx->argv[i], must_exist,
-                                     &row));
+            ctx->error = ctl_get_row(ctx, table, ctx->argv[i], must_exist,
+                                     &row);
+            if (ctx->error) {
+                return;
+            }
             list_record(row, columns, n_columns, out);
         }
     } else {
@@ -1203,10 +1237,19 @@ pre_cmd_find(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     int i;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
-    die_if_error(pre_list_columns(ctx, table, column_names));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = pre_list_columns(ctx, table, column_names);
+    if (ctx->error) {
+        return;
+    }
     for (i = 2; i < ctx->argc; i++) {
-        die_if_error(pre_parse_column_key_value(ctx, ctx->argv[i], table));
+        ctx->error = pre_parse_column_key_value(ctx, ctx->argv[i], table);
+        if (ctx->error) {
+            return;
+        }
     }
 }
 
@@ -1221,8 +1264,14 @@ cmd_find(struct ctl_context *ctx)
     struct table *out;
     size_t n_columns;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(parse_column_names(column_names, table, &columns, &n_columns));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = parse_column_names(column_names, table, &columns, &n_columns);
+    if (ctx->error) {
+        return;
+    }
     out = ctx->table = list_make_table(columns, n_columns);
     for (row = ovsdb_idl_first_row(ctx->idl, table); row;
          row = ovsdb_idl_next_row(row)) {
@@ -1231,8 +1280,11 @@ cmd_find(struct ctl_context *ctx)
         for (i = 2; i < ctx->argc; i++) {
             bool satisfied;
 
-            die_if_error(check_condition(table, row, ctx->argv[i], ctx->symtab,
-                                         &satisfied));
+            ctx->error = check_condition(table, row, ctx->argv[i],
+                                         ctx->symtab, &satisfied);
+            if (ctx->error) {
+                return;
+            }
             if (!satisfied) {
                 goto next_row;
             }
@@ -1326,9 +1378,15 @@ pre_cmd_set(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     int i;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
     for (i = 3; i < ctx->argc; i++) {
-        die_if_error(pre_parse_column_key_value(ctx, ctx->argv[i], table));
+        ctx->error = pre_parse_column_key_value(ctx, ctx->argv[i], table);
+        if (ctx->error) {
+            return;
+        }
     }
 }
 
@@ -1342,14 +1400,23 @@ cmd_set(struct ctl_context *ctx)
     const struct ovsdb_idl_row *row;
     int i;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(ctl_get_row(ctx, table, record_id, must_exist, &row));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = ctl_get_row(ctx, table, record_id, must_exist, &row);
+    if (ctx->error) {
+        return;
+    }
     if (!row) {
         return;
     }
 
     for (i = 3; i < ctx->argc; i++) {
-        die_if_error(set_column(table, row, ctx->argv[i], ctx->symtab));
+        ctx->error = set_column(table, row, ctx->argv[i], ctx->symtab);
+        if (ctx->error) {
+            return;
+        }
     }
 
     invalidate_cache(ctx);
@@ -1363,8 +1430,14 @@ pre_cmd_add(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     const struct ovsdb_idl_column *column;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
-    die_if_error(pre_get_column(ctx, table, column_name, &column));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = pre_get_column(ctx, table, column_name, &column);
+    if (ctx->error) {
+        return;
+    }
 }
 
 static void
@@ -1381,13 +1454,25 @@ cmd_add(struct ctl_context *ctx)
     struct ovsdb_datum old;
     int i;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(get_column(table, column_name, &column));
-    die_if_error(ctl_get_row(ctx, table, record_id, must_exist, &row));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = get_column(table, column_name, &column);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = ctl_get_row(ctx, table, record_id, must_exist, &row);
+    if (ctx->error) {
+        return;
+    }
     if (!row) {
         return;
     }
-    die_if_error(check_mutable(row, column));
+    ctx->error = check_mutable(row, column);
+    if (ctx->error) {
+        return;
+    }
 
     type = &column->type;
     ovsdb_datum_clone(&old, ovsdb_idl_read(row, column), &column->type);
@@ -1398,8 +1483,11 @@ cmd_add(struct ctl_context *ctx)
         add_type = *type;
         add_type.n_min = 1;
         add_type.n_max = UINT_MAX;
-        die_if_error(ovsdb_datum_from_string(&add, &add_type, ctx->argv[i],
-                                             ctx->symtab));
+        ctx->error = ovsdb_datum_from_string(&add, &add_type, ctx->argv[i],
+                                             ctx->symtab);
+        if (ctx->error) {
+            return;
+        }
         ovsdb_datum_union(&old, &add, type, false);
         ovsdb_datum_destroy(&add, type);
     }
@@ -1424,8 +1512,14 @@ pre_cmd_remove(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     const struct ovsdb_idl_column *column;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
-    die_if_error(pre_get_column(ctx, table, column_name, &column));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = pre_get_column(ctx, table, column_name, &column);
+    if (ctx->error) {
+        return;
+    }
 }
 
 static void
@@ -1442,13 +1536,25 @@ cmd_remove(struct ctl_context *ctx)
     struct ovsdb_datum old;
     int i;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(get_column(table, column_name, &column));
-    die_if_error(ctl_get_row(ctx, table, record_id, must_exist, &row));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = get_column(table, column_name, &column);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = ctl_get_row(ctx, table, record_id, must_exist, &row);
+    if (ctx->error) {
+        return;
+    }
     if (!row) {
         return;
     }
-    die_if_error(check_mutable(row, column));
+    ctx->error = check_mutable(row, column);
+    if (ctx->error) {
+        return;
+    }
 
     type = &column->type;
     ovsdb_datum_clone(&old, ovsdb_idl_read(row, column), &column->type);
@@ -1467,8 +1573,12 @@ cmd_remove(struct ctl_context *ctx)
             if (ovsdb_type_is_map(&rm_type)) {
                 rm_type.value.type = OVSDB_TYPE_VOID;
                 free(error);
-                die_if_error(ovsdb_datum_from_string(
-                                                     &rm, &rm_type, ctx->argv[i], ctx->symtab));
+                ctx->error = ovsdb_datum_from_string(&rm, &rm_type,
+                                                     ctx->argv[i],
+                                                     ctx->symtab);
+                if (ctx->error) {
+                    return;
+                }
             } else {
                 ctl_fatal("%s", error);
             }
@@ -1496,11 +1606,17 @@ pre_cmd_clear(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     int i;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
     for (i = 3; i < ctx->argc; i++) {
         const struct ovsdb_idl_column *column;
 
-        die_if_error(pre_get_column(ctx, table, ctx->argv[i], &column));
+        ctx->error = pre_get_column(ctx, table, ctx->argv[i], &column);
+        if (ctx->error) {
+            return;
+        }
     }
 }
 
@@ -1514,8 +1630,14 @@ cmd_clear(struct ctl_context *ctx)
     const struct ovsdb_idl_row *row;
     int i;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(ctl_get_row(ctx, table, record_id, must_exist, &row));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = ctl_get_row(ctx, table, record_id, must_exist, &row);
+    if (ctx->error) {
+        return;
+    }
     if (!row) {
         return;
     }
@@ -1525,8 +1647,14 @@ cmd_clear(struct ctl_context *ctx)
         const struct ovsdb_type *type;
         struct ovsdb_datum datum;
 
-        die_if_error(get_column(table, ctx->argv[i], &column));
-        die_if_error(check_mutable(row, column));
+        ctx->error = get_column(table, ctx->argv[i], &column);
+        if (ctx->error) {
+            return;
+        }
+        ctx->error = check_mutable(row, column);
+        if (ctx->error) {
+            return;
+        }
 
         type = &column->type;
         if (type->n_min > 0) {
@@ -1549,7 +1677,10 @@ pre_create(struct ctl_context *ctx)
     const char *table_name = ctx->argv[1];
     const struct ovsdb_idl_table_class *table;
 
-    die_if_error(get_table(table_name, &table));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
     if (!id && !table->is_root) {
         VLOG_WARN("applying \"create\" command to table %s without --id "
                   "option will have no effect", table->name);
@@ -1566,11 +1697,17 @@ cmd_create(struct ctl_context *ctx)
     const struct uuid *uuid;
     int i;
 
-    die_if_error(get_table(table_name, &table));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
     if (id) {
         struct ovsdb_symbol *symbol;
 
-        die_if_error(create_symbol(ctx->symtab, id, &symbol, NULL));
+        ctx->error = create_symbol(ctx->symtab, id, &symbol, NULL);
+        if (ctx->error) {
+            return;
+        }
         if (table->is_root) {
             /* This table is in the root set, meaning that rows created in it
              * won't disappear even if they are unreferenced, so disable
@@ -1584,7 +1721,10 @@ cmd_create(struct ctl_context *ctx)
 
     row = ovsdb_idl_txn_insert(ctx->txn, table, uuid);
     for (i = 2; i < ctx->argc; i++) {
-        die_if_error(set_column(table, row, ctx->argv[i], ctx->symtab));
+        ctx->error = set_column(table, row, ctx->argv[i], ctx->symtab);
+        if (ctx->error) {
+            return;
+        }
     }
     ds_put_format(&ctx->output, UUID_FMT, UUID_ARGS(&row->uuid));
 }
@@ -1620,7 +1760,10 @@ pre_cmd_destroy(struct ctl_context *ctx)
 {
     const char *table_name = ctx->argv[1];
 
-    die_if_error(pre_get_table(ctx, table_name, NULL));
+    ctx->error = pre_get_table(ctx, table_name, NULL);
+    if (ctx->error) {
+        return;
+    }
 }
 
 static void
@@ -1632,7 +1775,10 @@ cmd_destroy(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     int i;
 
-    die_if_error(get_table(table_name, &table));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
 
     if (delete_all && ctx->argc > 2) {
         ctl_fatal("--all and records argument should not be specified together");
@@ -1656,8 +1802,11 @@ cmd_destroy(struct ctl_context *ctx)
         for (i = 2; i < ctx->argc; i++) {
             const struct ovsdb_idl_row *row;
 
-            die_if_error(ctl_get_row(ctx, table, ctx->argv[i], must_exist,
-                                     &row));
+            ctx->error = ctl_get_row(ctx, table, ctx->argv[i], must_exist,
+                                     &row);
+            if (ctx->error) {
+                return;
+            }
             if (row) {
                 ovsdb_idl_txn_delete(row);
             }
@@ -1673,10 +1822,16 @@ pre_cmd_wait_until(struct ctl_context *ctx)
     const struct ovsdb_idl_table_class *table;
     int i;
 
-    die_if_error(pre_get_table(ctx, table_name, &table));
+    ctx->error = pre_get_table(ctx, table_name, &table);
+    if (ctx->error) {
+        return;
+    }
 
     for (i = 3; i < ctx->argc; i++) {
-        die_if_error(pre_parse_column_key_value(ctx, ctx->argv[i], table));
+        ctx->error = pre_parse_column_key_value(ctx, ctx->argv[i], table);
+        if (ctx->error) {
+            return;
+        }
     }
 }
 
@@ -1689,8 +1844,14 @@ cmd_wait_until(struct ctl_context *ctx)
     const struct ovsdb_idl_row *row;
     int i;
 
-    die_if_error(get_table(table_name, &table));
-    die_if_error(ctl_get_row(ctx, table, record_id, false, &row));
+    ctx->error = get_table(table_name, &table);
+    if (ctx->error) {
+        return;
+    }
+    ctx->error = ctl_get_row(ctx, table, record_id, false, &row);
+    if (ctx->error) {
+        return;
+    }
     if (!row) {
         ctx->try_again = true;
         return;
@@ -1699,8 +1860,11 @@ cmd_wait_until(struct ctl_context *ctx)
     for (i = 3; i < ctx->argc; i++) {
         bool satisfied;
 
-        die_if_error(check_condition(table, row, ctx->argv[i], ctx->symtab,
-                                     &satisfied));
+        ctx->error = check_condition(table, row, ctx->argv[i], ctx->symtab,
+                                     &satisfied);
+        if (ctx->error) {
+            return;
+        }
         if (!satisfied) {
             ctx->try_again = true;
             return;
-- 
2.14.4



More information about the dev mailing list