On Wed, May 4, 2022 at 9:52 AM <[email protected]> wrote:
>
> From: Numan Siddique <[email protected]>
>
> ovsdb-server already supports specifying the uuid in the insert
> transaction by the client.  But the C IDL client library was
> missing this feature.  This patch adds this support.
>
> For each schema table, a new function is generated -
> <schema_table>insert_persistent_uuid(txn, uuid) and the users
> of IDL client library can make use of this function.
>
> Signed-off-by: Numan Siddique <[email protected]>
> ---
>
> v1 -> v2
> -----
>   * Addressed review comments from Adrian Moreno
>   * Added the support in generic 'create' command to specify the uuid in
>     --id option.
>
>  lib/db-ctl-base.c        | 38 ++++++++++++------
>  lib/db-ctl-base.man      |  5 ++-
>  lib/db-ctl-base.xml      |  4 ++
>  lib/ovsdb-idl-provider.h |  1 +
>  lib/ovsdb-idl.c          | 86 +++++++++++++++++++++++++++++-----------
>  lib/ovsdb-idl.h          |  3 ++
>  ovsdb/ovsdb-idlc.in      | 15 +++++++
>  tests/ovsdb-idl.at       | 27 +++++++++++++
>  tests/test-ovsdb.c       | 59 +++++++++++++++++++++++++++
>  9 files changed, 202 insertions(+), 36 deletions(-)
>
> diff --git a/lib/db-ctl-base.c b/lib/db-ctl-base.c
> index 707456158..f39e090a0 100644
> --- a/lib/db-ctl-base.c
> +++ b/lib/db-ctl-base.c
> @@ -1732,28 +1732,42 @@ cmd_create(struct ctl_context *ctx)
>      const struct ovsdb_idl_row *row;
>      const struct uuid *uuid = NULL;
>      int i;
> +    struct uuid uuid_;
> +    bool persist_uuid = false;
>
>      ctx->error = get_table(table_name, &table);
>      if (ctx->error) {
>          return;
>      }
> +
>      if (id) {
> -        struct ovsdb_symbol *symbol = NULL;
> +        if (uuid_from_string(&uuid_, id)) {
> +            uuid = &uuid_;
> +            persist_uuid = true;
> +        } else {
> +            struct ovsdb_symbol *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
> -             * warnings about that by pretending that there is a
reference. */
> -            symbol->strong_ref = true;
> +            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
> +                * warnings about that by pretending that there is a
> +                * reference. */
> +                symbol->strong_ref = true;
> +            }
> +            uuid = &symbol->uuid;
>          }
> -        uuid = &symbol->uuid;
>      }
>
> -    row = ovsdb_idl_txn_insert(ctx->txn, table, uuid);
> +    if (persist_uuid) {
> +        row = ovsdb_idl_txn_insert_persist_uuid(ctx->txn, table, uuid);
> +    } else {
> +        row = ovsdb_idl_txn_insert(ctx->txn, table, uuid);
> +    }
> +
>      for (i = 2; i < ctx->argc; i++) {
>          ctx->error = set_column(table, row, ctx->argv[i], ctx->symtab);
>          if (ctx->error) {
> diff --git a/lib/db-ctl-base.man b/lib/db-ctl-base.man
> index 9c786f298..6899a1d86 100644
> --- a/lib/db-ctl-base.man
> +++ b/lib/db-ctl-base.man
> @@ -203,7 +203,7 @@ Without \fB\-\-if-exists\fR, it is an error if
\fIrecord\fR does not
>  exist.  With \fB\-\-if-exists\fR, this command does nothing if
>  \fIrecord\fR does not exist.
>  .
> -.IP "[\fB\-\-id=@\fIname\fR] \fBcreate\fR \fItable
column\fR[\fB:\fIkey\fR]\fB=\fIvalue\fR..."
> +.IP "[\fB\-\-id=@\fIname\fR or \fB\-\-id=\fIuuid\fR] \fBcreate\fR
\fItable column\fR[\fB:\fIkey\fR]\fB=\fIvalue\fR..."
>  Creates a new record in \fItable\fR and sets the initial values of
>  each \fIcolumn\fR.  Columns not explicitly set will receive their
>  default values.  Outputs the UUID of the new row.
> @@ -212,6 +212,9 @@ If \fB@\fIname\fR is specified, then the UUID for the
new row may be
>  referred to by that name elsewhere in the same \fB\*(PN\fR
>  invocation in contexts where a UUID is expected.  Such references may
>  precede or follow the \fBcreate\fR command.
> +.IP
> +If a valid \fB@\fIuuid\fR is specified, then it is used as the UUID
> +of the new row.

A typo here: \fB@ should be removed.
I didn't find any test for this option --id <uuid>. I think a simple test
with ovs-vsctl should be good.

With the above minor comment addressed:
Acked-by: Han Zhou <[email protected]>

(sorry for the slow response)
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to