From: Eric Blake <eblake@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"qemu-block@nongnu.org" <qemu-block@nongnu.org>
Cc: "kwolf@redhat.com" <kwolf@redhat.com>,
"mreitz@redhat.com" <mreitz@redhat.com>,
"armbru@redhat.com" <armbru@redhat.com>,
Denis Lunev <den@virtuozzo.com>, John Snow <jsnow@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4] qemu-img info lists bitmap directory entries
Date: Fri, 7 Dec 2018 11:31:42 -0600 [thread overview]
Message-ID: <46df3ce6-c091-93e4-10c4-4d71687eadc4@redhat.com> (raw)
In-Reply-To: <d3507d7b-1bfe-0ae6-fd83-693272785f0d@virtuozzo.com>
On 12/7/18 11:24 AM, Vladimir Sementsov-Ogievskiy wrote:
> 07.12.2018 19:20, Eric Blake wrote:
>> On 12/7/18 4:00 AM, Andrey Shinkevich wrote:
>>> +++ b/block/qcow2.c
>>> @@ -4270,6 +4270,12 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs)
>>> .refcount_bits = s->refcount_bits,
>>> };
>>> } else if (s->qcow_version == 3) {
>>> + Qcow2BitmapInfoList *bitmaps;
>>> + Error *local_err = NULL;
>>> + bitmaps = qcow2_get_bitmap_info_list(bs, &local_err);
>>> + if (local_err != NULL) {
>>> + error_report_err(local_err);
>>> + }
>>
>> Ouch. Calling error_report_err() doesn't always work in QMP context; better would be to plumb Error **errp back up to the caller, if getting this specific information can fail and we want the overall query-block to fail. Or, we could decide that failure to get bitmap info is non-fatal, and that it was just a best-effort attempt to get more info, where we then ignore the failure, rather than trying to report it incorrectly.
>
> Oh, yes, you are right. Strange, but bdrv_get_specific_info lacks errp. error_abort us used above for crypto info errors.
And thus we should probably fix that - but it doesn't have to be part of
this series.
>
> Querying bitmaps needs disk access so it really may fail, and it may be sad to fail get any information because of repeating some disk/qcow2 error, so it's better not to abort and even not to fail qmp command here.
>
>>> - '*encrypt': 'ImageInfoSpecificQCow2Encryption'
>>> + '*encrypt': 'ImageInfoSpecificQCow2Encryption',
>>> + '*bitmaps': ['Qcow2BitmapInfo']
>>
>> Hmm. You're omitting this field both if there are 0 bitmaps, and when it was a version 2 image. Is it worth including this field as a 0-length array when there are no bitmaps but when the image format is new enough to support them, or are we happy with the idea of only including the field when it has at least one bitmap? The difference is whether the calling app can explicitly learn that there are no bitmaps (0-length reply) vs. the ambiguity of omitting it from the reply (missing might mean no bitmaps, or an error in trying to report the bitmaps, or an older qemu that didn't know how to report bitmaps).
>
> Hmm, I don't like overusing .has_bitmaps as a sign of error, at least it would be very weird to document such behavior, and a undocumented trick it is not really useful.
> Hmm, if we want something like this I'd prefer .has_bitmaps to be false only in case of error, so for v2 we'll have empty array. It's simpler to document.
I'm happy with v2 images reporting a 0-length array instead of omitting
the field, especially if that means we can simply have:
old qemu: field always omitted because we didn't compute it
new qemu: field omitted if we hit an error computing it
otherwise present (but possibly 0 length) and accurate
>
> Or we need separate cant_load_bitmaps: bool, or bitmaps should be enum of ( ['Qcow2BitmapInfo'] , {'error': 'str'} ), do we have something like this already in QAPI? This is the question about partial success of info-exporting commands.
No, I don't see a reason to over-engineer things; query-block is already
a behemoth without trying to jam in more details about whether
info-exporting hit partial failure.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2018-12-07 17:32 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-07 10:00 [Qemu-devel] [PATCH v4] qemu-img info lists bitmap directory entries Andrey Shinkevich
2018-12-07 16:20 ` Eric Blake
2018-12-07 17:24 ` Vladimir Sementsov-Ogievskiy
2018-12-07 17:31 ` Eric Blake [this message]
2018-12-07 17:52 ` Vladimir Sementsov-Ogievskiy
2018-12-07 17:56 ` Vladimir Sementsov-Ogievskiy
2018-12-07 17:50 ` Andrey Shinkevich
2018-12-10 12:12 ` Andrey Shinkevich
2018-12-10 13:08 ` 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=46df3ce6-c091-93e4-10c4-4d71687eadc4@redhat.com \
--to=eblake@redhat.com \
--cc=andrey.shinkevich@virtuozzo.com \
--cc=armbru@redhat.com \
--cc=den@virtuozzo.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.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).