未验证 提交 5db5ef51 编写于 作者: O Oleg Nenashev 提交者: GitHub

Merge pull request #4271 from ilpianista/JENKINS-42658

[JENKINS-42658] - Fix NPE in Agent API when the agent is offline (e.g. retrieving agent version or OS description)
...@@ -75,6 +75,7 @@ import org.kohsuke.stapler.export.Exported; ...@@ -75,6 +75,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;
...@@ -453,18 +454,27 @@ public class SlaveComputer extends Computer { ...@@ -453,18 +454,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;
} }
...@@ -473,25 +483,40 @@ public class SlaveComputer extends Computer { ...@@ -473,25 +483,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));
} }
...@@ -871,27 +896,36 @@ public class SlaveComputer extends Computer { ...@@ -871,27 +896,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.
先完成此消息的编辑!
想要评论请 注册