diff --git a/core/src/main/java/hudson/matrix/MatrixProject.java b/core/src/main/java/hudson/matrix/MatrixProject.java index f1149b859a..883abfbbec 100644 --- a/core/src/main/java/hudson/matrix/MatrixProject.java +++ b/core/src/main/java/hudson/matrix/MatrixProject.java @@ -24,7 +24,6 @@ package hudson.matrix; import hudson.CopyOnWrite; -import hudson.FilePath; import hudson.XmlFile; import hudson.Util; import hudson.Extension; @@ -39,12 +38,10 @@ import hudson.model.Items; import hudson.model.JDK; import hudson.model.Job; import hudson.model.Label; -import hudson.model.Node; import hudson.model.Result; import hudson.model.SCMedItem; import hudson.model.Saveable; import hudson.model.TopLevelItem; -import hudson.model.TopLevelItemDescriptor; import hudson.model.ResourceController; import hudson.model.Queue.FlyweightTask; import hudson.model.Descriptor.FormException; diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index 74abaaa067..fa40ee01ce 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -38,7 +38,7 @@ import hudson.model.Fingerprint.RangeSet; import hudson.model.RunMap.Constructor; import hudson.model.Queue.WaitingItem; import hudson.model.Queue.Executable; -import hudson.model.Queue.CauseOfBlockage; +import hudson.model.queue.CauseOfBlockage; import hudson.scm.ChangeLogSet; import hudson.scm.ChangeLogSet.Entry; import hudson.scm.NullSCM; diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java index c0bea7d403..7f3640e2b3 100644 --- a/core/src/main/java/hudson/model/Queue.java +++ b/core/src/main/java/hudson/model/Queue.java @@ -32,6 +32,11 @@ import hudson.cli.declarative.CLIMethod; import hudson.cli.declarative.CLIResolver; import hudson.remoting.AsyncFutureImpl; import hudson.model.Node.Mode; +import hudson.model.queue.CauseOfBlockage; +import hudson.model.queue.CauseOfBlockage.BecauseLabelIsBusy; +import hudson.model.queue.CauseOfBlockage.BecauseNodeIsOffline; +import hudson.model.queue.CauseOfBlockage.BecauseLabelIsOffline; +import hudson.model.queue.CauseOfBlockage.BecauseNodeIsBusy; import hudson.triggers.SafeTimerTask; import hudson.triggers.Trigger; import hudson.util.OneShotEvent; @@ -71,7 +76,6 @@ import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import org.kohsuke.stapler.export.Exported; import org.kohsuke.stapler.export.ExportedBean; -import org.jvnet.localizer.Localizable; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter; @@ -948,32 +952,6 @@ public class Queue extends ResourceController implements Saveable { */ public interface FlyweightTask extends Task {} - /** - * If a {@link Task} execution is blocked in the queue, this object represents why. - * - *

View

- * summary.jelly should do one-line HTML rendering to be used while rendering - * "build history" widget, next to the blocking build. By default it simply renders - * {@link #getShortDescription()} text. - */ - public abstract static class CauseOfBlockage { - /** - * Human readable description of why the build is blocked. - */ - public abstract String getShortDescription(); - - /** - * Obtains a simple implementation backed by {@link Localizable}. - */ - public static CauseOfBlockage fromMessage(final Localizable l) { - return new CauseOfBlockage() { - public String getShortDescription() { - return l.toString(); - } - }; - } - } - /** * Task whose execution is controlled by the queue. * @@ -1416,21 +1394,20 @@ public class Queue extends ResourceController implements Saveable { if (hudson.getNodes().isEmpty()) label = null; // no master/slave. pointless to talk about nodes - String name = null; if (label != null) { - name = label.getName(); if (label.isOffline()) { - if (label.getNodes().size() > 1) - return CauseOfBlockage.fromMessage(Messages._Queue_AllNodesOffline(name)); - else - return CauseOfBlockage.fromMessage(Messages._Queue_NodeOffline(name)); + Set nodes = label.getNodes(); + if (nodes.size() > 1) return new BecauseLabelIsOffline(label); + else return new BecauseNodeIsOffline(nodes.iterator().next()); } } - if(name==null) + if(label==null) return CauseOfBlockage.fromMessage(Messages._Queue_WaitingForNextAvailableExecutor()); - else - return CauseOfBlockage.fromMessage(Messages._Queue_WaitingForNextAvailableExecutorOn(name)); + + Set nodes = label.getNodes(); + if (nodes.size() > 1) return new BecauseLabelIsBusy(label); + else return new BecauseNodeIsBusy(nodes.iterator().next()); } @Override diff --git a/core/src/main/java/hudson/model/queue/CauseOfBlockage.java b/core/src/main/java/hudson/model/queue/CauseOfBlockage.java new file mode 100644 index 0000000000..28c9a213cd --- /dev/null +++ b/core/src/main/java/hudson/model/queue/CauseOfBlockage.java @@ -0,0 +1,95 @@ +package hudson.model.queue; + +import hudson.model.Queue.Task; +import hudson.model.Node; +import hudson.model.Messages; +import hudson.model.Label; +import org.jvnet.localizer.Localizable; + +/** + * If a {@link Task} execution is blocked in the queue, this object represents why. + * + *

View

+ * summary.jelly should do one-line HTML rendering to be used while rendering + * "build history" widget, next to the blocking build. By default it simply renders + * {@link #getShortDescription()} text. + * + * @since 1.330 + */ +public abstract class CauseOfBlockage { + /** + * Human readable description of why the build is blocked. + */ + public abstract String getShortDescription(); + + /** + * Obtains a simple implementation backed by {@link Localizable}. + */ + public static CauseOfBlockage fromMessage(final Localizable l) { + return new CauseOfBlockage() { + public String getShortDescription() { + return l.toString(); + } + }; + } + + /** + * Build is blocked because a node is offline. + */ + public static final class BecauseNodeIsOffline extends CauseOfBlockage { + public final Node node; + + public BecauseNodeIsOffline(Node node) { + this.node = node; + } + + public String getShortDescription() { + return Messages.Queue_NodeOffline(node.getDisplayName()); + } + } + + /** + * Build is blocked because all the nodes in a given label is offline. + */ + public static final class BecauseLabelIsOffline extends CauseOfBlockage { + public final Label label; + + public BecauseLabelIsOffline(Label l) { + this.label = l; + } + + public String getShortDescription() { + return Messages.Queue_AllNodesOffline(label.getName()); + } + } + + /** + * Build is blocked because a node is fully busy + */ + public static final class BecauseNodeIsBusy extends CauseOfBlockage { + public final Node node; + + public BecauseNodeIsBusy(Node node) { + this.node = node; + } + + public String getShortDescription() { + return Messages.Queue_WaitingForNextAvailableExecutorOn(node.getNodeName()); + } + } + + /** + * Build is blocked because a node is fully busy + */ + public static final class BecauseLabelIsBusy extends CauseOfBlockage { + public final Label label; + + public BecauseLabelIsBusy(Label label) { + this.label = label; + } + + public String getShortDescription() { + return Messages.Queue_WaitingForNextAvailableExecutorOn(label.getName()); + } + } +} diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsBusy/summary.jelly b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsBusy/summary.jelly new file mode 100644 index 0000000000..390552849c --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsBusy/summary.jelly @@ -0,0 +1,31 @@ + + + + + + ${it.label.name} + + + \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsBusy/summary.properties b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsBusy/summary.properties new file mode 100644 index 0000000000..1074977da5 --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsBusy/summary.properties @@ -0,0 +1 @@ +description=Waiting for next available executor on {0} \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsOffline/summary.jelly b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsOffline/summary.jelly new file mode 100644 index 0000000000..390552849c --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsOffline/summary.jelly @@ -0,0 +1,31 @@ + + + + + + ${it.label.name} + + + \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsOffline/summary.properties b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsOffline/summary.properties new file mode 100644 index 0000000000..86915423c1 --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseLabelIsOffline/summary.properties @@ -0,0 +1 @@ +description=All nodes of label ''{0}'' are offline \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsBusy/summary.jelly b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsBusy/summary.jelly new file mode 100644 index 0000000000..2f6f6ebe45 --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsBusy/summary.jelly @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsBusy/summary.properties b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsBusy/summary.properties new file mode 100644 index 0000000000..1074977da5 --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsBusy/summary.properties @@ -0,0 +1 @@ +description=Waiting for next available executor on {0} \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsOffline/summary.jelly b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsOffline/summary.jelly new file mode 100644 index 0000000000..2f6f6ebe45 --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsOffline/summary.jelly @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsOffline/summary.properties b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsOffline/summary.properties new file mode 100644 index 0000000000..e16409d5eb --- /dev/null +++ b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/BecauseNodeIsOffline/summary.properties @@ -0,0 +1 @@ +description={0} is offline \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Queue/CauseOfBlockage/summary.jelly b/core/src/main/resources/hudson/model/queue/CauseOfBlockage/summary.jelly similarity index 100% rename from core/src/main/resources/hudson/model/Queue/CauseOfBlockage/summary.jelly rename to core/src/main/resources/hudson/model/queue/CauseOfBlockage/summary.jelly diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java index f73b587c3a..15ccbe02ec 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java @@ -35,7 +35,6 @@ import hudson.tasks.Maven.MavenInstallation; import hudson.tasks.*; import hudson.tasks.junit.JUnitResultArchiver; import static hudson.Util.fixEmpty; -import static hudson.Util.fixEmptyAndTrim; import hudson.util.CopyOnWriteMap; import hudson.util.DescribableList; import hudson.util.Function1;