From c0deed0a3b546ebcb59ea25681ed3ac8b13fe6bb Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Sun, 5 Feb 2017 10:36:20 -0500 Subject: [PATCH] [JENKINS-32986] Apply a timeout to some hang-prone operations in the CPS VM thread. --- pom.xml | 6 +++--- .../jenkinsci/plugins/workflow/cps/CpsBodyExecution.java | 4 +++- .../java/org/jenkinsci/plugins/workflow/cps/CpsThread.java | 6 ++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 85e050072..7ebce3326 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ org.jenkins-ci.plugins plugin - 2.19 + 2.21 org.jenkins-ci.plugins.workflow @@ -80,7 +80,7 @@ org.jenkins-ci.plugins.workflow workflow-support - 2.11 + 2.13-20170205.153141-1 ${project.groupId} @@ -111,7 +111,7 @@ org.jenkins-ci.plugins.workflow workflow-support - 2.9 + 2.13-20170205.153141-1 tests test diff --git a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsBodyExecution.java b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsBodyExecution.java index 24a216715..080366f10 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsBodyExecution.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsBodyExecution.java @@ -29,6 +29,7 @@ import javax.annotation.concurrent.GuardedBy; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; @@ -37,6 +38,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.logging.Level; import java.util.logging.Logger; import static java.util.logging.Level.*; @@ -264,7 +266,7 @@ public void onSuccess(CpsThreadGroup g) { @Override public void onFailure(Throwable t) { - // couldn't cancel + LOGGER.log(Level.WARNING, "could not cancel " + context + " with " + Arrays.toString(causes), t); } }); } else { diff --git a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsThread.java b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsThread.java index 34c52e012..212e86404 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsThread.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsThread.java @@ -38,11 +38,13 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import static java.util.logging.Level.*; import static org.jenkinsci.plugins.workflow.cps.persistence.PersistenceContext.*; import org.jenkinsci.plugins.workflow.support.concurrent.Futures; +import org.jenkinsci.plugins.workflow.support.concurrent.Timeout; /** * Represents a {@link Continuable} that is either runnable or suspended (that waits for an @@ -156,7 +158,7 @@ public StepExecution getStep() { final CpsThread old = CURRENT.get(); CURRENT.set(this); - try { + try (Timeout timeout = Timeout.limit(5, TimeUnit.MINUTES)) { LOGGER.log(FINE, "runNextChunk on {0}", resumeValue); Outcome o = resumeValue; resumeValue = null; @@ -281,7 +283,7 @@ public void stop(Throwable t) { return; } - try { + try (Timeout timeout = Timeout.limit(30, TimeUnit.SECONDS)) { s.stop(t); } catch (Exception e) { t.addSuppressed(e);