[libvirt] [PATCH 4/4] libxl: handle on_crash coredump actions
Michal Privoznik
mprivozn at redhat.com
Mon Feb 24 13:39:27 UTC 2014
On 21.02.2014 00:02, Jim Fehlig wrote:
> Add support for coredump-{destroy,restart} actions of <on_crash> event.
>
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
> src/libxl/libxl_driver.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 50 insertions(+)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index e18fead..7640801 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -251,6 +251,50 @@ error:
> }
>
> /*
> + * Core dump domain to default dump path.
> + *
> + * virDomainObjPtr should be locked on invocation
> + */
> +static int
> +libxlDomainAutoCoreDump(libxlDriverPrivatePtr driver,
> + virDomainObjPtr vm)
> +{
> + libxlDomainObjPrivatePtr priv = vm->privateData;
> + libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver);
> + time_t curtime = time(NULL);
> + char timestr[100];
> + struct tm time_info;
> + char *dumpfile = NULL;
> + int ret = -1;
> +
> + localtime_r(&curtime, &time_info);
> + strftime(timestr, sizeof(timestr), "%Y-%m-%d-%H:%M:%S", &time_info);
> +
> + if (virAsprintf(&dumpfile, "%s/%s-%s",
> + cfg->autoDumpDir,
> + vm->def->name,
> + timestr) < 0)
> + goto cleanup;
> +
> + if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0)
> + goto cleanup;
> +
> + /* Unlock virDomainObj while dumping core */
> + virObjectUnlock(vm);
> + libxl_domain_core_dump(priv->ctx, vm->def->id, dumpfile, NULL);
> + virObjectLock(vm);
> +
> + ignore_value(libxlDomainObjEndJob(driver, vm));
> + ret = 0;
> +
> +cleanup:
> + VIR_FREE(dumpfile);
> + virObjectUnref(cfg);
> +
> + return ret;
> +}
> +
> +/*
> * Cleanup function for domain that has reached shutoff state.
> *
> * virDomainObjPtr should be locked on invocation
> @@ -403,6 +447,12 @@ libxlDomainShutdownThread(void *opaque)
> goto restart;
> case VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE:
> goto cleanup;
> + case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY:
> + libxlDomainAutoCoreDump(driver, vm);
> + goto destroy;
> + case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART:
> + libxlDomainAutoCoreDump(driver, vm);
> + goto restart;
> }
> } else if (xl_reason == LIBXL_SHUTDOWN_REASON_REBOOT) {
> dom_event = virDomainEventLifecycleNewFromObj(vm,
>
ACK
Michal
More information about the libvir-list
mailing list