On Thu, Dec 03, 2020 at 07:10:37PM +0100, Paolo Bonzini wrote:
On 03/12/20 18:52, Eduardo Habkost wrote:
> On Thu, Dec 03, 2020 at 05:50:46PM +0100, Paolo Bonzini wrote:
> > On 03/12/20 16:15, Kevin Wolf wrote:
> > > I don't think this is an intermediate state like Eduardo wants to
have.
> > > Creating the object, then setting properties, then realize [1] will fail
> > > after your change. But keeping it working was the whole point of the
> > > exercise.
> >
> > With the sample code, you must remove object_class_property_set calls at the
>
> Do you mean object_property_set()?
Yes.
> > same time as you remove the setters. Usually that'd be when you convert
to
> > QAPI and oc->configure, but it doesn't have to be that way if there are
good
> > reasons not to do so.
>
> Having two (or more) similar but incompatible APIs to do exactly
> the same thing is a mistake we did before, and I wouldn't like us
> to repeat it.
>
> If we can keep qdev_new() + object_property_set() + realize
> working after the device is converted, we should. I believe we
> can.
You can. If you want to do that, you have to give up on removing the
setters; but that's not so beneficial for devices because they already use
static properties anyway. They have much less boilerplate than -object
objects.
Understood.
We can also get rid of most setters in -object backends using
field properties. Maybe not a necessary step, but a useful
intermediate step in case the new API takes time to be ready.
> If we can make object_new_configure() work with all (or most)
> device types before we manually convert them to the new system,
> we should. I believe we can.
Yup, object_new_configure() is the low-level visitor-based API and therefore
it supports both properties and oc->configure.
Perfect. That part was not clear yet to me (I just skimmed to
the example code you posted on the wiki).
> We may be able avoid these questions with -object because
> converting all backends at the same time is doable. With
> devices, API usability and maintainability during the transition
> period (which could be very long) needs to be taken into account.
I think we're in violent agreement. :)
Paolo
--
Eduardo