[libvirt] [PATCH 15/16] storage_backend: Fix error reporting with regex helper
Daniel P. Berrange
berrange at redhat.com
Wed May 11 10:36:07 UTC 2011
On Tue, May 10, 2011 at 04:07:54PM -0400, 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(-)
>
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index 5f9ff8f..2da1a15 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -1360,8 +1360,7 @@ virStorageBackendRunProgRegex(virStoragePoolObjPtr pool,
> const char **regex,
> int *nvars,
> virStorageBackendListVolRegexFunc func,
> - void *data,
> - int *outexit)
> + void *data)
> {
> int fd = -1, err, ret = -1;
> FILE *list = NULL;
> @@ -1468,7 +1467,7 @@ virStorageBackendRunProgRegex(virStoragePoolObjPtr pool,
>
> ret = 0;
> cleanup:
> - if (pid > 0 && virCommandWait(cmd, outexit) < 0)
> + if (pid > 0 && virCommandWait(cmd, NULL) < 0)
> ret = -1;
>
> if (groups) {
> @@ -1600,10 +1599,10 @@ virStorageBackendRunProgRegex(virConnectPtr conn,
> const char **regex ATTRIBUTE_UNUSED,
> int *nvars ATTRIBUTE_UNUSED,
> virStorageBackendListVolRegexFunc func ATTRIBUTE_UNUSED,
> - void *data ATTRIBUTE_UNUSED,
> - int *outexit ATTRIBUTE_UNUSED)
> + void *data ATTRIBUTE_UNUSED)
> {
> - virStorageReportError(VIR_ERR_INTERNAL_ERROR, _("%s not implemented on Win32"), __FUNCTION__);
> + virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> + _("%s not implemented on Win32"), __FUNCTION__);
> return -1;
> }
>
> diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h
> index 65cbd7e..fcfbed0 100644
> --- a/src/storage/storage_backend.h
> +++ b/src/storage/storage_backend.h
> @@ -135,8 +135,7 @@ int virStorageBackendRunProgRegex(virStoragePoolObjPtr pool,
> const char **regex,
> int *nvars,
> virStorageBackendListVolRegexFunc func,
> - void *data,
> - int *exitstatus);
> + void *data);
>
> int virStorageBackendRunProgNul(virStoragePoolObjPtr pool,
> const char **prog,
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index d940055..88f5b87 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -233,7 +233,6 @@ virStorageBackendFileSystemNetFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSE
> };
> const char *prog[] = { SHOWMOUNT, "--no-headers", "--exports", NULL, NULL };
> virStoragePoolSourcePtr source = NULL;
> - int exitstatus;
> char *retval = NULL;
> unsigned int i;
>
> @@ -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)
> goto cleanup;
>
> retval = virStoragePoolSourceListFormat(&state.list);
> diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c
> index b489394..f5da8d8 100644
> --- a/src/storage/storage_backend_iscsi.c
> +++ b/src/storage/storage_backend_iscsi.c
> @@ -160,8 +160,7 @@ virStorageBackendISCSISession(virStoragePoolObjPtr pool,
> regexes,
> vars,
> virStorageBackendISCSIExtractSession,
> - &session,
> - NULL) < 0)
> + &session) < 0)
> return NULL;
>
> if (session == NULL &&
> @@ -504,7 +503,6 @@ virStorageBackendISCSIScanTargets(const char *portal,
> };
> struct virStorageBackendISCSITargetList list;
> int i;
> - int exitstatus;
>
> memset(&list, 0, sizeof(list));
>
> @@ -514,17 +512,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) {
> - virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> - _("iscsiadm sendtargets command failed with exitstatus %d"),
> - exitstatus);
> + &list) < 0) {
> return -1;
> }
>
> diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
> index c18cd57..fdee2bd 100644
> --- a/src/storage/storage_backend_logical.c
> +++ b/src/storage/storage_backend_logical.c
> @@ -205,25 +205,13 @@ virStorageBackendLogicalFindLVs(virStoragePoolObjPtr pool,
> pool->def->source.name, NULL
> };
>
> - int exitstatus;
> -
> 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) {
> - virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> - _("lvs command failed with exitstatus %d"),
> - exitstatus);
> + vol) < 0) {
> return -1;
> }
>
> @@ -321,7 +309,6 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
> };
> const char *const prog[] = { PVS, "--noheadings", "-o", "pv_name,vg_name", NULL };
> const char *const scanprog[] = { VGSCAN, NULL };
> - int exitstatus;
> char *retval = NULL;
> virStoragePoolSourceList sourceList;
> int i;
> @@ -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_WARN0("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)
> return NULL;
>
> retval = virStoragePoolSourceListFormat(&sourceList);
> @@ -489,7 +476,6 @@ virStorageBackendLogicalRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED,
> "--nosuffix", "--options", "vg_size,vg_free",
> pool->def->source.name, NULL
> };
> - int exitstatus;
>
> virFileWaitForDevices();
>
> @@ -506,13 +492,7 @@ virStorageBackendLogicalRefreshPool(virConnectPtr conn ATTRIBUTE_UNUSED,
> regexes,
> vars,
> virStorageBackendLogicalRefreshPoolFunc,
> - NULL,
> - &exitstatus) < 0) {
> - virStoragePoolObjClearVols(pool);
> - return -1;
> - }
> -
> - if (exitstatus != 0) {
> + NULL) < 0) {
> virStoragePoolObjClearVols(pool);
> return -1;
> }
ACK
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list