From cc26e435e4a85ea9f8d822ee1899bb3a25242016 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 11 May 2022 15:55:20 -0400 Subject: [PATCH 1/6] =?UTF-8?q?Defer=20being=20=E2=80=9Cready=20to=20run?= =?UTF-8?q?=E2=80=9D=20until=20`StepExecution.onResume`s=20complete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + .../workflow/cps/CpsFlowExecution.java | 41 ++++++++++++++----- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index f7557e82c..7305780ce 100644 --- a/pom.xml +++ b/pom.xml @@ -89,6 +89,7 @@ org.jenkins-ci.plugins.workflow workflow-api + 1154.v8fb_a_08707266 org.jenkins-ci.plugins.workflow diff --git a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java index 7266927f9..df2fef68d 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java @@ -276,6 +276,13 @@ public class CpsFlowExecution extends FlowExecution implements BlockableResume { boolean resumeBlocked = false; + /** + * Whether {@link CpsThreadGroup#isPaused} when loaded from disk. + * @see #loadProgramAsync + * @see #afterStepExecutionsResumed + */ + private boolean pausedWhenLoaded; + /** Subdirectory string where we store {@link FlowNode}s */ private String storageDir = null; @@ -774,17 +781,8 @@ public void onSuccess(Unmarshaller u) { try { CpsThreadGroup g = (CpsThreadGroup) u.readObject(); result.set(g); - try { - if (g.isPaused()) { - owner.getListener().getLogger().println("Still paused"); - } else { - owner.getListener().getLogger().println("Ready to run at " + new Date()); - // In case we last paused execution due to Jenkins.isQuietingDown, make sure we do something after we restart. - g.scheduleRun(); - } - } catch (IOException x) { - LOGGER.log(Level.WARNING, null, x); - } + pausedWhenLoaded = g.isPaused(); + g.pause(); } catch (Throwable t) { onFailure(t); } finally { @@ -870,6 +868,27 @@ void croak(Throwable t) { } } + @Override protected void afterStepExecutionsResumed() { + runInCpsVmThread(new FutureCallback() { + @Override public void onSuccess(CpsThreadGroup g) { + try { + if (pausedWhenLoaded) { + owner.getListener().getLogger().println("Still paused"); + } else { + owner.getListener().getLogger().println("Ready to run at " + new Date()); + // In case we last paused execution due to Jenkins.isQuietingDown, make sure we do something after we restart. + g.unpause(); + } + } catch (IOException x) { + LOGGER.log(Level.WARNING, null, x); + } + } + @Override public void onFailure(Throwable t) { + LOGGER.log(Level.WARNING, "could not resume " + this, t); + } + }); + } + /** * Where we store {@link CpsThreadGroup}. */ From a688ac3d8fd05ee3391f3bf9067cbc56d267e44c Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 11 May 2022 16:35:02 -0400 Subject: [PATCH 2/6] Mark `pausedWhenLoaded` as `transient` Co-authored-by: Devin Nusbaum --- .../org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java index df2fef68d..4457ee975 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java @@ -281,7 +281,7 @@ public class CpsFlowExecution extends FlowExecution implements BlockableResume { * @see #loadProgramAsync * @see #afterStepExecutionsResumed */ - private boolean pausedWhenLoaded; + private transient boolean pausedWhenLoaded; /** Subdirectory string where we store {@link FlowNode}s */ private String storageDir = null; From c3ba165984d043125ad6b7ef34b945def3d5bce4 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 13 May 2022 09:27:33 -0400 Subject: [PATCH 3/6] `BuildTriggerStepRestartTest.restartBetweenJobs` turned up a race condition in `pausedWhenLoaded` --- .../org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java index df2fef68d..94ef7c1df 100644 --- a/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java +++ b/src/main/java/org/jenkinsci/plugins/workflow/cps/CpsFlowExecution.java @@ -878,6 +878,7 @@ void croak(Throwable t) { owner.getListener().getLogger().println("Ready to run at " + new Date()); // In case we last paused execution due to Jenkins.isQuietingDown, make sure we do something after we restart. g.unpause(); + g.saveProgramIfPossible(false); // ensure pausedWhenLoaded=false is persisted } } catch (IOException x) { LOGGER.log(Level.WARNING, null, x); From 0b3523c8c6629398baea87aa272aac0d95bc1da9 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 19 May 2022 18:00:39 -0400 Subject: [PATCH 4/6] Bump --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d0ff290db..5b8ceee0f 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ org.jenkins-ci.plugins.workflow workflow-api - 1154.v8fb_a_08707266 + 1159.va_643c5f893e9 org.jenkins-ci.plugins.workflow From 8bf3c8cb97a0096b9a4c859e02878d2737e0b027 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 19 May 2022 18:05:52 -0400 Subject: [PATCH 5/6] Have to also bump the BOM --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5b8ceee0f..dfe2208b9 100644 --- a/pom.xml +++ b/pom.xml @@ -75,7 +75,7 @@ io.jenkins.tools.bom bom-2.332.x - 1289.v5c4b_1c43511b_ + 1382.v7d694476f340 import pom From 37088767ee9d5571e3dc786bf1955ed65f845d42 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 3 Jun 2022 10:35:46 -0400 Subject: [PATCH 6/6] https://github.com/jenkinsci/workflow-api-plugin/pull/221 released --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dfe2208b9..d8276914d 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ org.jenkins-ci.plugins.workflow workflow-api - 1159.va_643c5f893e9 + 1162.va_1e49062a_00e org.jenkins-ci.plugins.workflow