Signed-off-by: Cristian Klein <cristiklein@xxxxxxxxx> --- tools/virsh-domain.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ tools/virsh.pod | 11 +++++++++++ 2 files changed, 61 insertions(+) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 750411b..1753f6e 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -9435,6 +9435,10 @@ static const vshCmdOptDef opts_migrate[] = { .type = VSH_OT_INT, .help = N_("force guest to suspend if live migration exceeds timeout (in seconds)") }, + {.name = "enable-postcopy", + .type = VSH_OT_BOOL, + .help = N_("enable (but do not start) post-copy migration; to start post-copy use migrate-start-postcopy") + }, {.name = "xml", .type = VSH_OT_STRING, .help = N_("filename containing updated XML for the target") @@ -9516,6 +9520,8 @@ doMigrate(void *opaque) VIR_FREE(xml); } + if (vshCommandOptBool(cmd, "enable-postcopy")) + flags |= VIR_MIGRATE_ENABLE_POSTCOPY; if (vshCommandOptBool(cmd, "live")) flags |= VIR_MIGRATE_LIVE; if (vshCommandOptBool(cmd, "p2p")) @@ -12289,6 +12295,44 @@ cmdDomFSInfo(vshControl *ctl, const vshCmd *cmd) return ret >= 0; } +/* + * "migrate-start-postcopy" command + */ +static const vshCmdInfo info_migratestartpostcopy[] = { + {.name = "help", + .data = N_("Switch running migration from pre-copy to post-copy") + }, + {.name = "desc", + .data = N_("Switch running migration from pre-copy to post-copy") + }, + {.name = NULL} +}; + +static const vshCmdOptDef opts_migratestartpostcopy[] = { + {.name = "domain", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("domain name, id or uuid") + }, + {.name = NULL} +}; + +static bool +cmdMigrateStartPostCopy(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom; + bool ret = true; + + if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) + return false; + + if (virDomainMigrateStartPostCopy(dom, 0) < 0) + ret = false; + + virDomainFree(dom); + return ret; +} + const vshCmdDef domManagementCmds[] = { {.name = "attach-device", .handler = cmdAttachDevice, @@ -12808,5 +12852,11 @@ const vshCmdDef domManagementCmds[] = { .info = info_vncdisplay, .flags = 0 }, + {.name = "migrate-start-postcopy", + .handler = cmdMigrateStartPostCopy, + .opts = opts_migratestartpostcopy, + .info = info_migratestartpostcopy, + .flags = 0 + }, {.name = NULL} }; diff --git a/tools/virsh.pod b/tools/virsh.pod index 7cde3fd..18c6a23 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1428,6 +1428,7 @@ to the I<uri> namespace is displayed instead of being modified. [I<--compressed>] [I<--abort-on-error>] [I<--auto-converge>] I<domain> I<desturi> [I<migrateuri>] [I<graphicsuri>] [I<listen-address>] [I<dname>] [I<--timeout> B<seconds>] [I<--xml> B<file>] +[I<--enable-postcopy>] Migrate domain to another host. Add I<--live> for live migration; <--p2p> for peer-2-peer migration; I<--direct> for direct migration; or I<--tunnelled> @@ -1475,6 +1476,11 @@ I<--timeout> B<seconds> forces guest to suspend when live migration exceeds that many seconds, and then the migration will complete offline. It can only be used with I<--live>. +I<--enable-postcopy> enables post-copy logic in migration, but does not +actually start post-copy, i.e., migration is started in pre-copy mode. +Once migration started, the user may switch to post-copy using the +B<migrate-start-postcopy> command sent from another virsh instance. + Running migration can be canceled by interrupting virsh (usually using C<Ctrl-C>) or by B<domjobabort> command sent from another virsh instance. @@ -1552,6 +1558,11 @@ addresses are accepted as well as hostnames (the resolving is done on destination). Some hypervisors do not support this feature and will return an error if this parameter is used. +=item B<migrate-start-postcopy> I<domain> + +Switch the current migration from pre-copy to post-copy. A migration needs +to be in progress, that has been started with I<--enable-postcopy>. + =item B<migrate-setmaxdowntime> I<domain> I<downtime> Set maximum tolerable downtime for a domain which is being live-migrated to -- 1.9.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list