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>