[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug()
From: |
Markus Armbruster |
Subject: |
Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug() |
Date: |
Thu, 17 Sep 2020 15:17:13 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Daniel P. Berrangé <berrange@redhat.com> writes:
> On Thu, Sep 17, 2020 at 02:04:41PM +0200, Markus Armbruster wrote:
>> Greg Kurz <groug@kaod.org> writes:
>>
>> > $ git grep object_property_get_uint -- :^{include,qom/object.c} | wc -l
>> > 60
>> >
>> > Manual inspecting the output of
>> >
>> > $ git grep -W object_property_get_uint -- :^{include,qom/object.c}
>> > ...
>> >
>> > seems to be showing that most users simply ignore errors (ie. pass NULL
>> > as 3rd argument). Then some users pass &error_abort and only a few
>> > pass a &err or errp.
>> >
>> > Assuming that users know what they're doing, I guess my proposal
>> > wouldn't bring much to the code base in the end... I'm not even
>> > sure now that it's worth changing the contract.
>>
>> We'd change
>>
>> val = object_property_get_uint(obj, name, &error_abort);
>>
>> to
>>
>> object_property_get_uint(obj, name, &val, &error_abort);
>>
>> which is not an improvement.
>>
>> Most of the ones passing NULL should probably pass &error_abort
>> instead. Doesn't change the argument.
>
> I wonder if we actually need to have an Error parameter at all for
> the getters. IIUC the only valid runtime error is probably the case
> where the property has not been set, and even then, I think properties
> usually have a default value that would be returned. All the other
> errors look like programmer errors.
>From the notes I took when I last hacked a trail through this jungle...
Failure modes of
object_property_get()
@name not found
@name permission, i.e. no ->get
->get() fails (how?)
object_property_get_{str,bool,int,uint}()
object_property_get_qobject()
object_property_get() with qobject output visitor
which see
prop value qobject not a string / bool / int / uint
object_property_get_enum()
@name not found
@typename doesn't match
object_property_get() with string output visitor
which see
qapi_enum_parse()
prop value not a value of enum @typename
object_property_get_link()
object_property_get_str()
which see
prop value does not resolve
I think most of these failures are obviously programming errors most of
the time.
Many callers treat failures as programming errors by passing
&error_abort.
Many callers ignore errors by passing NULL. I believe most of them
should really pass &error_abort instead. Fixing them is tedious,
because you have to check what would happen on error. If the answer is
"chaos", fix to pass &error_abort. But the answer can also be "works as
intended", or "beats me".
> IOW, can we remove the Error parameter and have all the o_p_get*
> method impls use error_abort.
If we fix the callers that should pass &error_abort to do so, we'll see
what remains, and whether we can drop the parameter.
> In the rare case where a caller needs to handle a property not
> being set, they can use object_property_find() as a test before
> invoking the getter.
I dislike "if (X() is going to fail) do something else; else X()".
I guess it could be okay for the narrow case of "property does not
exist".
> Of course requires someone motivated to audit all the case that
> are not using NULL or error_abort and decide whether the attempt
> at passing a local errp was actually justified or not.
We got one! Thanks, Greg :)
- Re: [SPAM] Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), (continued)
- Re: [SPAM] Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), David Gibson, 2020/09/16
- Re: [SPAM] Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), Markus Armbruster, 2020/09/17
- Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), Greg Kurz, 2020/09/17
- Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), Markus Armbruster, 2020/09/17
- Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), Daniel P . Berrangé, 2020/09/17
- Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(), Greg Kurz, 2020/09/17
- Re: [PATCH 14/15] spapr: Simplify error handling in spapr_memory_plug(),
Markus Armbruster <=
[PATCH 13/15] spapr: Add a return value to spapr_check_pagesize(), Greg Kurz, 2020/09/14
[PATCH 15/15] spapr: Simplify error handling in spapr_memory_unplug_request(), Greg Kurz, 2020/09/14
[PATCH 11/15] spapr: Simplify error handling in spapr_cpu_core_realize(), Greg Kurz, 2020/09/14
Re: [PATCH 00/15] spapr: Error handling fixes and cleanups (round 2), David Gibson, 2020/09/16