|
@@ -22,10 +22,13 @@ import java.io.BufferedReader;
|
|
|
import java.io.File;
|
|
|
import java.io.FileNotFoundException;
|
|
|
import java.io.IOException;
|
|
|
-import java.io.InputStreamReader;
|
|
|
+import java.io.StringReader;
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
+import org.apache.hadoop.io.IOUtils;
|
|
|
import org.apache.hadoop.util.Shell;
|
|
|
+import org.apache.hadoop.util.Shell.ExitCodeException;
|
|
|
+import org.apache.hadoop.util.Shell.ShellCommandExecutor;
|
|
|
|
|
|
/**
|
|
|
* Class for creating hardlinks.
|
|
@@ -379,21 +382,11 @@ public class HardLink {
|
|
|
}
|
|
|
// construct and execute shell command
|
|
|
String[] hardLinkCommand = getHardLinkCommand.linkOne(file, linkName);
|
|
|
- Process process = Runtime.getRuntime().exec(hardLinkCommand);
|
|
|
+ ShellCommandExecutor shexec = new ShellCommandExecutor(hardLinkCommand);
|
|
|
try {
|
|
|
- if (process.waitFor() != 0) {
|
|
|
- String errMsg = new BufferedReader(new InputStreamReader(
|
|
|
- process.getInputStream())).readLine();
|
|
|
- if (errMsg == null) errMsg = "";
|
|
|
- String inpMsg = new BufferedReader(new InputStreamReader(
|
|
|
- process.getErrorStream())).readLine();
|
|
|
- if (inpMsg == null) inpMsg = "";
|
|
|
- throw new IOException(errMsg + inpMsg);
|
|
|
- }
|
|
|
- } catch (InterruptedException e) {
|
|
|
- throw new IOException(e);
|
|
|
- } finally {
|
|
|
- process.destroy();
|
|
|
+ shexec.execute();
|
|
|
+ } catch (ExitCodeException e) {
|
|
|
+ throw new IOException(shexec.getOutput() + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -466,22 +459,12 @@ public class HardLink {
|
|
|
// construct and execute shell command
|
|
|
String[] hardLinkCommand = getHardLinkCommand.linkMult(fileBaseNames,
|
|
|
linkDir);
|
|
|
- Process process = Runtime.getRuntime().exec(hardLinkCommand, null,
|
|
|
- parentDir);
|
|
|
+ ShellCommandExecutor shexec = new ShellCommandExecutor(hardLinkCommand,
|
|
|
+ parentDir, null, 0L);
|
|
|
try {
|
|
|
- if (process.waitFor() != 0) {
|
|
|
- String errMsg = new BufferedReader(new InputStreamReader(
|
|
|
- process.getInputStream())).readLine();
|
|
|
- if (errMsg == null) errMsg = "";
|
|
|
- String inpMsg = new BufferedReader(new InputStreamReader(
|
|
|
- process.getErrorStream())).readLine();
|
|
|
- if (inpMsg == null) inpMsg = "";
|
|
|
- throw new IOException(errMsg + inpMsg);
|
|
|
- }
|
|
|
- } catch (InterruptedException e) {
|
|
|
- throw new IOException(e);
|
|
|
- } finally {
|
|
|
- process.destroy();
|
|
|
+ shexec.execute();
|
|
|
+ } catch (ExitCodeException e) {
|
|
|
+ throw new IOException(shexec.getOutput() + e.getMessage());
|
|
|
}
|
|
|
return callCount;
|
|
|
}
|
|
@@ -504,17 +487,13 @@ public class HardLink {
|
|
|
String errMsg = null;
|
|
|
int exitValue = -1;
|
|
|
BufferedReader in = null;
|
|
|
- BufferedReader err = null;
|
|
|
|
|
|
- Process process = Runtime.getRuntime().exec(cmd);
|
|
|
+ ShellCommandExecutor shexec = new ShellCommandExecutor(cmd);
|
|
|
try {
|
|
|
- exitValue = process.waitFor();
|
|
|
- in = new BufferedReader(new InputStreamReader(
|
|
|
- process.getInputStream()));
|
|
|
+ shexec.execute();
|
|
|
+ in = new BufferedReader(new StringReader(shexec.getOutput()));
|
|
|
inpMsg = in.readLine();
|
|
|
- err = new BufferedReader(new InputStreamReader(
|
|
|
- process.getErrorStream()));
|
|
|
- errMsg = err.readLine();
|
|
|
+ exitValue = shexec.getExitCode();
|
|
|
if (inpMsg == null || exitValue != 0) {
|
|
|
throw createIOException(fileName, inpMsg, errMsg, exitValue, null);
|
|
|
}
|
|
@@ -524,14 +503,15 @@ public class HardLink {
|
|
|
} else {
|
|
|
return Integer.parseInt(inpMsg);
|
|
|
}
|
|
|
- } catch (NumberFormatException e) {
|
|
|
+ } catch (ExitCodeException e) {
|
|
|
+ inpMsg = shexec.getOutput();
|
|
|
+ errMsg = e.getMessage();
|
|
|
+ exitValue = e.getExitCode();
|
|
|
throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
|
|
|
- } catch (InterruptedException e) {
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
throw createIOException(fileName, inpMsg, errMsg, exitValue, e);
|
|
|
} finally {
|
|
|
- process.destroy();
|
|
|
- if (in != null) in.close();
|
|
|
- if (err != null) err.close();
|
|
|
+ IOUtils.closeStream(in);
|
|
|
}
|
|
|
}
|
|
|
|