On Tue, Oct 29, 2024 at 05:16:00PM -0400, Peter Xu wrote: > v1: https://lore.kernel.org/r/20241024165627.1372621-1-pet...@redhat.com > > This patchset introduces the singleton interface for QOM. I didn't add a > changelog because there're quite a few changes here and there, plus new > patches. So it might just be easier to re-read, considering the patchset > isn't large. > > I switched v2 into RFC, because we have reviewer concerns (Phil and Dan so > far) that it could be error prone to try to trap every attempts to create > an object. My argument is, if we already have abstract class, meanwhile we > do not allow instantiation of abstract class, so the complexity is already > there. I prepared patch 1 this time to collect and track all similar > random object creations; it might be helpful as a cleanup on its own to > deduplicate some similar error messages. Said that, I'm still always open > to rejections to this proposal. > > I hope v2 looks slightly cleaner by having not only object_new_allowed() > but also object_new_or_fetch().
For me, that doesn't really make it much more appealing. Yes, we already have an abstract class, but that has narrower impact, as there are fewer places in which which we can trigger instantiation of an abstract class, than where we can trigger instantiation of arbitrary objects and devices. The conversion of the iommu code results in worse error reporting, and doesn't handle the virtio-iommu case, and the migration problems appear solvable without inventing a singleton interface. So this doesn't feel like it is worth the the trouble. NB, my view point would have been different if 'object_new' had an "Error *errp" parameter. That would have made handling failure a standard part of the design pattern for object construction, thus avoiding adding asserts in the 'object_new' codepath which could be triggered by unexpected/badly validated user input. With 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 :|