[libvirt] [PATCH v2 3/3] virsh: Implement domblkerror command
Eric Blake
eblake at redhat.com
Mon Jan 30 23:20:07 UTC 2012
On 01/30/2012 09:01 AM, Jiri Denemark wrote:
> This command lists all disk devices with errors
> ---
> tools/virsh.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> tools/virsh.pod | 7 ++++
> 2 files changed, 96 insertions(+), 0 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 3a59746..1b93852 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -16037,6 +16037,94 @@ cleanup:
> }
>
> /*
> + * "domioerror" command
> + */
> +
> +static const vshCmdInfo info_domblkerror[] = {
Looks like you missed a rename; s/domioerror/domblkerror/ in the comment.
> + {"help", N_("Show errors on block devices")},
> + {"desc", N_("Show block device errors")},
> + {NULL, NULL}
> +};
> +
> +static const vshCmdOptDef opts_domblkerror[] = {
> + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id, or uuid")},
> + {NULL, 0, 0, NULL}
Should we also allow this additional usage:
virsh domblkerror dom vda
which lists the status of just vda (no error, no space left, ...)? That
would mean adding:
{"disk", VSH_OT_DATA, VSH_OFLAG_OPT, N_("particular disk to check")}
then filtering through the libvirt API to match just that disk? You can
say "no, that's overkill" and not implement it, and I won't be hurt.
> + if (!(xml = virDomainGetXMLDesc(dom, 0)))
> + goto cleanup;
> +
> + xmldoc = virXMLParseStringCtxt(xml, _("(domain_definition)"), &ctxt);
> + VIR_FREE(xml);
> + if (!xmldoc)
> + goto cleanup;
> +
> + if (virXPathInt("count(./devices/disk)", ctxt, &ndisks) < 0)
> + goto cleanup;
Guess what - if we made the API take NULL,0 as a shorthand to query how
big to make our array, you wouldn't have to resort to this XML parsing.
> + if ((count = virDomainGetDiskErrors(dom, disks, ndisks, 0)) == -1)
> + goto cleanup;
> +
> + for (i = 0; i < count; i++) {
> + vshPrint(ctl, "%s: %s\n",
> + disks[i].disk,
> + vshDomainIOErrorToString(disks[i].error));
> + }
Are we okay that if there are no disk errors (count is 0), we have no
output, not even mentioning that the command succeeded?
> @@ -16240,6 +16328,7 @@ static const vshCmdDef domMonitoringCmds[] = {
> {"domblklist", cmdDomblklist, opts_domblklist, info_domblklist, 0},
> {"domblkstat", cmdDomblkstat, opts_domblkstat, info_domblkstat, 0},
> {"domcontrol", cmdDomControl, opts_domcontrol, info_domcontrol, 0},
> + {"domblkerror", cmdDomBlkError, opts_domblkerror, info_domblkerror, 0},
Sort this line earlier.
Overall, I like the series, and want this API in 0.9.10; can we get a v3
prior to RC1?
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120130/37d8636c/attachment-0001.sig>
More information about the libvir-list
mailing list