Bug 1203628

Summary: Libvirt should post error when try to create external snapshot while there is a blockpull job running
Product: Red Hat Enterprise Linux 7 Reporter: Shanzhi Yu <shyu>
Component: libvirtAssignee: Peter Krempa <pkrempa>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 7.1CC: dyuan, eblake, mzhan, pkrempa, rbalakri, xuzhang, yanyang
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: libvirt-1.2.15-1.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-11-19 06:20:42 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Shanzhi Yu 2015-03-19 09:55:16 UTC
Description of problem:

Libvirt should post error when try to create external snapshot while there is a blockpull job running

Version-Release number of selected component (if applicable):
libvirt-1.2.8-16.el7_1.2.x86_64

How reproducible:
100%

Steps to Reproduce:
1. Prepare a blockpull job for guest
# virsh blockpull vm vda --bandwidth 1 --verbose --wait 
Block Pull: [ 19 %]

2. Try to create external disk snapshot

# virsh snapshot-create-as vm ss2 --disk-only --no-metadata 
error: internal error: unable to execute QEMU command 'transaction': Device 'drive-virtio-disk0' is busy: block device is in use by block job: stream

3.

Actual results:


Expected results:

More accurate error info like:

# virsh snapshot-create-as vm ss2 --disk-only --no-metadata 
error: block copy still active: domain has active block job

Additional info:

Comment 1 Peter Krempa 2015-04-02 08:47:51 UTC
Fixed upstream:

commit c2a81eb7e16309634864843c3aacb75be9023f70
Author: Peter Krempa <pkrempa>
Date:   Mon Mar 30 20:16:45 2015 +0200

    qemu: snapshot: Check for block jobs individually
    
    If any disk of a VM was involved in a (copy) block job we refused to do
    a snapshot. As not only copy jobs interlock snapshots and the
    interlocking is applicable to individual disks only we can make the
    check in a more individual fashion and interlock all block job types
    supported by libvirt.

v1.2.14-16-gc2a81eb

Comment 3 Yang Yang 2015-05-25 02:39:24 UTC
Verified on libvirt-1.2.15-2.el7.x86_64

Steps
1. create snapshot during blockpull
# virsh blockpull simple vda --wait --verbose --bandwidth 1
Block Pull: [  1 %]

# virsh snapshot-create-as simple s4 --disk-only --diskspec vda,file=/tmp/s4 --diskspec hdb,snapshot=no
error: unsupported configuration: disk 'vda' has an active block job

2. create snapshot during blockcommit
# virsh blockcommit simple vda --active --wait --verbose --bandwidth 1
Block Commit: [  6 %]

# virsh snapshot-create-as simple s4 --disk-only --diskspec vda,file=/tmp/s4 --diskspec hdb,snapshot=no
error: unsupported configuration: disk 'vda' has an active block job

3. create snapshot during blockcopy
# virsh blockcopy simple vda --wait --verbose /tmp/copy --bandwidth 1
Block Copy: [  1 %]

# virsh snapshot-create-as simple s4 --disk-only --diskspec vda,file=/tmp/s4 --diskspec hdb,snapshot=no
error: unsupported configuration: disk 'vda' has an active block job

Comment 5 errata-xmlrpc 2015-11-19 06:20:42 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2015-2202.html