[libvirt] [PATCH 2/3] virsh: qemu-monitor-command: Don't print extra newline with --pretty

Peter Krempa pkrempa at redhat.com
Mon Aug 1 11:19:40 UTC 2016


On Mon, Aug 01, 2016 at 12:40:31 +0200, Ján Tomko wrote:
> On Mon, Aug 01, 2016 at 06:30:07AM +0200, Peter Krempa wrote:
> >The prettified JSON string already contains a newline so don't print
> >another one. This allows to pipe the json output (in conjunction with
> >the --quiet option) to files without having to truncate them afterwards.
> >---
> > tools/virsh-domain.c | 19 +++++++++----------
> > 1 file changed, 9 insertions(+), 10 deletions(-)
> >
> >diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> >index 6c1bc2f..45fce76 100644
> >--- a/tools/virsh-domain.c
> >+++ b/tools/virsh-domain.c
> >@@ -8944,6 +8944,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
> >     virBuffer buf = VIR_BUFFER_INITIALIZER;
> >     bool pad = false;
> >     virJSONValuePtr pretty = NULL;
> >+    char *prettystr = NULL;
> >
> >     VSH_EXCLUSIVE_OPTIONS("hmp", "pretty");
> >
> >@@ -8969,22 +8970,20 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
> >     if (virDomainQemuMonitorCommand(dom, monitor_cmd, &result, flags) < 0)
> >         goto cleanup;
> >
> >-    if (vshCommandOptBool(cmd, "pretty")) {
> >-        char *tmp;
> >-        pretty = virJSONValueFromString(result);
> >-        if (pretty && (tmp = virJSONValueToString(pretty, true))) {
> >-            VIR_FREE(result);
> >-            result = tmp;
> >-        } else {
> >-            vshResetLibvirtError();
> >-        }
> >+    if (vshCommandOptBool(cmd, "pretty") &&
> >+        (pretty = virJSONValueFromString(result)) &&
> 
> I find naming the variable pretty pretty confusing. virJSONValuePtr is
> in machine-friendly format and while it has the potential to be
> formatted as pretty, it is not pretty right now.

I did not wan't to question the name choice of the previous autor thus
I'm not changing it either.

> 
> >+        (prettystr = virJSONValueToString(pretty, true))) {
> >+        vshPrint(ctl, "%s", prettystr);
> >+    } else {
> >+        vshResetLibvirtError();
> 
> Resetting it even when --pretty was not specified feels strange.

But certainly not wrong. In case no error was reported it's a no-op.

> Also, grouping the if (--pretty) condition with the virJSONValue error
> checks makes the flow hard to read.

I agree on this point.

> Do we need the fallback? AFAIK there are only two issues possible when
> prettifying the string:
> * the system is out of memory
>   possibly impossible, erroring out or even aborting virsh are
>   acceptable here
> * virDomainQemuMonitorCommand did not return a JSON output
>   For a domain with JSON monitor, the remote side calls virJSONValueToString,
>   so this could only reasonably happen with  a domain that only has HMP.
>   If we error out on the --hmp --pretty combination, we can error out
>   here too and do not need to fall back to raw output.

Hmm, that's true. The slight change in semantics should not be an issue.

> 
> >+        vshPrint(ctl, "%s\n", result);
> >     }
> >-    vshPrint(ctl, "%s\n", result);
> >
> 
> There is also the option of keeping the \n in vshPrint and calling
> virTrimSpaces on the prettyfied output.

I thought you were into optimizing stuff rather than adding a pointless
iteration through the string.




More information about the libvir-list mailing list