Hi,

We have an HDFS setup (v2.0.0) managed by Cloudera. I'm having trouble
getting the FileStatus of a symlink or deleting it.

According to the documentation, FileContext#getFileLinkStatus() or
FileContext#delete() should operate on the symlink itself if the provided
path is a symlink.

However, what happens instead is, FileContext#getFileLinkStatus() or
delete() resolve the symlink and act on the target path. So, for example,
if "/tmp/symlink.file" points to "/tmp/target.file", doing this:

Path path = new Path("hdfs://nameservice1:8020/tmp/symlink.file");
fileContext.getFileLinkStatus(path).getPath();

returns a path of:

Path("hdfs://nameservice1:8020/tmp/target.file")

Similarly, fileContext.delete(path, true) deletes the target file
("/tmp/target.file") instead of the symlink itself. So, this behavior does
not match with the documentation.

What's interesting is, locally in pseudo-mode, the above works as expected.

Any ideas or pointers as to why FileContext#delete and
FileContext#getFileLinkStatus() are not operating correctly on the symlinks?

Thanks,
Dia

Reply via email to