[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Bug 1585533] [NEW] cache-miss-rate / Invalid JSON
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [Bug 1585533] [NEW] cache-miss-rate / Invalid JSON |
Date: |
Wed, 25 May 2016 05:10:19 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 05/25/2016 02:46 AM, Marc Brothier wrote:
> Public bug reported:
>
> Hi,
>
> We have VMs which were started with an older version than qemu 2.1 which
> added "cache-miss-rate" property for XBZRLECacheStats. While trying to
> migrate the VM to a new host which is running a higher version (2.3) of
> Qemu we got an exception:
>
> virJSONValueFromString:1642 : internal error: cannot parse json {"return":
> {"expected-downtime": 1, "xbzrle-cache": {"bytes": 0, "cache-size": 67108864,
> "cache-miss-rate": -nan, "pages": 0, "overflow": 0, "cache-miss": 8933},
> "status": "active", "disk": {"total": 429496729600, "dirty-sync-count": 0,
> "remaining": 193896382464, "mbps": 0, "transferred": 235600347136,
> "duplicate": 0, "dirty-pages-rate": 0, "skipped": 0, "normal-bytes": 0,
> "normal": 0}, "setup-time": 13, "total-time": 1543124, "ram": {"total":
> 8599183360, "dirty-sync-count": 4, "remaining": 30695424, "mbps": 830.636997,
> "transferred": 3100448901, "duplicate": 1358341, "dirty-pages-rate": 7,
> "skipped": 0, "normal-bytes": 3082199040, "normal": 752490}}, "id":
> "libvirt-186200"}: lexical error: malformed number, a digit is required after
> the minus sign.
> 67108864, "cache-miss-rate": -nan, "pages": 0, "overflow": 0
> (right here) ------^
>
> virNetClientStreamRaiseError:191 : stream aborted at client request
Wow - I've known we have a problem with qemu emitting non-compliant
JSON, but this proves that it is fatal to libvirt. I guess my series on
improving the JSON parser [1] should consider doing a fallback to
s/NaN/0/ and s/Inf/DBL_MAX/ rather than completely erroring out when a
client tries to request it. Meanwhile, it's an easy patch to qemu to
avoid division by zero when generating cache-miss-rate.
[1] https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg03424.html
>
>
> Would it be possible to improve the JSON parser to skip the key if the value
> is incorrect
Libvirt uses libyajl to parse JSON, and libyajl has an outstanding bug
request to support extensions to JSON such as parsing non-finite floats.
Since there has been no upstream reaction to the bug request, I
seriously doubt it will happen any time soon, so any change to tolerate
NaN in libvirt would have to be a one-off patch. It sounds like the
better fix is to make qemu emit valid JSON in the first place, rather
than making libvirt deal with broken JSON from qemu.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [Bug 1585533] [NEW] cache-miss-rate / Invalid JSON, Marc Brothier, 2016/05/25
- [Qemu-devel] [Bug 1585533] Re: cache-miss-rate / Invalid JSON, Marc Brothier, 2016/05/25
- Re: [Qemu-devel] [Bug 1585533] [NEW] cache-miss-rate / Invalid JSON,
Eric Blake <=
- [Qemu-devel] [Bug 1585533] Re: cache-miss-rate / Invalid JSON, Marc Brothier, 2016/05/25
- [Qemu-devel] [Bug 1585533] Re: cache-miss-rate / Invalid JSON, Marc Brothier, 2016/05/25
- [Qemu-devel] [Bug 1585533] Re: cache-miss-rate / Invalid JSON, Paolo Bonzini, 2016/05/25
- [Qemu-devel] [Bug 1585533] Re: cache-miss-rate / Invalid JSON, Marc Brothier, 2016/05/26
- [Qemu-devel] [Bug 1585533] Re: cache-miss-rate / Invalid JSON, Marc Brothier, 2016/05/31