mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 22:25:25 +00:00
qemu: monitor: Add infrastructure to access VM logs for better err msgs
Early VM startup errors usually produce a better error message in the machine log file. Currently we were accessing it only when the process exited during certain phases of startup. This will help adding a more comprehensive error extraction for early qemu startup phases. This patch adds infrastructure to keep a file descriptor for the machine log file that will be used in case an error happens.
This commit is contained in:
parent
310651a5e3
commit
8519e9ecdc
@ -88,6 +88,9 @@ struct _qemuMonitor {
|
|||||||
/* If found, path to the virtio memballoon driver */
|
/* If found, path to the virtio memballoon driver */
|
||||||
char *balloonpath;
|
char *balloonpath;
|
||||||
bool ballooninit;
|
bool ballooninit;
|
||||||
|
|
||||||
|
/* Log file fd of the qemu process to dig for usable info */
|
||||||
|
int logfd;
|
||||||
};
|
};
|
||||||
|
|
||||||
static virClassPtr qemuMonitorClass;
|
static virClassPtr qemuMonitorClass;
|
||||||
@ -254,6 +257,7 @@ static void qemuMonitorDispose(void *obj)
|
|||||||
VIR_FREE(mon->buffer);
|
VIR_FREE(mon->buffer);
|
||||||
virJSONValueFree(mon->options);
|
virJSONValueFree(mon->options);
|
||||||
VIR_FREE(mon->balloonpath);
|
VIR_FREE(mon->balloonpath);
|
||||||
|
VIR_FORCE_CLOSE(mon->logfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -715,6 +719,7 @@ qemuMonitorOpenInternal(virDomainObjPtr vm,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
mon->fd = -1;
|
mon->fd = -1;
|
||||||
|
mon->logfd = -1;
|
||||||
if (virCondInit(&mon->notify) < 0) {
|
if (virCondInit(&mon->notify) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("cannot initialize monitor condition"));
|
_("cannot initialize monitor condition"));
|
||||||
@ -3843,3 +3848,25 @@ qemuMonitorGetDeviceAliases(qemuMonitorPtr mon,
|
|||||||
|
|
||||||
return qemuMonitorJSONGetDeviceAliases(mon, aliases);
|
return qemuMonitorJSONGetDeviceAliases(mon, aliases);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemuMonitorSetDomainLog:
|
||||||
|
* Set the file descriptor of the open VM log file to report potential
|
||||||
|
* early startup errors of qemu.
|
||||||
|
*
|
||||||
|
* @mon: Monitor object to set the log file reading on
|
||||||
|
* @logfd: File descriptor of the already open log file
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
qemuMonitorSetDomainLog(qemuMonitorPtr mon, int logfd)
|
||||||
|
{
|
||||||
|
VIR_FORCE_CLOSE(mon->logfd);
|
||||||
|
if (logfd >= 0 &&
|
||||||
|
(mon->logfd = dup(logfd)) < 0) {
|
||||||
|
virReportSystemError(errno, "%s", _("failed to duplicate log fd"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -761,6 +761,8 @@ int qemuMonitorDetachCharDev(qemuMonitorPtr mon,
|
|||||||
int qemuMonitorGetDeviceAliases(qemuMonitorPtr mon,
|
int qemuMonitorGetDeviceAliases(qemuMonitorPtr mon,
|
||||||
char ***aliases);
|
char ***aliases);
|
||||||
|
|
||||||
|
int qemuMonitorSetDomainLog(qemuMonitorPtr mon, int logfd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When running two dd process and using <> redirection, we need a
|
* When running two dd process and using <> redirection, we need a
|
||||||
* shell that will not truncate files. These two strings serve that
|
* shell that will not truncate files. These two strings serve that
|
||||||
|
Loading…
Reference in New Issue
Block a user