[
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