From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org,
Alberto Garcia <berto@igalia.com>, Eric Blake <eblake@redhat.com>,
John Snow <jsnow@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 19/25] block: Add BlockDriver.bdrv_gather_child_options
Date: Wed, 8 Nov 2017 19:52:35 +0100 [thread overview]
Message-ID: <6395a086-c9ff-572e-db59-a6a2bdbdc554@redhat.com> (raw)
In-Reply-To: <20171108171843.GI30890@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 3456 bytes --]
On 2017-11-08 18:18, Kevin Wolf wrote:
> Am 29.09.2017 um 18:53 hat Max Reitz geschrieben:
>> Some follow-up patches will rework the way bs->full_open_options is
>> refreshed in bdrv_refresh_filename(). The new implementation will remove
>> the need for the block drivers' bdrv_refresh_filename() implementations
>> to set bs->full_open_options; instead, it will be generic and use static
>> information from each block driver.
>>
>> However, by implementing bdrv_gather_child_options(), block drivers will
>> still be able to override the way the full_open_options of their
>> children are incorporated into their own.
>>
>> We need to implement this function for VMDK because we have to prevent
>> the generic implementation from gathering the options of all children:
>> It is not possible to specify options for the extents through the
>> runtime options.
>
> Sounds more like a bug than a feature.
Want to fix it? :-)
>> For quorum, the child names that would be used by the generic
>> implementation and the ones that we actually want to use differ. See
>> quorum_gather_child_options() for more information.
>
> :-/
>
> What was the conclusion of our discussion at KVM Forum again? I just
> remember that this caused problems in other contexts like dynamic
> reconfiguration, too.
I might have just winced a little.
The short conclusion was that it's all broken.
The long conclusion... Is that I might try to wrestle with quorum
before this series? :-/
Let's see... The conclusion was that the user needs to specify a unique
name for each quorum child. Then, this name would be equivalent to the
runtime name. Sounds good so far? Well, I might have just screamed a
little when I remembered another issue:
The generic implementation gathers the options like so:
{ /* node options */
"child0": { /* child0 options */ },
"child1": { /* child1 options */ },
... }
However, specifying child options like so doesn't work easily with QAPI
and quorum, for two reasons:
(1) Specifying arbitrary keys with specific values would need new QAPI
infrastructure. Who is going to implement this? :-)
(2) Quorum needs a fixed order for its children, at least for FIFO mode.
A JSON object does not have inherent ordering.
The simple way to fix this is to make the children list a list of
objects which contain the child name and the options:
{ /* quorum node options */
"children": [
{ "child-name": "child0",
"options": { /* child0 options */ } },
{ "child-name": "child1",
"options": { /* child1 options */ } },
... ] }
But this would still require bdrv_gather_child_options() to generate.
The other way would be to add the QAPI infrastructure to make the
generic thing work, and add a "children-order" list or something which
gives order to the children. Then the generic implementation should
work... As long as the quorum driver makes sure to update this list
whenever a child is added or removed.
Maybe the latter is actually the better choice? :-/
But it definitely means more work (because of the QAPI modifications)...
Max
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>> include/block/block_int.h | 13 +++++++++++++
>> block/quorum.c | 30 ++++++++++++++++++++++++++++++
>> block/vmdk.c | 13 +++++++++++++
>> 3 files changed, 56 insertions(+)
>
> Kevin
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]
next prev parent reply other threads:[~2017-11-08 18:52 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-29 16:53 [Qemu-devel] [PATCH v6 00/25] block: Fix some filename generation issues Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 01/25] block/mirror: Small absolute-paths simplification Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 02/25] block: Use children list in bdrv_refresh_filename Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 03/25] block: Add BDS.backing_overridden Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 04/25] block: Respect backing bs in bdrv_refresh_filename Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 05/25] block: Make path_combine() return the path Max Reitz
2017-10-26 12:00 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 06/25] block: bdrv_get_full_backing_filename_from_...'s ret. val Max Reitz
2017-10-26 13:23 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 07/25] block: bdrv_get_full_backing_filename's " Max Reitz
2017-10-26 13:52 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 08/25] block: Add bdrv_make_absolute_filename() Max Reitz
2017-10-30 14:25 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 09/25] block: Fix bdrv_find_backing_image() Max Reitz
2017-10-30 14:47 ` Alberto Garcia
2017-11-02 15:45 ` Max Reitz
2017-11-02 15:59 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 10/25] block: Add bdrv_dirname() Max Reitz
2017-10-31 11:05 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 11/25] blkverify: Make bdrv_dirname() return NULL Max Reitz
2017-10-31 11:45 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 12/25] quorum: " Max Reitz
2017-10-31 12:09 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 13/25] block/nbd: " Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 14/25] block/nfs: Implement bdrv_dirname() Max Reitz
2017-10-31 12:29 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 15/25] block: Use bdrv_dirname() for relative filenames Max Reitz
2017-10-31 13:52 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 16/25] block: Add 'base-directory' BDS option Max Reitz
2017-11-02 14:40 ` Alberto Garcia
2017-11-02 16:07 ` Max Reitz
2017-11-02 22:06 ` Eric Blake
2017-11-07 12:07 ` Alberto Garcia
2017-11-08 17:09 ` Kevin Wolf
2017-11-08 18:54 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 17/25] iotests: Add quorum case to test 110 Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 18/25] block: Add sgfnt_runtime_opts to BlockDriver Max Reitz
2017-11-02 16:11 ` Alberto Garcia
2017-11-02 16:18 ` Max Reitz
2017-11-08 13:01 ` Alberto Garcia
2017-11-08 17:14 ` Kevin Wolf
2017-11-08 18:52 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 19/25] block: Add BlockDriver.bdrv_gather_child_options Max Reitz
2017-11-08 13:29 ` Alberto Garcia
2017-11-08 17:18 ` Kevin Wolf
2017-11-08 18:52 ` Max Reitz [this message]
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 20/25] block: Generically refresh runtime options Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 21/25] block: Purify .bdrv_refresh_filename() Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 22/25] block: Do not copy exact_filename from format file Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 23/25] block: Fix FIXME from "Add BDS.backing_overridden" Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 24/25] block/curl: Implement bdrv_refresh_filename() Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 25/25] block/null: Generate filename even with latency-ns Max Reitz
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=6395a086-c9ff-572e-db59-a6a2bdbdc554@redhat.com \
--to=mreitz@redhat.com \
--cc=berto@igalia.com \
--cc=eblake@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@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 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).