Description
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 covers the behavioral details of Process#waitFor().
Attachments
Attachments
Issue Links
- relates to
-
OOZIE-3359 Check for Process#waitFor() usage and fix it in order to avoid indefinite waiting
- Open
-
OOZIE-3183 Better logging for SshActionExecutor and extended HA capability when calling to remote host
- Closed