You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by al...@apache.org on 2016/10/18 22:59:29 UTC

nifi git commit: NIFI-2905: Log error stream of ExecuteProcess cmd

Repository: nifi
Updated Branches:
  refs/heads/master f287bc911 -> 27dba60f2


NIFI-2905: Log error stream of ExecuteProcess cmd

ExecuteProcess ignores error stream when Redirect Error Stream is
false, this commit let it to be logged instead so that user can see it on
bulletin.

This closes #1143.

Signed-off-by: Andy LoPresto <al...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/27dba60f
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/27dba60f
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/27dba60f

Branch: refs/heads/master
Commit: 27dba60f27579ca9f33aa1afbf4bb46182d57df4
Parents: f287bc9
Author: Koji Kawamura <ij...@apache.org>
Authored: Mon Oct 17 17:07:32 2016 +0900
Committer: Andy LoPresto <al...@apache.org>
Committed: Tue Oct 18 15:56:27 2016 -0700

----------------------------------------------------------------------
 .../processors/standard/ExecuteProcess.java     |  3 +-
 .../processors/standard/TestExecuteProcess.java | 46 ++++++++++++++++++++
 2 files changed, 47 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/27dba60f/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java
index 62860ed..c0d3f2b 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java
@@ -316,8 +316,7 @@ public class ExecuteProcess extends AbstractProcessor {
                 @Override
                 public void run() {
                     try (final BufferedReader reader = new BufferedReader(new InputStreamReader(externalProcess.getErrorStream()))) {
-                        while (reader.read() >= 0) {
-                        }
+                        reader.lines().filter(line -> line != null && line.length() > 0).forEach(getLogger()::warn);
                     } catch (final IOException ioe) {
                     }
                 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/27dba60f/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java
index 160bbdb..8af82f1 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java
@@ -30,6 +30,7 @@ import java.util.concurrent.ExecutorService;
 
 import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processors.standard.util.ArgumentUtils;
+import org.apache.nifi.util.LogMessage;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
@@ -205,4 +206,49 @@ public class TestExecuteProcess {
 
         // assertEquals(inFile.length(), totalFlowFilesSize);
     }
+
+    @Test
+    public void testNotRedirectErrorStream() {
+        final TestRunner runner = TestRunners.newTestRunner(ExecuteProcess.class);
+        runner.setProperty(ExecuteProcess.COMMAND, "cd");
+        runner.setProperty(ExecuteProcess.COMMAND_ARGUMENTS, "does-not-exist");
+
+        ProcessContext processContext = runner.getProcessContext();
+
+        ExecuteProcess processor = (ExecuteProcess) runner.getProcessor();
+        processor.updateScheduledTrue();
+        processor.setupExecutor(processContext);
+
+        processor.onTrigger(processContext, runner.getProcessSessionFactory());
+
+        final List<LogMessage> warnMessages = runner.getLogger().getWarnMessages();
+        assertEquals("If redirect error stream is false, " +
+                "the output should be logged as a warning so that user can notice on bulletin.", 1, warnMessages.size());
+        final List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(ExecuteProcess.REL_SUCCESS);
+        assertEquals(0, succeeded.size());
+    }
+
+
+    @Test
+    public void testRedirectErrorStream() {
+        final TestRunner runner = TestRunners.newTestRunner(ExecuteProcess.class);
+        runner.setProperty(ExecuteProcess.COMMAND, "cd");
+        runner.setProperty(ExecuteProcess.COMMAND_ARGUMENTS, "does-not-exist");
+        runner.setProperty(ExecuteProcess.REDIRECT_ERROR_STREAM, "true");
+
+        ProcessContext processContext = runner.getProcessContext();
+
+        ExecuteProcess processor = (ExecuteProcess) runner.getProcessor();
+        processor.updateScheduledTrue();
+        processor.setupExecutor(processContext);
+
+        processor.onTrigger(processContext, runner.getProcessSessionFactory());
+
+        final List<LogMessage> warnMessages = runner.getLogger().getWarnMessages();
+        assertEquals("If redirect error stream is true " +
+                "the output should be sent as a content of flow-file.", 0, warnMessages.size());
+        final List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(ExecuteProcess.REL_SUCCESS);
+        assertEquals(1, succeeded.size());
+    }
+
 }