On Fri, Jun 14, 2013 at 06:14:40PM +0800, Chen Fan wrote:
> Implements 'rename-restart' behavior of the 'on_crash'
> in the XML when domain crashed.
> ---
> src/qemu/qemu_driver.c | 67
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 67 insertions(+)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index eefe7a2..a166468 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -3566,6 +3566,55 @@ cleanup:
> return ret;
> }
>
> +static int
> +qemuProcessVmRenameAlive(virQEMUDriverPtr driver,
> + virDomainObjPtr vm, char *alias)
> +{
> + int ret = -1;
> + char *oldname = NULL;
> + char *newDefname = NULL;
> + char ebuf[1024];
> + char *statefile = NULL;
> + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> +
> + if (strstr(vm->def->name, "-crashed")) {
> + ret = 0;
> + goto cleanup;
> + }
> +
> + oldname = vm->def->name;
> + vm->def->name = alias;
> +
> + if (vm->newDef) {
> + if (VIR_STRDUP(newDefname, oldname) < 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> + VIR_FREE(vm->newDef->name);
> + vm->newDef->name = newDefname;
> + }
> +
> + if (virAsprintf(&statefile, "%s/%s.xml", cfg->stateDir, oldname) < 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> +
> + if (unlink(statefile) < 0 && errno != ENOENT && errno != ENOTDIR)
> + VIR_WARN("Failed to remove domain XML for %s: %s",
> + oldname, virStrerror(errno, ebuf, sizeof(ebuf)));
> +
> + if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
> + VIR_WARN("Failed to save status on vm %s", vm->def->name);
> +
> + ret = 0;
> +
> +cleanup:
> + VIR_FREE(statefile);
> + VIR_FREE(oldname);
> + virObjectUnref(cfg);
> + return ret;
> +}
> +
> static void
> processGuestPanicEvent(virQEMUDriverPtr driver,
> virDomainObjPtr vm,
> @@ -3650,6 +3699,24 @@ processGuestPanicEvent(virQEMUDriverPtr driver,
> qemuProcessShutdownOrReboot(driver, vm);
> break;
>
> + case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME:
> + {
> + char *alias = NULL;
> + if (virAsprintf(&alias, "%s-crashed",
The doc doesn't say how to rename a domain on crash, I'm not sure
whether oldname + "-crashed" is reasonable. While changing the name,
should we change the UUID at the same time?
> + vm->def->name) < 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> + if (qemuProcessVmRenameAlive(driver, vm, alias) < 0) {
BTW, seems there can be a API for changing domain name.
> + VIR_FREE(alias);
> + goto cleanup;
> + }
> +
> + qemuDomainSetFakeReboot(driver, vm, true);
> + qemuProcessShutdownOrReboot(driver, vm);
> + }
> + break;
> +
> case VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE:
> break;
>
> --
> 1.8.1.4
>
> --
> libvir-list mailing list
> [email protected]
> https://www.redhat.com/mailman/listinfo/libvir-list
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list