You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2013/07/25 00:55:20 UTC
[2/2] git commit: Fixed Jenkins to customize the maximum number of
executors per slave.
Fixed Jenkins to customize the maximum number of executors per slave.
Review: https://reviews.apache.org/r/12914
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/572f9e84
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/572f9e84
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/572f9e84
Branch: refs/heads/master
Commit: 572f9e84ea0de1f2284947df4e71218db1598025
Parents: 77db3cb
Author: Vinod Kone <vi...@twitter.com>
Authored: Wed Jul 24 13:01:51 2013 -0700
Committer: Vinod Kone <vi...@twitter.com>
Committed: Wed Jul 24 15:54:45 2013 -0700
----------------------------------------------------------------------
.../org/jenkinsci/plugins/mesos/MesosCloud.java | 30 +++++++++++---------
.../plugins/mesos/MesosCloud/config.jelly | 4 +++
2 files changed, 21 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/572f9e84/jenkins/src/main/java/org/jenkinsci/plugins/mesos/MesosCloud.java
----------------------------------------------------------------------
diff --git a/jenkins/src/main/java/org/jenkinsci/plugins/mesos/MesosCloud.java b/jenkins/src/main/java/org/jenkinsci/plugins/mesos/MesosCloud.java
index a096b12..e5f219f 100644
--- a/jenkins/src/main/java/org/jenkinsci/plugins/mesos/MesosCloud.java
+++ b/jenkins/src/main/java/org/jenkinsci/plugins/mesos/MesosCloud.java
@@ -44,6 +44,7 @@ public class MesosCloud extends Cloud {
private int slaveCpus = 1;
private int slaveMem = 512; // MB.
private int executorCpus = 1;
+ private int maxExecutors = 2;
private int executorMem = 128; // MB.
private int idleTerminationMinutes = 3;
@@ -55,7 +56,7 @@ public class MesosCloud extends Cloud {
@DataBoundConstructor
public MesosCloud(String master, String description, int slaveCpus,
- int slaveMem, int executorCpus, int executorMem, int idleTerminationMinutes)
+ int slaveMem, int maxExecutors, int executorCpus, int executorMem, int idleTerminationMinutes)
throws NumberFormatException {
super("MesosCloud");
@@ -63,6 +64,7 @@ public class MesosCloud extends Cloud {
this.description = description;
this.slaveCpus = slaveCpus;
this.slaveMem = slaveMem;
+ this.maxExecutors = maxExecutors;
this.executorCpus = executorCpus;
this.executorMem = executorMem;
this.idleTerminationMinutes = idleTerminationMinutes;
@@ -87,19 +89,21 @@ public class MesosCloud extends Cloud {
@Override
public Collection<PlannedNode> provision(Label label, int excessWorkload) {
List<PlannedNode> list = new ArrayList<PlannedNode>();
- final int numExecutors = excessWorkload;
try {
- list.add(new PlannedNode(this.getDisplayName(), Computer.threadPoolForRemoting
- .submit(new Callable<Node>() {
- public Node call() throws Exception {
- // TODO(vinod): Instead of launching one slave with 'excessWorkload' executors,
- // launch multiple slaves with fewer executors per slave.
- MesosSlave s = doProvision(numExecutors);
- Hudson.getInstance().addNode(s);
- return s;
- }
- }), numExecutors));
-
+ while (excessWorkload > 0) {
+ final int numExecutors = Math.min(excessWorkload, maxExecutors);
+ excessWorkload -= numExecutors;
+ LOGGER.info("Provisioning Jenkins Slave on Mesos with " + numExecutors +
+ " executors. Remaining excess workload: " + excessWorkload + " executors)");
+ list.add(new PlannedNode(this.getDisplayName(), Computer.threadPoolForRemoting
+ .submit(new Callable<Node>() {
+ public Node call() throws Exception {
+ MesosSlave s = doProvision(numExecutors);
+ Hudson.getInstance().addNode(s);
+ return s;
+ }
+ }), numExecutors));
+ }
} catch (Exception e) {
LOGGER.log(Level.WARNING, "Failed to create instances on Mesos", e);
return Collections.emptyList();
http://git-wip-us.apache.org/repos/asf/mesos/blob/572f9e84/jenkins/src/main/resources/org/jenkinsci/plugins/mesos/MesosCloud/config.jelly
----------------------------------------------------------------------
diff --git a/jenkins/src/main/resources/org/jenkinsci/plugins/mesos/MesosCloud/config.jelly b/jenkins/src/main/resources/org/jenkinsci/plugins/mesos/MesosCloud/config.jelly
index 0e2a6cb..593e1eb 100644
--- a/jenkins/src/main/resources/org/jenkinsci/plugins/mesos/MesosCloud/config.jelly
+++ b/jenkins/src/main/resources/org/jenkinsci/plugins/mesos/MesosCloud/config.jelly
@@ -16,6 +16,10 @@
<f:number field="slaveMem" clazz="required positive-number" value="512"/>
</f:entry>
+ <f:entry title="${% Maximum number of Executors per Slave}">
+ <f:number field="maxExecutors" clazz="required number" value="2"/>
+ </f:entry>
+
<f:entry title="${%Jenkins Executor CPUs}">
<f:number field="executorCpus" clazz="required number" value="1"/>
</f:entry>