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

Chris Nauroth commented on HADOOP-9590:
---------------------------------------

Thanks for submitting this jira and documenting all of the impacts.  I'd also 
like to add to the list that {{java.nio.file.Files#move}} will be nice to have 
for things like moving the new fsimage into place with overwrite after a 
successful checkpoint.

[http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#move(java.nio.file.Path,
 java.nio.file.Path, java.nio.file.CopyOption...)]

That can help us avoid platform-specific workarounds, like 
{{FSImage#renameCheckpointInDir}}:

{code}
  private void renameCheckpointInDir(StorageDirectory sd, long txid)
      throws IOException {
    File ckpt = NNStorage.getStorageFile(sd, NameNodeFile.IMAGE_NEW, txid);
    File curFile = NNStorage.getStorageFile(sd, NameNodeFile.IMAGE, txid);
    // renameTo fails on Windows if the destination file 
    // already exists.
    if(LOG.isDebugEnabled()) {
      LOG.debug("renaming  " + ckpt.getAbsolutePath() 
                + " to " + curFile.getAbsolutePath());
    }
    if (!ckpt.renameTo(curFile)) {
      if (!curFile.delete() || !ckpt.renameTo(curFile)) {
        throw new IOException("renaming  " + ckpt.getAbsolutePath() + " to "  + 
            curFile.getAbsolutePath() + " FAILED");
      }
    }    
  }
{code}

                
> Move to JDK7 improved APIs for file operations when available
> -------------------------------------------------------------
>
>                 Key: HADOOP-9590
>                 URL: https://issues.apache.org/jira/browse/HADOOP-9590
>             Project: Hadoop Common
>          Issue Type: Improvement
>            Reporter: Ivan Mitic
>
> JDK6 does not have a complete support for local file system file operations. 
> Specifically:
> - There is no symlink/hardlink APIs what forced Hadoop to defer to shell 
> based tooling
> - No error information returned when File#mkdir/mkdirs or File#renameTo 
> fails, making it unnecessary hard to troubleshoot some issues
> - File#canRead/canWrite/canExecute do not perform any access checks on 
> Windows making APIs inconsistent with the Unix behavior
> - File#setReadable/setWritable/setExecutable do not change access rights on 
> Windows making APIs inconsistent with the Unix behavior
> - File#length does not work as expected on symlinks on Windows
> - File#renameTo does not work as expected on symlinks on Windows
> All above resulted in Hadoop community having to fill in the gaps by 
> providing equivalent native implementations or applying workarounds. 
> JDK7 addressed (as far as I know) all (or most) of the above problems, either 
> thru the newly introduced 
> [Files|http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html] 
> class or thru bug fixes.
> This is a tracking Jira to revisit above mediations once JDK7 becomes the 
> supported platform by the Hadoop community. This work would allow significant 
> portion of the native platform-dependent code to be replaced with Java 
> equivalents what is goodness w.r.t. Hadoop cross-platform support. 

--
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

Reply via email to