Re: [libvirt-users] Libvirt pool cannot see or create rbd clones

2019-04-29 Thread Michal Privoznik
On 4/26/19 11:53 AM, Weller, Lennart wrote:
> Hello everyone,
> 
> To increase my odds of finding an answer I also wanted to ask here.
> This is my post from serverfault[1] in verbatim:
> 
> While trying to get a cloned disk running from my OS snapshot I run
> into the problem that Libvirt cannot see existing images cloned from a
> snapshot. Created via:
> 
> # rbd -p vmdisks clone vmdisks/coreos_2023@base vmdisks/coreos00.disk
> 
> The base image has the one snapshot 'base' and is protected. The cloned
> disk is created just fine:
> 
> # rbd -p vmdisks info coreos00.disk
> rbd image 'coreos00.disk':
>  size 8.49GiB in 2174 objects
>  order 22 (4MiB objects)
>  block_name_prefix: rbd_data.48a99c6b8b4567
>  format: 2
>  features: layering
>  flags:
>  create_timestamp: Thu Apr 25 14:46:52 2019
>  parent: vmdisks/coreos_2023@base
>  overlap: 8.49GiB
> 
> I temporarily have Libvirt configured with a rbd pool that uses the
> ceph admin user. But I cannot see the cloned disk. Just the parent:
> 
> virsh # vol-list --pool rbd_image_root
>   Name Path
> -
> -
>   coreos_2023 vmdisks/coreos_2023
> 
> If I try to create the cloned image from within virsh I run into the
> following issue:
> 
> virsh # vol-clone --pool rbd_image_root coreos_2023 coreos00.disk
> error: Failed to clone vol from coreos_2023
> error: failed to iterate RBD snapshot coreos_2023@base: Operation not
> permitted
> 
> Note that this pool uses the Ceph admin user which makes the Operation
> not permitted a tad odd.
> 
> Am I missing a configuration option here that would allow for the pool
> to use clones? I can't find any information on this in the
> documentation so far. And the source code of libvirt looks like it
> should support both features.
> 
> Versions:
> 
> Libvirt Machine: Ubuntu 18.04
> Compiled against library: libvirt 4.0.0
> Using library: libvirt 4.0.0
> Using API: QEMU 4.0.0
> Running hypervisor: QEMU 2.11.1
> 
> Ceph Machine: openSUSE Leap 42.3
> Ceph 12.2.5
> 

I wonder if this is a libvirt bug. Looks like it. The error comes from 
rbd_diff_iterate() (or rbd_diff_iterate2 if compiled against newer 
librbd). Anyway, a callback is passed to the itreate() function and from 
librbd code it looks like if the callback returns a negative value then 
an error is signalized from the iterate() function. Well, we're passing 
a callback that does nothing but return an error. This might be a 
possible fix then:

diff --git i/src/storage/storage_backend_rbd.c 
w/src/storage/storage_backend_rbd.c
index f8c968e682..08f8123678 100644
--- i/src/storage/storage_backend_rbd.c
+++ w/src/storage/storage_backend_rbd.c
@@ -1038,7 +1038,7 @@ virStorageBackendRBDIterateCb(uint64_t offset 
ATTRIBUTE_UNUSED,
  * searching any further.
  */
 *(int*) arg = 1;
-return -1;
+return 0;
 }
 
 static int



Can you please give it a try?

Thanks,
Michal

___
libvirt-users mailing list
libvirt-users@redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-users


Re: [libvirt-users] Libvirt pool cannot see or create rbd clones

2019-04-26 Thread Weller, Lennart
Some additional information that I have found since yesterday:

When I create a volume like this:


   coreos00.disk
   9116319744
   
   
   
   644
   
   
   
   vmdisks/coreos_2023
   
   


Which does not seem to work with the backing store either as it creates
an empty volume without the underlying parent. But when I now delete
the volume via rbd and create a new clone it shows up in libvirt and
can be used by the machine.

# rbd -p vmdisks rm coreos00.disk
# rbd clone vmdisks/coreos_2023@basis vmdisks/coreos00.disk

Sadly this is not a very efficient way to create the clones I would
say.

Anyone got any, like literally any, ideas what might be wrong in this
setup?

___
libvirt-users mailing list
libvirt-users@redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-users


[libvirt-users] Libvirt pool cannot see or create rbd clones

2019-04-26 Thread Weller, Lennart
Hello everyone,

To increase my odds of finding an answer I also wanted to ask here.
This is my post from serverfault[1] in verbatim:

While trying to get a cloned disk running from my OS snapshot I run
into the problem that Libvirt cannot see existing images cloned from a
snapshot. Created via:

# rbd -p vmdisks clone vmdisks/coreos_2023@base vmdisks/coreos00.disk

The base image has the one snapshot 'base' and is protected. The cloned
disk is created just fine:

# rbd -p vmdisks info coreos00.disk
rbd image 'coreos00.disk':
size 8.49GiB in 2174 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.48a99c6b8b4567
format: 2
features: layering
flags: 
create_timestamp: Thu Apr 25 14:46:52 2019
parent: vmdisks/coreos_2023@base
overlap: 8.49GiB

I temporarily have Libvirt configured with a rbd pool that uses the
ceph admin user. But I cannot see the cloned disk. Just the parent:

virsh # vol-list --pool rbd_image_root
 Name Path
-
-
 coreos_2023 vmdisks/coreos_2023 

If I try to create the cloned image from within virsh I run into the
following issue:

virsh # vol-clone --pool rbd_image_root coreos_2023 coreos00.disk
error: Failed to clone vol from coreos_2023
error: failed to iterate RBD snapshot coreos_2023@base: Operation not
permitted

Note that this pool uses the Ceph admin user which makes the Operation
not permitted a tad odd.

Am I missing a configuration option here that would allow for the pool
to use clones? I can't find any information on this in the
documentation so far. And the source code of libvirt looks like it
should support both features.

Versions:

Libvirt Machine: Ubuntu 18.04
Compiled against library: libvirt 4.0.0
Using library: libvirt 4.0.0
Using API: QEMU 4.0.0
Running hypervisor: QEMU 2.11.1

Ceph Machine: openSUSE Leap 42.3
Ceph 12.2.5


[1] 
https://serverfault.com/questions/964586/libvirt-pool-cannot-see-or-create-rbd-clones

___
libvirt-users mailing list
libvirt-users@redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-users