diff mbox series

[ovs-dev,01/30] db-ctl-base: Don't die in cmd_add() on error.

Message ID 20180707111004.8320-2-jkbs@redhat.com
State Accepted
Headers show
Series Get rid of ctl_fatal() calls in ovn-nbctl (part 1) | expand

Commit Message

Jakub Sitnicki July 7, 2018, 11:09 a.m. UTC
Return the error via the context instead of calling ctl_fatal() so that
the caller can decide how to handle it.

Signed-off-by: Jakub Sitnicki <jkbs@redhat.com>
---
 lib/db-ctl-base.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jakub Sitnicki July 7, 2018, 11:17 a.m. UTC | #1
(Reposting the cover letter here while it awaits list moderator's
 approval. No idea what is triggering the filters.) 

This series is a follow-up to recent work done in db-ctl-base module [1].  The
goal is to avoid using ctl_fatal() that terminates the process on error so that
ovn-nbctl, or other db-ctl tools, can run as long-lived processes (such as
servers or daemons).

First couple of patches are fix-ups for bugs and oversights in the mentioned
earlier series [1]. The rest of the patches convert selected helper functions
and command handlers in ovn-nbctl to propagate the error instead of calling
ctl_fatal().

There are still many more functions in ovn-nbctl left to convert [2]. This first
batch targets ones that have their error paths covered by the ovn-nbct test
suite (tests/ovn-nbctl.at).

Having these functions converted will give us a good testing ground for nbctl
daemon changes which I have in working shape [3] and am planning to post soon.

Thanks,
Jakub

[1] https://mail.openvswitch.org/pipermail/ovs-dev/2018-July/348911.html
[2] git grep -W ctl_fatal ovn/utilities/ovn-nbctl.c \
    | grep 'ovn/utilities/ovn-nbctl.c=' \
    | perl -n -e '/=([^(]+)\(/ and print $1, "\n";'
[3] https://github.com/jsitnicki/ovs/commits/wip-nbctl-daemon

Jakub Sitnicki (30):
  db-ctl-base: Don't die in cmd_add() on error.
  ovn-nbctl: Report the actual error from the command handler.
  ovn-nbctl: Don't die in ls_by_name_or_uuid().
  ovn-nbctl: Don't die in lsp_by_name_or_uuid().
  ovn-nbctl: Don't die in lb_by_name_or_uuid()
  ovn-nbctl: Don't die in lr_by_name_or_uuid().
  ovn-nbctl: Don't die in lrp_by_name_or_uuid().
  ovn-nbctl: Don't die in acl_cmd_get_pg_or_ls().
  ovn-nbctl: Don't die in parse_enabled().
  ovn-nbctl: Don't die in nbctl_ls_add().
  ovn-nbctl: Don't die in nbctl_ls_del().
  ovn-nbctl: Don't die in nbctl_lsp_add().
  ovn-nbctl: Don't die in nbctl_acl().
  ovn-nbctl: Don't die in nbctl_qos_add().
  ovn-nbctl: Don't die in nbctl_lr_nat_add().
  ovn-nbctl: Don't die in nbctl_lr_nat_del().
  ovn-nbctl: Don't die in nbctl_lb_add().
  ovn-nbctl: Don't die in nbctl_lb_del()
  ovn-nbctl: Don't die in nbctl_ls_lb_add().
  ovn-nbctl: Don't die in nbctl_lr_lb_add().
  ovn-nbctl: Don't die in nbctl_lr_add().
  ovn-nbctl: Don't die in nbctl_lr_del().
  ovn-nbctl: Don't die in nbctl_lrp_add().
  ovn-nbctl: Don't die in nbctl_lrp_set_gateway_chassis().
  ovn-nbctl: Don't die in nbctl_lrp_get_gateway_chassis().
  ovn-nbctl: Don't die in nbctl_lrp_del_gateway_chassis().
  ovn-nbctl: Don't die in nbctl_lrp_set_enabled().
  ovn-nbctl: Don't die in nbctl_lr_route_add().
  ovn-nbctl: Don't die in nbctl_lr_route_del().
  ovn-nbctl: Don't die in nbctl_lsp_set_type().

 lib/db-ctl-base.c         |   3 +-
 ovn/utilities/ovn-nbctl.c | 731 +++++++++++++++++++++++++++++++++-------------
 2 files changed, 525 insertions(+), 209 deletions(-)
diff mbox series

Patch

diff --git a/lib/db-ctl-base.c b/lib/db-ctl-base.c
index a59ac30c4..0aba5b6a3 100644
--- a/lib/db-ctl-base.c
+++ b/lib/db-ctl-base.c
@@ -1494,11 +1494,12 @@  cmd_add(struct ctl_context *ctx)
         ovsdb_datum_destroy(&add, type);
     }
     if (old.n > type->n_max) {
-        ctl_fatal("\"add\" operation would put %u %s in column %s of "
+        ctl_error(ctx, "\"add\" operation would put %u %s in column %s of "
                   "table %s but the maximum number is %u",
                   old.n,
                   type->value.type == OVSDB_TYPE_VOID ? "values" : "pairs",
                   column->name, table->name, type->n_max);
+        return;
     }
     ovsdb_idl_txn_verify(row, column);
     ovsdb_idl_txn_write(row, column, &old);