Re: export-diff behavior if an initial snapshot is NOT specified

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



OK, in that case, none of my previous explanation is relevant. I'll
spin up a hammer cluster and try to reproduce.

On Wed, Nov 23, 2016 at 9:13 PM, Zhongyan Gu <zhongyan.gu@xxxxxxxxx> wrote:
> BTW, I used Hammer 0.94.5 to do the test.
>
> Zhongyan
>
> On Thu, Nov 24, 2016 at 10:07 AM, Zhongyan Gu <zhongyan.gu@xxxxxxxxx> wrote:
>>
>> Thank you Jason. My test shows in the following case, image B will be
>> exactly same:
>> 1. clone image A from parent:
>> #rbd clone 1124-parent@snap1 A
>>
>> 2. create snap for A
>> #rbd snap create A@snap1
>>
>> 3. create empty image B
>> #rbd create B -s 1
>>
>> 4. export-diff A then impor-diff B:
>> #rbd export-diff A@snap1 -|./rbd import-diff - B
>>
>> 5. check A@snap1 equals B@snap1
>> #rbd export A@snap1 -|md5sum
>> Exporting image: 100% complete...done.
>> 880709d7352b6c9926beb1d829673366  -
>> #rbd export B@snap1 -|md5sum
>> Exporting image: 100% complete...done.
>> 880709d7352b6c9926beb1d829673366  -
>> output shows A@snap1 equals B@snap1
>>
>> However, in the following case, image B will not be exactly same:
>> 1. clone image A from parent:
>> #rbd clone 1124-parent@snap1 A
>>
>> 2. create snap for A
>> #rbd snap create A@snap1
>>
>> 3. use fio make some change to A
>>
>> 4. create empty image B
>> #rbd create B -s 1
>>
>> 4. export-diff A then impor-diff B:
>> #rbd export-diff A@snap1 -|./rbd import-diff - B
>>
>> 5. check A@snap1 equals B@snap1
>> #rbd export A@snap1 -|md5sum
>> Exporting image: 100% complete...done.
>> 880709d7352b6c9926beb1d829673366  -
>> #rbd export B@snap1 -|md5sum
>> Exporting image: 100% complete...done.
>> bbf7cf69a84f3978c66f5eb082fb91ec  -
>> output shows A@snap1 DOES NOT equal B@snap1
>>
>> The second case can always be reproduced. What is wrong with the second
>> case?
>>
>> Thanks,
>> Zhongyan
>>
>>
>> On Wed, Nov 23, 2016 at 10:11 PM, Jason Dillaman <jdillama@xxxxxxxxxx>
>> wrote:
>>>
>>> What you are seeing sounds like a side-effect of deep-flatten support.
>>> If you write to an unallocated extent within a cloned image, the
>>> associated object extent must be read from the parent image, modified,
>>> and written to the clone image.
>>>
>>> Since the Infernalis release, this process has been tweaked if the
>>> cloned image has a snapshot. In that case, the associated object
>>> extent is still read from the parent, but instead of being modified
>>> and written to the HEAD revision, it is left unmodified and is written
>>> to "pre" snapshot history followed by writing the original
>>> modification (w/o the parent's object extent data) to the HEAD
>>> revision.
>>>
>>> This change to the IO path was made to support flattening clones and
>>> dissociating them from their parents even if the clone had snapshots.
>>>
>>> Therefore, what you are seeing with export-diff is actually the
>>> backing object extent of data from the parent image written to the
>>> clone's "pre" snapshot history. If you had two snapshots and your
>>> export-diff'ed from the first to second snapshot, you wouldn't see
>>> this extra data.
>>>
>>> To your question about how to prepare image B to make sure it will be
>>> exactly the same, the answer is that you don't need to do anything. In
>>> your example above, I am assuming you are manually creating an empty
>>> Image B and using "import-diff" to populate it. The difference in the
>>> export-diff is most likely related to fact that the clone lost its
>>> sparseness on any backing object that was written (e.g. instead of a
>>> one or more 512 byte diffs within a backing object extent, you will
>>> see a single, full-object extent with zeroes where the parent image
>>> had no data).
>>>
>>>
>>> On Wed, Nov 23, 2016 at 5:06 AM, Zhongyan Gu <zhongyan.gu@xxxxxxxxx>
>>> wrote:
>>> > Let me make the issue more clear.
>>> > Suppose I cloned image A from a parent image and create snap1 for image
>>> > A
>>> > and  then make some change of image A.
>>> > If I did the rbd export-diff @snap1. how should I prepare the existing
>>> > image
>>> > B to make sure it  will be exactly same with image A@snap1 after
>>> > import-diff
>>> > against this image B.
>>> >
>>> > Thanks,
>>> > Zhongyan
>>> >
>>> >
>>> > On Wed, Nov 23, 2016 at 11:34 AM, Zhongyan Gu <zhongyan.gu@xxxxxxxxx>
>>> > wrote:
>>> >>
>>> >> Thanks Jason, very clear explanation.
>>> >> However, I found some strange behavior when export-diff on a cloned
>>> >> image,
>>> >> not sure it is a bug on calc_snap_set_diff().
>>> >> The test is,
>>> >> Image A is cloned from a parent image. then create snap1 for image A.
>>> >> The content of export-diff A@snap1 will be changed when update image
>>> >> A.
>>> >> Only after image A has no overlap with parent, the content of
>>> >> export-diff
>>> >> A@snap1 is stabled, which is almost zero.
>>> >> I don't think it is a designed behavior. export-diff A@snap1 should
>>> >> always
>>> >> get a stable output no matter image A is cloned or not.
>>> >>
>>> >> Please correct me if anything wrong.
>>> >>
>>> >> Thanks,
>>> >> Zhongyan
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> On Tue, Nov 22, 2016 at 10:31 PM, Jason Dillaman <jdillama@xxxxxxxxxx>
>>> >> wrote:
>>> >>>
>>> >>> On Tue, Nov 22, 2016 at 5:31 AM, Zhongyan Gu <zhongyan.gu@xxxxxxxxx>
>>> >>> wrote:
>>> >>> > So if initial snapshot is NOT specified, then:
>>> >>> > rbd export-diff image@snap1 will diff all data to snap1. this cmd
>>> >>> > equals to
>>> >>> > :
>>> >>> > rbd export image@snap1. Is my understand right or not??
>>> >>>
>>> >>>
>>> >>> While they will both export all data associated w/ image@snap1, the
>>> >>> "export" command will generate a raw, non-sparse dump of the full
>>> >>> image whereas "export-diff" will export only sections of the image
>>> >>> that contain data. The file generated from "export" can be used with
>>> >>> the "import" command to create a new image, whereas the file
>>> >>> generated
>>> >>> from "export-diff" can only be used with "import-diff" against an
>>> >>> existing image.
>>> >>>
>>> >>> --
>>> >>> Jason
>>> >>
>>> >>
>>> >
>>>
>>>
>>>
>>> --
>>> Jason
>>
>>
>



-- 
Jason
_______________________________________________
ceph-users mailing list
ceph-users@xxxxxxxxxxxxxx
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com



[Index of Archives]     [Information on CEPH]     [Linux Filesystem Development]     [Ceph Development]     [Ceph Large]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [xfs]


  Powered by Linux