Yang Jie created HADOOP-20063:
---------------------------------

             Summary: FileContext.Util#copy does not reject copying a directory 
into itself or its subdirectory when both paths have the same authority
                 Key: HADOOP-20063
                 URL: https://issues.apache.org/jira/browse/HADOOP-20063
             Project: Hadoop Common
          Issue Type: Bug
          Components: fs
            Reporter: Yang Jie


FileContext.Util#copy calls checkDependencies() to reject copying a directory 
into itself or into one of its subdirectories, but only when isSameFS() says 
the two paths are on the same file system. isSameFS() returns {{scheme equal && 
!(both authorities non-null && equal)}}, which is false exactly when the 
authorities are equal. Since HADOOP-6906, which made the old 
{{getAuthority().equals()}} check null-safe and inverted it in the same change, 
the check only works for paths without an authority, such as local paths.

On HDFS, {{fc.util().copy(new Path("/a"), new Path("/a/b"))}} creates /a/b, 
lists /a (which now includes b) and recurses into /a/b/b, /a/b/b/b and so on, 
until the NameNode rejects a path that is too deep. Files listed before b are 
copied again at every level. {{copy(dir, dir, true, true)}} overwrites each 
file with itself and then deletes the source directory.

The fix compares the authorities with {{Objects.equals}}. Two null authorities 
still count as the same file system, and copies between clusters are still 
allowed.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to