On 08/25/2015 07:18 PM, Daniel P. Berrange wrote:
On Tue, Aug 25, 2015 at 12:04:14PM +0300, nshirokovs...@virtuozzo.com wrote:
From: Nikolay Shirokovskiy <nshirokovs...@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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to