From: Markus Armbruster <armbru@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-devel@nongnu.org, kwolf@redhat.com, qemu-block@nongnu.org,
mitake.hitoshi@lab.ntt.co.jp, jcody@redhat.com,
pbonzini@redhat.com, namei.unix@gmail.com
Subject: Re: [Qemu-devel] [RFC v2 for-2.9 10/10] sheepdog: Fix blockdev-add
Date: Thu, 30 Mar 2017 19:05:29 +0200 [thread overview]
Message-ID: <871ste4rvq.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <b65b4a5a-bb31-8b15-f35f-b55ffd10b4c3@redhat.com> (Max Reitz's message of "Thu, 30 Mar 2017 18:42:47 +0200")
Max Reitz <mreitz@redhat.com> writes:
> On 30.03.2017 15:15, Markus Armbruster wrote:
>> Commit 831acdc "sheepdog: Implement bdrv_parse_filename()" and commit
>> d282f34 "sheepdog: Support blockdev-add" have different ideas on how
>> the QemuOpts parameters for the server address are named. Fix that.
>> While there, rename BlockdevOptionsSheepdog member addr to server, for
>> consistency with BlockdevOptionsSsh, BlockdevOptionsGluster,
>> BlockdevOptionsNbd.
>>
>> Commit 831acdc's example becomes
>>
>> --drive driver=sheepdog,server.type=inet,server.host=fido,server.port=7000,vdi=dolly
>>
>> instead of
>>
>> --drive driver=sheepdog,host=fido,vdi=dolly
>>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>> block/sheepdog.c | 84 ++++++++++++++++++++++++++++++++++------------------
>> qapi/block-core.json | 4 +--
>> 2 files changed, 58 insertions(+), 30 deletions(-)
>
> There's trailing whitespace somewhere in this patch (git-am complained).
Fixe in my tree.
>> diff --git a/block/sheepdog.c b/block/sheepdog.c
>> index 89e98ed..c81013d 100644
>> --- a/block/sheepdog.c
>> +++ b/block/sheepdog.c
>> @@ -13,9 +13,11 @@
>> */
>>
>> #include "qemu/osdep.h"
>> +#include "qapi-visit.h"
>> #include "qapi/error.h"
>> #include "qapi/qmp/qdict.h"
>> #include "qapi/qmp/qint.h"
>> +#include "qapi/qobject-input-visitor.h"
>> #include "qemu/uri.h"
>> #include "qemu/error-report.h"
>> #include "qemu/sockets.h"
>> @@ -547,6 +549,47 @@ static SocketAddress *sd_socket_address(const char *path,
>> return addr;
>> }
>>
>> +static SocketAddress *sd_server_config(QDict *options, Error **errp)
>> +{
>> + QDict *server = NULL;
>> + QObject *crumpled_server = NULL;
>> + Visitor *iv = NULL;
>> + SocketAddressFlat *saddr_flat = NULL;
>> + SocketAddress *saddr = NULL;
>> + Error *local_err = NULL;
>> +
>> + qdict_extract_subqdict(options, &server, "server.");
>
> server may be empty:
>
> $ ./qemu-img info sheepdog:vdi
> qemu-img: Could not open 'sheepdog:vdi': Parameter 'type' is missing
>
> I'd propose creating an 'inet' SocketAddress object then for
> SD_DEFAULT_ADDR and SD_DEFAULT_PORT so that existing behavior won't change.
Makes sense.
In my working tree:
$ upstream-qemu-img info sheepdog:vdi
@@@ server.host=localhost
@@@ server.port=7000
@@@ tag=
@@@ server.type=inet
@@@ vdi=vdi
### vdi=vdi addr=localhost:7000 snap-id=(null) tag=
upstream-qemu-img: Could not open 'sheepdog:vdi': Failed to connect socket: Connection refused
>> +
>> + crumpled_server = qdict_crumple(server, errp);
>> + if (!crumpled_server) {
>> + goto done;
>> + }
>> +
>> + /*
>> + * FIXME .numeric, .to, .ipv4 or .ipv6 don't work with -drive
>> + * server.type=inet. .to doesn't matter, it's ignored anyway.
>> + * That's because when @options come from -blockdev or
>> + * blockdev_add, members are typed according to the QAPI schema,
>> + * but when they come from -drive, they're all QString. The
>> + * visitor expects the former.
>> + */
>> + iv = qobject_input_visitor_new(crumpled_server);
>> + visit_type_SocketAddressFlat(iv, NULL, &saddr_flat, &local_err);
>> + if (local_err) {
>> + error_propagate(errp, local_err);
>> + goto done;
>> + }
>> +
>> + saddr = socket_address_crumple(saddr_flat);
>> +
>> +done:
>> + qapi_free_SocketAddressFlat(saddr_flat);
>> + visit_free(iv);
>> + qobject_decref(crumpled_server);
>> + QDECREF(server);
>> + return saddr;
>> +}
>> +
>> /* Return -EIO in case of error, file descriptor on success */
>> static int connect_to_sdog(BDRVSheepdogState *s, Error **errp)
>> {
>> @@ -1175,15 +1218,17 @@ static void sd_parse_filename(const char *filename, QDict *options,
>> }
>>
>> if (cfg.host) {
>> - qdict_set_default_str(options, "host", cfg.host);
>> + qdict_set_default_str(options, "server.host", cfg.host);
>> + qdict_set_default_str(options, "server.type", "inet");
>> }
>> if (cfg.port) {
>> snprintf(buf, sizeof(buf), "%d", cfg.port);
>> - qdict_set_default_str(options, "port", buf);
>> + qdict_set_default_str(options, "server.port", buf);
>
> .port is mandatory, so doing this optionally results in:
>
> $ ./qemu-img info sheepdog://localhost/foo
> qemu-img: Could not open 'sheepdog://localhost/foo': Parameter 'port' is
> missing
In my working tree:
$ upstream-qemu-img info sheepdog://localhost6/foo
@@@ server.host=localhost6
@@@ server.port=7000
@@@ tag=
@@@ server.type=inet
@@@ vdi=foo
### vdi=foo addr=localhost6:7000 snap-id=(null) tag=
upstream-qemu-img: Could not open 'sheepdog://localhost6/foo': Failed to connect socket: Connection refused
$ upstream-qemu-img info sheepdog://:123/foo
@@@ server.host=localhost
@@@ server.port=123
@@@ tag=
@@@ server.type=inet
@@@ vdi=foo
### vdi=foo addr=localhost:123 snap-id=(null) tag=
upstream-qemu-img: Could not open 'sheepdog://:123/foo': Failed to connect socket: Connection refused
$ upstream-qemu-img info sheepdog:///foo
@@@ server.host=localhost
@@@ server.port=7000
@@@ tag=
@@@ server.type=inet
@@@ vdi=foo
### vdi=foo addr=localhost:7000 snap-id=(null) tag=
upstream-qemu-img: Could not open 'sheepdog:///foo': Failed to connect socket: Connection refused
>> }
>> if (cfg.path) {
>> - qdict_set_default_str(options, "path", cfg.path);
>> - }
>> + qdict_set_default_str(options, "server.path", cfg.path);
>> + qdict_set_default_str(options, "server.type", "unix");
>> + }
>
> Indentation is off.
Fixing...
> Max
Thanks!
[...]
next prev parent reply other threads:[~2017-03-30 17:05 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-30 13:14 [Qemu-devel] [RFC v2 for-2.9 00/10] Fixes and cleanups around SocketAddress Markus Armbruster
2017-03-30 13:14 ` [Qemu-devel] [RFC v2 for-2.9 01/10] nbd sockets vnc: Mark problematic address family tests TODO Markus Armbruster
2017-03-30 13:14 ` [Qemu-devel] [RFC v2 for-2.9 02/10] char: Fix socket with "type": "vsock" address Markus Armbruster
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 03/10] io vnc sockets: Clean up SocketAddressKind switches Markus Armbruster
2017-04-03 11:48 ` Daniel P. Berrange
2017-04-03 12:50 ` Max Reitz
2017-04-03 13:05 ` Daniel P. Berrange
2017-04-03 13:06 ` Max Reitz
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 04/10] block: Document -drive problematic code and bugs Markus Armbruster
2017-03-30 14:28 ` Eric Blake
2017-03-30 14:45 ` Markus Armbruster
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 05/10] gluster: Prepare for SocketAddressFlat extension Markus Armbruster
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 06/10] qapi-schema: SocketAddressFlat variants 'vsock' and 'fd' Markus Armbruster
2017-03-30 14:36 ` Eric Blake
2017-03-30 14:59 ` Markus Armbruster
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 07/10] sockets: New helper socket_address_crumple() Markus Armbruster
2017-03-30 14:42 ` Eric Blake
2017-03-30 15:03 ` Markus Armbruster
2017-03-30 15:13 ` Eric Blake
2017-03-30 16:20 ` Max Reitz
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 08/10] nbd: Tidy up blockdev-add interface Markus Armbruster
2017-03-30 15:09 ` Eric Blake
2017-03-30 15:37 ` Markus Armbruster
2017-03-30 16:31 ` Max Reitz
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 09/10] squash! " Markus Armbruster
2017-03-30 15:19 ` Eric Blake
2017-03-30 15:54 ` Markus Armbruster
2017-03-30 16:32 ` Max Reitz
2017-03-30 13:15 ` [Qemu-devel] [RFC v2 for-2.9 10/10] sheepdog: Fix blockdev-add Markus Armbruster
2017-03-30 15:32 ` Eric Blake
2017-03-30 16:42 ` Max Reitz
2017-03-30 17:05 ` Markus Armbruster [this message]
2017-03-30 15:29 ` [Qemu-devel] [Qemu-block] [RFC v2 for-2.9 00/10] Fixes and cleanups around SocketAddress Kashyap Chamarthy
2017-03-30 15:47 ` Markus Armbruster
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=871ste4rvq.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=mitake.hitoshi@lab.ntt.co.jp \
--cc=mreitz@redhat.com \
--cc=namei.unix@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--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.