未验证 提交 80b515e9 编写于 作者: O Oleg Nenashev 提交者: GitHub

Merge pull request #3157 from Jimilian/optimise_start_of_workflow_job

If task can be run only on master, use shortcut
......@@ -1691,6 +1691,17 @@ public class Queue extends ResourceController implements Saveable {
//we double check if this is a flyweight task
if (p.task instanceof FlyweightTask) {
Jenkins h = Jenkins.getInstance();
Label lbl = p.getAssignedLabel();
if (lbl != null && lbl.equals(h.getSelfLabel())) {
if (h.canTake(p) == null) {
return createFlyWeightTaskRunnable(p, h.toComputer());
} else {
return null;
}
}
Map<Node, Integer> hashSource = new HashMap<Node, Integer>(h.getNodes().size());
// Even if master is configured with zero executors, we may need to run a flyweight task like MatrixProject on it.
......@@ -1703,7 +1714,6 @@ public class Queue extends ResourceController implements Saveable {
ConsistentHash<Node> hash = new ConsistentHash<Node>(NODE_HASH);
hash.addAll(hashSource);
Label lbl = p.getAssignedLabel();
String fullDisplayName = p.task.getFullDisplayName();
for (Node n : hash.list(fullDisplayName)) {
final Computer c = n.toComputer();
......@@ -1717,18 +1727,25 @@ public class Queue extends ResourceController implements Saveable {
continue;
}
LOGGER.log(Level.FINEST, "Creating flyweight task {0} for computer {1}", new Object[]{fullDisplayName, c.getName()});
return new Runnable() {
@Override public void run() {
c.startFlyWeightTask(new WorkUnitContext(p).createWorkUnit(p.task));
makePending(p);
}
};
return createFlyWeightTaskRunnable(p, c);
}
}
return null;
}
private Runnable createFlyWeightTaskRunnable(final BuildableItem p, final Computer c) {
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.log(Level.FINEST, "Creating flyweight task {0} for computer {1}",
new Object[]{p.task.getFullDisplayName(), c.getName()});
}
return new Runnable() {
@Override public void run() {
c.startFlyWeightTask(new WorkUnitContext(p).createWorkUnit(p.task));
makePending(p);
}
};
}
private static Hash<Node> NODE_HASH = new Hash<Node>() {
public String hash(Node node) {
return node.getNodeName();
......@@ -2104,6 +2121,7 @@ public class Queue extends ResourceController implements Saveable {
* <p>
* This code takes {@link LabelAssignmentAction} into account, then fall back to {@link SubTask#getAssignedLabel()}
*/
@CheckForNull
public Label getAssignedLabel() {
for (LabelAssignmentAction laa : getActions(LabelAssignmentAction.class)) {
Label l = laa.getAssignedLabel(task);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册