All of lore.kernel.org
 help / color / mirror / Atom feed
From: Corey Minyard <minyard@acm.org>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: mjg59@srcf.ucam.org, mst@redhat.com, hwd@huawei.com,
	bcketchum@gmail.com, Corey Minyard <cminyard@mvista.com>,
	afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 5/6] qemu-char: Add reconnecting to client sockets
Date: Mon, 22 Sep 2014 15:36:14 -0500	[thread overview]
Message-ID: <5420883E.6010303@acm.org> (raw)
In-Reply-To: <5420857C.8050504@redhat.com>

On 09/22/2014 03:24 PM, Eric Blake wrote:
> On 09/21/2014 05:04 PM, minyard@acm.org wrote:
>> From: Corey Minyard <cminyard@mvista.com>
>>
>> Adds a "reconnect" option to socket backends that gives a reconnect
>> timeout.  This only applies to client sockets.  If the other end
>> of a socket closes the connection, qemu will attempt to reconnect
>> after the given number of seconds.
>>
>> Signed-off-by: Corey Minyard <cminyard@mvista.com>
>> ---
>>  qapi-schema.json | 14 +++++----
>>  qemu-char.c      | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
>>  qemu-options.hx  | 20 ++++++++-----
>>  3 files changed, 106 insertions(+), 17 deletions(-)
>>
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 689b548..79f7a07 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -2648,14 +2648,18 @@
>>  # @nodelay: #optional set TCP_NODELAY socket option (default: false)
>>  # @telnet: #optional enable telnet protocol on server
>>  #          sockets (default: false)
>> +# @reconnect: #optional If not a server socket, if the socket disconnect
> Awkward.  How about:
>
> For a client socket, if a disconnect is detected,

Point taken...

>> +#          then reconnect after the given number of seconds.  Setting
>> +#          to zero disables this function. (default: 0). Since: 2.2.
> I think this is usually written "(Since 2.2)" rather than "Since: 2.2"
> when it occurs in the middle of a single option.

Ok, I'll fix this.

>
>>  #
>>  # Since: 1.4
>>  ##
>> -{ 'type': 'ChardevSocket', 'data': { 'addr'     : 'SocketAddress',
>> -                                     '*server'  : 'bool',
>> -                                     '*wait'    : 'bool',
>> -                                     '*nodelay' : 'bool',
>> -                                     '*telnet'  : 'bool' } }
>> +{ 'type': 'ChardevSocket', 'data': { 'addr'       : 'SocketAddress',
>> +                                     '*server'    : 'bool',
>> +                                     '*wait'      : 'bool',
>> +                                     '*nodelay'   : 'bool',
>> +                                     '*telnet'    : 'bool',
>> +                                     '*reconnect' : 'int' } }
> Hmm, thinking aloud here. What happens if 'reconnect' is provided with a
> 'server':true socket?  The documentation only specifies 'server':false
> behavior.  Should it be an error (incompatible options), or just be
> silently ignored?

I was going on the behavior of "telnet" and "wait", which are silently
ignored for client sockets.  reconnect is silently ignored for server
sockets.

> Going further, would it be possible to treat 'ChardevSocket' as a flat
> union, where 'server' is the enum key that determines what other fields
> are valid?  Granted, for this to work, we'd need to teach the qapi
> generator to allow a discriminator of type bool (since we can enumerate
> all of its values). looking something like:
>
> { 'type': 'ChardevSocketBase',
>   'data': { 'addr': 'SocketAddress', '*nodelay': 'bool' } }
> { 'type': 'ChardevSocketServer',
>   'data': { '*wait': 'bool', '*telnet': 'bool' } }
> { 'type': 'ChardevSocketClient',
>   'data': { '*reconnect': 'int' } }
> { 'union': 'ChardevSocket', 'base': 'ChardevSocketBase',
>   'discriminator': 'bool',
>   'data': { true : 'ChardevSocketServer',
>             false: 'ChardevSocketClient' } }
>
> but I don't know if it is worth the complexity for the added type safety.
>

Doesn't seem terrible, but I'm not sure.

-corey

  reply	other threads:[~2014-09-22 20:36 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-21 23:04 [Qemu-devel] [PATCH 0/6] Add reconnect capability for client sockets minyard
2014-09-21 23:04 ` [Qemu-devel] [PATCH 1/6] qemu-char: Make the filename size for a chardev a #define minyard
2014-09-22  7:46   ` Paolo Bonzini
2014-09-21 23:04 ` [Qemu-devel] [PATCH 2/6] qemu-char: Rework qemu_chr_open_socket() for reconnect minyard
2014-09-22  8:08   ` Paolo Bonzini
2014-09-21 23:04 ` [Qemu-devel] [PATCH 3/6] qemu-char: Move some items into TCPCharDriver minyard
2014-09-22  7:46   ` Paolo Bonzini
2014-09-21 23:04 ` [Qemu-devel] [PATCH 4/6] qemu-char: set socket filename to disconnected when not connected minyard
2014-09-22  8:06   ` Paolo Bonzini
2014-09-22 13:15     ` Corey Minyard
2014-09-22 13:25       ` Paolo Bonzini
2014-09-22 13:30         ` Corey Minyard
2014-09-22 13:39           ` Paolo Bonzini
2014-09-21 23:04 ` [Qemu-devel] [PATCH 5/6] qemu-char: Add reconnecting to client sockets minyard
2014-09-22  8:02   ` Paolo Bonzini
2014-09-22 20:24   ` Eric Blake
2014-09-22 20:36     ` Corey Minyard [this message]
2014-09-22 20:53       ` Eric Blake
2014-09-21 23:04 ` [Qemu-devel] [PATCH 6/6] qemu-char: Print the remote and local addresses for a socket minyard
2014-09-22  8:02   ` Paolo Bonzini
  -- strict thread matches above, loose matches on Subject: below --
2014-09-22 16:59 [Qemu-devel] [PATCH v2 0/6] chardev: Add reconnecting to client sockets minyard
2014-09-22 16:59 ` [Qemu-devel] [PATCH 5/6] qemu-char: " minyard
2014-09-22 20:26   ` Eric Blake
2014-09-25 20:07 [Qemu-devel] [PATCH v3 0/6] chardev: " minyard
2014-09-25 20:07 ` [Qemu-devel] [PATCH 5/6] qemu-char: " minyard
2014-10-01 12:38   ` Corey Minyard
2014-10-01 18:15     ` Paolo Bonzini
2014-10-01 19:10   ` Eric Blake
2014-10-01 21:03     ` Corey Minyard
2014-10-01 21:09 [Qemu-devel] [PATCH v4 0/6] Add reconnect capability to sockets minyard
2014-10-01 21:09 ` [Qemu-devel] [PATCH 5/6] qemu-char: Add reconnecting to client sockets minyard
2014-10-02 12:25   ` Paolo Bonzini
2014-10-02 16:17 [Qemu-devel] [PATCH v5 0/6] " minyard
2014-10-02 16:17 ` [Qemu-devel] [PATCH 5/6] qemu-char: " minyard
2014-10-03 22:22   ` Paolo Bonzini
2014-10-04  3:24     ` Corey Minyard
2014-10-04 15:54       ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5420883E.6010303@acm.org \
    --to=minyard@acm.org \
    --cc=afaerber@suse.de \
    --cc=bcketchum@gmail.com \
    --cc=cminyard@mvista.com \
    --cc=eblake@redhat.com \
    --cc=hwd@huawei.com \
    --cc=mjg59@srcf.ucam.org \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.