提交 e84fd0de 编写于 作者: A Andrea Scarpino 提交者: Oliver Gondža

JENKINS-42658: fix NPE when the slave if offline

(cherry picked from commit 10a52c10)
上级 8921fd77
...@@ -76,6 +76,7 @@ import org.kohsuke.stapler.export.Exported; ...@@ -76,6 +76,7 @@ import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.interceptor.RequirePOST; import org.kohsuke.stapler.interceptor.RequirePOST;
import javax.annotation.CheckForNull; import javax.annotation.CheckForNull;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.OverridingMethodsMustInvokeSuper; import javax.annotation.OverridingMethodsMustInvokeSuper;
import java.io.File; import java.io.File;
...@@ -454,18 +455,27 @@ public class SlaveComputer extends Computer { ...@@ -454,18 +455,27 @@ public class SlaveComputer extends Computer {
/** /**
* Shows {@link Channel#classLoadingCount}. * Shows {@link Channel#classLoadingCount}.
* @return Requested value or {@code -1} if the agent is offline.
* @since 1.495 * @since 1.495
*/ */
@CheckReturnValue
public int getClassLoadingCount() throws IOException, InterruptedException { public int getClassLoadingCount() throws IOException, InterruptedException {
if (channel == null) {
return -1;
}
return channel.call(new LoadingCount(false)); return channel.call(new LoadingCount(false));
} }
/** /**
* Shows {@link Channel#classLoadingPrefetchCacheCount}. * Shows {@link Channel#classLoadingPrefetchCacheCount}.
* @return -1 in case that capability is not supported * @return Requested value or {@code -1} in case that capability is not supported or if the agent is offline.
* @since 1.519 * @since 1.519
*/ */
@CheckReturnValue
public int getClassLoadingPrefetchCacheCount() throws IOException, InterruptedException { public int getClassLoadingPrefetchCacheCount() throws IOException, InterruptedException {
if (channel == null) {
return -1;
}
if (!channel.remoteCapability.supportsPrefetch()) { if (!channel.remoteCapability.supportsPrefetch()) {
return -1; return -1;
} }
...@@ -474,25 +484,40 @@ public class SlaveComputer extends Computer { ...@@ -474,25 +484,40 @@ public class SlaveComputer extends Computer {
/** /**
* Shows {@link Channel#resourceLoadingCount}. * Shows {@link Channel#resourceLoadingCount}.
* @return Requested value or {@code -1} if the agent is offline.
* @since 1.495 * @since 1.495
*/ */
@CheckReturnValue
public int getResourceLoadingCount() throws IOException, InterruptedException { public int getResourceLoadingCount() throws IOException, InterruptedException {
if (channel == null) {
return -1;
}
return channel.call(new LoadingCount(true)); return channel.call(new LoadingCount(true));
} }
/** /**
* Shows {@link Channel#classLoadingTime}. * Shows {@link Channel#classLoadingTime}.
* @return Requested value or {@code -1} if the agent is offline.
* @since 1.495 * @since 1.495
*/ */
@CheckReturnValue
public long getClassLoadingTime() throws IOException, InterruptedException { public long getClassLoadingTime() throws IOException, InterruptedException {
if (channel == null) {
return -1;
}
return channel.call(new LoadingTime(false)); return channel.call(new LoadingTime(false));
} }
/** /**
* Shows {@link Channel#resourceLoadingTime}. * Shows {@link Channel#resourceLoadingTime}.
* @return Requested value or {@code -1} if the agent is offline.
* @since 1.495 * @since 1.495
*/ */
@CheckReturnValue
public long getResourceLoadingTime() throws IOException, InterruptedException { public long getResourceLoadingTime() throws IOException, InterruptedException {
if (channel == null) {
return -1;
}
return channel.call(new LoadingTime(true)); return channel.call(new LoadingTime(true));
} }
...@@ -741,7 +766,7 @@ public class SlaveComputer extends Computer { ...@@ -741,7 +766,7 @@ public class SlaveComputer extends Computer {
@Override @Override
public void doLaunchSlaveAgent(StaplerRequest req, StaplerResponse rsp) throws IOException { public void doLaunchSlaveAgent(StaplerRequest req, StaplerResponse rsp) throws IOException {
checkPermission(CONNECT); checkPermission(CONNECT);
if(channel!=null) { if(channel!=null) {
try { try {
req.getView(this, "already-launched.jelly").forward(req, rsp); req.getView(this, "already-launched.jelly").forward(req, rsp);
...@@ -890,27 +915,36 @@ public class SlaveComputer extends Computer { ...@@ -890,27 +915,36 @@ public class SlaveComputer extends Computer {
/** /**
* Get the agent version * Get the agent version
*/ */
@CheckReturnValue
public String getSlaveVersion() throws IOException, InterruptedException { public String getSlaveVersion() throws IOException, InterruptedException {
if (channel == null) {
return "Unknown (agent is offline)";
}
return channel.call(new SlaveVersion()); return channel.call(new SlaveVersion());
} }
/** /**
* Get the OS description. * Get the OS description.
*/ */
@CheckReturnValue
public String getOSDescription() throws IOException, InterruptedException { public String getOSDescription() throws IOException, InterruptedException {
if (channel == null) {
return "Unknown (agent is offline)";
}
return channel.call(new DetectOS()) ? "Unix" : "Windows"; return channel.call(new DetectOS()) ? "Unix" : "Windows";
} }
/** /**
* Expose real full env vars map from agent for UI presentation * Expose real full env vars map from agent for UI presentation
*/ */
@CheckReturnValue
public Map<String,String> getEnvVarsFull() throws IOException, InterruptedException { public Map<String,String> getEnvVarsFull() throws IOException, InterruptedException {
if(getChannel() == null) { if (channel == null) {
Map<String, String> env = new TreeMap<> (); Map<String, String> env = new TreeMap<> ();
env.put("N/A","N/A"); env.put("N/A","N/A");
return env; return env;
} else { } else {
return getChannel().call(new ListFullEnvironment()); return channel.call(new ListFullEnvironment());
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册