[libvirt] [PATCH v2] virsh: add keepalive protocol in virsh
Eric Blake
eblake at redhat.com
Thu Jun 7 18:03:02 UTC 2012
On 06/05/2012 02:36 AM, Guannan Ren wrote:
> Bugzilla:https://bugzilla.redhat.com/show_bug.cgi?id=822839
> add two general virsh options to support keepalive message protocol
>
> -i | --keepalive_interval interval time value (default 5 seconds)
> -n | --keepalive_count number of heartbeats (default 5 times)
>
> For non-p2p migration, start keepalive for remote driver to
> determine the status of network connection, aborting migrating job
> after defined amount of interval time.
> ---
> tools/virsh.c | 88 +++++++++++++++++++++++++++++++++++++++++++++-----------
> 1 files changed, 70 insertions(+), 18 deletions(-)
Missing a counterpart documentation in virsh.pod.
> @@ -7213,6 +7219,12 @@ doMigrate (void *opaque)
> dconn = virConnectOpenAuth (desturi, virConnectAuthPtrDefault, 0);
> if (!dconn) goto out;
>
> + data->dconn = dconn;
> + if (virConnectSetKeepAlive(dconn,
> + ctl->keepalive_interval,
> + ctl->keepalive_count) < 0)
> + vshDebug(ctl, VSH_ERR_WARNING, "migrate: Failed to start keepalive\n");
This makes it impossible to migrate to an older server that lacks
virConnectSetKeepAlive() support. You need to avoid doing this if
keepalive_interval and/or keepalive_count is set to a value that avoids
keepalive. I think that also means you need to distinguish between a
normal default of 5 seconds with new servers but unspecified by the user
(where we just gracefully continue without keepalive), compared to an
explicit user request of 5 seconds (must fail if the keepalive request
cannot be honored), and compared to an explicit user request of no
keepalive.
> @@ -7329,6 +7342,13 @@ repoll:
> goto cleanup;
> }
>
> + if (data->dconn && virConnectIsAlive(data->dconn) <= 0) {
> + virDomainAbortJob(dom);
> + vshError(ctl, "%s",
> + _("Lost connection to destination host"));
> + goto cleanup;
> + }
Again, need to be careful of older servers that lack virConnectIsAlive()
support.
> @@ -18681,6 +18703,18 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd)
> if (enable_timing)
> GETTIMEOFDAY(&before);
>
> + /* start keepalive for remote driver */
> + driver = virConnectGetType(ctl->conn);
> + if (STREQ_NULLABLE(driver, "QEMU") ||
> + STREQ_NULLABLE(driver, "xenlight") ||
> + STREQ_NULLABLE(driver, "UML") ||
> + STREQ_NULLABLE(driver, "LXC") ||
> + STREQ_NULLABLE(driver, "remote"))
Why are you limiting this to particular hypervisors? That feels wrong.
Rather, you should blindly attempt it, and gracefully detect when it is
unsupported.
> @@ -19959,17 +19993,19 @@ vshUsage(void)
> fprintf(stdout, _("\n%s [options]... [<command_string>]"
> "\n%s [options]... <command> [args...]\n\n"
> " options:\n"
> - " -c | --connect=URI hypervisor connection URI\n"
> + " -c | --connect=URI hypervisor connection URI\n"
Rather than reindenting everything, I would just alter your new lines to
use multiple lines:
> + " -i | --keepalive_interval interval time value (default 5 seconds)\n"
> + " -n | --keepalive_count number of heartbeats (default 5 times)\n\n"
-c | --connect=URI hypervisor connection URI
-i | --keepalive_interval
interval time value (default 5 seconds)
>
> /* Standard (non-command) options. The leading + ensures that no
> * argument reordering takes place, so that command options are
> * not confused with top-level virsh options. */
> - while ((arg = getopt_long(argc, argv, "+d:hqtc:vVrl:e:", opt, NULL)) != -1) {
> + while ((arg = getopt_long(argc, argv, "+d:hqtc:vVrl:e:i:n:", opt, NULL)) != -1) {
Pre-existing, but I would welcome an independent patch that cleaned this
up into alphabetic ordering to make it easier to find code for a given
option now that we have more options to deal with.
Looking forward to v3.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120607/467a1e37/attachment-0001.sig>
More information about the libvir-list
mailing list