[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v2 15/22] monitor: send event when request queue full
From: |
Peter Xu |
Subject: |
[Qemu-devel] [RFC v2 15/22] monitor: send event when request queue full |
Date: |
Fri, 29 Sep 2017 11:38:37 +0800 |
Set maximum QMP request queue length to 8. If queue full, instead of
queue the command, we directly return a "request-dropped" event, telling
client that specific command is dropped.
Signed-off-by: Peter Xu <address@hidden>
---
monitor.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/monitor.c b/monitor.c
index 1e9a6cb6a5..d9bed31248 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3971,6 +3971,8 @@ static void monitor_qmp_bh_dispatcher(void *data)
}
}
+#define QMP_ASYNC_QUEUE_LEN_MAX (8)
+
static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens,
void *opaque)
{
@@ -4002,6 +4004,19 @@ static void handle_qmp_command(JSONMessageParser
*parser, GQueue *tokens,
req_obj->id = id;
req_obj->req = req;
+ /* Drop the request if queue is full. */
+ if (mon->qmp_requests->length >= QMP_ASYNC_QUEUE_LEN_MAX) {
+ const char *id_str = qobject_get_try_str(id);
+
+ qapi_event_send_request_dropped(id_str ? id_str : "",
+ REQUEST_DROP_REASON_QUEUE_FULL,
+ NULL);
+ qobject_decref(id);
+ qobject_decref(req);
+ g_free(req_obj);
+ return;
+ }
+
/*
* Put the request to the end of queue so that requests will be
* handled in time order. Ownership for req_obj, req, id,
--
2.13.5
- [Qemu-devel] [RFC v2 05/22] monitor: move skip_flush into monitor_data_init, (continued)
- [Qemu-devel] [RFC v2 05/22] monitor: move skip_flush into monitor_data_init, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 06/22] qjson: add "opaque" field to JSONMessageParser, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 08/22] monitor: unify global init, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 07/22] monitor: move the cur_mon hack deeper for QMP, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 09/22] monitor: create monitor dedicate iothread, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 10/22] monitor: allow to use IO thread for parsing, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 11/22] monitor: introduce monitor_qmp_respond(), Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 12/22] monitor: let mon_list be tail queue, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 13/22] monitor: separate QMP parser and dispatcher, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 14/22] qmp: add new event "request-dropped", Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 15/22] monitor: send event when request queue full,
Peter Xu <=
- [Qemu-devel] [RFC v2 16/22] monitor: enable IO thread for (qmp & !mux) typed, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 17/22] qapi: introduce new cmd option "allow-oob", Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 18/22] qmp: support out-of-band (oob) execution, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 19/22] qmp: let migrate-incoming allow out-of-band, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 20/22] qmp: isolate responses into io thread, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 21/22] qmp: introduce QMPCapability, Peter Xu, 2017/09/28
- [Qemu-devel] [RFC v2 22/22] docs: update QMP documents for OOB commands, Peter Xu, 2017/09/28
- Re: [Qemu-devel] [RFC v2 00/22] QMP: out-of-band (OOB) execution support, no-reply, 2017/09/28