On 08/25/2015 07:18 PM, Daniel P. Berrange wrote:
On Tue, Aug 25, 2015 at 12:04:14PM +0300, nshirokovskiy(a)virtuozzo.com
wrote:
> From: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
>
> This patch makes basic vz migration possible. For example by virsh:
> virsh -c vz:///system migrate --direct $NAME $STUB vz+ssh://$DST/system
>
> $STUB could be anything as it is required virsh argument but it is not
> used in direct migration.
>
> Vz migration is implemented as direct migration. The reason is that vz sdk do
> all the job. Prepare phase function is used to pass session uuid from
> destination to source so we don't introduce new rpc call.
I'm trying to understand why you need $STUB as dummy data.
IIRC, when doing direct migration, you should be providing a valid
URI for the first parameter, and not need the second uri.
virsh uses virDomainMigrateToURI3 function, and for some reason it differs
destination URI for direct and peer-to-peer migrations. For p2p it uses
pconnuri argument and for direct -VIR_MIGRATE_PARAM_URI
<
http://libvirt.org/html/libvirt-libvirt-domain.html#VIR_MIGRATE_PARAM_URI... from
typed params list.
> +
> +static int
> +vzDomainMigratePrepare3(virConnectPtr conn,
> + const char *cookiein ATTRIBUTE_UNUSED,
> + int cookieinlen ATTRIBUTE_UNUSED,
> + char **cookieout,
> + int *cookieoutlen,
> + const char *uri_in ATTRIBUTE_UNUSED,
> + char **uri_out ATTRIBUTE_UNUSED,
> + unsigned long flags,
> + const char *dname ATTRIBUTE_UNUSED,
> + unsigned long resource ATTRIBUTE_UNUSED,
> + const char *dom_xml ATTRIBUTE_UNUSED)
> +{
> + vzConnPtr privconn = conn->privateData;
> + int ret = -1;
> +
> + virCheckFlags(0, -1);
> +
> + if (!(*cookieout = vzFormatCookie(privconn->session_uuid)))
> + goto cleanup;
> + *cookieoutlen = strlen(*cookieout) + 1;
> + ret = 0;
> +
> + cleanup:
> + if (ret != 0) {
> + VIR_FREE(*cookieout);
> + *cookieoutlen = 0;
> + }
> +
> + return ret;
> +}
> +
> +static int
> +vzConnectSupportsFeature(virConnectPtr conn ATTRIBUTE_UNUSED, int feature)
> +{
> + switch (feature) {
> + case VIR_DRV_FEATURE_MIGRATION_V3:
> + case VIR_DRV_FEATURE_MIGRATION_DIRECT:
> + return 1;
> + default:
> + return 0;
> + }
> +}
> +
> +static virURIPtr
> +vzMakeVzUri(const char *connuri_str)
> +{
> + virURIPtr connuri = NULL;
> + virURIPtr vzuri = NULL;
> + int ret = -1;
> +
> + if (!(connuri = virURIParse(connuri_str)))
> + goto cleanup;
> +
> + if (VIR_ALLOC(vzuri) < 0)
> + goto cleanup;
> + memset(vzuri, 0, sizeof(*vzuri));
> +
> + if (VIR_STRDUP(vzuri->server, connuri->server) < 0)
> + goto cleanup;
> + vzuri->port = connuri->port;
> + ret = 0;
> +
> + cleanup:
> +
> + virURIFree(connuri);
> + if (ret < 0) {
> + virURIFree(vzuri);
> + vzuri = NULL;
> + }
> +
> + return vzuri;
> +}
> +
> +#define VZ_MIGRATION_FLAGS (0)
> +
> +#define VZ_MIGRATION_PARAMETERS (NULL)
> +
> +static int
> +vzDomainMigratePerform3(virDomainPtr domain,
> + const char *xmlin ATTRIBUTE_UNUSED,
> + const char *cookiein ATTRIBUTE_UNUSED,
> + int cookieinlen ATTRIBUTE_UNUSED,
> + char **cookieout ATTRIBUTE_UNUSED,
> + int *cookieoutlen ATTRIBUTE_UNUSED,
> + const char *dconnuri ATTRIBUTE_UNUSED,
> + const char *uri,
I think you should be using 'dconnuri' rather than 'uri', so
then you would not need the $STUB dummy parameter.
Regards,
Daniel