
On 09/10/2012 08:20 PM, liguang wrote:
original migration did not aware of offline case so, add code to support offline migration quietly (did not disturb original migration) by pass VIR_MIGRATE_OFFLINE flag to migration APIs if the domain is really inactive, and migration process will not puzzeled by domain
s/puzzeled/puzzled/
offline and exit unexpectly.
s/unexpectly/unexpectedly/
these changes did not take care of disk images the domain required, for disk images could be transfered
s/transfered/transferred/
by other APIs as suggested. so, the migration result is just make domain definition alive at target side.
Signed-off-by: liguang <lig.fnst@cn.fujitsu.com> --- include/libvirt/libvirt.h.in | 1 + src/qemu/qemu_driver.c | 8 ++++++ src/qemu/qemu_migration.c | 55 ++++++++++++++++++++++++++++++++++++----- src/qemu/qemu_migration.h | 3 +- tools/virsh-domain.c | 6 ++++ 5 files changed, 65 insertions(+), 8 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index cfe5047..77df2ab 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -995,6 +995,7 @@ typedef enum { * whole migration process; this will be used automatically * when supported */ VIR_MIGRATE_UNSAFE = (1 << 9), /* force migration even if it is considered unsafe */ + VIR_MIGRATE_OFFLINE = (1 << 10), /* offline migrate */
Do we really need a new user-visible flag, or can we make this work automatically without having to involve the user? Making this work transparently might involve adding a new driver feature bit (see qemu_driver.c:qemudSupportsFeature for how we made v3 migration transparent). On the other hand, what happens if we do keep this as a user-visible flag? Should 'virsh migrate --offline' silently ignore the flag if the guest is online, or should it error out stating that the guest is running and not offline? Also, I think we NEED to error out if the guest is offline but the --persistent flag is not set; that is, an offline migration only makes sense if the persistent flag has been requested, but I think that 'virsh migrate --persistent' should automatically be smart enough to do an offline migration. You either need to take care of migrating storage if the user does 'virsh migrate [whatever-we-decide-for-offline] --copy-storage-*', or else explicitly reject attempts to migrate storage in parallel with an offline migration.
@@ -439,6 +441,11 @@ qemuMigrationCookieXMLFormat(struct qemud_driver *driver, virBufferAdjustIndent(buf, -2); }
+ if (mig->flags & QEMU_MIGRATION_COOKIE_OFFLINE) { + virBufferAsprintf(buf, " <offline>\n"); + virBufferAddLit(buf, " </offline>\n");
Collapse these two lines into the simpler one-liner: virBufferAddLit(buf, " <offline/>\n"); -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org