[ovs-dev] [PATCH] ovs-vsctl: Add "--all" option for "destroy" command in ovs-vsctl.

Ben Pfaff blp at nicira.com
Tue May 15 16:39:19 UTC 2012


On Tue, May 15, 2012 at 01:51:49AM -0700, Arun Sharma wrote:
> Adds the ability to delete all records from table. This will help
> users to destroy all records from Qos or Queue table using single
> command rather then current method.
> 
> Feature #11306
> Suggested-by: Kevin Mancuso <kevin.mancuso at rackspace.com>
> Signed-off-by: Arun Sharma <arun.sharma at calsoftinc.com>

Thanks Arun.  I have some comments.

The test is a good start, but so far it only verifies that the commands
execute without error.  To also verify that the commands have the
intended effect, I would expect there to be additional ovs-vsctl
commands to list the contents of the tables after each modification.

I think that the documentation for the destroy command would be clearer
if we documented it as two separate commands: one without --all that
accepts records as arguments, and one with --all that does not accept
records as arguments.  The first command would have the existing
summary:

.IP "\fR[\fB\-\-if\-exists\fR] \fBdestroy \fItable record\fR..."

The second command would have the following summary:

.IP "\fB\-\-all destroy \fItable\fR"

In cmd_destroy(), I would report an error and abort, with vsctl_fatal(),
if --all was used but some record ids were specified anyway, or if both
--all and --if-exists were specified.

This loop is unsafe because ovsdb_idl_txn_delete(row) can destroy 'row',
so that passing it to ovsdb_idl_next_row() is a use-after-free error:

        for (row = ovsdb_idl_first_row(ctx->idl, table->class);
             row; row = ovsdb_idl_next_row(row)) {
             ovsdb_idl_txn_delete(row);
        }

I suggest finding the next row before deleting the current one.

Thanks,

Ben.



More information about the dev mailing list