All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.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>,
	"mreitz@redhat.com" <mreitz@redhat.com>,
	Eric Blake <eblake@redhat.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>,
	"rth@twiddle.net" <rth@twiddle.net>,
	"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>,
	"david@gibson.dropbear.id.au" <david@gibson.dropbear.id.au>,
	Kevin Wolf <kwolf@redhat.com>,
	"cohuck@redhat.com" <cohuck@redhat.com>,
	"qemu-s390x@nongnu.org" <qemu-s390x@nongnu.org>,
	"sundeep.lkml@gmail.com" <sundeep.lkml@gmail.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 17:51:00 +0100	[thread overview]
Message-ID: <20190919165100.GT20217@redhat.com> (raw)
In-Reply-To: <27eccb19-a514-f44f-240b-1e40852fff8c@virtuozzo.com>

On Thu, Sep 19, 2019 at 04:16:25PM +0000, Vladimir Sementsov-Ogievskiy wrote:
> 19.09.2019 18:50, Daniel P. Berrangé wrote:
> > 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
> 
> why do you count only with local? Greg's series is here to bring local to all
> functions with append_hint:

I hadn't noticed the scope of Greg's series :-)

> 
> # git grep append_hint | wc -l
> 85



> Also, conversion to use macro everywhere may be done (seems so) by coccinelle script.
> But conversion which you mean, only by hand I think. Converting 1243 methods by hand
> is a huge task..

Yeah, it would be a non-negligible amount of work.

> I think there are three consistent ways:
> 
> 1. Use macro everywhere
> 2. Drop error_append_hint
> 3. Drop error_fatal

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 :|

WARNING: multiple messages have this Message-ID (diff)
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.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>,
	"mreitz@redhat.com" <mreitz@redhat.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>,
	"rth@twiddle.net" <rth@twiddle.net>,
	"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>,
	"david@gibson.dropbear.id.au" <david@gibson.dropbear.id.au>,
	Kevin Wolf <kwolf@redhat.com>,
	"cohuck@redhat.com" <cohuck@redhat.com>,
	"qemu-s390x@nongnu.org" <qemu-s390x@nongnu.org>,
	"sundeep.lkml@gmail.com" <sundeep.lkml@gmail.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 17:51:00 +0100	[thread overview]
Message-ID: <20190919165100.GT20217@redhat.com> (raw)
In-Reply-To: <27eccb19-a514-f44f-240b-1e40852fff8c@virtuozzo.com>

On Thu, Sep 19, 2019 at 04:16:25PM +0000, Vladimir Sementsov-Ogievskiy wrote:
> 19.09.2019 18:50, Daniel P. Berrangé wrote:
> > 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
> 
> why do you count only with local? Greg's series is here to bring local to all
> functions with append_hint:

I hadn't noticed the scope of Greg's series :-)

> 
> # git grep append_hint | wc -l
> 85



> Also, conversion to use macro everywhere may be done (seems so) by coccinelle script.
> But conversion which you mean, only by hand I think. Converting 1243 methods by hand
> is a huge task..

Yeah, it would be a non-negligible amount of work.

> I think there are three consistent ways:
> 
> 1. Use macro everywhere
> 2. Drop error_append_hint
> 3. Drop error_fatal

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 :|


  reply	other threads:[~2019-09-19 16:54 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é
2019-09-19 16:16                   ` Vladimir Sementsov-Ogievskiy
2019-09-19 16:51                     ` Daniel P. Berrangé [this message]
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=20190919165100.GT20217@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.