mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Unify automatic coredump filenames
Just create a helper for it and use it. Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
f0fe184fb9
commit
5e1257820f
@ -3902,37 +3902,56 @@ qemuDomainScreenshot(virDomainPtr dom,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
getAutoDumpPath(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm)
|
||||||
|
{
|
||||||
|
char *dumpfile = NULL;
|
||||||
|
char *domname = virDomainObjGetShortName(vm);
|
||||||
|
char timestr[100];
|
||||||
|
struct tm time_info;
|
||||||
|
time_t curtime = time(NULL);
|
||||||
|
virQEMUDriverConfigPtr cfg = NULL;
|
||||||
|
|
||||||
|
if (!domname)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
|
||||||
|
localtime_r(&curtime, &time_info);
|
||||||
|
strftime(timestr, sizeof(timestr), "%Y-%m-%d-%H:%M:%S", &time_info);
|
||||||
|
|
||||||
|
ignore_value(virAsprintf(&dumpfile, "%s/%s-%s",
|
||||||
|
cfg->autoDumpPath,
|
||||||
|
domname,
|
||||||
|
timestr));
|
||||||
|
|
||||||
|
virObjectUnref(cfg);
|
||||||
|
return domname;
|
||||||
|
}
|
||||||
|
|
||||||
static void processWatchdogEvent(virQEMUDriverPtr driver, virDomainObjPtr vm, int action)
|
static void processWatchdogEvent(virQEMUDriverPtr driver, virDomainObjPtr vm, int action)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
char *domname = virDomainObjGetShortName(vm);
|
char *dumpfile = getAutoDumpPath(driver, vm);
|
||||||
|
|
||||||
if (!domname)
|
if (!dumpfile)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case VIR_DOMAIN_WATCHDOG_ACTION_DUMP:
|
case VIR_DOMAIN_WATCHDOG_ACTION_DUMP:
|
||||||
{
|
{
|
||||||
char *dumpfile;
|
|
||||||
unsigned int flags = VIR_DUMP_MEMORY_ONLY;
|
unsigned int flags = VIR_DUMP_MEMORY_ONLY;
|
||||||
|
|
||||||
if (virAsprintf(&dumpfile, "%s/%s-%u",
|
|
||||||
cfg->autoDumpPath,
|
|
||||||
domname,
|
|
||||||
(unsigned int)time(NULL)) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (qemuDomainObjBeginAsyncJob(driver, vm,
|
if (qemuDomainObjBeginAsyncJob(driver, vm,
|
||||||
QEMU_ASYNC_JOB_DUMP) < 0) {
|
QEMU_ASYNC_JOB_DUMP) < 0) {
|
||||||
VIR_FREE(dumpfile);
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!virDomainObjIsActive(vm)) {
|
if (!virDomainObjIsActive(vm)) {
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||||
"%s", _("domain is not running"));
|
"%s", _("domain is not running"));
|
||||||
VIR_FREE(dumpfile);
|
|
||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3951,8 +3970,6 @@ static void processWatchdogEvent(virQEMUDriverPtr driver, virDomainObjPtr vm, in
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||||
"%s", _("Resuming after dump failed"));
|
"%s", _("Resuming after dump failed"));
|
||||||
|
|
||||||
VIR_FREE(dumpfile);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -3963,7 +3980,7 @@ static void processWatchdogEvent(virQEMUDriverPtr driver, virDomainObjPtr vm, in
|
|||||||
qemuDomainObjEndAsyncJob(driver, vm);
|
qemuDomainObjEndAsyncJob(driver, vm);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(domname);
|
VIR_FREE(dumpfile);
|
||||||
virObjectUnref(cfg);
|
virObjectUnref(cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3973,23 +3990,10 @@ doCoreDumpToAutoDumpPath(virQEMUDriverPtr driver,
|
|||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
char *dumpfile = NULL;
|
|
||||||
time_t curtime = time(NULL);
|
|
||||||
char timestr[100];
|
|
||||||
struct tm time_info;
|
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
char *domname = virDomainObjGetShortName(vm);
|
char *dumpfile = getAutoDumpPath(driver, vm);
|
||||||
|
|
||||||
if (!domname)
|
if (!dumpfile)
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
localtime_r(&curtime, &time_info);
|
|
||||||
strftime(timestr, sizeof(timestr), "%Y-%m-%d-%H:%M:%S", &time_info);
|
|
||||||
|
|
||||||
if (virAsprintf(&dumpfile, "%s/%s-%s",
|
|
||||||
cfg->autoDumpPath,
|
|
||||||
domname,
|
|
||||||
timestr) < 0)
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
flags |= cfg->autoDumpBypassCache ? VIR_DUMP_BYPASS_CACHE: 0;
|
flags |= cfg->autoDumpBypassCache ? VIR_DUMP_BYPASS_CACHE: 0;
|
||||||
@ -4001,7 +4005,6 @@ doCoreDumpToAutoDumpPath(virQEMUDriverPtr driver,
|
|||||||
"%s", _("Dump failed"));
|
"%s", _("Dump failed"));
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(dumpfile);
|
VIR_FREE(dumpfile);
|
||||||
VIR_FREE(domname);
|
|
||||||
virObjectUnref(cfg);
|
virObjectUnref(cfg);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user