You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/05/28 23:02:01 UTC
[03/37] incubator-ignite git commit: #ignite-857 Added
AmazonScheduler.
#ignite-857 Added AmazonScheduler.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/fbdcb706
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/fbdcb706
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/fbdcb706
Branch: refs/heads/ignite-gg-10369
Commit: fbdcb70677249ed6aceab5057756e7eb04c89c04
Parents: b896ec8
Author: nikolay tikhonov <nt...@gridgain.com>
Authored: Thu May 14 19:48:05 2015 +0300
Committer: nikolay tikhonov <nt...@gridgain.com>
Committed: Thu May 14 19:48:05 2015 +0300
----------------------------------------------------------------------
.../ignite/messo/IgniteAmazonScheduler.java | 81 ++++++++++++++++++++
.../apache/ignite/messo/IgniteFramework.java | 27 ++++++-
.../apache/ignite/messo/IgniteScheduler.java | 67 ++++++++++------
3 files changed, 149 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fbdcb706/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteAmazonScheduler.java
----------------------------------------------------------------------
diff --git a/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteAmazonScheduler.java b/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteAmazonScheduler.java
new file mode 100644
index 0000000..250fec6
--- /dev/null
+++ b/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteAmazonScheduler.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.messo;
+
+import org.apache.mesos.*;
+
+/**
+ * TODO
+ */
+public class IgniteAmazonScheduler extends IgniteScheduler {
+ /** */
+ public static final String AMAZON = "amazon";
+
+ /** Amazon credential. */
+ private final String accessKey, secretKey;
+
+ /**
+ * Constructor.
+ *
+ * @param accessKey Access key.
+ * @param secretKey Secret key.
+ */
+ public IgniteAmazonScheduler(String accessKey, String secretKey) {
+ assert accessKey != null;
+ assert secretKey != null;
+
+ this.accessKey = accessKey;
+ this.secretKey = secretKey;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Protos.TaskInfo createTask(Protos.Offer offer, Pair<Double, Double> cpuMem,
+ Protos.TaskID taskId) {
+ // Docker image info.
+ Protos.ContainerInfo.DockerInfo.Builder docker = Protos.ContainerInfo.DockerInfo.newBuilder()
+ .setImage(IMAGE)
+ .setNetwork(Protos.ContainerInfo.DockerInfo.Network.HOST);
+
+ // Container info.
+ Protos.ContainerInfo.Builder cont = Protos.ContainerInfo.newBuilder();
+ cont.setType(Protos.ContainerInfo.Type.DOCKER);
+ cont.setDocker(docker.build());
+
+ return Protos.TaskInfo.newBuilder()
+ .setName("task " + taskId.getValue())
+ .setTaskId(taskId)
+ .setSlaveId(offer.getSlaveId())
+ .addResources(Protos.Resource.newBuilder()
+ .setName(CPUS)
+ .setType(Protos.Value.Type.SCALAR)
+ .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpuMem._1)))
+ .addResources(Protos.Resource.newBuilder()
+ .setName(MEM)
+ .setType(Protos.Value.Type.SCALAR)
+ .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpuMem._2)))
+ .setContainer(cont)
+ .setCommand(Protos.CommandInfo.newBuilder()
+ .setShell(false)
+ .addArguments(STARTUP_SCRIPT)
+ .addArguments(String.valueOf(cpuMem._2.intValue()))
+ .addArguments(AMAZON)
+ .addArguments(accessKey)
+ .addArguments(secretKey))
+ .build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fbdcb706/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteFramework.java
----------------------------------------------------------------------
diff --git a/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteFramework.java b/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteFramework.java
index 54d34c1..dfc3eb2 100644
--- a/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteFramework.java
+++ b/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteFramework.java
@@ -28,6 +28,8 @@ public class IgniteFramework {
* @param args Args
*/
public static void main(String[] args) {
+ checkArgs(args);
+
final int frameworkFailoverTimeout = 0;
Protos.FrameworkInfo.Builder frameworkBuilder = Protos.FrameworkInfo.newBuilder()
@@ -41,7 +43,7 @@ public class IgniteFramework {
}
// create the scheduler
- final Scheduler scheduler = new IgniteScheduler();
+ final Scheduler scheduler = createIgniteScheduler(args);
// create the driver
MesosSchedulerDriver driver;
@@ -80,4 +82,27 @@ public class IgniteFramework {
System.exit(status);
}
+
+ /**
+ * @param args Arguments.
+ * @return Ignite scheduler.
+ */
+ private static IgniteScheduler createIgniteScheduler(String args[]) {
+ if (args.length >= 3 && args[1].equals(IgniteAmazonScheduler.AMAZON))
+ return new IgniteAmazonScheduler(args[2], args[3]);
+ else
+ return new IgniteScheduler();
+ }
+
+ /**
+ * Check input arguments.
+ *
+ * @param args Arguments.
+ */
+ private static void checkArgs(String[] args) {
+ if (args.length == 0)
+ throw new IllegalArgumentException("Illegal arguments.");
+
+ // TODO: add more
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/fbdcb706/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteScheduler.java
----------------------------------------------------------------------
diff --git a/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteScheduler.java b/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteScheduler.java
index 3cb63e6..a029e69 100644
--- a/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteScheduler.java
+++ b/modules/mesos/src/main/java/org/apache/ignite/messo/IgniteScheduler.java
@@ -30,6 +30,9 @@ public class IgniteScheduler implements Scheduler {
/** Docker image name. */
public static final String IMAGE = "apacheignite/ignite-docker";
+ /** Startup sctipt path. */
+ public static final String STARTUP_SCRIPT = "/home/ignite/startup.sh";
+
/** Cpus. */
public static final String CPUS = "cpus";
@@ -76,32 +79,8 @@ public class IgniteScheduler implements Scheduler {
log.info("Launching task {}", taskId.getValue());
- // Docker image info.
- Protos.ContainerInfo.DockerInfo.Builder docker = Protos.ContainerInfo.DockerInfo.newBuilder()
- .setImage(IMAGE)
- .setNetwork(Protos.ContainerInfo.DockerInfo.Network.HOST);
-
- // Container info.
- Protos.ContainerInfo.Builder cont = Protos.ContainerInfo.newBuilder();
- cont.setType(Protos.ContainerInfo.Type.DOCKER);
- cont.setDocker(docker.build());
-
// Create task to run.
- Protos.TaskInfo task = Protos.TaskInfo.newBuilder()
- .setName("task " + taskId.getValue())
- .setTaskId(taskId)
- .setSlaveId(offer.getSlaveId())
- .addResources(Protos.Resource.newBuilder()
- .setName(CPUS)
- .setType(Protos.Value.Type.SCALAR)
- .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpuMem._1)))
- .addResources(Protos.Resource.newBuilder()
- .setName(MEM)
- .setType(Protos.Value.Type.SCALAR)
- .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpuMem._2)))
- .setContainer(cont)
- .setCommand(Protos.CommandInfo.newBuilder().setShell(false))
- .build();
+ Protos.TaskInfo task = createTask(offer, cpuMem, taskId);
schedulerDriver.launchTasks(Collections.singletonList(offer.getId()),
Collections.singletonList(task),
@@ -110,6 +89,44 @@ public class IgniteScheduler implements Scheduler {
}
/**
+ * Create Task.
+ * @param offer Offer.
+ * @param cpuMem Cpu and mem on slave.
+ * @param taskId Task id.
+ * @return Task.
+ */
+ protected Protos.TaskInfo createTask(Protos.Offer offer, Pair<Double, Double> cpuMem, Protos.TaskID taskId) {
+ // Docker image info.
+ Protos.ContainerInfo.DockerInfo.Builder docker = Protos.ContainerInfo.DockerInfo.newBuilder()
+ .setImage(IMAGE)
+ .setNetwork(Protos.ContainerInfo.DockerInfo.Network.HOST);
+
+ // Container info.
+ Protos.ContainerInfo.Builder cont = Protos.ContainerInfo.newBuilder();
+ cont.setType(Protos.ContainerInfo.Type.DOCKER);
+ cont.setDocker(docker.build());
+
+ return Protos.TaskInfo.newBuilder()
+ .setName("task " + taskId.getValue())
+ .setTaskId(taskId)
+ .setSlaveId(offer.getSlaveId())
+ .addResources(Protos.Resource.newBuilder()
+ .setName(CPUS)
+ .setType(Protos.Value.Type.SCALAR)
+ .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpuMem._1)))
+ .addResources(Protos.Resource.newBuilder()
+ .setName(MEM)
+ .setType(Protos.Value.Type.SCALAR)
+ .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpuMem._2)))
+ .setContainer(cont)
+ .setCommand(Protos.CommandInfo.newBuilder()
+ .setShell(false)
+ .addArguments(STARTUP_SCRIPT)
+ .addArguments(String.valueOf(cpuMem._2.intValue())))
+ .build();
+ }
+
+ /**
* Check slave resources and return resources infos.
*
* @param offer Offer request.