From: Wen Congyang <wency@cn.fujitsu.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
zhanghailiang <zhang.zhanghailiang@huawei.com>,
qemu block <qemu-block@nongnu.org>,
Jiang Yunhong <yunhong.jiang@intel.com>,
Dong Eddie <eddie.dong@intel.com>,
qemu devel <qemu-devel@nongnu.org>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Gonglei <arei.gonglei@huawei.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Yang Hongyang <yanghy@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH v3 1/5] support nbd driver in blockdev-add
Date: Tue, 15 Sep 2015 16:01:49 +0800 [thread overview]
Message-ID: <55F7D06D.1080205@cn.fujitsu.com> (raw)
In-Reply-To: <87fv2g876a.fsf@blackfin.pond.sub.org>
On 09/15/2015 03:37 PM, Markus Armbruster wrote:
> Wen Congyang <wency@cn.fujitsu.com> writes:
>
>> On 09/14/2015 11:47 PM, Eric Blake wrote:
>>> On 09/14/2015 08:27 AM, Markus Armbruster wrote:
>>>> Wen Congyang <wency@cn.fujitsu.com> writes:
>>>>
>>>>> The NBD driver needs: filename, path or (host, port, exportname).
>>>>> It checks which key exists and decides use unix or inet socket.
>>>>> It doesn't recognize the key type, so we can't use union, and
>>>>> can't reuse InetSocketAddress.
>>>>>
>>>>> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
>>>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>>>> Signed-off-by: Gonglei <arei.gonglei@huawei.com>
>>>>> ---
>>>>> qapi/block-core.json | 42 ++++++++++++++++++++++++++++++++++++++++--
>>>>> 1 file changed, 40 insertions(+), 2 deletions(-)
>>>>>
>>>
>>>>> ##
>>>>> +# @BlockdevOptionsNBD
>>>>> +#
>>>>> +# Driver specific block device options for NBD
>>>>> +#
>>>>> +# @filename: #optional unix or inet path. The format is:
>>>>> +# unix: nbd+unix:///export?socket=path or
>>>>> +# nbd:unix:path:exportname=export
>>>>> +# inet: nbd[+tcp]://host[:port]/export or
>>>>> +# nbd:host[:port]:exportname=export
>>>
>>> Yuck. You are passing structured data through a single 'str', when you
>>> SHOULD be passing it through structured JSON. Just because we have a
>>> filename shorthand for convenience does NOT mean that we want to expose
>>> that convenience in QMP. Instead, we really want the breakdown of the
>>> pieces (here, using abbreviated syntax of an inline base, since there
>>> are pending qapi patches that will allow it):
>>
>> Do you mean that: there is no need to support filename?
>
> Rule of thumb: if the QMP command handler needs to parse a string
> argument, that argument should be a complex QAPI type instead.
>
> Example: @filename needs to be parsed into its components, either
>
> * protocol unix, socket path, export name, or
> * protocol tcp, host, port, export name
>
> Since there's an either/or, the complex QAPI type should be a union.
>
>>> { 'enum': 'NBDTransport', 'data': ['unix', 'tcp', 'udp'] }
>>
>> NBD only uses tcp, it doesn't support udp.
>>
>>> { 'union': 'BlockdevOptionsNBD',
>>> 'base': { 'transport': 'NBDTransport', 'export': 'str' },
>>> 'discriminator': 'transport',
>>> 'data': { 'unix': 'NBDUnix', 'tcp': 'NBDInet', 'udp': 'NBDInet' } }
>>> { 'struct': 'NBDUnix', 'data': { 'socket': 'str' } }
>>
>> unix socket needs a path, and I think we can use UnixSocketAddress here.
>
> Yes, we should try to reuse common types like SocketAddress,
> InetSocketAddress, UnixSocketAddress.
>
> Perhaps it could be as simple as
>
> { 'struct': 'BlockdevOptionsNBD',
> 'data': { 'addr: 'SocketAddress', 'export': 'str' } }
The problem is that: NBD doesn't use the fd.
Another question is: what key will we see in nbd_open()? "addr.host"
or "host"?
Thanks
Wen Congyang
>
> Eric, what do you think?
>
>>> { 'struct': 'NBDInet', 'data': { 'host': 'str', '*port': 'int',
>>> '*ipv4': 'bool', '*ipv6': 'bool' } }
>>
>> Thanks for the above, and I will try it.
>
> [...]
> .
>
next prev parent reply other threads:[~2015-09-15 8:02 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-10 9:55 [Qemu-devel] [PATCH v3 0/5] qapi: child add/delete support Wen Congyang
2015-09-10 9:55 ` [Qemu-devel] [PATCH v3 1/5] support nbd driver in blockdev-add Wen Congyang
2015-09-14 14:27 ` Markus Armbruster
2015-09-14 15:47 ` Eric Blake
2015-09-15 1:39 ` Wen Congyang
2015-09-15 7:37 ` Markus Armbruster
2015-09-15 8:01 ` Wen Congyang [this message]
2015-09-15 11:12 ` Markus Armbruster
2015-09-16 5:59 ` Wen Congyang
2015-09-16 8:21 ` Markus Armbruster
2015-09-16 8:24 ` Wen Congyang
2015-09-16 11:18 ` Markus Armbruster
2015-09-16 14:53 ` [Qemu-devel] [Qemu-block] " Eric Blake
2015-09-17 1:06 ` Wen Congyang
2015-09-17 1:04 ` [Qemu-devel] " Wen Congyang
2015-09-17 5:01 ` Markus Armbruster
2015-09-15 13:03 ` Eric Blake
2015-09-15 13:26 ` Kevin Wolf
2015-09-15 2:20 ` Wen Congyang
2015-09-15 2:27 ` Wen Congyang
2015-09-15 3:46 ` Eric Blake
2015-09-15 3:58 ` Wen Congyang
2015-09-15 13:11 ` Eric Blake
2015-09-16 7:11 ` Wen Congyang
2015-09-16 14:55 ` Eric Blake
2015-09-10 9:55 ` [Qemu-devel] [PATCH v3 2/5] Add new block driver interface to add/delete a BDS's child Wen Congyang
2015-09-10 9:55 ` [Qemu-devel] [PATCH v3 3/5] quorum: implement bdrv_add_child() and bdrv_del_child() Wen Congyang
2015-09-10 9:55 ` [Qemu-devel] [PATCH v3 4/5] qmp: add monitor command to add/remove a child Wen Congyang
2015-09-10 10:04 ` Daniel P. Berrange
2015-09-10 10:34 ` Wen Congyang
2015-09-14 14:36 ` Markus Armbruster
2015-09-14 15:34 ` Kevin Wolf
2015-09-14 16:09 ` Markus Armbruster
2015-09-15 2:40 ` Wen Congyang
2015-09-15 7:49 ` Markus Armbruster
2015-09-15 7:57 ` Wen Congyang
2015-09-16 6:31 ` Wen Congyang
2015-09-16 8:29 ` Markus Armbruster
2015-09-14 15:37 ` Kevin Wolf
2015-09-15 2:33 ` Wen Congyang
2015-09-15 8:56 ` Alberto Garcia
2015-09-15 9:20 ` Kevin Wolf
2015-09-15 9:26 ` [Qemu-devel] [Qemu-block] " Kevin Wolf
2015-09-10 9:55 ` [Qemu-devel] [PATCH v3 5/5] hmp: " Wen Congyang
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=55F7D06D.1080205@cn.fujitsu.com \
--to=wency@cn.fujitsu.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=berto@igalia.com \
--cc=dgilbert@redhat.com \
--cc=eddie.dong@intel.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=yanghy@cn.fujitsu.com \
--cc=yunhong.jiang@intel.com \
--cc=zhang.zhanghailiang@huawei.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).