[
https://issues.apache.org/jira/browse/HDFS-4675?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jing Zhao updated HDFS-4675:
----------------------------
Attachment: HDFS-4675.002.patch
Update the patch:
1. Include the fix from HDFS-4673 which fixes the scenario the rename happens
in the same directory (the src and dst share the same parent, thus need to
refresh dstIIP if the parent directory gets replaced when removing the src
file/dir).
2. Fix a bug in FSImage to avoid writing the subtree under a reference node
multiple times.
Still need to fix the quota computation.
> Fix rename across snapshottable directories
> -------------------------------------------
>
> Key: HDFS-4675
> URL: https://issues.apache.org/jira/browse/HDFS-4675
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Components: datanode, namenode
> Reporter: Jing Zhao
> Assignee: Jing Zhao
> Attachments: HDFS-4675.000.patch, HDFS-4675.001.patch,
> HDFS-4675.002.patch
>
>
> For rename across snapshottable directories, suppose there are two
> snapshottable directories: /user1 and /user2 and we have the following steps:
> 1. Take snapshot s1 on /user1 at time t1.
> 2. Take snapshot s2 on /user2 at time t2.
> 3. Take snapshot s3 on /user1 at time t3.
> 4. Rename /user2/foo/ (an INodeDirectoryWithSnapshot instance) to /user1/foo/.
> After the rename we update the subtree of /user1/foo/ again (e.g., delete
> /user1/foo/bar), we need to decide where to record the diff. The problem is
> that the current implementation will identify s3 as the latest snapshot, thus
> recording the snapshot copy of bar to s3. However, the parent of bar,
> /user1/foo, is still in the created list of s3. Thus here we should record
> the snapshot copy of bar to s2.
> If we further take snapshot s4 on /user1, and make some further change under
> /user1/foo, these changes will be recorded in s4. Then if we delete the
> snapshot s4, similar with above, we should merge the change to s2, not s3.
> Thus in general, we may need to record the latest snapshots of both the
> src/dst subtree in the renamed inode and update the current
> INodeDirectory#getExistingINodeInPath accordingly.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira