On Wed, Jan 30, 2019 at 10:46:24AM +0100, Peter Krempa wrote:
On Tue, Jan 29, 2019 at 18:52:37 +0100, Kashyap Chamarthy wrote:
[...]
> Optional, a bit of explanation of "munging the output"
at the start (and
> end) of the job would be useful for those new to these block APIs.
>
> Reading between the lines, and from what I recall Eric explaining once,
> what you're implying here is: that even if QEMU reported "cur==end",
but
> if the _READY event is not emitted, libvirt manipulates it to report
> "cur<end".
>
> Thanks for the workaround (because "QEMU is not accurately reporting
> data") fix.
>
> /me wonders if he could make a reliable reproducer test for this...
Technically you'll need to patch either libvirt or qemu to do so. E.g.
add a delay to processing of the READY event from qemu. This is a race
across two applications which is not easy to reproduce.
Yep, noted. For now I won't spend time on it.
Also I really don't want to think this is a solution. This is a
dirty
hack to work around software not willing to adapt to the correct
approach.
It's not about "not willing" but the "small matter of
implementing" it
correctly without regressing. :-) And I realize it's not a perfect
"solution", that's why I called it a workaround. And FWIW, Eric seems
to agree that it is reasonable given the circumstances.
I did not want do do this, but I've found that we do something
similar
for the job startup. I really hate this solution, but given that it's
two years since I've pointed out that relying on polling the info via
virDomainBlockJobInfo is broken and apps should use the _READY event
and it's still an issue today I'm going to do this, but really don't
want to advertise this as a solution. It's not a solution. It's a
hack.
Right, at least for Nova, I _did_ notify upstream that the correct way
is to use the events. It's a matter of prioritizing that task. (I'll
file a formal bug.)
--
/kashyap