On Wed, Oct 27, 2021 at 10:54 AM Lorenzo Bianconi
<[email protected]> wrote:
>
> Add --may-exist support to meter-add command in order to update
> meter parameters if it has been already created
>
> Signed-off-by: Lorenzo Bianconi <[email protected]>
> ---
> tests/ovn-nbctl.at | 6 +++--
> tests/ovn-northd.at | 11 +++++++++-
> utilities/ovn-nbctl.c | 51 ++++++++++++++++++++++++-------------------
> 3 files changed, 43 insertions(+), 25 deletions(-)
>
> diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
> index 9b80ae410..a8946fef8 100644
> --- a/tests/ovn-nbctl.at
> +++ b/tests/ovn-nbctl.at
> @@ -371,6 +371,8 @@ dnl Add duplicate meter name
> AT_CHECK([ovn-nbctl meter-add meter1 drop 10 kbps], [1], [], [stderr])
> AT_CHECK([grep 'already exists' stderr], [0], [ignore])
>
> +AT_CHECK([ovn-nbctl --may-exist meter-add meter1 drop 11 kbps])
> +
> dnl Add reserved meter name
> AT_CHECK([ovn-nbctl meter-add __meter1 drop 10 kbps], [1], [], [stderr])
> AT_CHECK([grep 'reserved' stderr], [0], [ignore])
> @@ -396,7 +398,7 @@ AT_CHECK([ovn-nbctl meter-add meter5 drop 10 100010111111
> kbps], [1], [],
>
> AT_CHECK([ovn-nbctl meter-list], [0], [dnl
> meter1: bands:
> - drop: 10 kbps
> + drop: 11 kbps
> meter2: bands:
> drop: 3 kbps, 2 kb burst
> meter3: bands:
> @@ -409,7 +411,7 @@ dnl Delete a single meter.
> AT_CHECK([ovn-nbctl meter-del meter2])
> AT_CHECK([ovn-nbctl meter-list], [0], [dnl
> meter1: bands:
> - drop: 10 kbps
> + drop: 11 kbps
> meter3: bands:
> drop: 100 kbps, 200 kb burst
> meter4: (fair) bands:
> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> index e2b9924b6..ca1b8a117 100644
> --- a/tests/ovn-northd.at
> +++ b/tests/ovn-northd.at
> @@ -3235,7 +3235,16 @@ event-elb: meter0
>
> AT_CHECK([ovn-sbctl list logical_flow | grep trigger_event -A 2 | grep -q
> meter0])
>
> -check ovn-nbctl --wait=hv meter-add meter1 drop 200 pktps 10
> +check ovn-nbctl --wait=hv meter-add meter1 drop 300 pktps 10
> +AT_CHECK([ovn-nbctl meter-list |grep meter1 -A 1], [0], [dnl
> +meter1: bands:
> + drop: 300 pktps, 10 packet burst
> +])
> +check ovn-nbctl --wait=hv --may-exist meter-add meter1 drop 200 pktps 10
> +AT_CHECK([ovn-nbctl meter-list |grep meter1 -A 1], [0], [dnl
> +meter1: bands:
> + drop: 200 pktps, 10 packet burst
> +])
> check ovn-nbctl --wait=hv lr-copp-add r0 arp meter1
> AT_CHECK([ovn-nbctl lr-copp-list r0], [0], [dnl
> arp: meter1
> diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
> index b04b24d4b..1f71cae46 100644
> --- a/utilities/ovn-nbctl.c
> +++ b/utilities/ovn-nbctl.c
> @@ -2585,19 +2585,6 @@ meter_cmp(const void *meter1_, const void *meter2_)
> return strcmp(meter1->name, meter2->name);
> }
>
> -static void
> -nbctl_pre_meter_list(struct ctl_context *ctx)
> -{
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_name);
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_fair);
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_bands);
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_unit);
> -
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_band_col_action);
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_band_col_rate);
> - ovsdb_idl_add_column(ctx->idl, &nbrec_meter_band_col_burst_size);
> -}
> -
Hi Lorenzo,
Thanks for the patch. I applied this patch to the main branch with one change.
I kept the function nbctl_pre_meter_list() AS IS even though
nbctl_pre_meter_add()
are exactly the same. I felt it's a bit odd to call
nbctl_pre_meter_add() in the meter-list pre check command.
Thanks
Numan
> static void
> nbctl_meter_list(struct ctl_context *ctx)
> {
> @@ -2650,18 +2637,34 @@ static void
> nbctl_pre_meter_add(struct ctl_context *ctx)
> {
> ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_name);
> + ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_fair);
> + ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_bands);
> + ovsdb_idl_add_column(ctx->idl, &nbrec_meter_col_unit);
> +
> + ovsdb_idl_add_column(ctx->idl, &nbrec_meter_band_col_action);
> + ovsdb_idl_add_column(ctx->idl, &nbrec_meter_band_col_rate);
> + ovsdb_idl_add_column(ctx->idl, &nbrec_meter_band_col_burst_size);
> }
>
> static void
> nbctl_meter_add(struct ctl_context *ctx)
> {
> - const struct nbrec_meter *meter;
> + const struct nbrec_meter *meter = NULL, *iter;
> + struct nbrec_meter_band *band = NULL;
>
> const char *name = ctx->argv[1];
> - NBREC_METER_FOR_EACH (meter, ctx->idl) {
> - if (!strcmp(meter->name, name)) {
> - ctl_error(ctx, "meter with name \"%s\" already exists", name);
> - return;
> + NBREC_METER_FOR_EACH (iter, ctx->idl) {
> + if (!strcmp(iter->name, name)) {
> + if (!shash_find(&ctx->options, "--may-exist")) {
> + ctl_error(ctx, "meter with name \"%s\" already exists",
> name);
> + return;
> + } else {
> + meter = iter;
> + if (meter->n_bands) {
> + band = meter->bands[0];
> + }
> + break;
> + }
> }
> }
>
> @@ -2699,13 +2702,17 @@ nbctl_meter_add(struct ctl_context *ctx)
> }
>
> /* Create the band. We only support adding a single band. */
> - struct nbrec_meter_band *band = nbrec_meter_band_insert(ctx->txn);
> + if (!band) {
> + band = nbrec_meter_band_insert(ctx->txn);
> + }
> nbrec_meter_band_set_action(band, action);
> nbrec_meter_band_set_rate(band, rate);
> nbrec_meter_band_set_burst_size(band, burst);
>
> /* Create the meter. */
> - meter = nbrec_meter_insert(ctx->txn);
> + if (!meter) {
> + meter = nbrec_meter_insert(ctx->txn);
> + }
> nbrec_meter_set_name(meter, name);
> nbrec_meter_set_unit(meter, unit);
> nbrec_meter_set_bands(meter, &band, 1);
> @@ -6853,10 +6860,10 @@ static const struct ctl_command_syntax
> nbctl_commands[] = {
>
> /* meter commands. */
> { "meter-add", 4, 5, "NAME ACTION RATE UNIT [BURST]",
> nbctl_pre_meter_add,
> - nbctl_meter_add, NULL, "--fair", RW },
> + nbctl_meter_add, NULL, "--fair,--may-exist", RW },
> { "meter-del", 0, 1, "[NAME]", nbctl_pre_meter_del, nbctl_meter_del,
> NULL, "", RW },
> - { "meter-list", 0, 0, "", nbctl_pre_meter_list, nbctl_meter_list,
> + { "meter-list", 0, 0, "", nbctl_pre_meter_add, nbctl_meter_list,
> NULL, "", RO },
>
> /* logical switch port commands. */
> --
> 2.31.1
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev