From 980f2a35c71f713acb432cd7cc4460e328715d7b Mon Sep 17 00:00:00 2001 From: Chen Hanxiao Date: Fri, 20 Jan 2017 16:46:02 +0800 Subject: [PATCH] qemu_domain: add timestamp in tainting of guests log 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 --- src/qemu/qemu_domain.c | 80 +++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 3df7e4bfc1..2ed45ab176 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4008,46 +4008,52 @@ 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); + /* We don't care about errors logging taint info, so + * preserve original error, and clear any error that + * is raised */ + orig_err = virSaveLastError(); + + if (!(timestamp = virTimeStringNow())) + goto cleanup; + + 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); } } -- GitLab