Browse Source

HADOOP-12479. ProtocMojo does not log the reason for a protoc compilation failure. Contributed by Chris Nauroth.

cnauroth 9 years ago
parent
commit
fdd7406224

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -1228,6 +1228,9 @@ Release 2.8.0 - UNRELEASED
     HADOOP-12475. Replace guava Cache with ConcurrentHashMap for caching
     Connection in ipc Client (Walter Su via sjlee)
 
+    HADOOP-12479. ProtocMojo does not log the reason for a protoc compilation
+    failure. (cnauroth)
+
   OPTIMIZATIONS
 
     HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString()

+ 5 - 1
hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/protoc/ProtocMojo.java

@@ -248,11 +248,15 @@ public class ProtocMojo extends AbstractMojo {
 
         exec = new Exec(this);
         out = new ArrayList<String>();
-        if (exec.run(command, out) != 0) {
+        List<String> err = new ArrayList<>();
+        if (exec.run(command, out, err) != 0) {
           getLog().error("protoc compiler error");
           for (String s : out) {
             getLog().error(s);
           }
+          for (String s : err) {
+            getLog().error(s);
+          }
           throw new MojoExecutionException("protoc failure");
         }
         // Write the new checksum file on success.

+ 18 - 1
hadoop-maven-plugins/src/main/java/org/apache/hadoop/maven/plugin/util/Exec.java

@@ -42,12 +42,26 @@ public class Exec {
   /**
    * Runs the specified command and saves each line of the command's output to
    * the given list.
-   * 
+   *
    * @param command List containing command and all arguments
    * @param output List in/out parameter to receive command output
    * @return int exit code of command
    */
   public int run(List<String> command, List<String> output) {
+    return this.run(command, output, null);
+  }
+
+  /**
+   * Runs the specified command and saves each line of the command's output to
+   * the given list and each line of the command's stderr to the other list.
+   *
+   * @param command List containing command and all arguments
+   * @param output List in/out parameter to receive command output
+   * @param errors List in/out parameter to receive command stderr
+   * @return int exit code of command
+   */
+  public int run(List<String> command, List<String> output,
+      List<String> errors) {
     int retCode = 1;
     ProcessBuilder pb = new ProcessBuilder(command);
     try {
@@ -66,6 +80,9 @@ public class Exec {
       stdOut.join();
       stdErr.join();
       output.addAll(stdOut.getOutput());
+      if (errors != null) {
+        errors.addAll(stdErr.getOutput());
+      }
     } catch (Exception ex) {
       mojo.getLog().warn(command + " failed: " + ex.toString());
     }