Commit 80cd93bd authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qmp: Make "id" optional again even in "oob" monitors



Commit cf869d53 "qmp: support out-of-band (oob) execution" made
"id" mandatory for all commands when the client accepted capability
"oob".  This is rather onerous when you play with QMP by hand, and
unnecessarily so: only out-of-band commands need an ID for reliable
matching of response to command.

Revert that part of commit cf869d53 for now, but have documentation
advise on the need to use "id" with out-of-band commands.

Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <20180703085358.13941-8-armbru@redhat.com>
Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
parent 2970b446
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -103,16 +103,13 @@ The format for command execution is:
  required. Each command documents what contents will be considered
  valid when handling the json-argument
- The "id" member is a transaction identification associated with the
  command execution.  It is required for all commands if the OOB -
  capability was enabled at startup, and optional otherwise.  The same
  "id" field will be part of the response if provided.  The "id"
  member can be any json-value.  A json-number incremented for each
  successive command works fine.
  command execution, it is optional and will be part of the response
  if provided.  The "id" member can be any json-value.  A json-number
  incremented for each successive command works fine.
- The optional "control" member further specifies how the command is
  to be executed.  Currently, its only member is optional "run-oob".
  See section "2.3.1 Out-of-band execution" for details.


2.3.1 Out-of-band execution
---------------------------

@@ -128,6 +125,10 @@ possibly overtaking prior in-band commands. The client may therefore
receive such a command's response before responses from prior in-band
commands.

To be able to match responses back to their commands, the client needs
to pass "id" with out-of-band commands.  Passing it with all commands
is recommended for clients that accept capability "oob".

To execute a command out-of-band, the client puts "run-oob": true into
execute's member "control".

+0 −7
Original line number Diff line number Diff line
@@ -4292,13 +4292,6 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)

    id = qdict_get(qdict, "id");

    /* When OOB is enabled, the "id" field is mandatory. */
    if (qmp_oob_enabled(mon) && !id) {
        error_setg(&err, "Out-of-band capability requires that "
                   "every command contains an 'id' field");
        goto err;
    }

    req_obj = g_new0(QMPRequest, 1);
    req_obj->mon = mon;
    req_obj->id = qobject_ref(id);