
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