All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: amit.shah@redhat.com, liang.z.li@intel.com,
	qemu-devel@nongnu.org, quintela@redhat.com
Subject: Re: [Qemu-devel] [RFC 1/1] Execute arbitrary QMP commands from command line
Date: Fri, 30 Jan 2015 10:43:34 +0100	[thread overview]
Message-ID: <87fvasr4c9.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <20150130092050.GA2370@work-vm> (David Alan Gilbert's message of "Fri, 30 Jan 2015 09:20:50 +0000")

"Dr. David Alan Gilbert" <dgilbert@redhat.com> writes:

> * Markus Armbruster (armbru@redhat.com) wrote:
>> "Dr. David Alan Gilbert" <dgilbert@redhat.com> writes:
>> 
>> > * Eric Blake (eblake@redhat.com) wrote:
>> >> On 01/29/2015 09:28 AM, Dr. David Alan Gilbert wrote:
>> >> > * Eric Blake (eblake@redhat.com) wrote:
>> >> > > On 01/29/2015 08:54 AM, Dr. David Alan Gilbert wrote:
>> >> > > >> The idea of a QMP command to trigger incoming migration looks
>> >> > > >> reasonable.  We can probably use a qapi union for a nicer syntax,
>> >> > > >> something like:
>> >> > > >>
>> >> > > >> {"execute": "migrate-incoming", "arguments": {
>> >> > > >>   "type": "tcp", "port": 44 } }
>> >> > > >> vs.
>> >> > > >> {"execute": "migrate-incoming", "arguments": {
>> >> > > >>   "type": "fd", "fd": 0 } }
>> >> > > >> vs.
>> >> > > >> {"execute": "migrate-incoming", "arguments": {
>> >> > > >>   "type": "exec", "command": [ "cat", "/path/to/file" ] } }
>> >> > > >>
>> >> > > >> and so forth.
>> >> > > >
>> >> > > > Compared to just taking a URI argument that Dan suggested,
>> >> > > > that's quite a
>> >> > > > bit of rework to do the reworking of each transport which is pretty
>> >> > > > trivial.
>> >> > >
>> >> > > Yes, but getting the interface right means that adding future
>> >> > > extensions
>> >> > > will be easier, with less string parsing hacks.
>> 
>> We have a general rule for QMP: no syntax embedded in string arguments,
>> use JSON.
>> 
>> >> > I guess so, but I still have to maintain the -incoming string interface
>> >> > and an HMP equivalent of whatever we come up with here.
>> 
>> The HMP equivalent may or may not be needed.  If we decide we want it,
>
> I treat HMP as important as QMP, I don't break it or lose functionality on it.
>
>> reusing the command line's parser there probably makes more sense than
>> inventing yet another syntax.
>> 
>> >> > So what would the .args_type look like in qmp-commands.hx;
>> >> > something like this?
>> >> >
>> >> >   .args-type = "type:s,port:-i,host:-s,command:-s"
>> >>
>> >> No, it would be more like the blockdev-add interface, where one command
>> >> accepts a dictionary object containing a union of valid values, where
>> >> the set of valid values is determined by the discriminator field.
>> >> .args_type = "options:q".
>> 
>> Note that blockdev-add has wraps its arguments rather inelegantly: it
>> takes a single argument 'options' of union type 'BlockdevOptions'.
>> Because of that, you have to write
>> 
>>     "arguments": { "options" : { ... } }
>> 
>> instead of just
>> 
>>     "arguments": { ... }
>> 
>> I'd love to get that cleaned up, but Kevin is already worrying about
>> backwards compatibility.  He has a point in theory, because we neglected
>> to mark blockdev-add as unstable.  I have a point in practice, because
>> blockdev-add hasn't been usable for real work (as some of our poor users
>> discovered the hard way) due to numerous restrictions we're still busy
>> lifting.  Anyway, I digressed, back to the topic at hand.
>> 
>> > What causes the parser to generate a 'BlockdevOptions' as opposed to any
>> > standard options type for the parameter of qmp_blockdev_add?
>> 
>> qmp-commands.hx is a relict.  It's still around because we still haven't
>> completed the conversion of QMP to QAPI.  We suck :)
>> 
>> The QAPI schema defines QMP commands.  The marshalling / unmarshalling
>> code mapping between QMP the text protocol and actual QMP command
>> handlers written in C gets generated from the schema.
>> 
>> docs/qapi-code-gen.txt explains this.  A much improved version is
>> sitting in Eric's queue[*].  Perhaps Eric can provide a pointer to his
>> current version.
>> 
>> qmp-commands.hx duplicates some of the schema information, partly in
>> dumbed down form, and adds a bit more.
>
> OK, to summarise how I'm hearing things so far:
>   a) We want this as a QMP command
>   b) With nice structured json arguments
>   c) But the QMP parser is broken and the example that Eric wants me
>      to follow isn't pretty.
>
> Am I missing something from that? Because at the moment I seem to
> be walking into a minefield of QMP parsers to add a simple bit
> of migration functionality.

There is just one QMP parser.  I wouldn't call it "broken".  It parses
fine.  It's use by blockdev-add is inelegant.

Would you like me to prototype a "migrate-incoming" command for you that
does nothing?

  reply	other threads:[~2015-01-30  9:43 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-29 15:06 [Qemu-devel] [RFC 0/1] Incoming migration vs early monitor commands Dr. David Alan Gilbert (git)
2015-01-29 15:06 ` [Qemu-devel] [RFC 1/1] Execute arbitrary QMP commands from command line Dr. David Alan Gilbert (git)
2015-01-29 15:15   ` Daniel P. Berrange
2015-01-29 15:21     ` Eric Blake
2015-01-29 15:54       ` Dr. David Alan Gilbert
2015-01-29 16:01         ` Eric Blake
2015-01-29 16:28           ` Dr. David Alan Gilbert
2015-01-29 17:45             ` Eric Blake
2015-01-29 20:21               ` Dr. David Alan Gilbert
2015-01-29 20:48                 ` Eric Blake
2015-01-30  9:38                   ` Dr. David Alan Gilbert
2015-01-30  9:50                     ` Paolo Bonzini
2015-01-30  9:56                       ` Dr. David Alan Gilbert
2015-02-03 10:12                       ` Amit Shah
2015-02-03 11:02                         ` Paolo Bonzini
2015-01-30  9:50                     ` Daniel P. Berrange
2015-01-30  8:34                 ` Markus Armbruster
2015-01-30  9:20                   ` Dr. David Alan Gilbert
2015-01-30  9:43                     ` Markus Armbruster [this message]
2015-01-30  8:35       ` Markus Armbruster
2015-01-29 15:22     ` Dr. David Alan Gilbert
2015-01-29 15:31       ` Daniel P. Berrange
2015-01-29 15:46         ` Dr. David Alan Gilbert
2015-01-29 15:50           ` Eric Blake
2015-01-29 15:56             ` Dr. David Alan Gilbert
2015-01-29 15:58           ` Daniel P. Berrange
2015-01-30  9:52       ` Paolo Bonzini
2015-01-30 10:02         ` Dr. David Alan Gilbert
2015-01-30 10:27           ` Paolo Bonzini
2015-01-29 15:25 ` [Qemu-devel] [RFC 0/1] Incoming migration vs early monitor commands Eric Blake
2015-01-29 23:08 ` Paolo Bonzini
2015-01-30  9:42   ` Dr. David Alan Gilbert

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=87fvasr4c9.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=liang.z.li@intel.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.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.