qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org,
	Alberto Garcia <berto@igalia.com>
Subject: Re: [Qemu-devel] [PATCH v8 03/26] block: Add BDS.backing_overridden
Date: Thu, 22 Feb 2018 17:21:47 +0100	[thread overview]
Message-ID: <20180222162147.GL4147@localhost.localdomain> (raw)
In-Reply-To: <c5a34045-7c8f-f37b-8fc6-a5338cedc2bf@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 5307 bytes --]

Am 22.02.2018 um 16:17 hat Max Reitz geschrieben:
> On 2018-02-22 16:12, Kevin Wolf wrote:
> > Am 22.02.2018 um 15:55 hat Max Reitz geschrieben:
> >> On 2018-02-22 14:39, Kevin Wolf wrote:
> >>> Am 05.02.2018 um 16:18 hat Max Reitz geschrieben:
> >>>> If the backing file is overridden, this most probably does change the
> >>>> guest-visible data of a BDS. Therefore, we will need to consider this in
> >>>> bdrv_refresh_filename().
> >>>>
> >>>> Adding a new field to the BDS is not nice, but it is very simple and
> >>>> exactly keeps track of whether the backing file has been overridden.
> >>>
> >>> ...as long as we manage to actually keep it up to date all the time.
> >>>
> >>> First of all, what I'm missing here (or in fact in the comment in the
> >>> code) is a definition what "overridden" really means. "specified by the
> >>> user" is kind of vague: You consider the backing file relationship for
> >>> snapshot=on as user specified, even though the user wasn't explicit
> >>> about this. On the other hand, creating a live snapshot results in a
> >>> node that isn't user specified.
> >>>
> >>> Isn't the real question to ask whether the default backing file (taken
> >>> from the image header) would result in the same tree? The answer to this
> >>> changes after more operations, like qmp_change_backing_file().
> >>
> >> With you so far.
> >>
> >>> Considering that there are so many ways to change the answer, I think
> >>> the simplest reliable option isn't a new BDS field that needs to updated
> >>> everywhere, but looking at the current value of bs->options and
> >>> bs->backing_file and see if they match.
> >>
> >> I don't see how that is simple.  First, bs->options does not necessarily
> >> reflect the "current options", those would be bs->full_open_options.
> >> And for generating that, we need a way to determine whether the backing
> >> file has been overridden or not, so whether we need to put the backing
> >> options into it or whether we do not.
> > 
> > For the purpose of this comparison, we need a set of options that
> > contains the backing file options unconditionally.
> > 
> >> (I am right that bs->backing_file is what the image header says, right?
> >> So we need to compare it against something that reflects the runtime state.)
> > 
> > I think so, yes.
> > 
> >> What I could see would be comparing bs->backing_file to
> >> bs->backing->bs->filename.  But this sounds very hacky to me.
> >>
> >> One thing the comes to mind is that it can break whenever
> >> bdrv_refresh_filename() is clever.  So you specify
> >> 'json:{"driver":"null-co"}' in the image header, and
> >> bdrv_refresh_filename() optimizes that to "null-co://".  Now the
> >> filenames differ even though it's still the original filename.  So this
> >> wouldn't work very well either.

So what's the full effect here?

You example says that if you use an overcomplicated way to specify an
image (by using json: instead of an URL), you get back an
overcomplicated filename for the parent image (which includes the
backing file even though it's not really necessary). Sounds fair enough
to me.

Can bad things happen with absolute vs. relative paths?

> > On the other hand, the problem with your current approach is that it
> > results in a JSON filename even if you override the backing file and
> > specify the same file name as we already have in the image header.
> 
> Yes.
> 
> > In the future, libvirt is going to manually build the graph, so we will
> > always have the backing file overridden according to the logic in this
> > patch. I don't think we want to get JSON filenames for all libvirt
> > managed VMs, so can we realistically do without any kind of comparison?
> 
> libvirt doesn't need to query the filename, though, does it?

I know that libvirt uses the output in qemu-img info. And I learnt about
that because they were surprised that json: filenames you get there
can't necessarily be fed to QMP (because they contain only strings).

Other than that, I hope they don't. I suppose the filename can end up in
error messages in logfiles, though.

> In my mind, we wanted to phase out filenames and basically only present
> them as convenience/legacy information to users who use qemu directly.
> 
> I really don't see the point of burdening qemu with simplifying and
> niceifying filenames when you want to use node names for everything
> anyway.

But if you essentially say "filenames are only for those who don't use
advanced features", then why bother with overridden backing files?

There are two problems I have with this patch: The first is that it
introduces additional state that needs to be managed correctly in all
future patches that modify the graph, and the second (and worse one) is
that it fails to manage this state correctly even now.

I mentioned snapshots and change-backing-file that can result in a wrong
bs->backing_overridden, and those were only the obvious first places I
had a look at. Even if you fix them, I wouldn't trust my own review to
find all relevant places. And that's a really bad sign for a design.

This is the most important reason why I'm looking for some method to
derive the flag from already existing state.

Kevin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

  reply	other threads:[~2018-02-22 16:22 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-05 15:18 [Qemu-devel] [PATCH v8 00/26] block: Fix some filename generation issues Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 01/26] block/mirror: Small absolute-paths simplification Max Reitz
2018-02-22 12:27   ` Kevin Wolf
2018-02-22 14:43     ` Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 02/26] block: Use children list in bdrv_refresh_filename Max Reitz
2018-02-22 12:30   ` Kevin Wolf
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 03/26] block: Add BDS.backing_overridden Max Reitz
2018-02-22 13:39   ` Kevin Wolf
2018-02-22 14:55     ` Max Reitz
2018-02-22 15:12       ` Kevin Wolf
2018-02-22 15:17         ` Max Reitz
2018-02-22 16:21           ` Kevin Wolf [this message]
2018-02-22 17:47             ` Max Reitz
2018-06-26 17:34               ` Max Reitz
2018-06-26 18:19                 ` Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 04/26] iotests: Drop explicit base blockdev in 191 Max Reitz
2018-02-06 13:56   ` Alberto Garcia
2018-02-22 14:34   ` Kevin Wolf
2018-02-22 15:06     ` Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 05/26] block: Respect backing bs in bdrv_refresh_filename Max Reitz
2018-02-06 14:00   ` Alberto Garcia
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 06/26] block: Make path_combine() return the path Max Reitz
2018-02-22 14:57   ` Kevin Wolf
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 07/26] block: bdrv_get_full_backing_filename_from_...'s ret. val Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 08/26] block: bdrv_get_full_backing_filename's " Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 09/26] block: Add bdrv_make_absolute_filename() Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 10/26] block: Fix bdrv_find_backing_image() Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 11/26] block: Add bdrv_dirname() Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 12/26] blkverify: Make bdrv_dirname() return NULL Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 13/26] quorum: " Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 14/26] block/nbd: " Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 15/26] block/nfs: Implement bdrv_dirname() Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 16/26] block: Use bdrv_dirname() for relative filenames Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 17/26] iotests: Add quorum case to test 110 Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 18/26] block: Add sgfnt_runtime_opts to BlockDriver Max Reitz
2018-02-06 15:23   ` Alberto Garcia
2018-02-22 15:19     ` Max Reitz
2018-02-22 15:30       ` Alberto Garcia
2018-02-06 19:43   ` Eric Blake
2018-02-20 14:51     ` Max Reitz
2018-02-20 15:15       ` Eric Blake
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 19/26] block: Add BlockDriver.bdrv_gather_child_options Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 20/26] block: Generically refresh runtime options Max Reitz
2018-02-06 14:03   ` Alberto Garcia
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 21/26] block: Purify .bdrv_refresh_filename() Max Reitz
2018-02-06 14:50   ` Alberto Garcia
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 22/26] block: Do not copy exact_filename from format file Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 23/26] block: Fix FIXME from "Add BDS.backing_overridden" Max Reitz
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 24/26] block/curl: Harmonize option defaults Max Reitz
2018-02-06 14:05   ` Alberto Garcia
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 25/26] block/curl: Implement bdrv_refresh_filename() Max Reitz
2018-02-06 14:07   ` Alberto Garcia
2018-02-05 15:18 ` [Qemu-devel] [PATCH v8 26/26] 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=20180222162147.GL4147@localhost.localdomain \
    --to=kwolf@redhat.com \
    --cc=berto@igalia.com \
    --cc=mreitz@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).