}
/* log start of migration */
- if ((timestamp = virTimeStringNow()) != NULL)
- qemuDomainLogAppendMessage(driver, vm, "%s: initiating migration\n", timestamp);
+ if ((timestamp = virTimeStringNow()) != NULL) {
+ if (migrateFlags & QEMU_MONITOR_MIGRATE_RESUME)
+ qemuDomainLogAppendMessage(driver, vm, "%s: resuming migration\n", timestamp);
+ else
+ qemuDomainLogAppendMessage(driver, vm, "%s: initiating migration\n", timestamp);
+ }
switch (spec->destType) {
case MIGRATION_DEST_HOST:
QEMU_MONITOR_MIGRATE_BACKGROUND = 1 << 0,
QEMU_MONITOR_MIGRATE_NON_SHARED_DISK = 1 << 1, /* migration with non-shared storage with full disk copy */
QEMU_MONITOR_MIGRATE_NON_SHARED_INC = 1 << 2, /* migration with non-shared storage with incremental copy */
+ QEMU_MONITOR_MIGRATE_RESUME = 1 << 3, /* resume failed post-copy migration */
QEMU_MONITOR_MIGRATION_FLAGS_LAST
} QEMU_MONITOR_MIGRATE;
bool detach = !!(flags & QEMU_MONITOR_MIGRATE_BACKGROUND);
bool blk = !!(flags & QEMU_MONITOR_MIGRATE_NON_SHARED_DISK);
bool inc = !!(flags & QEMU_MONITOR_MIGRATE_NON_SHARED_INC);
+ bool resume = !!(flags & QEMU_MONITOR_MIGRATE_RESUME);
g_autoptr(virJSONValue) cmd = qemuMonitorJSONMakeCommand("migrate",
"b:detach", detach,
"b:blk", blk,
"b:inc", inc,
+ "b:resume", resume,
"s:uri", uri,
NULL);
g_autoptr(virJSONValue) reply = NULL;