|
@@ -628,14 +628,18 @@ public class FileUtil {
|
|
* Retrieves the number of links to the specified file.
|
|
* Retrieves the number of links to the specified file.
|
|
*/
|
|
*/
|
|
public static int getLinkCount(File fileName) throws IOException {
|
|
public static int getLinkCount(File fileName) throws IOException {
|
|
|
|
+ if (!fileName.exists()) {
|
|
|
|
+ throw new FileNotFoundException(fileName + " not found.");
|
|
|
|
+ }
|
|
|
|
+
|
|
int len = getLinkCountCommand.length;
|
|
int len = getLinkCountCommand.length;
|
|
String[] cmd = new String[len + 1];
|
|
String[] cmd = new String[len + 1];
|
|
for (int i = 0; i < len; i++) {
|
|
for (int i = 0; i < len; i++) {
|
|
cmd[i] = getLinkCountCommand[i];
|
|
cmd[i] = getLinkCountCommand[i];
|
|
}
|
|
}
|
|
cmd[len] = fileName.toString();
|
|
cmd[len] = fileName.toString();
|
|
- String inpMsg = "";
|
|
|
|
- String errMsg = "";
|
|
|
|
|
|
+ String inpMsg = null;
|
|
|
|
+ String errMsg = null;
|
|
int exitValue = -1;
|
|
int exitValue = -1;
|
|
BufferedReader in = null;
|
|
BufferedReader in = null;
|
|
BufferedReader err = null;
|
|
BufferedReader err = null;
|
|
@@ -647,14 +651,11 @@ public class FileUtil {
|
|
in = new BufferedReader(new InputStreamReader(
|
|
in = new BufferedReader(new InputStreamReader(
|
|
process.getInputStream()));
|
|
process.getInputStream()));
|
|
inpMsg = in.readLine();
|
|
inpMsg = in.readLine();
|
|
- if (inpMsg == null) inpMsg = "";
|
|
|
|
-
|
|
|
|
err = new BufferedReader(new InputStreamReader(
|
|
err = new BufferedReader(new InputStreamReader(
|
|
process.getErrorStream()));
|
|
process.getErrorStream()));
|
|
errMsg = err.readLine();
|
|
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) {
|
|
if (getOSType() == OSType.OS_TYPE_SOLARIS) {
|
|
String[] result = inpMsg.split("\\s+");
|
|
String[] result = inpMsg.split("\\s+");
|
|
@@ -663,13 +664,9 @@ public class FileUtil {
|
|
return Integer.parseInt(inpMsg);
|
|
return Integer.parseInt(inpMsg);
|
|
}
|
|
}
|
|
} catch (NumberFormatException e) {
|
|
} catch (NumberFormatException e) {
|
|
- throw new IOException(StringUtils.stringifyException(e) +
|
|
|
|
- inpMsg + errMsg +
|
|
|
|
- " on file:" + fileName);
|
|
|
|
|
|
+ throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
|
|
} catch (InterruptedException e) {
|
|
} catch (InterruptedException e) {
|
|
- throw new IOException(StringUtils.stringifyException(e) +
|
|
|
|
- inpMsg + errMsg +
|
|
|
|
- " on file:" + fileName);
|
|
|
|
|
|
+ throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
|
|
} finally {
|
|
} finally {
|
|
process.destroy();
|
|
process.destroy();
|
|
if (in != null) in.close();
|
|
if (in != null) in.close();
|
|
@@ -678,6 +675,16 @@ public class FileUtil {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /** 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
|
|
* Create a soft link between a src and destination
|
|
* only on a local disk. HDFS does not support this
|
|
* only on a local disk. HDFS does not support this
|