You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2011/06/05 05:28:16 UTC

svn commit: r1131601 - in /incubator/mesos/trunk/frameworks/daemon: ./ DaemonExecutor.java DaemonScheduler.java daemon_executor

Author: benh
Date: Sun Jun  5 03:28:15 2011
New Revision: 1131601

URL: http://svn.apache.org/viewvc?rev=1131601&view=rev
Log:
Scaffolding of DaemonScheduler and DaemonExecutor.

Added:
    incubator/mesos/trunk/frameworks/daemon/
    incubator/mesos/trunk/frameworks/daemon/DaemonExecutor.java
    incubator/mesos/trunk/frameworks/daemon/DaemonScheduler.java
    incubator/mesos/trunk/frameworks/daemon/daemon_executor   (with props)

Added: incubator/mesos/trunk/frameworks/daemon/DaemonExecutor.java
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/frameworks/daemon/DaemonExecutor.java?rev=1131601&view=auto
==============================================================================
--- incubator/mesos/trunk/frameworks/daemon/DaemonExecutor.java (added)
+++ incubator/mesos/trunk/frameworks/daemon/DaemonExecutor.java Sun Jun  5 03:28:15 2011
@@ -0,0 +1,27 @@
+import java.io.File;
+
+import nexus.*;
+
+public class DaemonExecutor extends Executor {
+  static {
+    System.loadLibrary("nexus");
+  }
+
+  @Override
+  public void startTask(final TaskDescription task) {
+    System.out.println("Running task " + task.getName());
+    try {
+      Thread.sleep(100000);
+    } catch (InterruptedException ie) { ie.printStackTrace(); }
+    TaskStatus status = new TaskStatus(task.getTaskId(),
+				       TaskState.TASK_FAILED,
+				       new byte[0]);
+    sendStatusUpdate(status);
+  }
+
+  
+
+  public static void main(String[] args) throws Exception {
+    new DaemonExecutor().run();
+  }
+}

Added: incubator/mesos/trunk/frameworks/daemon/DaemonScheduler.java
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/frameworks/daemon/DaemonScheduler.java?rev=1131601&view=auto
==============================================================================
--- incubator/mesos/trunk/frameworks/daemon/DaemonScheduler.java (added)
+++ incubator/mesos/trunk/frameworks/daemon/DaemonScheduler.java Sun Jun  5 03:28:15 2011
@@ -0,0 +1,124 @@
+import java.io.File;
+import java.util.*;
+
+import nexus.*;
+
+public class DaemonScheduler extends Scheduler {
+
+  final static String executorScript =
+    "/Users/benh/nexus-github-master/frameworks/daemon/daemon_executor";
+
+  static Map<String, Configuration> configs =
+    new HashMap<String, Configuration>();
+
+  static Map<String, Set<TaskDescription>> running =
+    new HashMap<String, Set<TaskDescription>>();
+
+  int taskId = 0;
+
+  static class Configuration {
+    public int cpus; // in cores
+    public int mem; // in bytes
+    public int instances; // to launch
+    Configuration(int cpus, int mem, int instances) {
+      this.cpus = cpus;
+      this.mem = mem;
+      this.instances = instances;
+    }
+  }
+
+  static {
+    System.loadLibrary("nexus");
+
+    configs.put("talon", new Configuration(1, 1*1024*1024*1024, 1));
+    configs.put("puffin", new Configuration(1, 1*1024*1024*1024, 1));
+  }
+
+  public String getFrameworkName(SchedulerDriver driver) {
+    return "DaemonScheduler";
+  }
+
+  public ExecutorInfo getExecutorInfo(SchedulerDriver driver) {
+    return new ExecutorInfo(executorScript, new byte[0]);
+  }
+
+  public void registered(SchedulerDriver driver, int fid) {
+    System.out.println("Registered with ID " + fid);
+    // Register with ZooKeeper
+  }
+
+  public void resourceOffer(SchedulerDriver driver, long oid,
+			    SlaveOfferVector offers) {
+    try {
+      // Tasks to launch.
+      TaskDescriptionVector tasks = new TaskDescriptionVector();
+
+      for (int i = 0; i < offers.size(); i++) {
+	SlaveOffer offer = offers.get(i);
+	System.out.println("Trying offer from " + offer.getSlaveId());
+	for (Map.Entry<String, Configuration> entry : configs.entrySet()) {
+	  String name = entry.getKey();
+	  Configuration config = entry.getValue();
+	  if (!running.containsKey(name) ||
+	      running.get(name).size() < config.instances) {
+	    // Need another instance ...
+	    if (config.cpus >= Integer.parseInt(offer.getParams().get("cpus")) &&
+		config.mem >= Integer.parseInt(offer.getParams().get("mem"))) {
+	      // This offer has enough resources ...
+	      StringMap params = new StringMap();
+	      params.set("cpus", offer.getParams().get("cpus"));
+	      params.set("mem", offer.getParams().get("mem"));
+
+	      TaskDescription task = 
+		new TaskDescription(taskId, offer.getSlaveId(),
+				    name + "-" + taskId++,
+				    params, new byte[0]);
+
+	      tasks.add(task);
+
+	      if (!running.containsKey(name)) {
+		running.put(name, new HashSet<TaskDescription>());
+	      }
+
+	      running.get(name).add(task);
+	      break;
+	    }
+	  }
+	}
+      }
+      driver.replyToOffer(oid, tasks, new StringMap());
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  public void statusUpdate(SchedulerDriver driver, TaskStatus status) {
+    try {
+      for (Map.Entry<String, Set<TaskDescription>> entry : running.entrySet()) {
+	Set<TaskDescription> tasks = entry.getValue();
+	for (TaskDescription task : tasks) {
+	  if (task.getTaskId() == status.getTaskId()) {
+	    tasks.remove(task);
+	  }
+	}
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  public void error(SchedulerDriver driver, int code, String message) {
+    // TODO(*): Implement this ... to catch for lost executors, etc.
+  }
+
+  public static void main(String[] args) throws Exception {
+    if (args.length != 1) {
+      System.err.println("usage: <master>");
+      System.exit(1);
+    }
+    DaemonScheduler sched = new DaemonScheduler();
+    NexusSchedulerDriver driver = new NexusSchedulerDriver(sched, args[0]);
+    driver.run();
+  }
+
+}
\ No newline at end of file

Added: incubator/mesos/trunk/frameworks/daemon/daemon_executor
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/frameworks/daemon/daemon_executor?rev=1131601&view=auto
==============================================================================
--- incubator/mesos/trunk/frameworks/daemon/daemon_executor (added)
+++ incubator/mesos/trunk/frameworks/daemon/daemon_executor Sun Jun  5 03:28:15 2011
@@ -0,0 +1,4 @@
+#!/bin/sh
+FWDIR=`dirname $0`
+cd $FWDIR
+exec java -cp .:../../src/swig/java/nexus.jar -Djava.library.path=../../src/swig/java DaemonExecutor $@
\ No newline at end of file

Propchange: incubator/mesos/trunk/frameworks/daemon/daemon_executor
------------------------------------------------------------------------------
    svn:executable = *