Hi Alex, Jan,

I was also interested in send/receive semantics & was thinking that if
we adhere to the semantics as in
http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg07482.html
of:

it is impossible to track the "deleted" items (files,dirs, eXtended
attributes). I can develop a command which compare two subvolumes an
extract all of this kind of information. But this command would return
correct information *only if*
  A) a subvolume is a snapshot of the other one
  B.1) the reference snapshot is not touched OR
  B.2) I have the lastgen "when" the snapshot is taken

then transid/generation number could be made to work to determine the
differences between two subvolumes including the deletes that were
involved. I agree that file-clone is tricky as you pointed, but we
dont use it in our environment.

Do you still see issues with it that I am missing?

Also out of curiosity, would you mind sharing how you avoided looking
at transid? Would it be that all meta changes are logged in
tree-modification-log or equivalent?

Thanks.

PS: Alex/Jan, sorry for the multiple mails. including the linux-btrfs
list refused HTML msgs.
--Shyam

On Mon, Jun 4, 2012 at 6:52 PM, Alexander Block <abloc...@googlemail.com> wrote:
>
> On Mon, Jun 4, 2012 at 2:39 PM, Alex Lyakas
> <alex.bolshoy.bt...@gmail.com> wrote:
> > Hi Jan, Alex,
> >
> > I have seen some discussions about btrfs send/receive functionality
> > being developed by you. I have also been interested in this. I spent
> > some time coding a prototype doing something like Alex described in
> > http://www.spinics.net/lists/linux-btrfs/msg16175.html, i.e., walking
> > over FS tree and pulling those items that have transid/generation
> > larger than a particular value. I realized though, that there are many
> > issues with that approach, and also probably there are many issues I
> > am not aware of. Some of the issues I realized:
> Well, you are, like me in the beginning, on a wrong track ;) Using the
> transid only is not the way send/receive will be implemented when it's
> done.
> >
> > # How does one track changes in generic INODE_ITEM properties, like
> > "mode" or "uid/gid"? Whenever such property gets changed, INODE_ITEM
> > gets stamped with a new transid, but do we need to compare it with the
> > previous version on the receive side to realize what has changed?
> > # File size - is it required, again, to compare vs previous size, to
> > realize file truncation? (file grow perhaps can be realized via new
> > EXTENT_DATAs)
> > # What should be done if INODE_ITEM::flags change (e.g., inode gets
> > nodatacow/nodatasum flags set). What should be done at receive side?
> > # How does one track deletion of INODE_ITEMs? Or, deletion and
> > re-creation of a INODE_ITEM with the same inode number? (I saw that
> > inode_cache mount option allows to re-use inode numbers, so I think it
> > can happen.) Does this mean that on receive side, it is required to
> > compare contents of each directory vs previous version?
> > # What should be done with INODE_ITEMs like block/char device, FIFO or a 
> > socket?
> > # XATTR_ITEMs: although they have a transid stamp, again, need to
> > track deletion/re-creation of them. Again by comparing?
> > # INODE_REFs: these seem most tough to me, because they don't have
> > transid stamps. How such scenario can be handled: an INODE_ITEM had
> > two INODE_REFs with names N1 and N2. But now on the send side, both
> > those INODE_REFs were deleted and INODE_REFs N3 and N4 were created.
> > Does that mean we need to always compare all INODE_REFs for each
> > INODE_ITEM, or we perhaps can use DIR_ITEMs/DIR_INDEXs of parent
> > INODE_ITEM to detect changes in INODE_REFs?
> >
> > All in all, it looks like the approach of navigating the FS tree and
> > trying to *understand* specifically which modifications were
> > performed, is quite error-prone. And I am sure there are modifications
> > I am not aware about.
> The problem with the transid only approach is, that there is no way
> to find out "what" has changed in an inode. You only know which inode
> has changed. You could probably determine which extents have
> changed, but this is unreliable as you've already read in my older mail.
> There is also absolutely no way to detect deleted/moved files/dirs.
> When send/receive is released and working, I may try to implement
> a mode that only relies on the transid, but this has low priority for me
> and also needs some changes to other parts of btrfs. If I implement
> that, it would however still be unable to detect what has changed and
> would also miss deleted/moved dirs. You could compare it to rsync
> without the --delete option (which I use frequently to transfer VM
> images).
> >
> > I was wondering, what state your work is in? Is it possible to look at
> > some code or prototype, to understand what approach have you taken, or
> > perhaps an overall description of the approach?
> Currently, most things work as expected. But, the code is not in a state
> to be released. Jan, Arne, David and Stefan are currently reviewing my
> code and I have a lot of TODO's due to the suggestions they all made.
> >
> > Jan, I saw that you provided some new code for backref resolving. Can
> > you give a hint of how is that related to the send/receive
> > functionality?
> It is not only related to the send/receive code. It is currently mainly 
> related
> to the upcoming qgroups patches that Jan is preparing. It may also be
> related to other parts of btrfs (as far as I know, scrub is also using the
> backref resolving code). His patches are however a requirement for
> send/receive to work properly when I release my first patches).
> >
> > Thanks,
> > Alex.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to