[ 
https://issues.apache.org/jira/browse/HADOOP-7360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13049546#comment-13049546
 ] 

Daryn Sharp commented on HADOOP-7360:
-------------------------------------

I can address the test points.  One question: If I need to construct a path of 
{{testdir+"/d1/f1"}}, is this the preferred way: {{new Path(new Path(testDir, 
"d1"), "f1")}}?

bq.  Why did you remove testWithFsAndPath()

It's private now.

bq. [...] suggest also eliminating PathData(FileSystem, String, FileStatus) and 
PathData(FileSystem, FileStatus).  Basically, the status should be looked up in 
the FS, not set as an argument.

{{PathData(FileSystem, FileStatus)}} was removed in the patch.  Did you mean 
something else?

It would be a very bad idea to remove the method {{PathData(FileSystem, String, 
FileStatus)}}.  It's private, and only used in cases like listStatus/globStatus 
where the result is an array of {{FileStatus}}.  It's used to avoid an 
unnecessary re-stat of the path -- overall, this class has drastically reduced 
the unnecessary re-stats occurring in FsShell.

bq. PathData(FileSystem, String) [...] becomes the primary ctor.
{{PathData(FileSystem,String,FileStatus)}} is the primary ctor because a) 
removing it will cause 2X the stats, b) it extracts path from a non-null 
status.  The path is a final, so I can't invoke {{super(FileSystem, String)}} 
and then reset the path.

bq. setStat(boolean ignoreFNF) is counter-intuitive. [...] Please call it 
lookupStatus(boolean ignoreFNF) [...]
100% agreed!  I'm actually surprised I did that...  Either I was lacking 
coffee, or slipped up an eclipse refactor...

bq. getChecksumFile(): Why is this method needed (returns PathData), vs just 
using Fs.getChecksumFile() (returns Path)?
There's another change backed up behind this one that drastically simplifies 
the copy commands to operate purely on PathData (which incidentally will 
further reduce stats, but that's not the primary purpose).  Since 
{{PathData(FileSystem,String)}} is now private, I had to push it into PathData, 
else I have to re-expose the private ctor which will complicate the switch to 
{{FileContext}}.  Since commands aren't storing the fs in temporaries, it may 
be possible to just switch fs to a FileContext and generally have everything 
work.  Having a command monkeying around getting a raw fs for the crc file and 
then instantiating thru what what should be a private ctor is a minor setback.

bq. Why is this method needed instead of just using Path.getParent()? There are 
currently no callers of this new method.
There are backed up changes that depend on it (I didn't expect this jira to 
languish...).  Remember that everything is operating on PathData, so I can't 
use Path.getParent() because I'd have to re-expose a private ctor.


The other questions doubting the need for relativity are addressed on the jira 
you filed.  My design goal has been to mimic a unix shell.

bq. This just begs for such mis-use
I think computer users are well enough acquainted with filesystems to know that 
if you change the pwd, then relative paths are no longer valid.

> FsShell does not preserve relative paths with globs
> ---------------------------------------------------
>
>                 Key: HADOOP-7360
>                 URL: https://issues.apache.org/jira/browse/HADOOP-7360
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: fs
>    Affects Versions: 0.23.0
>            Reporter: Daryn Sharp
>            Assignee: Daryn Sharp
>         Attachments: HADOOP-7360.patch
>
>
> FsShell currently preserves relative paths that do not contain globs.  
> Unfortunately the method {{fs.globStatus()}} is fully qualifying all returned 
> paths.  This is causing inconsistent display of paths.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to