Re: [libvirt] [PATCH 06/12] qemu: monitor: Convert common code to a macro

2015-03-11 Thread Ján Tomko
On Tue, Mar 10, 2015 at 05:26:35PM +0100, Peter Krempa wrote:
> The function that is extracting block stats data from the QMP monitor
> reply contains a lot of repeated code. Since I'd be changing each of the
> copies in the next patch, lets convert it to a macro right away.
> ---
>  src/qemu/qemu_monitor_json.c | 77 
> ++--
>  1 file changed, 17 insertions(+), 60 deletions(-)
> 

> +#define QEMU_MONITOR_JSON_BLOCK_STAT(NAME, VAR, MANDATORY)   
>   \
> +if (MANDATORY || virJSONValueObjectHasKey(stats, NAME)) {
>   \
> +if (virJSONValueObjectGetNumberLong(stats, NAME, &VAR) < 0) {
>   \
> +virReportError(VIR_ERR_INTERNAL_ERROR,   
>   \
> +   _("cannot read %s statistic"), NAME); 
>   \
> +goto cleanup;
>   \
> +}
>   \
> +}
> + QEMU_MONITOR_JSON_BLOCK_STAT("rd_bytes", bstats->rd_bytes, true);
> + QEMU_MONITOR_JSON_BLOCK_STAT("wr_bytes", bstats->wr_bytes, true);
> + QEMU_MONITOR_JSON_BLOCK_STAT("rd_operations", bstats->rd_req, true);
> + QEMU_MONITOR_JSON_BLOCK_STAT("wr_operations", bstats->wr_req, true);
> + QEMU_MONITOR_JSON_BLOCK_STAT("rd_total_time_ns", 
> bstats->rd_total_times, false);
> + QEMU_MONITOR_JSON_BLOCK_STAT("wr_total_time_ns", 
> bstats->wr_total_times, false);
> + QEMU_MONITOR_JSON_BLOCK_STAT("flush_operations", bstats->flush_req, 
> false);
> + QEMU_MONITOR_JSON_BLOCK_STAT("flush_total_time_ns", 
> bstats->flush_total_times, false);
> +#undef QEMU_MONITOR_JSON_BLOCK_STAT
> 

This macro could also use a verb.

Jan


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH 06/12] qemu: monitor: Convert common code to a macro

2015-03-10 Thread Peter Krempa
The function that is extracting block stats data from the QMP monitor
reply contains a lot of repeated code. Since I'd be changing each of the
copies in the next patch, lets convert it to a macro right away.
---
 src/qemu/qemu_monitor_json.c | 77 ++--
 1 file changed, 17 insertions(+), 60 deletions(-)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index c88c7c3..52e1ad6 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -1789,66 +1789,23 @@ qemuMonitorJSONGetOneBlockStatsInfo(virJSONValuePtr dev,
 goto cleanup;
 }

-if (virJSONValueObjectGetNumberLong(stats, "rd_bytes",
-&bstats->rd_bytes) < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "rd_bytes");
-goto cleanup;
-}
-if (virJSONValueObjectGetNumberLong(stats, "rd_operations",
-&bstats->rd_req) < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "rd_operations");
-goto cleanup;
-}
-if (virJSONValueObjectHasKey(stats, "rd_total_time_ns") &&
-(virJSONValueObjectGetNumberLong(stats, "rd_total_time_ns",
- &bstats->rd_total_times) < 0)) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "rd_total_time_ns");
-goto cleanup;
-}
-if (virJSONValueObjectGetNumberLong(stats, "wr_bytes",
-&bstats->wr_bytes) < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "wr_bytes");
-goto cleanup;
-}
-if (virJSONValueObjectGetNumberLong(stats, "wr_operations",
-&bstats->wr_req) < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "wr_operations");
-goto cleanup;
-}
-if (virJSONValueObjectHasKey(stats, "wr_total_time_ns") &&
-(virJSONValueObjectGetNumberLong(stats, "wr_total_time_ns",
- &bstats->wr_total_times) < 0)) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "wr_total_time_ns");
-goto cleanup;
-}
-if (virJSONValueObjectHasKey(stats, "flush_operations") &&
-(virJSONValueObjectGetNumberLong(stats, "flush_operations",
- &bstats->flush_req) < 0)) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "flush_operations");
-goto cleanup;
-}
-if (virJSONValueObjectHasKey(stats, "flush_total_time_ns") &&
-(virJSONValueObjectGetNumberLong(stats, "flush_total_time_ns",
- &bstats->flush_total_times) < 0)) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("cannot read %s statistic"),
-   "flush_total_time_ns");
-goto cleanup;
-}
+#define QEMU_MONITOR_JSON_BLOCK_STAT(NAME, VAR, MANDATORY) 
\
+if (MANDATORY || virJSONValueObjectHasKey(stats, NAME)) {  
\
+if (virJSONValueObjectGetNumberLong(stats, NAME, &VAR) < 0) {  
\
+virReportError(VIR_ERR_INTERNAL_ERROR, 
\
+   _("cannot read %s statistic"), NAME);   
\
+goto cleanup;  
\
+}  
\
+}
+ QEMU_MONITOR_JSON_BLOCK_STAT("rd_bytes", bstats->rd_bytes, true);
+ QEMU_MONITOR_JSON_BLOCK_STAT("wr_bytes", bstats->wr_bytes, true);
+ QEMU_MONITOR_JSON_BLOCK_STAT("rd_operations", bstats->rd_req, true);
+ QEMU_MONITOR_JSON_BLOCK_STAT("wr_operations", bstats->wr_req, true);
+ QEMU_MONITOR_JSON_BLOCK_STAT("rd_total_time_ns", bstats->rd_total_times, 
false);
+ QEMU_MONITOR_JSON_BLOCK_STAT("wr_total_time_ns", bstats->wr_total_times, 
false);
+ QEMU_MONITOR_JSON_BLOCK_STAT("flush_operations", bstats->flush_req, 
false);
+ QEMU_MONITOR_JSON_BLOCK_STAT("flush_total_time_ns", 
bstats->flush_total_times, false);
+#undef QEMU_MONITOR_JSON_BLOCK_STAT

 /* it's ok to not have this information here. Just skip silently. */
 qemuMonitorJSONDevGetBlockExtent(dev, &bstats->wr_highest_offset);
-- 
2.2.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list