monitor/qmp.c | 6 ++++++ monitor/trace-events | 1 + 2 files changed, 7 insertions(+)
Add a useful counterpart for trace_handle_qmp_command for debugging
libvirt guests.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
monitor/qmp.c | 6 ++++++
monitor/trace-events | 1 +
2 files changed, 7 insertions(+)
diff --git a/monitor/qmp.c b/monitor/qmp.c
index 8f91af32be..772b9e7b30 100644
--- a/monitor/qmp.c
+++ b/monitor/qmp.c
@@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp)
const QObject *data = QOBJECT(rsp);
GString *json;
+ if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) {
+ json = qobject_to_json(data);
+ trace_qmp_send_response(mon, json->str);
+ g_string_free(json, true);
+ }
+
json = qobject_to_json_pretty(data, mon->pretty);
assert(json != NULL);
diff --git a/monitor/trace-events b/monitor/trace-events
index 0365ac4d99..12f0576c7b 100644
--- a/monitor/trace-events
+++ b/monitor/trace-events
@@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d"
monitor_qmp_cmd_in_band(const char *id) "%s"
monitor_qmp_cmd_out_of_band(const char *id) "%s"
handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
+qmp_send_response(void *mon, const char *req) "mon %p req: %s"
--
2.29.2
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes: > Add a useful counterpart for trace_handle_qmp_command for debugging > libvirt guests. > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > --- > monitor/qmp.c | 6 ++++++ > monitor/trace-events | 1 + > 2 files changed, 7 insertions(+) > > diff --git a/monitor/qmp.c b/monitor/qmp.c > index 8f91af32be..772b9e7b30 100644 > --- a/monitor/qmp.c > +++ b/monitor/qmp.c > @@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp) > const QObject *data = QOBJECT(rsp); > GString *json; > > + if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) { > + json = qobject_to_json(data); > + trace_qmp_send_response(mon, json->str); > + g_string_free(json, true); > + } > + > json = qobject_to_json_pretty(data, mon->pretty); > assert(json != NULL); > > diff --git a/monitor/trace-events b/monitor/trace-events > index 0365ac4d99..12f0576c7b 100644 > --- a/monitor/trace-events > +++ b/monitor/trace-events > @@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d" > monitor_qmp_cmd_in_band(const char *id) "%s" > monitor_qmp_cmd_out_of_band(const char *id) "%s" > handle_qmp_command(void *mon, const char *req) "mon %p req: %s" > +qmp_send_response(void *mon, const char *req) "mon %p req: %s" A slightly lazier version of this just landed in commit f680405f45 "qmp: Add more tracepoints". The difference is yours ignores mon->pretty for tracing. Thoughts?
05.02.2021 10:56, Markus Armbruster wrote: > Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes: > >> Add a useful counterpart for trace_handle_qmp_command for debugging >> libvirt guests. >> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> >> --- >> monitor/qmp.c | 6 ++++++ >> monitor/trace-events | 1 + >> 2 files changed, 7 insertions(+) >> >> diff --git a/monitor/qmp.c b/monitor/qmp.c >> index 8f91af32be..772b9e7b30 100644 >> --- a/monitor/qmp.c >> +++ b/monitor/qmp.c >> @@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp) >> const QObject *data = QOBJECT(rsp); >> GString *json; >> >> + if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) { >> + json = qobject_to_json(data); >> + trace_qmp_send_response(mon, json->str); >> + g_string_free(json, true); >> + } >> + >> json = qobject_to_json_pretty(data, mon->pretty); >> assert(json != NULL); >> >> diff --git a/monitor/trace-events b/monitor/trace-events >> index 0365ac4d99..12f0576c7b 100644 >> --- a/monitor/trace-events >> +++ b/monitor/trace-events >> @@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d" >> monitor_qmp_cmd_in_band(const char *id) "%s" >> monitor_qmp_cmd_out_of_band(const char *id) "%s" >> handle_qmp_command(void *mon, const char *req) "mon %p req: %s" >> +qmp_send_response(void *mon, const char *req) "mon %p req: %s" > > A slightly lazier version of this just landed in commit f680405f45 "qmp: > Add more tracepoints". The difference is yours ignores mon->pretty for > tracing. > > Thoughts? > Ah, missed this, great. Then, nothing to do. In our environment (I'm not sure who do it libvirt, or other our tool) different query- commands are called periodically and their output is big enough, so I decided to trace json in oneline.. Still better is developing a way to not trace some qmp commands and their output. -- Best regards, Vladimir
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes: > 05.02.2021 10:56, Markus Armbruster wrote: >> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes: >> >>> Add a useful counterpart for trace_handle_qmp_command for debugging >>> libvirt guests. >>> >>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> >>> --- >>> monitor/qmp.c | 6 ++++++ >>> monitor/trace-events | 1 + >>> 2 files changed, 7 insertions(+) >>> >>> diff --git a/monitor/qmp.c b/monitor/qmp.c >>> index 8f91af32be..772b9e7b30 100644 >>> --- a/monitor/qmp.c >>> +++ b/monitor/qmp.c >>> @@ -111,6 +111,12 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp) >>> const QObject *data = QOBJECT(rsp); >>> GString *json; >>> + if (trace_event_get_state_backends(TRACE_QMP_SEND_RESPONSE)) >>> { >>> + json = qobject_to_json(data); >>> + trace_qmp_send_response(mon, json->str); >>> + g_string_free(json, true); >>> + } >>> + >>> json = qobject_to_json_pretty(data, mon->pretty); >>> assert(json != NULL); >>> diff --git a/monitor/trace-events b/monitor/trace-events >>> index 0365ac4d99..12f0576c7b 100644 >>> --- a/monitor/trace-events >>> +++ b/monitor/trace-events >>> @@ -13,3 +13,4 @@ monitor_suspend(void *ptr, int cnt) "mon %p: %d" >>> monitor_qmp_cmd_in_band(const char *id) "%s" >>> monitor_qmp_cmd_out_of_band(const char *id) "%s" >>> handle_qmp_command(void *mon, const char *req) "mon %p req: %s" >>> +qmp_send_response(void *mon, const char *req) "mon %p req: %s" >> A slightly lazier version of this just landed in commit f680405f45 >> "qmp: >> Add more tracepoints". The difference is yours ignores mon->pretty for >> tracing. >> Thoughts? >> > > Ah, missed this, great. Then, nothing to do. > > In our environment (I'm not sure who do it libvirt, or other our tool) different query- commands are called periodically and their output is big enough, so I decided to trace json in oneline.. Still better is developing a way to not trace some qmp commands and their output. Feel free to add features you find useful on top.
© 2016 - 2024 Red Hat, Inc.