I thank you for all your work.

I have since moved away from this block architecture and am no longer able
to verify with an existing configuration.


On Fri, Nov 22, 2019 at 6:36 AM Timo Aaltonen <tjaal...@ubuntu.com>
wrote:

> Hello Patrick, or anyone else affected,
>
> Accepted libvirt into xenial-proposed. The package will build now and be
> available at
> https://launchpad.net/ubuntu/+source/libvirt/1.3.1-1ubuntu10.29 in a few
> hours, and then in the -proposed repository.
>
> Please help us by testing this new package.  See
> https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how
> to enable and use -proposed.  Your feedback will aid us getting this
> update out to other Ubuntu users.
>
> If this package fixes the bug for you, please add a comment to this bug,
> mentioning the version of the package you tested and change the tag from
> verification-needed-xenial to verification-done-xenial. If it does not
> fix the bug for you, please add a comment stating that, and change the
> tag to verification-failed-xenial. In either case, without details of
> your testing we will not be able to proceed.
>
> Further information regarding the verification process can be found at
> https://wiki.ubuntu.com/QATeam/PerformingSRUVerification .  Thank you in
> advance for helping!
>
> N.B. The updated package will be released to -updates after the bug(s)
> fixed by this package have been verified and the package has been in
> -proposed for a minimum of 7 days.
>
> ** Changed in: libvirt (Ubuntu Xenial)
>        Status: In Progress => Fix Committed
>
> ** Tags added: verification-needed verification-needed-xenial
>
> --
> You received this bug notification because you are subscribed to the bug
> report.
> https://bugs.launchpad.net/bugs/1681839
>
> Title:
>   libvirt: blockcommit fails - disk not ready for pivot yet
>
> Status in libvirt package in Ubuntu:
>   Fix Released
> Status in libvirt source package in Xenial:
>   Fix Committed
> Status in libvirt source package in Artful:
>   Fix Released
> Status in libvirt source package in Bionic:
>   Fix Released
>
> Bug description:
>   [Impact]
>
>   On xenial, if you manually invoke blockcommit through virsh in
>   libvirt, the command immediately fails with blockcommit supposedly
>   being 100%, and that the disk is not ready for pivot yet:
>
>   root@xenial-apparmor:~# virsh blockcommit snapvm vda --active --verbose
> --pivot --wait
>   Block commit: [100 %]
>   error: failed to pivot job for disk vda
>   error: block copy still active: disk 'vda' not ready for pivot yet
>
>   However, if you look at the status of the active blockjob, we see that
>   the blockcommit is still active in the background:
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [0 %]
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [2 %]
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [6 %]
>
>   This happens until it reaches 100%, where it gets stuck. To un-stick
>   things, you must then manually --abort the blockjob.
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [100 %]
>
>   This happens in VMs which are experiencing load, and is caused by a
>   race condition in libvirt. Users are not able to commit their
>   snapshots to disk.
>
>   [Test Case]
>
>   Credit goes to Fabio Martins, who determined how to reproduce this
>   issue.
>
>   On a Ubuntu 16.04 host with libvirt 1.3.1-1ubuntu10.27:
>
>   1) Create a VG and define a LVM pool:
>
>   root@xenial-apparmor:~# cat lvmpool.xml
>   <pool type="logical">
>   <name>LVMpool_vg</name>
>   <source>
>   <device path="/dev/sdb"/>
>   </source>
>   <target>
>   <path>/dev/LVMpool_vg</path>
>   </target>
>   </pool>
>
>   # virsh pool-define lvmpool.xml
>   # virsh pool-start LVMpool_vg
>   # virsh pool-autostart LVMpool_vg
>
>   2) Create a config file to use as a cdrom device with the new VM (will
>   be created in next steps), just to inject a password with cloud-init:
>
>   # cat > config <<EOF
>   > #cloud-config
>   > password: passw0rd
>   > chpasswd: { expire: False }
>   > ssh_pwauth: True
>   > EOF
>
>   # apt install cloud-image-utils
>
>   # cloud-localds config.img config
>
>   # mv config.img /var/lib/libvirt/images/
>   # chown libvirt-qemu:kvm /var/lib/libvirt/images/config.img
>   # chmod 664 /var/lib/libvirt/images/config.img
>
>   3) Create one VM using this pool:
>
>   # virt-install --connect=qemu:///system --name snapvm --ram 2048
>   --vcpus=1 --os-type=linux --disk pool=LVMpool_vg,size=15,bus=virtio
>   --disk /var/lib/libvirt/images/config.img,device=cdrom --network
>   network=kvm-br0 --graphics none --import --noautoconsole
>
>   4) Stop the VM
>
>   # virsh destroy snapvm
>
>   5) Download a Ubuntu cloud image, convert to raw and restore it into
>   the LV used as a disk by our VM:
>
>   # wget
> https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
>   # qemu-img convert ./bionic-server-cloudimg-amd64.img
> ./bionic-server-cloudimg-amd64.raw
>   # dd if=./bionic-server-cloudimg-amd64.raw of=/dev/LVMpool_vg/snapvm
> bs=8M conv=sparse
>
>   6) Start the VM and connect to it in another window
>
>   # virsh start snapvm
>
>   7) Check that the VM is using the LV as the disk:
>
>   root@xenial-apparmor:~# virsh domblklist snapvm
>   Target Source
>   ------------------------------------------------
>   vda /dev/LVMpool_vg/snapvm
>   hda /var/lib/libvirt/images/config.img
>
>   8) Create a snapshot and check that the new domblklist points to the
>   snapshot file:
>
>   # virsh snapshot-create-as --domain snapvm --diskspec
>   vda,file=/var/lib/libvirt/images/xenial-snapvm.qcow2,snapshot=external
>   --disk-only --atomic
>
>   root@xenial-apparmor:~# virsh domblklist snapvm
>   Target Source
>   ------------------------------------------------
>   vda /var/lib/libvirt/images/xenial-snapvm.qcow2
>   hda /var/lib/libvirt/images/config.img
>
>   9) Connect to your VM and start an I/O intensive job. In this case I'm
>   starting a 'dd' writing zeroes to a file until it gets to 10GBs:
>
>   ubuntu@ubuntu:~$ dd if=/dev/zero of=file.txt count=1024 bs=10240000
>
>   10) Back to the host, monitor the snapshot file and let it grow until
>   at list a bit more than 1GB, as in the example below (where we can see
>   the file with 3.9G):
>
>   root@xenial-apparmor:~# ls -lh /var/lib/libvirt/images/
>   total 5.2G
>   -rw-rw-r-- 1 libvirt-qemu kvm 329M Sep 3 03:18
> bionic-server-cloudimg-amd64.img
>   -rw-r--r-- 1 root root 10G Sep 3 03:28 bionic-server-cloudimg-amd64.raw
>   -rw-rw-r-- 1 libvirt-qemu kvm 366K Sep 3 03:19 config.img
>   -rw------- 1 libvirt-qemu kvm 3.9G Sep 3 04:41 xenial-snapvm.qcow2
>
>   11) Start a blockcommit job with --active --verbose --pivot --wait and
>   we'll hit the error when the job gets to 100%:
>
>   root@xenial-apparmor:~# virsh blockcommit snapvm vda --active --verbose
> --pivot --wait
>   Block commit: [100 %]
>   error: failed to pivot job for disk vda
>   error: block copy still active: disk 'vda' not ready for pivot yet
>
>   12) The blkjob will continue in the background, and status increments:
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [0 %]
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [2 %]
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [6 %]
>
>   13) The blkjob will show it is stuck at 100% until you --abort the
>   blkjob:
>
>   root@xenial-apparmor:~# virsh blockjob snapvm vda --info
>   Active Block Commit: [100 %]
>
>   I have created a test package with the commits needed to solve the
>   problem, and it is available here:
>
>   https://launchpad.net/~mruffell/+archive/ubuntu/sf242822-test
>
>   What should happen:
>
>   If you install the test libvirt-bin and libvirt0 packages from the
>   above ppa, and run through the test case, when blockcommit is invoked,
>   it will not fail immediately, and instead, will continue on until it
>   reaches 100%. Once 100% is reached, the blockjob will complete
>   successfully.
>
>   [Regression Potential]
>
>   While there are four commits which are required to fix this issue, all
>   of them are fairly minor and only modify the way the current status
>   percentage is counted, and how states are being changed, upon reaching
>   100% blockcommit. All changes are localised to one file.
>
>   Most of the commits are limited to blockcommit, and in event of
>   regression, only blockcommit and by extension, some blockjobs would be
>   impacted.
>
>   The commits have been present in upstream for a long time, have been
>   well tested by the community, and are from a release of libvirt with
>   very small delta to the one in xenial (1.3.2 versus 1.3.1 in xenial),
>   I believe there is little risk of regression.
>
>   [Other Info]
>
>   The following commits were identified in the upstream bug:
>   https://bugzilla.redhat.com/show_bug.cgi?id=1197592
>
>   which are also listed in comment #6.
>
>   commit 86c4df83b913dd73b79caeed2038291374384dc5
>   Author: Michael Chapman <m...@very.puzzling.org>
>   Date:   Wed Jan 27 13:24:54 2016 +1100
>   Subject: virsh: improve waiting for block job readiness
>
>   commit 8fa216bbb40df33e7fce5d727aa3dc334480878a
>   Author: Michael Chapman <m...@very.puzzling.org>
>   Date:   Wed Jan 27 13:24:53 2016 +1100
>   Subject: virsh: ensure SIGINT action is reset on all errors
>
>   commit 15dee2ef24f2f19f6dcd30d997b81c8a14582361
>   Author: Michael Chapman <m...@very.puzzling.org>
>   Date:   Wed Jan 27 13:24:52 2016 +1100
>   Subject: virsh: be consistent with style of loop exit
>
>   commit 704dfd6b0fafe7eafca93a03793389239f8ab869
>   Author: Michael Chapman <m...@very.puzzling.org>
>   Date:   Wed Jan 27 13:24:51 2016 +1100
>   Subject: virsh: avoid unnecessary progress updates
>
>   These fix the problem, and were introduced in libvirt 1.3.2 upstream.
>   All commits are clean cherry picks, and the code is still present in
>   B, D, E and F.
>
> To manage notifications about this bug go to:
>
> https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1681839/+subscriptions
>

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1681839

Title:
  libvirt: blockcommit fails - disk not ready for pivot yet

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1681839/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to