Bug 1459113 - [RFE] Add a flag for virDomainBlockCopy on persistent domains
[RFE] Add a flag for virDomainBlockCopy on persistent domains
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: libvirt (Show other bugs)
7.4
Unspecified Unspecified
unspecified Severity high
: rc
: ---
Assigned To: Peter Krempa
Han Han
: FutureFeature
Depends On:
Blocks: 1458548 1459183
  Show dependency treegraph
 
Reported: 2017-06-06 06:37 EDT by Milan Zamazal
Modified: 2017-08-01 21:34 EDT (History)
11 users (show)

See Also:
Fixed In Version: libvirt-3.2.0-9.el7
Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 1459183 (view as bug list)
Environment:
Last Closed: 2017-08-01 21:34:35 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Milan Zamazal 2017-06-06 06:37:42 EDT
virDomainBlockCopy works only for transient domains and refuses to run on persistent domains. This is due to technical reasons related to inability to restore block-copy operations after shutting off a VM and starting it again.

However if the block-copy operation was marked as temporary, without its recovery after VM restart, then the operation could be run also on persistent domains, with the same non-recovery limitation. So please add a flag to virDomainBlockCopy for that purpose.
Comment 6 Peter Krempa 2017-06-06 10:47:02 EDT
Patches proposed upstream:
https://www.redhat.com/archives/libvir-list/2017-June/msg00289.html
Comment 8 Peter Krempa 2017-06-07 07:20:39 EDT
Upstream added this by:

commit 880b1a2e25fc7b76581b1115a5ab538d74193159
Author: Peter Krempa <pkrempa@redhat.com>
Date:   Tue Jun 6 15:32:49 2017 +0200

    virsh: Add support for VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB
    
    Allow using the new flag with virsh.

commit b7e534c651bfa28c65f7b11661b478613c96598c
Author: Peter Krempa <pkrempa@redhat.com>
Date:   Tue Jun 6 15:13:51 2017 +0200

    qemu: Conditionally allow block-copy for persistent domains
    
    Allow starting the block-copy job for a persistent domain if a user
    declares by using a flag that the job will not be recovered if the VM is
    switched off while the job is active.
    
    This allows to use the block-copy job with persistent VMs under the same
    conditions as would apply to transient domains.
Comment 11 Han Han 2017-06-08 04:53:28 EDT
Verify it on libvirt-3.2.0-9.el7.x86_64 qemu-kvm-rhev-2.9.0-8.el7.x86_64

Check blockcopy could be completed on persistent domains with --transient-job.
1. Define and start an VM with vda like following:
# virsh domblklist V
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/V.qcow2

2. blockcopy with --transient-job
#  virsh blockcopy V vda /var/lib/libvirt/images/V-clone.qcow2 --transient-job --wait --verbose --pivot
Block Copy: [100 %]
Successfully pivoted
# virsh destroy V
Domain V destroyed

# virsh dumpxml V
...
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/V-clone.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...
Blockcopy completed.



Interrupt blockcopy on persistent domains with --transient-job, check the job doesn't recover and inactive xml doesn't be changed.
1. Define an VM like following:
# virsh dumpxml V --inactive 
...
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/V.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
....

2. Start the VM with different disk xml:
# virsh create V.xml
# virsh dumpxml V
...
<disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <source protocol='nbd'>
        <host name='10.66.5.92' port='10801'/>
      </source>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...

3. Do blockcopy and interrupt it before finish
# virsh blockcopy V vda /var/lib/libvirt/images/V-clone.qcow2 --transient-job --wait --verbose --async        
Block Copy: [  5 %]^C

Then check blockjob and active/inactive xml
# virsh blockjob V vda        
No current block job for vda
# virsh dumpxml V --inactive
...
 <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/V.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...
# virsh dumpxml V |less
...
 <disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <source protocol='nbd'>
        <host name='10.66.5.92' port='10801'/>
      </source>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
...
After blockcopy interrupted: No blockjob. Active/inactive XMLs are not changed.
Comment 12 errata-xmlrpc 2017-08-01 21:34:35 EDT
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://access.redhat.com/errata/RHEA-2017:1846

Note You need to log in before you can comment on or make changes to this bug.