[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 04/32] qmp: Document COMMAND_DROPPED design flaw
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 04/32] qmp: Document COMMAND_DROPPED design flaw |
Date: |
Tue, 3 Jul 2018 10:53:30 +0200 |
Events are broadcast to all monitors. If another monitor's client has
a command with the same ID in flight, the event will incorrectly claim
that command was dropped. This must be fixed before out-of-band
execution can graduate from "experimental".
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
monitor.c | 6 ++++++
qapi/misc.json | 3 +++
2 files changed, 9 insertions(+)
diff --git a/monitor.c b/monitor.c
index 3fb05d50aa..96e87d8664 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4330,6 +4330,12 @@ static void handle_qmp_command(JSONMessageParser
*parser, GQueue *tokens)
/* Drop the request if queue is full. */
if (mon->qmp.qmp_requests->length >= QMP_REQ_QUEUE_LEN_MAX) {
qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
+ /*
+ * FIXME @id's scope is just @mon, and broadcasting it is
+ * wrong. If another monitor's client has a command with
+ * the same ID in flight, the event will incorrectly claim
+ * that command was dropped.
+ */
qapi_event_send_command_dropped(id,
COMMAND_DROP_REASON_QUEUE_FULL,
&error_abort);
diff --git a/qapi/misc.json b/qapi/misc.json
index 0446c3e48e..74cd97f237 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -3454,6 +3454,9 @@
# only be dropped when the oob capability is enabled.
#
# @id: The dropped command's "id" field.
+# FIXME Broken by design. Events are broadcast to all monitors. If
+# another monitor's client has a command with the same ID in flight,
+# the event will incorrectly claim that command was dropped.
#
# @reason: The reason why the command is dropped.
#
--
2.17.1
- Re: [Qemu-devel] [PATCH v2 07/32] qmp: Make "id" optional again even in "oob" monitors, (continued)
- [Qemu-devel] [PATCH v2 12/32] qmp: Redo how the client requests out-of-band execution, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 31/32] monitor: Improve some comments, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 20/32] monitor: Peel off @mon_global wrapper, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 23/32] qmp: Use QDict * instead of QObject * for response objects, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 32/32] qapi: Polish command flags documentation in qapi-code-gen.txt, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 19/32] monitor: Rename use_io_thr to use_io_thread, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 30/32] qmp: Clean up capability negotiation after commit 02130314d8c, Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 14/32] qmp: Always free QMPRequest with qmp_request_free(), Markus Armbruster, 2018/07/03
- [Qemu-devel] [PATCH v2 04/32] qmp: Document COMMAND_DROPPED design flaw,
Markus Armbruster <=
- [Qemu-devel] [PATCH v2 21/32] qobject: New qdict_from_jsonf_nofail(), Markus Armbruster, 2018/07/03