[libvirt] [PATCH 2/4] virsh: Add keepalive in new vshConnect function
Michal Privoznik
mprivozn at redhat.com
Fri Mar 7 15:50:51 UTC 2014
On 07.03.2014 11:49, Martin Kletzander wrote:
> Introducing keepalive similarly to Guannan around 2 years ago. Since
> we want to introduce keepalive for every connection, it makes sense to
> wrap the connecting function into new virsh one that can deal
> keepalive as well.
>
> Function vshConnect() is now used for connecting and keepalive added
> in that function (if possible) helps preventing long waits e.g. while
> nework goes down during migration.
>
> This patch also adds the options for keepalive tuning into virsh and
> fails connecting only when keepalives are explicitly requested and
> cannot be set (whether it is due to missing support in connected
> driver or remote server). If not explicitely requested, a debug
> message is printed (hence the addition to virsh-optparse test).
>
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1073506
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=822839
>
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
> tests/virsh-optparse | 3 +-
> tools/virsh-domain.c | 2 +-
> tools/virsh.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++-----
> tools/virsh.h | 5 ++++
> 4 files changed, 78 insertions(+), 9 deletions(-)
Missing virsh.pod adjustment while you're adding new command line options.
>
> diff --git a/tests/virsh-optparse b/tests/virsh-optparse
> index 214ae41..7d4c699 100755
> --- a/tests/virsh-optparse
> +++ b/tests/virsh-optparse
> @@ -1,7 +1,7 @@
> #!/bin/sh
> # Ensure that virsh option parsing doesn't regress
>
> -# Copyright (C) 2011-2012 Red Hat, Inc.
> +# Copyright (C) 2011-2012, 2014 Red Hat, Inc.
>
> # This program is free software: you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> @@ -38,6 +38,7 @@ fi
>
> cat <<\EOF > exp-out || framework_failure
>
> +Failed to setup keepalive on connection
> setvcpus: <domain> trying as domain NAME
> setvcpus: count(optdata): 2
> setvcpus: domain(optdata): test
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index 1d3c5f0..3e989ee 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -8781,7 +8781,7 @@ doMigrate(void *opaque)
> virConnectPtr dconn = NULL;
> virDomainPtr ddom = NULL;
>
> - dconn = virConnectOpenAuth(desturi, virConnectAuthPtrDefault, 0);
> + dconn = vshConnect(ctl, desturi, false);
> if (!dconn)
> goto out;
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 9b8429f..73c58a5 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -315,6 +315,45 @@ vshCatchDisconnect(virConnectPtr conn ATTRIBUTE_UNUSED,
> disconnected++;
> }
>
> +/* Main Function which should be used for connecting.
> + * This function properly handles keepalive settings. */
> +virConnectPtr
> +vshConnect(vshControl *ctl, const char *uri, bool readonly)
> +{
> + virConnectPtr c = NULL;
> + int interval = 5; /* Default */
> + int count = 6; /* Default */
> + bool keepalive_forced = false;
> +
> + if (ctl->keepalive_interval >= 0) {
> + interval = ctl->keepalive_interval;
> + keepalive_forced = true;
> + }
> + if (ctl->keepalive_count > 0) {
> + count = ctl->keepalive_count;
> + keepalive_forced = true;
> + }
Both interval and count are allowed to be zero. However, setting
interval to zero disables keep alive. If count is set to zero,
connection is closed automatically after @interval seconds of
inactivity. You are allowing the first case (which doesn't make much
sense to me - I mean, user requested keepalive, so why allowing zero
value?), and disabling the second case - which could make more sense.
Moreover, 'virsh --keepalive-count 0' will not use user specified count
but the default value of 6.
> +
> + c = virConnectOpenAuth(uri, virConnectAuthPtrDefault,
> + readonly ? VIR_CONNECT_RO : 0);
> + if (!c)
> + return NULL;
> +
> + if (virConnectSetKeepAlive(c, interval, count) != 0) {
> + if (keepalive_forced) {
> + vshError(ctl, "%s",
> + _("Cannot setup keepalive on connection "
> + "as requested, disconnecting"));
> + virConnectClose(c);
> + return NULL;
> + }
> + vshDebug(ctl, VSH_ERR_INFO, "%s",
> + _("Failed to setup keepalive on connection\n"));
> + }
> +
> + return c;
> +}
> +
Michal
More information about the libvir-list
mailing list