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]