[libvirt] [PATCH] Report original error when QMP probing fails with new QEMU
Jiri Denemark
jdenemar at redhat.com
Thu Dec 4 15:46:49 UTC 2014
On Thu, Dec 04, 2014 at 15:33:38 +0000, Daniel Berrange wrote:
> If probing capabilities via QMP fails, we now have a check
> that prevents us falling back to -help parsing. Unfortunately
> the error message
>
> "Failed to probe capabilities for /usr/bin/qemu-kvm:
> unsupported configuration: QEMU 2.1.2 is too new for help parsing"
>
> is proving rather unhelpful to the user. We need to be telling
> them why QMP failed (the root cause), rather than they can't
> use -help (the side effect).
>
> To do this we should capture stderr during QMP probing, and
> if -help parsing then sees a new QEMU version, we know that
> QMP should have worked, and so we can show the messages from
> stderr. The message thus becomes
>
> "Failed to probe capabilities for /usr/bin/qemu-kvm:
> internal error: QEMU / QMP failed: Could not access
> KVM kernel module: No such file or directory
> failed to initialize KVM: No such file or directory"
> ---
> src/qemu/qemu_capabilities.c | 37 +++++++++++++++++++++++++++----------
> src/qemu/qemu_capabilities.h | 3 ++-
> src/qemu/qemu_process.c | 4 ++--
> tests/qemuhelptest.c | 2 +-
> 4 files changed, 32 insertions(+), 14 deletions(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index d2c046d..f777484 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -1331,7 +1331,8 @@ int virQEMUCapsParseHelpStr(const char *qemu,
> unsigned int *version,
> bool *is_kvm,
> unsigned int *kvm_version,
> - bool check_yajl)
> + bool check_yajl,
> + const char *qemuerr)
qmperr, qmperror, or qmpError (basically "qmp" instead of "qemu") would
be a better name for this I think as it would be obvious this is the
error output from QMP probing. But not a big deal.
...
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index a14b6f7..68777e8 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -3554,12 +3554,12 @@ qemuProcessReconnect(void *opaque)
> struct qemuProcessReconnectData *data = opaque;
> virQEMUDriverPtr driver = data->driver;
> virDomainObjPtr obj = data->obj;
> - qemuDomainObjPrivatePtr priv;
> + qemuDomainObjPrivatePtr priv = NULL;
> virConnectPtr conn = data->conn;
> struct qemuDomainJobObj oldjob;
> int state;
> int reason;
> - virQEMUDriverConfigPtr cfg;
> + virQEMUDriverConfigPtr cfg = NULL;
> size_t i;
> int ret;
>
Remove this hunk, the build was already fixed by Peter.
> diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
> index 0c68367..6d9525c 100644
> --- a/tests/qemuhelptest.c
> +++ b/tests/qemuhelptest.c
> @@ -59,7 +59,7 @@ static int testHelpStrParsing(const void *data)
> goto cleanup;
>
> if (virQEMUCapsParseHelpStr("QEMU", help, flags,
> - &version, &is_kvm, &kvm_version, false) == -1) {
> + &version, &is_kvm, &kvm_version, false, NULL) == -1) {
> if (info->error && virGetLastError()->code == info->error)
> ret = 0;
> goto cleanup;
ACK with the hunk removed.
Jirka
More information about the libvir-list
mailing list