Author: szetszwo
Date: Thu Oct 8 18:37:37 2009
New Revision: 823263
URL: http://svn.apache.org/viewvc?rev=823263&view=rev
Log:
HADOOP-6283. Improve the exception messages thrown by
FileUtil$HardLink.getLinkCount(..).
Modified:
hadoop/common/trunk/CHANGES.txt
hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java
Modified: hadoop/common/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/CHANGES.txt?rev=823263&r1=823262&r2=823263&view=diff
==============================================================================
--- hadoop/common/trunk/CHANGES.txt (original)
+++ hadoop/common/trunk/CHANGES.txt Thu Oct 8 18:37:37 2009
@@ -12,6 +12,9 @@
IMPROVEMENTS
+ HADOOP-6283. Improve the exception messages thrown by
+ FileUtil$HardLink.getLinkCount(..). (szetszwo)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java?rev=823263&r1=823262&r2=823263&view=diff
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java (original)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java Thu Oct 8
18:37:37 2009
@@ -628,14 +628,18 @@
* Retrieves the number of links to the specified file.
*/
public static int getLinkCount(File fileName) throws IOException {
+ if (!fileName.exists()) {
+ throw new FileNotFoundException(fileName + " not found.");
+ }
+
int len = getLinkCountCommand.length;
String[] cmd = new String[len + 1];
for (int i = 0; i < len; i++) {
cmd[i] = getLinkCountCommand[i];
}
cmd[len] = fileName.toString();
- String inpMsg = "";
- String errMsg = "";
+ String inpMsg = null;
+ String errMsg = null;
int exitValue = -1;
BufferedReader in = null;
BufferedReader err = null;
@@ -647,14 +651,11 @@
in = new BufferedReader(new InputStreamReader(
process.getInputStream()));
inpMsg = in.readLine();
- if (inpMsg == null) inpMsg = "";
-
err = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
errMsg = err.readLine();
- if (errMsg == null) errMsg = "";
- if (exitValue != 0) {
- throw new IOException(inpMsg + errMsg);
+ if (inpMsg == null || exitValue != 0) {
+ throw createIOException(fileName, inpMsg, errMsg, exitValue, null);
}
if (getOSType() == OSType.OS_TYPE_SOLARIS) {
String[] result = inpMsg.split("\\s+");
@@ -663,13 +664,9 @@
return Integer.parseInt(inpMsg);
}
} catch (NumberFormatException e) {
- throw new IOException(StringUtils.stringifyException(e) +
- inpMsg + errMsg +
- " on file:" + fileName);
+ throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
} catch (InterruptedException e) {
- throw new IOException(StringUtils.stringifyException(e) +
- inpMsg + errMsg +
- " on file:" + fileName);
+ throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
} finally {
process.destroy();
if (in != null) in.close();
@@ -678,6 +675,16 @@
}
}
+ /** Create an IOException for failing to get link count. */
+ static private IOException createIOException(File f, String message,
+ String error, int exitvalue, Exception cause) {
+ final String s = "Failed to get link count on file " + f
+ + ": message=" + message
+ + "; error=" + error
+ + "; exit value=" + exitvalue;
+ return cause == null? new IOException(s): new IOException(s, cause);
+ }
+
/**
* Create a soft link between a src and destination
* only on a local disk. HDFS does not support this