-
Bug
-
Resolution: Fixed
-
Major
check wraps most of its body in a timeout, but not getWorkspace. If an agent is unresponsive, this can cause a Timer thread to block indefinitely:
"jenkins.util.Timer [#2] / waiting for hudson.remoting.Channel@...:..." ... java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at hudson.remoting.Request.call(Request.java:147) - locked <...> (a hudson.remoting.UserRequest) at hudson.remoting.Channel.call(Channel.java:780) at hudson.FilePath.act(FilePath.java:1007) at hudson.FilePath.act(FilePath.java:996) at hudson.FilePath.isDirectory(FilePath.java:1532) at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.getWorkspace(DurableTaskStep.java:174) at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.check(DurableTaskStep.java:244) at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.run(DurableTaskStep.java:233)
Remote calls like isDirectory should have a timeout applied. Unfortunately Jenkins core APIs commit the cardinal sin of distributing computing: they offer calls like FilePath.isDirectory() which throw InterruptedException but have no built-in timeout, so it is necessary to go to extra lengths to add a timeout to any Remoting call.
- is related to
-
JENKINS-38381 [JEP-210] Optimize log handling in Pipeline and Durable Task
- Resolved
- relates to
-
JENKINS-38769 Pipeline job hangs when agent loses network connectivity
- Resolved
-
JENKINS-41854 Contextualize a fresh FilePath after an agent reconnection
- Resolved
-
JENKINS-44785 Add Built-in Request timeout support in Remoting
- Open
- links to