Hi Numa, I have add codes to check if the uuid is exist. If not, it will print "uuid is not found". Please help to check , if this way is ok , I will summit another patch to fix the same problem in logical router policy.
Regards, Yun -------------- taoyunxi...@cmss.chinamobile.com >On Sat, May 9, 2020 at 2:15 PM Tao YunXiang < >taoyunxi...@cmss.chinamobile.com> wrote: > >> usage: >> ovn-nbctl qos-del ls0 [UUID0] >> >> Author: Tao YunXiang <taoyunxi...@cmss.chinamobile.com> >> Co-authored-by: Liu Chang <liuch...@cmss.chinamobile.com> >> Co-authored-by: Rong Yin <rong...@cmss.chinamobile.com> >> Signed-off-by: Tao YunXiang <taoyunxi...@cmss.chinamobile.com> >> Signed-off-by: Liu Chang <liuch...@cmss.chinamobile.com> >> Signed-off-by: Rong Yin <rong...@cmss.chinamobile.com> >> >> --- >> v6: ovn-nbctl.c: Add an optional way to delete QoS by uuid >> v5: ovn-nbctl.c: Add an optional way to delete QoS by uuid >> v4: Add a way to delete QoS by its name or uuid >> v3: ovn-nbctl.c: Add a way to delete QoS by its name or uuid >> >> >Thanks for adding the test case. > >I see a small issue. When I run "ovn-nbctl qos-del <some_uuid>, the >commands doesn't >print any error if the qos with the given <some_uuid> doesn't exist. > >Can you please address this. >I think the same would go for logical router policy too. Can you please >address that also. > >Thanks >Numa > >--- >> tests/ovn-nbctl.at | 7 +++++-- >> utilities/ovn-nbctl.8.xml | 19 +++++++++++++------ >> utilities/ovn-nbctl.c | 39 ++++++++++++++++++++++++++++----------- >> 3 files changed, 46 insertions(+), 19 deletions(-) >> >> diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at >> index 1187fe3e1..14de1a8bf 100644 >> --- a/tests/ovn-nbctl.at >> +++ b/tests/ovn-nbctl.at >> @@ -308,13 +308,16 @@ AT_CHECK([ovn-nbctl qos-list ls0], [0], [dnl >> >> AT_CHECK([ovn-nbctl qos-add ls0 from-lport 600 ip rate=1000101]) >> AT_CHECK([ovn-nbctl qos-add ls0 from-lport 400 tcp dscp=44]) >> -AT_CHECK([ovn-nbctl qos-add ls0 from-lport 200 ip burst=1000102 rate=301 >> dscp=19]) >> >> dnl Delete a single flow. >> AT_CHECK([ovn-nbctl qos-del ls0 from-lport 400 tcp]) >> AT_CHECK([ovn-nbctl qos-list ls0], [0], [dnl >> from-lport 600 (ip) rate=1000101 >> -from-lport 200 (ip) rate=301 burst=1000102 dscp=19 >> +]) >> + >> +dnl Delete QoS rule by specified uuid >> +AT_CHECK([ovn-nbctl qos-del ls0 $(ovn-nbctl --bare --column _uuid list >> qos)]) >> +AT_CHECK([ovn-nbctl list qos], [0], [dnl >> ]) >> >> AT_CHECK([ovn-nbctl qos-add ls0 from-lport 600 ip rate=100010111111], >> [1], [], >> diff --git a/utilities/ovn-nbctl.8.xml b/utilities/ovn-nbctl.8.xml >> index 9c624d40c..d265c7fcc 100644 >> --- a/utilities/ovn-nbctl.8.xml >> +++ b/utilities/ovn-nbctl.8.xml >> @@ -160,12 +160,19 @@ >> >> <dt><code>qos-del</code> <var>switch</var> [<var>direction</var> >> [<var>priority</var> <var>match</var>]]</dt> >> <dd> >> - Deletes QoS rules from <var>switch</var>. If only >> - <var>switch</var> is supplied, all the QoS rules from the logical >> - switch are deleted. If <var>direction</var> is also specified, >> - then all the flows in that direction will be deleted from the >> - logical switch. If all the fields are supplied, then a single >> - flow that matches the given fields will be deleted. >> + <p> >> + Deletes QoS rules from <var>switch</var>. If only >> + <var>switch</var> is supplied, all the QoS rules from the >> logical >> + switch are deleted. If <var>direction</var> is also specified, >> + then all the flows in that direction will be deleted from the >> + logical switch. If all the fields are supplied, then a single >> + flow that matches the given fields will be deleted. >> + </p> >> + >> + <p> >> + If <var>switch</var> and <var>uuid</var> are supplied, then the >> + QoS rule with sepcified uuid is deleted. >> + </p> >> </dd> >> >> <dt><code>qos-list</code> <var>switch</var></dt> >> diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c >> index 02fc10c9e..07ed85251 100644 >> --- a/utilities/ovn-nbctl.c >> +++ b/utilities/ovn-nbctl.c >> @@ -604,7 +604,7 @@ ACL commands:\n\ >> QoS commands:\n\ >> qos-add SWITCH DIRECTION PRIORITY MATCH [rate=RATE [burst=BURST]] >> [dscp=DSCP]\n\ >> add an QoS rule to SWITCH\n\ >> - qos-del SWITCH [DIRECTION [PRIORITY MATCH]]\n\ >> + qos-del SWITCH [{DIRECTION | UUID} [PRIORITY MATCH]]\n\ >> remove QoS rules from SWITCH\n\ >> qos-list SWITCH print QoS rules for SWITCH\n\ >> \n\ >> @@ -2526,22 +2526,39 @@ nbctl_qos_del(struct ctl_context *ctx) >> } >> >> const char *direction; >> - error = parse_direction(ctx->argv[2], &direction); >> - if (error) { >> - ctx->error = error; >> - return; >> + const struct uuid *qos_rule_uuid = NULL; >> + struct uuid uuid_from_cmd; >> + if (uuid_from_string(&uuid_from_cmd, ctx->argv[2])) { >> + qos_rule_uuid = &uuid_from_cmd; >> + } else { >> + error = parse_direction(ctx->argv[2], &direction); >> + if (error) { >> + ctx->error = error; >> + return; >> + } >> } >> >> - /* If priority and match are not specified, delete all qos_rules with >> the >> - * specified direction. */ >> + /* If uuid was specified, delete qos_rule with the >> + * specified uuid. */ >> if (ctx->argc == 3) { >> struct nbrec_qos **new_qos_rules >> = xmalloc(sizeof *new_qos_rules * ls->n_qos_rules); >> >> int n_qos_rules = 0; >> - for (size_t i = 0; i < ls->n_qos_rules; i++) { >> - if (strcmp(direction, ls->qos_rules[i]->direction)) { >> - new_qos_rules[n_qos_rules++] = ls->qos_rules[i]; >> + if (qos_rule_uuid) { >> + for (size_t i = 0; i < ls->n_qos_rules; i++) { >> + if (!uuid_equals(qos_rule_uuid, >> + &(ls->qos_rules[i]->header_.uuid))) { >> + new_qos_rules[n_qos_rules++] = ls->qos_rules[i]; >> + } >> + } >> + /* If priority and match are not specified, delete all qos_rules >> + * with the specified direction. */ >> + } else { >> + for (size_t i = 0; i < ls->n_qos_rules; i++) { >> + if (strcmp(direction, ls->qos_rules[i]->direction)) { >> + new_qos_rules[n_qos_rules++] = ls->qos_rules[i]; >> + } >> } >> } >> >> @@ -6149,7 +6166,7 @@ static const struct ctl_command_syntax >> nbctl_commands[] = { >> { "qos-add", 5, 7, >> "SWITCH DIRECTION PRIORITY MATCH [rate=RATE [burst=BURST]] >> [dscp=DSCP]", >> NULL, nbctl_qos_add, NULL, "--may-exist", RW }, >> - { "qos-del", 1, 4, "SWITCH [DIRECTION [PRIORITY MATCH]]", NULL, >> + { "qos-del", 1, 4, "SWITCH [{DIRECTION | UUID} [PRIORITY MATCH]]", >> NULL, >> nbctl_qos_del, NULL, "", RW }, >> { "qos-list", 1, 1, "SWITCH", NULL, nbctl_qos_list, NULL, "", RO }, >> >> -- >> 2.17.1 >> >> >> >> _______________________________________________ >> dev mailing list >> d...@openvswitch.org >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> >> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev