[ https://issues.apache.org/jira/browse/OOZIE-3354?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16631681#comment-16631681 ]
Peter Bacsko commented on OOZIE-3354: ------------------------------------- Ok, this one looks good. Let's wait for Jenkins then I'll +1 it if there are no errors. > [core] [SSH 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 > Priority: Major > Fix For: 5.1.0 > > Attachments: OOZIE-3354.001.patch, OOZIE-3354.002.patch, > OOZIE-3354.003.patch > > > 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)