
On Fri, Jun 12, 2015 at 13:29:26 -0600, Eric Blake wrote:
Add a new 'virsh domblkthreshold' command to use the new API.
* tools/virsh.pod (domblkthreshold): Document it. * tools/virsh-domain-monitor.c (cmdDomblkthreshold): New function. (domMonitoringCmds): Register it.
Signed-off-by: Eric Blake <eblake@redhat.com> --- tools/virsh-domain-monitor.c | 81 ++++++++++++++++++++++++++++++++++++++++++++ tools/virsh.pod | 24 +++++++++++++ 2 files changed, 105 insertions(+)
diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c index 1d4dc25..66f7571 100644 --- a/tools/virsh-domain-monitor.c +++ b/tools/virsh-domain-monitor.c @@ -571,6 +571,81 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) }
/* + * "domblkthreshold" command + */ +static const vshCmdInfo info_domblkthreshold[] = { + {.name = "help", + .data = N_("set domain block device write thresholds") + }, + {.name = "desc", + .data = N_("Set a threshold to get a one-shot event if block " + "allocation exceeds that size") + }, + {.name = NULL} +}; + +static const vshCmdOptDef opts_domblkthreshold[] = { + {.name = "domain", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("domain name, id or uuid"), + }, + {.name = "device", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("block device"), + }, + {.name = "threshold", + .type = VSH_OT_INT, + .flags = VSH_OFLAG_REQ, + .help = N_("new threshold, or 0 to disable"), + }, + {.name = "percentage",
I'd rather use "proportional" or something else that does not hint to parts per hundred.
+ .type = VSH_OT_BOOL, + .help = N_("threshold is in units of .001% instead of bytes"), + }, + {.name = NULL} +}; + +static bool +cmdDomblkthreshold(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom; + bool ret = false; + const char *device = NULL; + unsigned long long threshold; + bool percentage = vshCommandOptBool(cmd, "percentage"); + unsigned int flags = 0; + + if (percentage) + flags |= VIR_DOMAIN_BLOCK_SET_WRITE_THRESHOLD_PERCENTAGE;
As well as here.
+ + if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "device", &device) < 0) + goto cleanup; + if (vshCommandOptULongLong(ctl, cmd, "threshold", &threshold) < 0) + goto cleanup; +
Peter