From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: "fam@euphon.net" <fam@euphon.net>,
"peter.maydell@linaro.org" <peter.maydell@linaro.org>,
"mst@redhat.com" <mst@redhat.com>,
"codyprime@gmail.com" <codyprime@gmail.com>,
"mark.cave-ayland@ilande.co.uk" <mark.cave-ayland@ilande.co.uk>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"armbru@redhat.com" <armbru@redhat.com>,
"kraxel@redhat.com" <kraxel@redhat.com>,
"sundeep.lkml@gmail.com" <sundeep.lkml@gmail.com>,
"qemu-block@nongnu.org" <qemu-block@nongnu.org>,
"quintela@redhat.com" <quintela@redhat.com>,
"david@redhat.com" <david@redhat.com>,
"mdroth@linux.vnet.ibm.com" <mdroth@linux.vnet.ibm.com>,
"pasic@linux.ibm.com" <pasic@linux.ibm.com>,
"borntraeger@de.ibm.com" <borntraeger@de.ibm.com>,
"marcandre.lureau@redhat.com" <marcandre.lureau@redhat.com>,
"david@gibson.dropbear.id.au" <david@gibson.dropbear.id.au>,
"farman@linux.ibm.com" <farman@linux.ibm.com>,
"groug@kaod.org" <groug@kaod.org>,
"dgilbert@redhat.com" <dgilbert@redhat.com>,
"alex.williamson@redhat.com" <alex.williamson@redhat.com>,
"qemu-arm@nongnu.org" <qemu-arm@nongnu.org>,
"stefanha@redhat.com" <stefanha@redhat.com>,
"jsnow@redhat.com" <jsnow@redhat.com>,
"rth@twiddle.net" <rth@twiddle.net>,
Kevin Wolf <kwolf@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
"cohuck@redhat.com" <cohuck@redhat.com>,
"qemu-s390x@nongnu.org" <qemu-s390x@nongnu.org>,
"mreitz@redhat.com" <mreitz@redhat.com>,
"qemu-ppc@nongnu.org" <qemu-ppc@nongnu.org>,
"pbonzini@redhat.com" <pbonzini@redhat.com>
Subject: Re: [RFC] error: auto propagated local_err
Date: Thu, 19 Sep 2019 16:50:45 +0100 [thread overview]
Message-ID: <20190919155045.GS20217@redhat.com> (raw)
In-Reply-To: <b5128e58-8b90-233d-6bb1-cc9009852d8d@redhat.com>
On Thu, Sep 19, 2019 at 10:24:20AM -0500, Eric Blake wrote:
> On 9/19/19 9:49 AM, Daniel P. Berrangé wrote:
>
> >> ALWAYS using MAKE_ERRP_SAFE() on entry to any function that has an Error
> >> **errp parameter is dirt-simple to explain. It has no performance
> >> penalty if the user passed in a normal error or error_abort (the cost of
> >> an 'if' hidden in the macro is probably negligible compared to
> >> everything else we do), and has no semantic penalty if the user passed
> >> in NULL or error_fatal (we now get the behavior we want with less
> >> boilerplate).
> >>
> >> Having to think 'does this method require me to use MAKE_ERRP_SAFE, or
> >> can I omit it?' does not provide the same simplicity.
> >
> > The flipside is that MAKE_ERRP_SAFE hides a bunch of logic, so you don't
> > really know what its doing without looking at it, and this is QEMU
> > custom concept so one more thing to learn for new contributors.
> >
> > While I think it is a nice trick, personally I think we would be better
> > off if we simply used a code pattern which does not require de-referencing
> > 'errp' at all, aside from exceptional cases. IOW, no added macro in 95%
> > of all our methods using Error **errp.
>
> If 100% of our callsites use the macro, then new contributors will
> quickly learn by observation alone that the macro usage must be
> important on any new function taking Error **errp, whether or not they
> actually read the macro to see what it does. If only 5% of our
> callsites use the macro, it's harder to argue that a new user will pick
> up on the nuances by observation alone (presumably, our docs would also
> spell it out, but we know that not everyone reads those...).
To get some slightly less made-up stats, I did some searching:
- 4408 methods with an 'errp' parameter declared
git grep 'Error \*\*errp'| wc -l
- 696 methods with an 'Error *local' declared (what other names
do we use for this?)
git grep 'Error \*local' | wc -l
- 1243 methods with an 'errp' parameter which have void
return value (fuzzy number - my matching is quite crude)
git grep 'Error \*\*errp'| grep -E '(^| )void' | wc -l
- 11 methods using error_append_hint with a local_err
git grep append_hint | grep local | wc -l
This suggests to me, that if we used the 'return 0 / return -1' convention
to indicate failure for the methods which currently return void, we could
potentially only have 11 cases where a local error object is genuinely
needed.
If my numbers are at all accurate, I still believe we're better off
changing the return type and eliminating essentially all use of local
error variables, as void funcs/local error objects appear to be the
minority coding pattern.
> > There are lots of neat things we could do with auto-cleanup functions we
> > I think we need to be wary of hiding too much cleverness behind macros
> > when doing so overall.
>
> The benefit of getting rid of the 'Error *local_err = NULL; ...
> error_propagate()' boilerplate is worth the cleverness, in my opinion,
> but especially if also accompanied by CI coverage that we abide by our
> new rules.
At least we're both wanting to eliminate the local error + propagation.
The difference is whether we're genuinely eliminating it, or just hiding
it from view via auto-cleanup & macro magic
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2019-09-19 15:51 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-18 13:02 [Qemu-arm] [RFC] error: auto propagated local_err Vladimir Sementsov-Ogievskiy
2019-09-18 13:02 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-18 17:10 ` Eric Blake
2019-09-18 17:46 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-18 17:46 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-18 18:05 ` Eric Blake
2019-09-18 18:32 ` [Qemu-arm] " Eric Blake
2019-09-18 18:32 ` [Qemu-devel] " Eric Blake
2019-09-19 6:47 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 6:47 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 13:29 ` [Qemu-arm] " Eric Blake
2019-09-19 13:29 ` [Qemu-devel] " Eric Blake
2019-09-19 9:17 ` [Qemu-arm] " Kevin Wolf
2019-09-19 9:17 ` [Qemu-devel] " Kevin Wolf
2019-09-19 9:47 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 9:47 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 10:09 ` Daniel P. Berrangé
2019-09-19 10:21 ` Vladimir Sementsov-Ogievskiy
2019-09-19 11:55 ` [Qemu-arm] " Daniel P. Berrangé
2019-09-19 11:55 ` Daniel P. Berrangé
2019-09-19 12:00 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 12:00 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 13:03 ` [Qemu-arm] " Kevin Wolf
2019-09-19 13:03 ` [Qemu-devel] " Kevin Wolf
2019-09-19 13:17 ` Vladimir Sementsov-Ogievskiy
2019-09-19 13:44 ` Eric Blake
2019-09-19 13:40 ` [Qemu-arm] " Eric Blake
2019-09-19 13:40 ` [Qemu-devel] " Eric Blake
2019-09-19 14:13 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 14:13 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 14:26 ` [Qemu-arm] " Eric Blake
2019-09-19 14:26 ` Eric Blake
2019-09-19 14:30 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 14:30 ` Vladimir Sementsov-Ogievskiy
2019-09-19 14:44 ` [Qemu-arm] " Eric Blake
2019-09-19 14:44 ` Eric Blake
2019-09-19 14:49 ` [Qemu-arm] " Daniel P. Berrangé
2019-09-19 14:49 ` Daniel P. Berrangé
2019-09-19 15:24 ` Eric Blake
2019-09-19 15:37 ` Vladimir Sementsov-Ogievskiy
2019-09-19 15:50 ` Daniel P. Berrangé [this message]
2019-09-19 16:16 ` Vladimir Sementsov-Ogievskiy
2019-09-19 16:51 ` Daniel P. Berrangé
2019-09-19 16:51 ` Daniel P. Berrangé
2019-09-20 12:58 ` Eric Blake
2019-09-19 15:12 ` Vladimir Sementsov-Ogievskiy
2019-09-19 14:34 ` [Qemu-arm] " Kevin Wolf
2019-09-19 14:34 ` Kevin Wolf
2019-09-19 1:54 ` [Qemu-arm] [Qemu-devel] " no-reply
2019-09-19 1:54 ` no-reply
2019-09-19 7:32 ` [Qemu-arm] " David Hildenbrand
2019-09-19 7:32 ` [Qemu-devel] " David Hildenbrand
2019-09-19 7:41 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 7:41 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 7:53 ` [Qemu-arm] " David Hildenbrand
2019-09-19 7:53 ` [Qemu-devel] " David Hildenbrand
2019-09-19 8:20 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 8:20 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 8:23 ` [Qemu-arm] " David Hildenbrand
2019-09-19 8:23 ` [Qemu-devel] " David Hildenbrand
2019-09-19 8:59 ` [Qemu-arm] " Greg Kurz
2019-09-19 8:59 ` [Qemu-devel] " Greg Kurz
2019-09-19 9:28 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 9:28 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 10:08 ` Greg Kurz
2019-09-19 8:59 ` Max Reitz
2019-09-19 9:14 ` [Qemu-arm] " Vladimir Sementsov-Ogievskiy
2019-09-19 9:14 ` [Qemu-devel] " Vladimir Sementsov-Ogievskiy
2019-09-19 9:33 ` [Qemu-arm] " Max Reitz
2019-09-19 9:33 ` [Qemu-devel] " Max Reitz
2019-09-19 10:03 ` Vladimir Sementsov-Ogievskiy
2019-09-19 11:52 ` [Qemu-arm] " Max Reitz
2019-09-19 11:52 ` [Qemu-devel] " Max Reitz
2019-09-20 11:46 ` Vladimir Sementsov-Ogievskiy
2019-09-20 11:46 ` Vladimir Sementsov-Ogievskiy
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=20190919155045.GS20217@redhat.com \
--to=berrange@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=armbru@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=codyprime@gmail.com \
--cc=cohuck@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=fam@euphon.net \
--cc=farman@linux.ibm.com \
--cc=groug@kaod.org \
--cc=jsnow@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mreitz@redhat.com \
--cc=mst@redhat.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=quintela@redhat.com \
--cc=rth@twiddle.net \
--cc=stefanha@redhat.com \
--cc=sundeep.lkml@gmail.com \
--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 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.