---
tools/virsh.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh.pod | 6 +++++
2 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index aa85ee6..3dd9314 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -227,6 +227,8 @@ static vshCmdOpt *vshCommandOpt(const vshCmd *cmd, const char *name);
static int vshCommandOptInt(const vshCmd *cmd, const char *name, int *found);
static char *vshCommandOptString(const vshCmd *cmd, const char *name,
int *found);
+static long long vshCommandOptLongLong(const vshCmd *cmd, const char *name,
+ int *found);
#if 0
static int vshCommandOptStringList(const vshCmd *cmd, const char *name, char ***data);
#endif
@@ -2828,6 +2830,51 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
}
/*
+ * "migrate-setmaxdowntime" command
+ */
+static const vshCmdInfo info_migrate_setmaxdowntime[] = {
+ {"help", N_("set maximum tolerable downtime")},
+ {"desc", N_("Set maximum tolerable downtime of a domain which is being
live-migrated to another host.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_migrate_setmaxdowntime[] = {
+ {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or
uuid")},
+ {"downtime", VSH_OT_DATA, VSH_OFLAG_REQ, N_("maximum tolerable
downtime (in nanoseconds) for migration")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdMigrateSetMaxDowntime(vshControl *ctl, const vshCmd *cmd)
+{
+ virDomainPtr dom = NULL;
+ long long downtime;
+ int found;
+ int ret = FALSE;
+
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+ return FALSE;
+
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
+ return FALSE;
+
+ downtime = vshCommandOptLongLong(cmd, "downtime", &found);
+ if (!found || downtime < 1) {
+ vshError(ctl, "%s", _("migrate: Invalid downtime"));
+ goto done;
+ }
+
+ if (virDomainMigrateSetMaxDowntime(dom, downtime, 0))
+ goto done;
+
+ ret = TRUE;
+
+done:
+ virDomainFree(dom);
+ return ret;
+}
+
+/*
* "net-autostart" command
*/
static const vshCmdInfo info_network_autostart[] = {
@@ -7726,6 +7773,7 @@ static const vshCmdDef commands[] = {
{"hostname", cmdHostname, NULL, info_hostname},
{"list", cmdList, opts_list, info_list},
{"migrate", cmdMigrate, opts_migrate, info_migrate},
+ {"migrate-setmaxdowntime", cmdMigrateSetMaxDowntime,
opts_migrate_setmaxdowntime, info_migrate_setmaxdowntime},
{"net-autostart", cmdNetworkAutostart, opts_network_autostart,
info_network_autostart},
{"net-create", cmdNetworkCreate, opts_network_create,
info_network_create},
@@ -8065,6 +8113,24 @@ vshCommandOptString(const vshCmd *cmd, const char *name, int
*found)
return arg && arg->data && *arg->data ? arg->data : NULL;
}
+/*
+ * Returns option as long long
+ */
+static long long
+vshCommandOptLongLong(const vshCmd *cmd, const char *name, int *found)
+{
+ vshCmdOpt *arg = vshCommandOpt(cmd, name);
+ int num_found = FALSE;
+ long long res = 0;
+ char *end_p = NULL;
+
+ if ((arg != NULL) && (arg->data != NULL))
+ num_found = !virStrToLong_ll(arg->data, &end_p, 10, &res);
+ if (found)
+ *found = num_found;
+ return res;
+}
+
#if 0
static int
vshCommandOptStringList(const vshCmd *cmd, const char *name, char ***data)
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 8f6df19..1c7cfce 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -334,6 +334,12 @@ leaves the domain paused on the destination host. The
I<desturi> is the
connection URI of the destination host, and I<migrateuri> is the
migration URI, which usually can be omitted.
+=item B<migrate-setmaxdowntime> I<domain-id> I<downtime>
+
+Set maximum tolerable downtime for a domain which is being live-migrated to
+another host. The I<downtime> is a number of nanoseconds the guest is allowed
+to be down at the end of live migration.
+
=item B<reboot> I<domain-id>
Reboot a domain. This acts just as if the domain had the B<reboot>
--
1.7.0.2