Updated Branches: refs/heads/trunk 34407424b -> 01e79f5df
CASSANDRA-3734: native link via java7 (no jna) Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/01e79f5d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/01e79f5d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/01e79f5d Branch: refs/heads/trunk Commit: 01e79f5df870c2c98c4725cce50caecb3f6cbb27 Parents: 3440742 Author: Jason Brown <jasedbr...@gmail.com> Authored: Mon Mar 4 06:31:00 2013 -0800 Committer: Jason Brown <jasedbr...@gmail.com> Committed: Wed May 29 09:19:57 2013 -0700 ---------------------------------------------------------------------- .../org/apache/cassandra/io/util/FileUtils.java | 7 +- src/java/org/apache/cassandra/utils/CLibrary.java | 65 --------------- 2 files changed, 5 insertions(+), 67 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/01e79f5d/src/java/org/apache/cassandra/io/util/FileUtils.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/FileUtils.java b/src/java/org/apache/cassandra/io/util/FileUtils.java index 69038fa..005d3bb 100644 --- a/src/java/org/apache/cassandra/io/util/FileUtils.java +++ b/src/java/org/apache/cassandra/io/util/FileUtils.java @@ -21,6 +21,8 @@ import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.nio.MappedByteBuffer; +import java.nio.file.Files; +import java.nio.file.Paths; import java.text.DecimalFormat; import java.util.Arrays; @@ -34,7 +36,6 @@ import org.apache.cassandra.io.FSError; import org.apache.cassandra.io.FSReadError; import org.apache.cassandra.io.FSWriteError; import org.apache.cassandra.service.StorageService; -import org.apache.cassandra.utils.CLibrary; public class FileUtils { @@ -73,7 +74,9 @@ public class FileUtils try { - CLibrary.createHardLink(from, to); + // Avoiding getAbsolutePath() in case there is ever a difference between that and the the + // behavior of nio2. + Files.createLink(Paths.get(to.getPath()), Paths.get(from.getPath())); } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/01e79f5d/src/java/org/apache/cassandra/utils/CLibrary.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/CLibrary.java b/src/java/org/apache/cassandra/utils/CLibrary.java index 2f6e088..09c7ac0 100644 --- a/src/java/org/apache/cassandra/utils/CLibrary.java +++ b/src/java/org/apache/cassandra/utils/CLibrary.java @@ -131,71 +131,6 @@ public final class CLibrary } } - /** - * Create a hard link for a given file. - * - * @param sourceFile The name of the source file. - * @param destinationFile The name of the destination file. - * - * @throws java.io.IOException if an error has occurred while creating the link. - */ - public static void createHardLink(File sourceFile, File destinationFile) throws IOException - { - try - { - link(sourceFile.getAbsolutePath(), destinationFile.getAbsolutePath()); - } - catch (UnsatisfiedLinkError e) - { - createHardLinkWithExec(sourceFile, destinationFile); - } - catch (RuntimeException e) - { - logger.error("Unable to create hard link", e); - if (!(e instanceof LastErrorException)) - throw e; - // there are 17 different error codes listed on the man page. punt until/unless we find which - // ones actually turn up in practice. - throw new IOException(String.format("Unable to create hard link from %s to %s (errno %d)", - sourceFile, destinationFile, errno(e))); - } - } - - public static void createHardLinkWithExec(File sourceFile, File destinationFile) throws IOException - { - String osname = System.getProperty("os.name"); - ProcessBuilder pb; - if (osname.startsWith("Windows")) - { - float osversion = Float.parseFloat(System.getProperty("os.version")); - if (osversion >= 6.0f) - { - pb = new ProcessBuilder("cmd", "/c", "mklink", "/H", destinationFile.getAbsolutePath(), sourceFile.getAbsolutePath()); - } - else - { - pb = new ProcessBuilder("fsutil", "hardlink", "create", destinationFile.getAbsolutePath(), sourceFile.getAbsolutePath()); - } - } - else - { - pb = new ProcessBuilder("ln", sourceFile.getAbsolutePath(), destinationFile.getAbsolutePath()); - pb.redirectErrorStream(true); - } - try - { - FBUtilities.exec(pb); - } - catch (IOException ex) - { - String st = osname.startsWith("Windows") - ? "Unable to create hard link. This probably means your data directory path is too long. Exception follows:" - : "Unable to create hard link with exec. Suggest installing JNA to avoid the need to exec entirely. Exception follows: "; - logger.error(st, ex); - throw ex; - } - } - public static void trySkipCache(int fd, long offset, int len) { if (fd < 0)