[ https://issues.apache.org/jira/browse/CASSANDRA-3101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166657#comment-13166657 ]
paul cannon commented on CASSANDRA-3101: ---------------------------------------- The following imports appear to be unused, and should probably be removed: {code} import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.InputStream; import sun.misc.IOUtils; {code} Also, why add the logger.error() call in createHardLink, but not in createHardLinkWithExec? seems like if we want to know about the error in the C* log in the first case, we'd also want to know about it in the second case. As a less important point, I wonder if it isn't worth modifying the existing hard-linking code a bit: "cmd /c mklink /H" seems a much more clunky way to make a hard link, and I think the logic is backwards: "fsutil hardlink create" is supported in all Windows versions since Windows Server 2000, except XP. Maybe the osversion comparison was meant to use cmd /c mklink /H in the "Windows XP or less" case, not "Windows Vista or later". Tested on Windows 7, though, after mounting a USB drive at the "snapshots" dir and trying to snapshot that keyspace. Error showed up correctly with output to nodetool, although no errors showed in the c* log. > Should check for errors when calling /bin/ln > -------------------------------------------- > > Key: CASSANDRA-3101 > URL: https://issues.apache.org/jira/browse/CASSANDRA-3101 > Project: Cassandra > Issue Type: Bug > Components: Core > Affects Versions: 0.4 > Reporter: paul cannon > Assignee: Vijay > Priority: Minor > Labels: lhf > Fix For: 1.0.6 > > Attachments: 0001-3101-throw-IOE-while-calling-bin-ln.patch > > > It looks like cassandra.utils.CLibrary.createHardLinkWithExec() does not > check for any errors in the execution of the hard-link-making utility. This > could be bad if, for example, the user has put the snapshot directory on a > different filesystem from the data directory. The hard linking would fail and > the sstable snapshots would not exist, but no error would be reported. > It does look like errors with the more direct JNA link() call are handled > correctly- an exception is thrown. The WithExec version should probably do > the same thing. > Definitely it would be enough to check the process exit value from /bin/ln > for nonzero in the *nix case, but I don't know whether 'fsutil hardlink > create' or 'cmd /c mklink /H' return nonzero on failure. > For bonus points, use any output from the Process's error stream in the text > of the exception, to aid in debugging problems. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira