You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2008/08/12 23:57:15 UTC
svn commit: r685334 - in /hadoop/core/trunk: CHANGES.txt
src/core/org/apache/hadoop/util/Shell.java
src/mapred/org/apache/hadoop/mapred/TaskRunner.java
src/test/org/apache/hadoop/util/TestShell.java
Author: omalley
Date: Tue Aug 12 14:57:15 2008
New Revision: 685334
URL: http://svn.apache.org/viewvc?rev=685334&view=rev
Log:
HADOOP-3852. Add ShellCommandExecutor.toString method to make nicer
error messages. (Steve Loughran via omalley)
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/core/org/apache/hadoop/util/Shell.java
hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskRunner.java
hadoop/core/trunk/src/test/org/apache/hadoop/util/TestShell.java
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=685334&r1=685333&r2=685334&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Tue Aug 12 14:57:15 2008
@@ -175,6 +175,9 @@
HADOOP-3780. Remove asynchronous resolution of network topology in the
JobTracker (Amar Kamat via omalley)
+ HADOOP-3852. Add ShellCommandExecutor.toString method to make nicer
+ error messages. (Steve Loughran via omalley)
+
OPTIMIZATIONS
HADOOP-3556. Removed lock contention in MD5Hash by changing the
Modified: hadoop/core/trunk/src/core/org/apache/hadoop/util/Shell.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/core/org/apache/hadoop/util/Shell.java?rev=685334&r1=685333&r2=685334&view=diff
==============================================================================
--- hadoop/core/trunk/src/core/org/apache/hadoop/util/Shell.java (original)
+++ hadoop/core/trunk/src/core/org/apache/hadoop/util/Shell.java Tue Aug 12 14:57:15 2008
@@ -303,6 +303,27 @@
public String getOutput() {
return (output == null) ? "" : output.toString();
}
+
+ /**
+ * Returns the commands of this instance.
+ * Arguments with spaces in are presented with quotes round; other
+ * arguments are presented raw
+ *
+ * @return a string representation of the object.
+ */
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ String[] args = getExecString();
+ for (String s : args) {
+ if (s.indexOf(' ') >= 0) {
+ builder.append('"').append(s).append('"');
+ } else {
+ builder.append(s);
+ }
+ builder.append(' ');
+ }
+ return builder.toString();
+ }
}
/**
Modified: hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskRunner.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskRunner.java?rev=685334&r1=685333&r2=685334&view=diff
==============================================================================
--- hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskRunner.java (original)
+++ hadoop/core/trunk/src/mapred/org/apache/hadoop/mapred/TaskRunner.java Tue Aug 12 14:57:15 2008
@@ -447,8 +447,8 @@
Map<String, String> env,
TaskAttemptID taskid) throws IOException {
+ shexec = new ShellCommandExecutor(args.toArray(new String[0]), dir, env);
try {
- shexec = new ShellCommandExecutor(args.toArray(new String[0]), dir, env);
shexec.execute();
} catch (IOException ioe) {
// do nothing
@@ -461,7 +461,7 @@
tracker.getTaskTrackerInstrumentation().taskFailedPing(t.getTaskID());
}
throw new IOException("Task process exit with nonzero status of " +
- exit_code + ".");
+ exit_code + ": "+ shexec);
}
}
}
Modified: hadoop/core/trunk/src/test/org/apache/hadoop/util/TestShell.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/test/org/apache/hadoop/util/TestShell.java?rev=685334&r1=685333&r2=685334&view=diff
==============================================================================
--- hadoop/core/trunk/src/test/org/apache/hadoop/util/TestShell.java (original)
+++ hadoop/core/trunk/src/test/org/apache/hadoop/util/TestShell.java Tue Aug 12 14:57:15 2008
@@ -51,6 +51,27 @@
testInterval(System.currentTimeMillis() / 60000 + 60); // test a very big interval
}
+ /**
+ * Assert that a string has a substring in it
+ * @param string string to search
+ * @param search what to search for it
+ */
+ private void assertInString(String string, String search) {
+ assertNotNull("Empty String", string);
+ if (!string.contains(search)) {
+ fail("Did not find \"" + search + "\" in " + string);
+ }
+ }
+
+ public void testShellCommandExecutorToString() throws Throwable {
+ Shell.ShellCommandExecutor sce=new Shell.ShellCommandExecutor(
+ new String[] { "ls","..","arg 2"});
+ String command = sce.toString();
+ assertInString(command,"ls");
+ assertInString(command, " .. ");
+ assertInString(command, "\"arg 2\"");
+ }
+
private void testInterval(long interval) throws IOException {
Command command = new Command(interval);