Andras Piros created OOZIE-3354:
-----------------------------------
Summary: [core] [action] SSH action gets hung
Key: OOZIE-3354
URL: https://issues.apache.org/jira/browse/OOZIE-3354
Project: Oozie
Issue Type: Bug
Components: action, core
Affects Versions: 5.0.0
Reporter: Andras Piros
Assignee: Andras Piros
Fix For: 5.1.0
In OOZIE-3183 {{SshActionExecutor#drainBuffers()}} has changed. Previously, it
called {{Process#exitCode()}} that would return immediately either with the
exit code, or would throw an {{IllegalThreadStateException}} if the process
would still be running.
In the current implementation introduced by OOZIE-3183, {{Process#waitFor()}}
is used that would block until the process finishes. Given the fact that
sometime {{SshActionExecutor#check()}} calls {{ssh ... cat stdout}}, and thisĀ
SSH process can be trapped even after {{cat stdout}} has been finished on the
target host, it can happen that {{SshActionExecutor#drainBuffers()}} waits
indefinitely without a chance to gather any {{stdout}} or {{stderr}} logs.
Hence this particular one is a compatibility breaking change with existing SSH
action behavior.
Let's re-introduce theĀ former behavior in {{SshActionExecutor#drainBuffers()}}
that keeps polling {{Process#exitValue()}} and reading the progress on
{{stdout}} and {{stderr}} till the process finishes, for backwards
compatibility.
[This
article|https://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html]
covers the behavioral details of {{Process#waitFor()}}.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)