[libvirt] [PATCH v2] qemu_domain: add timestamp in tainting of guests log

John Ferlan jferlan at redhat.com
Sat Jan 21 17:37:55 UTC 2017



On 01/20/2017 03:46 AM, Chen Hanxiao wrote:
> From: Chen Hanxiao <chenhanxiao at gmail.com>
> 
> We lacked of timestamp in tainting of guests log,
> which bring troubles for finding guest issues:
> such as whether a guest powerdown caused by qemu-monitor-command
> or others issues inside guests.
> If we had timestamp in tainting of guests log,
> it would be helpful when checking guest's /var/log/messages.
> 
> Signed-off-by: Chen Hanxiao <chenhanxiao at gmail.com>
> ---
> v2:
>    update logic flow of virDomainObjTaint check
> 
>  src/qemu/qemu_domain.c | 79 +++++++++++++++++++++++++++-----------------------
>  1 file changed, 42 insertions(+), 37 deletions(-)
> 

ACK and pushed with one minor change below

John

> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index c676042..2bc023c 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -3999,46 +3999,51 @@ void qemuDomainObjTaint(virQEMUDriverPtr driver,
>  {
>      virErrorPtr orig_err = NULL;
>      bool closeLog = false;
> +    char *timestamp = NULL;
> +    char uuidstr[VIR_UUID_STRING_BUFLEN];
>  
> -    if (virDomainObjTaint(obj, taint)) {
> -        char uuidstr[VIR_UUID_STRING_BUFLEN];
> -        virUUIDFormat(obj->def->uuid, uuidstr);
> -
> -        VIR_WARN("Domain id=%d name='%s' uuid=%s is tainted: %s",
> -                 obj->def->id,
> -                 obj->def->name,
> -                 uuidstr,
> -                 virDomainTaintTypeToString(taint));
> -
> -        /* We don't care about errors logging taint info, so
> -         * preserve original error, and clear any error that
> -         * is raised */
> -        orig_err = virSaveLastError();
> -        if (logCtxt == NULL) {
> -            logCtxt = qemuDomainLogContextNew(driver, obj,
> -                                              QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH);
> -            if (!logCtxt) {
> -                if (orig_err) {
> -                    virSetError(orig_err);
> -                    virFreeError(orig_err);
> -                }
> -                VIR_WARN("Unable to open domainlog");
> -                return;
> -            }
> -            closeLog = true;
> -        }
> +    if (!virDomainObjTaint(obj, taint))
> +        return;
> +
> +    virUUIDFormat(obj->def->uuid, uuidstr);
> +
> +    VIR_WARN("Domain id=%d name='%s' uuid=%s is tainted: %s",
> +             obj->def->id,
> +             obj->def->name,
> +             uuidstr,
> +             virDomainTaintTypeToString(taint));
>  
> -        if (qemuDomainLogContextWrite(logCtxt,
> -                                      "Domain id=%d is tainted: %s\n",
> -                                      obj->def->id,
> -                                      virDomainTaintTypeToString(taint)) < 0)
> -            virResetLastError();
> -        if (closeLog)
> -            qemuDomainLogContextFree(logCtxt);
> -        if (orig_err) {
> -            virSetError(orig_err);
> -            virFreeError(orig_err);
> +    if ((timestamp = virTimeStringNow()) == NULL)

use "if (!(timestamp = virTimeStringNow()))" and move after the orig_err
since we don't what to lose the original error...


> +        goto cleanup;
> +
> +    /* We don't care about errors logging taint info, so
> +     * preserve original error, and clear any error that
> +     * is raised */
> +    orig_err = virSaveLastError();
> +    if (logCtxt == NULL) {
> +        logCtxt = qemuDomainLogContextNew(driver, obj,
> +                                          QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH);
> +        if (!logCtxt) {
> +            VIR_WARN("Unable to open domainlog");
> +            goto cleanup;
>          }
> +        closeLog = true;
> +    }
> +
> +    if (qemuDomainLogContextWrite(logCtxt,
> +                                  "%s: Domain id=%d is tainted: %s\n",
> +                                  timestamp,
> +                                  obj->def->id,
> +                                  virDomainTaintTypeToString(taint)) < 0)
> +        virResetLastError();
> +
> + cleanup:
> +    VIR_FREE(timestamp);
> +    if (closeLog)
> +        qemuDomainLogContextFree(logCtxt);
> +    if (orig_err) {
> +        virSetError(orig_err);
> +        virFreeError(orig_err);
>      }
>  }
>  
> 




More information about the libvir-list mailing list