Looks like it is a bug: Features are parsed and set here: https://github.com/ceph/ceph/blob/master/src/rbd.cc#L3235 format_specified is forced to true here: https://github.com/ceph/ceph/blob/master/src/rbd.cc#L3268 Error is produced here: https://github.com/ceph/ceph/blob/master/src/rbd.cc#L3449 On Fri, Oct 23, 2015 at 1:53 PM, Max Yehorov <myehorov@xxxxxxxxxx> wrote: > I am trying to pass deep-flatten during clone creation and got this: > > rbd clone --image-feature deep-flatten d0@s0 d1 > > rbd: image format can only be set when creating or importing an image > > On Fri, Oct 23, 2015 at 6:27 AM, Jason Dillaman <dillaman@xxxxxxxxxx> wrote: >>> After reading and understanding your mail, i moved on to do some experiments >>> regarding deep flatten. some questions showed up: >>> here is my experiement: >>> ceph version I used: ceph -v output: >>> ceph version 9.1.0-299-g89b2b9b >> >>> 1. create a separate pool for test: >>> rados mkpool pool100 >>> 2. create parent image with deep-flatten feature: >>> rbd create --image-feature deep-flatten --image-feature layering -p pool100 >>> user1_image1 --size 1024 --image-format 2 >>> 3. create snap: >>> rbd snap create pool100/user1_image1@user1_image1_snap >>> 4. protect snap: >>> rbd snap protect pool100/user1_image1@user1_image1_snap >>> 5. clone child image based on this snap: >>> rbd clone pool100/user1_image1@user1_image1_snap pool100/user1_image2 >>> 6. create snap on clone image: >>> rbd snap create pool100/user1_image2@user1_image2_snap >>> 7. flatten the clone image: >>> rbd flatten pool100/user1_image2 >> >>> test output: >>> rbd info pool100/user1_image2 >>> rbd image 'user1_image2': >>> size 1024 MB in 256 objects >>> order 22 (4096 kB objects) >>> block_name_prefix: rbd_data.1016317b2d6 >>> format: 2 >>> features: layering <==== why after flatten, cloned image is without >>> deep-flatten feature? >>> flags: >> >> >> 'rbd clone' doesn't copy features from the parent image -- you needed to specify "--image-feature deep-flatten" when creating the clone. >> >> >>> rbd info pool100/user1_image2@user1_image2_snap >> >>> rbd image 'user1_image2': >>> size 1024 MB in 256 objects >>> order 22 (4096 kB objects) >>> block_name_prefix: rbd_data.1016317b2d6 >>> format: 2 >>> features: layering >>> flags: >>> protected: True >>> parent: pool100/user1_image1@user1_image1_snap <==== why after flatten, child >>> snapshot still has parent snap info? >>> overlap: 1024 MB >> >> >> Because deep-flatten wasn't enabled on the clone. >> >> >>> Another question is since deep-flatten operations are applied to cloned >>> image, why we need to create parent image with deep-flatten image features?? >> >> >> The deep-flatten feature is not required on the parent image (since non-cloned images cannot be flattened). >> >> >>> Cory >> >> >> -- >> >> Jason Dillaman >> _______________________________________________ >> ceph-users mailing list >> ceph-users@xxxxxxxxxxxxxx >> http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com _______________________________________________ ceph-users mailing list ceph-users@xxxxxxxxxxxxxx http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com