[libvirt] [PATCH 5/9] storage_backend: Fix error reporting with regex helper
Eric Blake
eblake at redhat.com
Fri May 13 22:04:36 UTC 2011
On 05/13/2011 02:10 PM, Cole Robinson wrote:
> Some clients overwrite the error from the regex helper, or do half-baked
> error reporting with the exitstatus.
>
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
> src/storage/storage_backend.c | 11 +++++------
> src/storage/storage_backend.h | 3 +--
> src/storage/storage_backend_fs.c | 5 ++---
> src/storage/storage_backend_iscsi.c | 16 ++--------------
> src/storage/storage_backend_logical.c | 30 +++++-------------------------
> 5 files changed, 15 insertions(+), 50 deletions(-)
>
> - ret = virCommandWait(cmd, outexit);
> + ret = virCommandWait(cmd, NULL);
My only concern with this is that if we were previously being tolerant
of a lousy child program that exits with non-zero status even when
successful, we now fail. But...
> @@ -246,8 +245,8 @@ virStorageBackendFileSystemNetFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSE
> prog[3] = source->host.name;
>
> if (virStorageBackendRunProgRegex(NULL, prog, 1, regexes, vars,
> - virStorageBackendFileSystemNetFindPoolSourcesFunc,
> - &state, &exitstatus) < 0)
> + virStorageBackendFileSystemNetFindPoolSourcesFunc,
> + &state) < 0)
...this caller was previously ignoring 'showmount' failures, which looks
like it has sane exit status,
> +++ b/src/storage/storage_backend_iscsi.c
> @@ -160,8 +160,7 @@ virStorageBackendISCSISession(virStoragePoolObjPtr pool,
> regexes,
> vars,
> virStorageBackendISCSIExtractSession,
> - &session,
> - NULL) < 0)
> + &session) < 0)
...this caller was already rejecting failures,
> @@ -513,17 +511,7 @@ virStorageBackendISCSIScanTargets(const char *portal,
> regexes,
> vars,
> virStorageBackendISCSIGetTargets,
> - &list,
> - &exitstatus) < 0) {
> - virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> - "%s", _("iscsiadm command failed"));
> - return -1;
> - }
> -
> - if (exitstatus != 0) {
...this caller was manually rejecting errors itself,
> if (virStorageBackendRunProgRegex(pool,
> prog,
> 1,
> regexes,
> vars,
> virStorageBackendLogicalMakeVol,
> - vol,
> - &exitstatus) < 0) {
> - virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> - "%s", _("lvs command failed"));
> - return -1;
> - }
> -
> - if (exitstatus != 0) {
...as was this,
> @@ -331,7 +318,7 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
> * that might be hanging around, so if this fails for some reason, the
> * worst that happens is that scanning doesn't pick everything up
> */
> - if (virRun(scanprog, &exitstatus) < 0) {
> + if (virRun(scanprog, NULL) < 0) {
> VIR_WARN("Failure when running vgscan to refresh physical volumes");
> }
>
> @@ -339,8 +326,8 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
> sourceList.type = VIR_STORAGE_POOL_LOGICAL;
>
> if (virStorageBackendRunProgRegex(NULL, prog, 1, regexes, vars,
> - virStorageBackendLogicalFindPoolSourcesFunc,
> - &sourceList, &exitstatus) < 0)
> + virStorageBackendLogicalFindPoolSourcesFunc,
> + &sourceList) < 0)
...another one ignoring failures, but pvs and vgscan look sane,
> @@ -506,13 +492,7 @@ virStorageBackendLogicalRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED,
> regexes,
> vars,
> virStorageBackendLogicalRefreshPoolFunc,
> - NULL,
> - &exitstatus) < 0) {
> - virStoragePoolObjClearVols(pool);
> - return -1;
> - }
> -
> - if (exitstatus != 0) {
...and one last doing a manual reporting. Looks safe to me, so:
ACK.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110513/e747adad/attachment-0001.sig>
More information about the libvir-list
mailing list