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(a)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(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org