From c569036fca43f286ebbb80498f3f0937766e44c5 Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Fri, 5 Jun 2015 13:50:46 +0200 Subject: [PATCH] [FIX JENKINS-27739] Clear cached env vars when node goes online --- core/src/main/java/hudson/model/Computer.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/model/Computer.java b/core/src/main/java/hudson/model/Computer.java index b975e9086b..d57535e7f3 100644 --- a/core/src/main/java/hudson/model/Computer.java +++ b/core/src/main/java/hudson/model/Computer.java @@ -27,6 +27,7 @@ package hudson.model; import edu.umd.cs.findbugs.annotations.OverrideMustInvoke; import edu.umd.cs.findbugs.annotations.When; import hudson.EnvVars; +import hudson.Extension; import hudson.Launcher.ProcStarter; import hudson.Util; import hudson.cli.declarative.CLIMethod; @@ -66,6 +67,7 @@ import jenkins.model.queue.AsynchronousExecution; import jenkins.util.ContextResettingExecutorService; import jenkins.security.MasterToSlaveCallable; import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.DoNotUse; import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.CmdLineException; @@ -403,7 +405,6 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces * make much sense because as soon as {@link Computer} is connected it can be disconnected by some other threads.) */ public final Future connect(boolean forceReconnect) { - this.cachedEnvironment = null; connectTime = System.currentTimeMillis(); return _connect(forceReconnect); } @@ -1594,6 +1595,15 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces return true; } + @Extension + @Restricted(DoNotUse.class) + public static class InternalComputerListener extends ComputerListener { + @Override + public void onOnline(Computer c, TaskListener listener) throws IOException, InterruptedException { + c.cachedEnvironment = null; + } + } + @Override public int hashCode() { return executor.hashCode(); -- GitLab