提交 016f304c 编写于 作者: J Jesse Glick

Better null safety.

In 1.509.2, probably due to a bad Groovy script:
java.lang.ClassCastException: hudson.model.Hudson cannot be cast to hudson.model.Slave
	at hudson.slaves.SlaveComputer.getNode(SlaveComputer.java:176)
	at hudson.slaves.SlaveComputer.getNode(SlaveComputer.java:92)
	at jenkins.model.Jenkins$9.compare(Jenkins.java:1547)
	at jenkins.model.Jenkins$9.compare(Jenkins.java:1543)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1282)
	at java.util.Arrays.mergeSort(Arrays.java:1282)
	at java.util.Arrays.mergeSort(Arrays.java:1282)
	at java.util.Arrays.mergeSort(Arrays.java:1282)
	at java.util.Arrays.mergeSort(Arrays.java:1282)
	at java.util.Arrays.mergeSort(Arrays.java:1282)
	at java.util.Arrays.sort(Arrays.java:1210)
	at jenkins.model.Jenkins.getComputers(Jenkins.java:1543)
上级 872c8389
......@@ -457,7 +457,7 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces
* Returns {@link Node#getNodeName() the name of the node}.
*/
public @Nonnull String getName() {
return nodeName;
return nodeName != null ? nodeName : "";
}
/**
......
......@@ -117,7 +117,7 @@ public abstract class Node extends AbstractModelObject implements Reconfigurable
* "" if this is master
*/
@Exported(visibility=999)
public abstract String getNodeName();
public abstract @Nonnull String getNodeName();
/**
* When the user clones a {@link Node}, Hudson uses this method to change the node name right after
......
......@@ -56,8 +56,8 @@ import java.util.Set;
import javax.servlet.ServletException;
import hudson.util.TimeUnit2;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import jenkins.model.Jenkins;
import jenkins.slaves.WorkspaceLocator;
......@@ -149,7 +149,7 @@ public abstract class Slave extends Node implements Serializable {
this(name, nodeDescription, remoteFS, numExecutors, mode, labelString, launcher, retentionStrategy, new ArrayList());
}
public Slave(String name, String nodeDescription, String remoteFS, int numExecutors,
public Slave(@Nonnull String name, String nodeDescription, String remoteFS, int numExecutors,
Mode mode, String labelString, ComputerLauncher launcher, RetentionStrategy retentionStrategy, List<? extends NodeProperty<?>> nodeProperties) throws FormException, IOException {
this.name = name;
this.description = nodeDescription;
......
......@@ -170,7 +170,13 @@ public class SlaveComputer extends Computer {
@Override
public Slave getNode() {
return (Slave)super.getNode();
Node node = super.getNode();
if (node == null || node instanceof Slave) {
return (Slave)node;
} else {
logger.log(Level.WARNING, "found an unexpected kind of node {0} from {1} with nodeName={2}", new Object[] {node, this, nodeName});
return null;
}
}
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册