[libvirt] [PATCH v2 2/6] virsh: add support for VIR_DOMAIN_CONSOLE_FORCE flag

Eric Blake eblake at redhat.com
Wed Dec 14 00:14:09 UTC 2011

On 12/07/2011 11:08 AM, Peter Krempa wrote:
> This patch adds support for the newly introduced VIR_DOMAIN_CONSOLE


> flag. The console command now has an optional parameter --force that
> specifies that the user wants to forcibly interrupt an ongoing console
> session and create a new one. The behaviour to this point was, that the


> daemon openend two streams to the console, that competed for data from


> the pipe and the result was, that both of the consoles ended up

s/pipe and the result was,/pipe, and the result was/

> scrambled.
> * tools/console.c:
>         - add support for flag passthrough
> * tools/console.h:
>         - modify function prototypes to match impl.
> * tools/virsh.c:
>         - add flag --force for the console command
> ---
>  tools/console.c |    5 +++--
>  tools/console.h |    3 ++-
>  tools/virsh.c   |   18 +++++++++++++-----
>  3 files changed, 18 insertions(+), 8 deletions(-)

> +++ b/tools/virsh.c
> @@ -787,11 +787,14 @@ static const vshCmdInfo info_console[] = {
>  static const vshCmdOptDef opts_console[] = {
>      {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
>      {"devname", VSH_OT_STRING, 0, N_("character device name")},
> +    {"force", VSH_OT_BOOL, 0, N_("force console connection (disconnect already connected sessions)")},

Might want to wrap this to fit 80 columns.

> @@ -834,7 +839,10 @@ cmdConsole(vshControl *ctl, const vshCmd *cmd)
>          goto cleanup;
>      }
> -    ret = cmdRunConsole(ctl, dom, name);
> +    if (force)
> +        flags = VIR_DOMAIN_CONSOLE_FORCE;

Okay as-is, but if we add more flags in the future, this is not
maintainer-friendly.  I'd use |= instead of = so this line won't need
future edits.


Hmm, wondering about back-compat - what happens if we are talking to an
older libvirt that does not know VIR_DOMAIN_CONSOLE_FORCE, but also
which does not prevent multiple connections when flags==0?  At first
glance, it looks like we're stuck - there's no useful way to tell if a
console was already in use.

But maybe we could add a new API, to allow probing whether a console is
in use.  If the API exists, then we know whether the console is in use
(and we also know whether --force will work); if the API does not exist,
the we know we are talking to an older server that multiplexes
connections.  Maybe we should have:

virsh console domain --safe => refuse to connect unless connection is
safe (fails on older servers)
virsh console domain --force => force connection (fails on older servers)
virsh console domain => existing behavior (connects on older servers,
even if it corrupts connection, and safely connects on newer servers)

that is, I'm thinking it might be worth it to add a new --safe option
that lets the user probe (via a new API virDomainConsoleInUse(dom,
dev_name, flags)) whether the attempt will be safe.

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/20111213/02e54351/attachment-0001.sig>

More information about the libvir-list mailing list