[PATCH] qemu: blockjob: Avoid spurious log errors when cancelling a shallow copy with reused images
Kashyap Chamarthy
kchamart at redhat.com
Wed Feb 23 13:59:54 UTC 2022
On Wed, Feb 23, 2022 at 02:33:04PM +0100, Peter Krempa wrote:
> On Wed, Feb 23, 2022 at 14:17:40 +0100, Kashyap Chamarthy wrote:
> > On Tue, Feb 22, 2022 at 05:55:38PM +0100, Peter Krempa wrote:
[...]
> > Now to construct a reproducer with `virsh`. Peter, tell me what I got
> > wrong :-)
> >
> > (1) Let's start with this image chain (overlays are always of qcow2
> > format):
> >
> > base.raw <-- overlay1 <-- overlay2 (live QEMU).
> >
> > With the goal of copying the above into the below chain (note, here
> > we're flattening both base.raw and overlay1 into a single file,
> > "flat-o-b1")
> >
> > flat-o-b1.raw <-- copy (live QEMU)
> >
> > (2) Make a *raw* variant of "base <-- overlay1", call it "flat-b-o1.raw"
> > (i.e. flattened version of combined base and overlay1):
> >
> > $ qemu-img convert -f qcow2 -O raw overlay1.qcow2 \
> > flat-b-o1.raw
> >
> > (3) Then, create an empty QCOW2 file to create "flat-b-o1 <-- copy (empty)":
> >
> > $ qemu-img create -f qcow2 \
> > -o backing_file=flat-b-o1.raw,backing_fmt=raw copy.qcow2
> >
> > (4) *Then* perform the `blockcopy --reuse-external --shallow`:
> >
> > $ virsh blockcopy \
> > --domain vm1 vda ./copy.qcow2 \
> > --wait --verbose --reuse-external --shallow \
> > --finish
>
> If you are working on a persistent domain/vm use --transient-job to
> avoid the need to undefine it.
Yeah, makes sense.
> Also note that '--finish' is equivalent to aborting the job after it
> reaches synchronized phase ...
Damn, I thought I _removed_ finish, but still forgot it despite making a
mental note. Thanks for catching htat.
> > (5) And then pivot the job, so that live QEMU now points to copy
> >
> > $ virsh blockjob --pivot
>
>
> ... so this will actually say that there is no blockjob, because the
> previous step actually cancelled it.
Yeah, indeed.
> >
> > And the final result, we get the "goal" chain in step (1).
> >
> > src: base <-- overlay1 <-- overlay2
> > == ==
> > dst: flat-o-b1 <-- copy (live QEMU)
> >
> >
> > Am I missing anything else?
>
> Now the bug is that when you _cancel_ the job we attempt to blockdev-del
> some images which were not blockdev-added, and thus create some spurious
> log entries, but the rest of the code behaves correctly.
Yep, understood.
> So you'll only see the failure this is fixing in the logs.
Noted. Thanks for the review.
--
/kashyap
More information about the libvir-list
mailing list