2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 22:05:19 +00:00

db-ctl-base: Don't die in check_mutable() on error.

Return the error message to the caller instead of reporting it and dying
so that the caller can handle the error without terminating the process
if needed.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
Jakub Sitnicki
2018-07-02 12:50:00 +02:00
committed by Ben Pfaff
parent e09b3af3e2
commit e85ec8e8a5

View File

@@ -634,14 +634,17 @@ pre_parse_column_key_value(struct ctl_context *ctx,
return column;
}
static void
/* Checks if the 'column' is mutable. Returns NULL if it is mutable, or a
* malloc()'ed error message otherwise. */
static char * OVS_WARN_UNUSED_RESULT
check_mutable(const struct ovsdb_idl_row *row,
const struct ovsdb_idl_column *column)
{
if (!ovsdb_idl_is_mutable(row, column)) {
ctl_fatal("cannot modify read-only column %s in table %s",
column->name, row->table->class_->name);
return xasprintf("cannot modify read-only column %s in table %s",
column->name, row->table->class_->name);
}
return NULL;
}
#define RELOPS \
@@ -1210,7 +1213,7 @@ set_column(const struct ovsdb_idl_table_class *table,
if (!value_string) {
ctl_fatal("%s: missing value", arg);
}
check_mutable(row, column);
die_if_error(check_mutable(row, column));
if (key_string) {
union ovsdb_atom key, value;
@@ -1316,7 +1319,7 @@ cmd_add(struct ctl_context *ctx)
if (!row) {
return;
}
check_mutable(row, column);
die_if_error(check_mutable(row, column));
type = &column->type;
ovsdb_datum_clone(&old, ovsdb_idl_read(row, column), &column->type);
@@ -1377,7 +1380,7 @@ cmd_remove(struct ctl_context *ctx)
if (!row) {
return;
}
check_mutable(row, column);
die_if_error(check_mutable(row, column));
type = &column->type;
ovsdb_datum_clone(&old, ovsdb_idl_read(row, column), &column->type);
@@ -1455,7 +1458,7 @@ cmd_clear(struct ctl_context *ctx)
struct ovsdb_datum datum;
die_if_error(get_column(table, ctx->argv[i], &column));
check_mutable(row, column);
die_if_error(check_mutable(row, column));
type = &column->type;
if (type->n_min > 0) {