[libvirt] [PATCH] qemu: migrate: Don't require manual URI to specify a port

Chris Lalancette clalance at redhat.com
Wed Oct 28 14:09:20 UTC 2009


Cole Robinson wrote:
> The xen driver will generate a migration port if only a hostname is passed
> in the optional migrate URI, so let's do the same in qemu.
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/qemu/qemu_driver.c |   29 +++++++++++++++++++++++------
>  1 files changed, 23 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index fb952d8..3ef29a6 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -6304,15 +6304,32 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn,
>  
>          /* Get the port number. */
>          p = strrchr (uri_in, ':');
> -        p++; /* definitely has a ':' in it, see above */
> -        this_port = virParseNumber (&p);
> -        if (this_port == -1 || p-uri_in != strlen (uri_in)) {
> -            qemudReportError (dconn, NULL, NULL, VIR_ERR_INVALID_ARG,
> -                              "%s", _("URI did not have ':port' at the end"));
> -            goto cleanup;
> +        if (p == strchr(uri_in, ':')) {
> +            /* Generate a port */
> +            this_port = QEMUD_MIGRATION_FIRST_PORT + port++;
> +            if (port == QEMUD_MIGRATION_NUM_PORTS)
> +                port = 0;
> +
> +            /* Caller frees */
> +            if (virAsprintf(uri_out, "%s:%d", uri_in, this_port) < 0) {
> +                virReportOOMError (dconn);
> +                goto cleanup;
> +            }
> +
> +        } else {
> +            p++; /* definitely has a ':' in it, see above */
> +            this_port = virParseNumber (&p);
> +            if (this_port == -1 || p-uri_in != strlen (uri_in)) {
> +                qemudReportError (dconn, NULL, NULL, VIR_ERR_INVALID_ARG,
> +                                  "%s", _("URI ended with incorrect ':port'"));
> +                goto cleanup;
> +            }
>          }
>      }
>  
> +    if (uri_out && *uri_out)
> +        VIR_DEBUG("Generated uri_out=%s", *uri_out);
> +
>      /* Parse the domain XML. */
>      if (!(def = virDomainDefParseString(dconn, driver->caps, dom_xml,
>                                          VIR_DOMAIN_XML_INACTIVE))) {

Yeah, good idea.  I also like the additional VIR_DEBUG print, that's useful.

ACK

-- 
Chris Lalancette




More information about the libvir-list mailing list