[libvirt] [PATCH 2/2] qemu: Regenerate VNC socket paths
Pavel Hrdina
phrdina at redhat.com
Wed Apr 27 04:24:43 UTC 2016
On Tue, Apr 26, 2016 at 04:34:12PM +0200, Martin Kletzander wrote:
> Similarly to what commit 714080791778 did with some internal paths,
> clear vnc socket paths that were generated by us. Having such path in
> the definition can cause trouble when restoring the domain. The path is
> generated to the per-domain directory that contains the domain ID.
> However, that ID will be different upon restoration, so qemu won't be
> able to create that socket because the directory will not be prepared.
>
> Best viewed with '-C'.
>
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1326270
>
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
> src/qemu/qemu_domain.c | 21 +++++++++++-
> .../qemuxml2argv-graphics-vnc-autosocket.args | 22 ++++++++++++
> .../qemuxml2argv-graphics-vnc-autosocket.xml | 34 +++++++++++++++++++
> .../qemuxml2xmlout-graphics-vnc-autosocket.xml | 39 ++++++++++++++++++++++
> tests/qemuxml2xmltest.c | 7 ++++
> 5 files changed, 122 insertions(+), 1 deletion(-)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-autosocket.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-autosocket.xml
> create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-vnc-autosocket.xml
>
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index a2f981043915..d6f704d6f91b 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -1659,10 +1659,26 @@ qemuCanonicalizeMachine(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
> }
>
>
> +static void
> +qemuDomainCleanupInternalPaths(virDomainDefPtr def, virQEMUDriverConfigPtr cfg)
> +{
> + size_t i = 0;
> +
> + for (i = 0; i < def->ngraphics; ++i) {
> + virDomainGraphicsDefPtr graphics = def->graphics[i];
> +
> + if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
> + graphics->data.vnc.socket &&
> + STRPREFIX(graphics->data.vnc.socket, cfg->libDir))
> + VIR_FREE(graphics->data.vnc.socket);
> + }
I would also move the channel socket cleanup code here so we don't have two
places doing the same thing.
> +}
> +
> +
> static int
> qemuDomainDefPostParse(virDomainDefPtr def,
> virCapsPtr caps,
> - unsigned int parseFlags ATTRIBUTE_UNUSED,
> + unsigned int parseFlags,
> void *opaque)
> {
> virQEMUDriverPtr driver = opaque;
This isn't enough to fix the managedsave/migration. The root cause is that we
generate wrong migratable XML. This cleanups the definition before migratable
XML is created:
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 2e409d4..dc0b035 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2560,6 +2560,7 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
virCPUDefPtr cpu = NULL;
virCPUDefPtr def_cpu = def->cpu;
virDomainControllerDefPtr *controllers = NULL;
+ virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
int ncontrollers = 0;
virCapsPtr caps = NULL;
@@ -2646,7 +2647,7 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
}
}
-
+ qemuDomainCleanupInternalPaths(def, cfg);
}
ret = virDomainDefFormatInternal(def, driver->caps,
@@ -2662,6 +2663,7 @@ qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
def->ncontrollers = ncontrollers;
}
virObjectUnref(caps);
+ virObjectUnref(cfg);
return ret;
}
More information about the libvir-list
mailing list