[libvirt] [PATCH libvirt-java 7/9] Use and implement virDomainMigrate2 instead of virDomainMigrate

Wido den Hollander wido at widodh.nl
Sat Jan 5 11:48:24 UTC 2013


This enables use a different XML for running the guest on the target host.

Signed-off-by: Wido den Hollander <wido at widodh.nl>
---
 src/main/java/org/libvirt/Domain.java      |   54 ++++++++++++++++++++++++++--
 src/main/java/org/libvirt/jna/Libvirt.java |    2 ++
 2 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/libvirt/Domain.java b/src/main/java/org/libvirt/Domain.java
index 932f56c..03afa0e 100644
--- a/src/main/java/org/libvirt/Domain.java
+++ b/src/main/java/org/libvirt/Domain.java
@@ -760,6 +760,8 @@ public class Domain {
      *
      * @param dconn
      *            destination host (a Connect object)
+     * @param dxml
+     *            (optional) XML config for launching guest on target
      * @param flags
      *            flags
      * @param dname
@@ -773,13 +775,61 @@ public class Domain {
      *         scope of the destination connection (dconn).
      * @throws LibvirtException
      */
-    public Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth) throws LibvirtException {
-        DomainPointer newPtr = libvirt.virDomainMigrate(VDP, dconn.VCP, new NativeLong(flags), dname, uri, new NativeLong(bandwidth));
+    public Domain migrate(Connect dconn, long flags, String dxml, String dname, String uri, long bandwidth) throws LibvirtException {
+        DomainPointer newPtr = libvirt.virDomainMigrate2(VDP, dconn.VCP, dxml, new NativeLong(flags), dname, uri, new NativeLong(bandwidth));
         processError();
         return new Domain(dconn, newPtr);
     }
 
     /**
+     * Migrate this domain object from its current host to the destination host
+     * given by dconn (a connection to the destination host). Flags may be one
+     * of more of the following: Domain.VIR_MIGRATE_LIVE Attempt a live
+     * migration. If a hypervisor supports renaming domains during migration,
+     * then you may set the dname parameter to the new name (otherwise it keeps
+     * the same name). If this is not supported by the hypervisor, dname must be
+     * NULL or else you will get an error. Since typically the two hypervisors
+     * connect directly to each other in order to perform the migration, you may
+     * need to specify a path from the source to the destination. This is the
+     * purpose of the uri parameter.If uri is NULL, then libvirt will try to
+     * find the best method. Uri may specify the hostname or IP address of the
+     * destination host as seen from the source, or uri may be a URI giving
+     * transport, hostname, user, port, etc. in the usual form. Uri should only
+     * be specified if you want to migrate over a specific interface on the
+     * remote host. For Qemu/KVM, the uri should be of the form
+     * "tcp://hostname[:port]". This does not require TCP auth to be setup
+     * between the connections, since migrate uses a straight TCP connection
+     * (unless using the PEER2PEER flag, in which case URI should be a full
+     * fledged libvirt URI). Refer also to driver documentation for the
+     * particular URIs supported. If set to 0, libvirt will choose a suitable
+     * default. Some hypervisors do not support this feature and will return an
+     * error if bandwidth is not 0. To see which features are supported by the
+     * current hypervisor, see Connect.getCapabilities,
+     * /capabilities/host/migration_features. There are many limitations on
+     * migration imposed by the underlying technology - for example it may not
+     * be possible to migrate between different processors even with the same
+     * architecture, or between different types of hypervisor.
+     *
+     * @param dconn
+     *            destination host (a Connect object)
+     * @param flags
+     *            flags
+     * @param dname
+     *            (optional) rename domain to this at destination
+     * @param uri
+     *            (optional) dest hostname/URI as seen from the source host
+     * @param bandwidth
+     *            optional) specify migration bandwidth limit in Mbps
+     * @return the new domain object if the migration was successful, or NULL in
+     *         case of error. Note that the new domain object exists in the
+     *         scope of the destination connection (dconn).
+     * @throws LibvirtException
+     */
+    public Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth) throws LibvirtException {
+        return migrate(dconn, flags, null, dname, uri, bandwidth);
+    }
+
+    /**
      * Sets maximum tolerable time for which the domain is allowed to be paused
      * at the end of live migration.
      *
diff --git a/src/main/java/org/libvirt/jna/Libvirt.java b/src/main/java/org/libvirt/jna/Libvirt.java
index 2bbc8c3..de2a262 100644
--- a/src/main/java/org/libvirt/jna/Libvirt.java
+++ b/src/main/java/org/libvirt/jna/Libvirt.java
@@ -209,6 +209,8 @@ public interface Libvirt extends Library {
     public int virDomainManagedSaveRemove(DomainPointer virDomainPtr, int flags);
     public DomainPointer virDomainMigrate(DomainPointer virDomainPtr, ConnectionPointer virConnectPtr,
             NativeLong flags, String dname, String uri, NativeLong bandwidth);
+    public DomainPointer virDomainMigrate2(DomainPointer virDomainPtr, ConnectionPointer virConnectPtr,
+            String dxml, NativeLong flags, String dname, String uri, NativeLong bandwidth);
     public int virDomainMigrateSetMaxDowntime(DomainPointer virDomainPtr, long downtime, int flags);
     public int virDomainMigrateToURI(DomainPointer virDomainPtr, String duri,
             NativeLong flags, String dname, NativeLong bandwidth);
-- 
1.7.9.5




More information about the libvir-list mailing list