Max Reitz <mre...@redhat.com> writes: > On 08.10.2015 08:15, Markus Armbruster wrote: >> Max Reitz <mre...@redhat.com> writes: >> >>> On 22.09.2015 09:44, Wen Congyang wrote: >>>> The new QMP command name is x-blockdev-child-add, and x-blockdev-child-del. >>>> It justs for adding/removing quorum's child now, and don't support all >>>> kinds of children, >>> >>> It does support all kinds of children for quorum, doesn't it? >>> >>>> nor all block drivers. So it is experimental now. >>> >>> Well, that is not really a reason why we would have to make it >>> experimental. For instance, blockdev-add (although some might argue it >>> actually is experimental...) doesn't support all block drivers either. >> >> Yup, and not calling it x-blockdev-add until it's done was a mistake. >> People tried using it, then found its current limitations the painful >> way. Not nice. > > I knew I should have written s/some might/Markus does/. ;-)
:) >>> The reason I am hesitant of adding an experimental QMP interface that is >>> actually visible to the user (compare x-image in blkverify and blkdebug, >>> which are not documented and not to be used by the user) is twofold: >>> >>> (1) At some point we have to say "OK, this is good enough now" and make >>> it stable. What would that point be? Who can guarantee that we >>> wouldn't want to make any interface changes after that point? >> >> Nobody can, just like for any other interface. So? > > The main question is "what would that point be". As I can see you're > arguing that that point would be "once people want to use it", but I'm > arguing that people want to use it today or we wouldn't need this > interface at all. > > I'm against adding external experimental interface because having > external interface indicates that someone wants to use them, but making > them experimental indicates that nobody should use them. Make that "nobody should use them in anger just yet." They can and should be used to develop stuff. Developing non-trivial interfaces without actual users is risky. Sometimes, you can't see shortcomings in an interface until you try to use it. Successful actual use can build confidence the experimental interface is in fact ready to be cast in stone. > This interface is added for the COLO series. The documentation added in > patch 5 there explains usage of COLO with x-child-add. I don't think > that should be there, because it's experimental. But why have an > external interface if nobody should use it anyway? > >> The x- prefix enables work spanning multiple releases. Until the >> feature is complete, we have a hard time seeing the whole picture, and >> therefore the risk of interface mistakes is higher than normal. Once >> it's complete, we drop the x-. > > I'm arguing the feature is complete as far as what it's supposed to do goes. When you say "the feature is complete", you're arguing this specific interface is ready. When you say you're "against adding external experimental interface", you're arguing proper use of x-. Let's try to keep the discussion of principles separate from the discussion of the specific instance. On the former: maybe the interface is ready, but I can't judge offhand. All I can do is ask questions. On the latter: I emphatically disagree with the idea that experimental interfaces are to be avoided because "someone wants to use them". >>> Would >>> we actually remember to revisit this function once in a while and >>> consider making it stable? >> >> Has that been a problem in the past? > > I don't know, because I never witnessed an external experimental > interface, but I haven't been closely involved with qemu for too long. QMP itself started experimental, and was declared stable after fairly heated discussion. I think we've been dropping x- prefixes pretty routinely. A quick, superficial search finds commit 41310c6 (x-rdma) and commit 467b3f3 (x-iothread). [...]