[ovs-dev] [PATCH v2 08/26] ovn-sbctl: Add daemon support.
Ben Pfaff
blp at ovn.org
Fri May 7 01:18:46 UTC 2021
On Fri, Apr 16, 2021 at 12:05:12PM -0400, Mark Michelson wrote:
> On 4/1/21 7:20 PM, Ben Pfaff wrote:
> > +static bool
> > +check_conflicts(struct ctl_context *ctx, const char *name, char *msg)
> > +{
> > + struct sbctl_context *sbctl_ctx = sbctl_context_get(ctx);
> > if (shash_find(&sbctl_ctx->chassis, name)) {
> > - ctl_fatal("%s because a chassis named %s already exists",
> > - msg, name);
> > + ctl_error(&sbctl_ctx->base,
> > + "%s because a chassis named %s already exists",
> > + msg, name);
>
> I think this branch should free msg as well. It's more important in daemon
> mode since the program isn't exiting immediately in this case.
>
> Since check_conflicts won't spontaneously exit now, it probably would make
> things easier for the caller of check_conflicts() to be responsible for
> freeing msg. This way, msg is allocated and freed in the same scope, and it
> gives the option of using a non dynamically allocated msg if desired.
Thanks, good points. It turned out check_conflicts() was only used in
one place and that the code got nicer if we just inlined it, like this:
@@ -266,21 +266,6 @@ sbctl_ctx_destroy(struct ctl_context *ctx)
free(ctx);
}
-static bool
-check_conflicts(struct ctl_context *ctx, const char *name, char *msg)
-{
- struct sbctl_context *sbctl_ctx = sbctl_context_get(ctx);
- if (shash_find(&sbctl_ctx->chassis, name)) {
- ctl_error(&sbctl_ctx->base,
- "%s because a chassis named %s already exists",
- msg, name);
- return false;
- }
- free(msg);
-
- return true;
-}
-
static struct sbctl_chassis *
find_chassis(struct ctl_context *ctx, const char *name, bool must_exist)
{
@@ -389,15 +374,18 @@ cmd_chassis_add(struct ctl_context *ctx)
encap_types = ctx->argv[2];
encap_ip = ctx->argv[3];
- if (may_exist) {
- struct sbctl_chassis *sbctl_ch = find_chassis(ctx, ch_name, false);
- if (sbctl_ch) {
+ if (find_chassis(ctx, ch_name, false)) {
+ if (may_exist) {
return;
}
}
- if (!check_conflicts(ctx, ch_name,
- xasprintf("cannot create a chassis named %s",
- ch_name))) {
+
+ struct sbctl_context *sbctl_ctx = sbctl_context_get(ctx);
+ if (shash_find(&sbctl_ctx->chassis, ch_name)) {
+ if (!may_exist) {
+ ctl_error(ctx, "cannot create a chassis named %s because a "
+ "chassis named %s already exists", ch_name, ch_name);
+ }
return;
}
> > @@ -672,17 +464,21 @@ cmd_lsp_bind(struct ctl_context *ctx)
> > lport_name = ctx->argv[1];
> > ch_name = ctx->argv[2];
> > - sbctl_context_populate_cache(ctx);
> > - sbctl_bd = find_port_binding(sbctl_ctx, lport_name, true);
> > - sbctl_ch = find_chassis(sbctl_ctx, ch_name, true);
> > + sbctl_bd = find_port_binding(ctx, lport_name, true);
> > + if (!sbctl_ctx) {
>
> Should this be
>
> if (!sbctl_bd) {
>
> ?
Yes, thanks, fixed.
More information about the dev
mailing list