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 = *