Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A7B0D1738B for ; Thu, 14 May 2015 16:48:35 +0000 (UTC) Received: (qmail 69532 invoked by uid 500); 14 May 2015 16:48:35 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 69502 invoked by uid 500); 14 May 2015 16:48:35 -0000 Mailing-List: contact commits-help@ignite.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.incubator.apache.org Delivered-To: mailing list commits@ignite.incubator.apache.org Received: (qmail 69493 invoked by uid 99); 14 May 2015 16:48:35 -0000 Received: from Unknown (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 May 2015 16:48:35 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 1CC501827B6 for ; Thu, 14 May 2015 16:48:35 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.771 X-Spam-Level: * X-Spam-Status: No, score=1.771 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-eu-west.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id 9CEbAiqrUHYI for ; Thu, 14 May 2015 16:48:25 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-eu-west.apache.org (ASF Mail Server at mx1-eu-west.apache.org) with SMTP id C80B22316E for ; Thu, 14 May 2015 16:48:23 +0000 (UTC) Received: (qmail 69329 invoked by uid 99); 14 May 2015 16:48:23 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 May 2015 16:48:23 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id DFEE3DFC81; Thu, 14 May 2015 16:48:22 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.incubator.apache.org Message-Id: <2f374b8e71f94d9aafd6165f9df84c97@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: incubator-ignite git commit: #ignite-857 Added AmazonScheduler. Date: Thu, 14 May 2015 16:48:22 +0000 (UTC) Repository: incubator-ignite Updated Branches: refs/heads/ignite-857 b896ec8b3 -> fbdcb7067 #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-857 Commit: fbdcb70677249ed6aceab5057756e7eb04c89c04 Parents: b896ec8 Author: nikolay tikhonov Authored: Thu May 14 19:48:05 2015 +0300 Committer: nikolay tikhonov 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 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 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.