On Mon, Sep 28, 2009 at 02:22:59PM +0100, Mark McLoughlin wrote:
On Thu, 2009-09-24 at 16:00 +0100, Daniel P. Berrange wrote:
> @@ -6537,34 +6535,29 @@ qemudDomainMigratePerform (virDomainPtr dom,
> goto cleanup;
>
> /* Issue the migrate command. */
> - safe_uri = qemudEscapeMonitorArg (uri);
> - if (!safe_uri) {
> - virReportOOMError (dom->conn);
> - goto cleanup;
> + if (STRPREFIX(uri, "tcp:") && !STRPREFIX(uri,
"tcp://")) {
> + char *tmpuri;
> + if (virAsprintf(&tmpuri, "tcp://%s", uri +
strlen("tcp:")) < 0) {
> + virReportOOMError(dom->conn);
> + goto cleanup;
> + }
> + uribits = xmlParseURI(tmpuri);
> + VIR_FREE(tmpuri);
> + } else {
> + uribits = xmlParseURI(uri);
This is all new stuff and there's no explanation in the ChangeLog; not
sure why you're so keen to split up the URI only to re-construct it
again
We're calling this parameter a URI but doing zero validation that it
is actually correctly formated as a URI, and just passing it straight
down to QEMU. The application caller could have appended all sorts
of junk onto the URI. In fact the QEMU Prepare() method wasn't even
generating valid URIs, which rather justifies why we should have been
doing validation in the first place. So this code fixes the broken
tcp:hostname:port URIs to actually be tcp://hostname:port
Unfortunately we cna't fix the original Prepare() method since that
would break compatability with older libvirt. The whole thing is a
giant mess because it was directly exposing the QEMU monitor syntax
for TCP migration :-(
> diff --git a/src/qemu/qemu_monitor_text.c
b/src/qemu/qemu_monitor_text.c
> index 0b746b9..4f8d72e 100644
> --- a/src/qemu/qemu_monitor_text.c
> +++ b/src/qemu/qemu_monitor_text.c
> @@ -1088,3 +1088,59 @@ cleanup:
> VIR_FREE(reply);
> return ret;
> }
> +
> +
> +static int qemuMonitorMigrate(const virDomainObjPtr vm,
> + const char *dest)
> +{
> + char *cmd = NULL;
> + char *info = NULL;
> + int ret = -1;
> +
> + if (virAsprintf(&cmd, "migrate %s", cmd) < 0) {
Should be passing dest here
Fixed in the next patch, but would be good to get it right for
bisectability
Ahh I knew there was one place where I screwed up / missed a rebase.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|