#IGNITE-857 Update javadoc.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/76a0d0ae Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/76a0d0ae Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/76a0d0ae Branch: refs/heads/ignite-gg-10054 Commit: 76a0d0aeb676366a2733b25d8162bdfeb039354d Parents: 4b48218 Author: nikolay tikhonov <ntikho...@gridgain.com> Authored: Mon May 25 19:03:49 2015 +0300 Committer: nikolay tikhonov <ntikho...@gridgain.com> Committed: Mon May 25 19:03:49 2015 +0300 ---------------------------------------------------------------------- .../apache/ignite/mesos/ClusterProperties.java | 106 ++++++++++++++++++- .../apache/ignite/mesos/IgniteFramework.java | 43 +++----- .../apache/ignite/mesos/IgniteScheduler.java | 26 ++--- .../org/apache/ignite/mesos/IgniteTask.java | 2 +- .../org/apache/ignite/mesos/package-info.java | 2 +- .../ignite/mesos/resource/IgniteProvider.java | 2 +- .../mesos/resource/ResourceController.java | 25 ++--- .../ignite/mesos/resource/ResourceProvider.java | 2 +- .../ignite/mesos/resource/package-info.java | 22 ++++ 9 files changed, 166 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/ClusterProperties.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/ClusterProperties.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/ClusterProperties.java index bb7f7a4..b3093f8 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/ClusterProperties.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/ClusterProperties.java @@ -18,6 +18,7 @@ package org.apache.ignite.mesos; import java.io.*; +import java.net.*; import java.util.*; /** @@ -25,7 +26,7 @@ import java.util.*; */ public class ClusterProperties { /** Unlimited. */ - public static final double UNLIMITED = -1; + public static final double UNLIMITED = Double.MAX_VALUE; /** */ public static final String MESOS_MASTER_URL = "MESOS_MASTER_URL"; @@ -37,24 +38,57 @@ public class ClusterProperties { private String mesosUrl = DEFAULT_MESOS_MASTER_URL; /** */ + public static final String IGNITE_HTTP_SERVER_HOST = "IGNITE_HTTP_SERVER_HOST"; + + /** Http server host. */ + private String httpServerHost = null; + + /** */ + public static final String IGNITE_HTTP_SERVER_PORT = "IGNITE_HTTP_SERVER_PORT"; + + /** */ + public static final String DEFAULT_HTTP_SERVER_PORT = "47511"; + + /** Http server host. */ + private int httpServerPort = Integer.valueOf(DEFAULT_HTTP_SERVER_PORT); + + /** */ public static final String IGNITE_RESOURCE_CPU_CORES = "IGNITE_RESOURCE_CPU_CORES"; /** CPU limit. */ private double cpu = UNLIMITED; /** */ + public static final String IGNITE_RESOURCE_CPU_CORES_PER_NODE = "IGNITE_RESOURCE_CPU_CORES_PER_NODE"; + + /** CPU limit. */ + private double cpuPerNode = UNLIMITED; + + /** */ public static final String IGNITE_RESOURCE_MEM_MB = "IGNITE_RESOURCE_MEM_MB"; /** Memory limit. */ private double mem = UNLIMITED; /** */ + public static final String IGNITE_RESOURCE_MEM_MB_PER_NODE = "IGNITE_RESOURCE_MEM_MB_PER_NODE"; + + /** Memory limit. */ + private double memPerNode = UNLIMITED; + + /** */ public static final String IGNITE_RESOURCE_DISK_MB = "IGNITE_RESOURCE_DISK_MB"; /** Disk space limit. */ private double disk = UNLIMITED; /** */ + public static final String IGNITE_RESOURCE_DISK_MB_PER_NODE = "IGNITE_RESOURCE_DISK_MB_PER_NODE"; + + /** Disk space limit. */ + private double diskPerNode = UNLIMITED; + + /** */ public static final String IGNITE_RESOURCE_NODE_CNT = "IGNITE_RESOURCE_NODE_CNT"; /** Node count limit. */ @@ -121,6 +155,13 @@ public class ClusterProperties { } /** + * @return CPU count limit. + */ + public double cpusPerNode(){ + return cpuPerNode; + } + + /** * @return mem limit. */ public double memory() { @@ -128,6 +169,13 @@ public class ClusterProperties { } /** + * @return mem limit. + */ + public double memoryPerNode() { + return memPerNode; + } + + /** * @return disk limit. */ public double disk() { @@ -135,6 +183,13 @@ public class ClusterProperties { } /** + * @return disk limit per node. + */ + public double diskPerNode() { + return diskPerNode; + } + + /** * @return instance count limit. */ public double instances() { @@ -191,6 +246,20 @@ public class ClusterProperties { } /** + * @return Http server host. + */ + public String httpServerHost() { + return httpServerHost; + } + + /** + * @return Http server port. + */ + public int httpServerPort() { + return httpServerPort; + } + + /** * @param config path to config file. * @return Cluster configuration. */ @@ -208,9 +277,16 @@ public class ClusterProperties { prop.mesosUrl = getStringProperty(MESOS_MASTER_URL, props, DEFAULT_MESOS_MASTER_URL); + prop.httpServerHost = getStringProperty(IGNITE_HTTP_SERVER_HOST, props, getNonLoopbackAddress()); + prop.httpServerPort = Integer.valueOf(getStringProperty(IGNITE_HTTP_SERVER_PORT, props, + DEFAULT_HTTP_SERVER_PORT)); + prop.cpu = getDoubleProperty(IGNITE_RESOURCE_CPU_CORES, props, UNLIMITED); + prop.cpuPerNode = getDoubleProperty(IGNITE_RESOURCE_CPU_CORES_PER_NODE, props, UNLIMITED); prop.mem = getDoubleProperty(IGNITE_RESOURCE_MEM_MB, props, UNLIMITED); + prop.memPerNode = getDoubleProperty(IGNITE_RESOURCE_MEM_MB_PER_NODE, props, UNLIMITED); prop.disk = getDoubleProperty(IGNITE_RESOURCE_DISK_MB, props, UNLIMITED); + prop.diskPerNode = getDoubleProperty(IGNITE_RESOURCE_DISK_MB_PER_NODE, props, UNLIMITED); prop.nodeCnt = getDoubleProperty(IGNITE_RESOURCE_NODE_CNT, props, UNLIMITED); prop.minCpu = getDoubleProperty(IGNITE_RESOURCE_MIN_CPU_CNT_PER_NODE, props, DEFAULT_RESOURCE_MIN_CPU); prop.minMemory = getDoubleProperty(IGNITE_RESOURCE_MIN_MEMORY_PER_NODE, props, DEFAULT_RESOURCE_MIN_MEM); @@ -260,4 +336,32 @@ public class ClusterProperties { return property == null ? defaultVal : property; } + + /** + * Finds a local, non-loopback, IPv4 address + * + * @return The first non-loopback IPv4 address found, or + * <code>null</code> if no such addresses found + * @throws java.net.SocketException + * If there was a problem querying the network + * interfaces + */ + public static String getNonLoopbackAddress() throws SocketException { + Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces(); + + while (ifaces.hasMoreElements()) { + NetworkInterface iface = ifaces.nextElement(); + + Enumeration<InetAddress> addresses = iface.getInetAddresses(); + + while (addresses.hasMoreElements()) { + InetAddress addr = addresses.nextElement(); + + if (addr instanceof Inet4Address && !addr.isLoopbackAddress()) + return addr.getHostAddress(); + } + } + + throw new RuntimeException("Failed. Couldn't find non-loopback address"); + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java index 0ff945b..6cc43b1 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java @@ -27,48 +27,51 @@ import org.glassfish.jersey.server.*; import java.net.*; /** - * TODO + * Ignite mesos framework. */ public class IgniteFramework { - public static final String IGNITE_FRAMEWORK_NAME = "IgniteFramework"; + public static final String IGNITE_FRAMEWORK_NAME = "Ignite"; /** - * @param args Args + * Main methods has only one optional parameter - path to properties files. + * + * @param args Args. */ public static void main(String[] args) throws Exception { final int frameworkFailoverTimeout = 0; + // Have Mesos fill in the current user. Protos.FrameworkInfo.Builder frameworkBuilder = Protos.FrameworkInfo.newBuilder() .setName(IGNITE_FRAMEWORK_NAME) - .setUser("") // Have Mesos fill in the current user. - .setFailoverTimeout(frameworkFailoverTimeout); // timeout in seconds + .setUser("") + .setFailoverTimeout(frameworkFailoverTimeout); if (System.getenv("MESOS_CHECKPOINT") != null) { System.out.println("Enabling checkpoint for the framework"); frameworkBuilder.setCheckpoint(true); } - ClusterProperties clusterProperties = ClusterProperties.from(args.length == 1 ? args[0] : null); + ClusterProperties clusterProps = ClusterProperties.from(args.length == 1 ? args[0] : null); - String baseUrl = String.format("http://%s:%d", formatInetAddress(InetAddress.getLocalHost()), 4444); + String baseUrl = String.format("http://%s:%d", clusterProps.httpServerHost(), clusterProps.httpServerPort()); URI httpServerBaseUri = URI.create(baseUrl); ResourceConfig rc = new ResourceConfig() - .registerInstances(new ResourceController(clusterProperties.userLibs(), clusterProperties.igniteCfg(), - clusterProperties.igniteWorkDir())); + .registerInstances(new ResourceController(clusterProps.userLibs(), clusterProps.igniteCfg(), + clusterProps.igniteWorkDir())); HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(httpServerBaseUri, rc); ResourceProvider provider = new ResourceProvider(); - IgniteProvider igniteProvider = new IgniteProvider(clusterProperties.igniteWorkDir()); + IgniteProvider igniteProvider = new IgniteProvider(clusterProps.igniteWorkDir()); - provider.init(clusterProperties, igniteProvider, baseUrl); + provider.init(clusterProps, igniteProvider, baseUrl); // Create the scheduler. - Scheduler scheduler = new IgniteScheduler(clusterProperties, provider); + Scheduler scheduler = new IgniteScheduler(clusterProps, provider); // create the driver MesosSchedulerDriver driver; @@ -92,13 +95,13 @@ public class IgniteFramework { frameworkBuilder.setPrincipal(System.getenv("DEFAULT_PRINCIPAL")); - driver = new MesosSchedulerDriver(scheduler, frameworkBuilder.build(), clusterProperties.masterUrl(), + driver = new MesosSchedulerDriver(scheduler, frameworkBuilder.build(), clusterProps.masterUrl(), credential); } else { frameworkBuilder.setPrincipal("ignite-framework-java"); - driver = new MesosSchedulerDriver(scheduler, frameworkBuilder.build(), clusterProperties.masterUrl()); + driver = new MesosSchedulerDriver(scheduler, frameworkBuilder.build(), clusterProps.masterUrl()); } int status = driver.run() == Protos.Status.DRIVER_STOPPED ? 0 : 1; @@ -110,16 +113,4 @@ public class IgniteFramework { System.exit(status); } - - public static String formatInetAddress(final InetAddress inetAddress) { - if (inetAddress instanceof Inet4Address) { - return inetAddress.getHostAddress(); - } - else if (inetAddress instanceof Inet6Address) { - return String.format("[%s]", inetAddress.getHostAddress()); - } - else - throw new IllegalArgumentException("InetAddress type: " + inetAddress.getClass().getName() + - " is not supported"); - } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteScheduler.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteScheduler.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteScheduler.java index b1ff930..cd517fb 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteScheduler.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteScheduler.java @@ -25,7 +25,7 @@ import java.util.*; import java.util.concurrent.atomic.*; /** - * TODO + * Ignite scheduler receives offers from Mesos and decides how many resources will be occupied. */ public class IgniteScheduler implements Scheduler { /** Cpus. */ @@ -162,7 +162,7 @@ public class IgniteScheduler implements Scheduler { .setName(MEM) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(igniteTask.mem()))) - .build(); + .build(); } /** @@ -187,8 +187,8 @@ public class IgniteScheduler implements Scheduler { * @return Ignite task description. */ private IgniteTask checkOffer(Protos.Offer offer) { - // Check that limit on running nodes. - if (!checkLimit(clusterLimit.instances(), tasks.size())) + // Check limit on running nodes. + if (clusterLimit.instances() <= tasks.size()) return null; double cpus = -1; @@ -238,12 +238,9 @@ public class IgniteScheduler implements Scheduler { totalDisk += task.disk(); } - cpus = clusterLimit.cpus() == ClusterProperties.UNLIMITED ? cpus : - Math.min(clusterLimit.cpus() - totalCpus, cpus); - mem = clusterLimit.memory() == ClusterProperties.UNLIMITED ? mem : - Math.min(clusterLimit.memory() - totalMem, mem); - disk = clusterLimit.disk() == ClusterProperties.UNLIMITED ? disk : - Math.min(clusterLimit.disk() - totalDisk, disk); + cpus = Math.min(clusterLimit.cpus() - totalCpus, Math.min(cpus, clusterLimit.cpusPerNode())); + mem = Math.min(clusterLimit.memory() - totalMem, Math.min(mem, clusterLimit.memoryPerNode())); + disk = Math.min(clusterLimit.disk() - totalDisk, Math.min(disk, clusterLimit.diskPerNode())); if (cpus > 0 && mem > 0) return new IgniteTask(offer.getHostname(), cpus, mem, disk); @@ -258,15 +255,6 @@ public class IgniteScheduler implements Scheduler { } } - /** - * @param limit Limit. - * @param value Value. - * @return {@code True} if limit isn't violated else {@code false}. - */ - private boolean checkLimit(double limit, double value) { - return limit == ClusterProperties.UNLIMITED || limit <= value; - } - /** {@inheritDoc} */ @Override public void offerRescinded(SchedulerDriver schedulerDriver, Protos.OfferID offerID) { log.info("offerRescinded()"); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteTask.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteTask.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteTask.java index bad9996..c41ff49 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteTask.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteTask.java @@ -18,7 +18,7 @@ package org.apache.ignite.mesos; /** - * TODO + * Information about launched task. */ public class IgniteTask { /** */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/package-info.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/package-info.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/package-info.java index 49ddf86..0404c02 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/package-info.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/package-info.java @@ -17,6 +17,6 @@ /** * <!-- Package description. --> - * Messo Framework. + * Contains classes to support integration with Apache Mesos. */ package org.apache.ignite.mesos; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java index 18ceb00..9a27539 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java @@ -23,7 +23,7 @@ import java.nio.channels.*; import java.util.*; /** - * TODO + * Class downloads and stores Ignite. */ public class IgniteProvider { /** */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceController.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceController.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceController.java index 5c9e693..8f0a2af 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceController.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceController.java @@ -22,7 +22,7 @@ import javax.ws.rs.core.*; import java.io.*; /** - * + * HTTP controller which provides on slave resources. */ @Path("/") public class ResourceController { @@ -58,9 +58,8 @@ public class ResourceController { } /** - * - * @param ignite - * @return + * @param ignite Ignite jar name. + * @return Http response. */ @GET @Path(IGNITE_PREFIX + "{ignite-dist}") @@ -69,9 +68,8 @@ public class ResourceController { } /** - * - * @param lib - * @return + * @param lib user's jar. + * @return Http response. */ @GET @Path(LIBS_PREFIX + "{lib}") @@ -81,8 +79,8 @@ public class ResourceController { /** * - * @param cfg - * @return + * @param cfg Config file. + * @return Http response. */ @GET @Path(CONFIG_PREFIX + "{cfg}") @@ -91,9 +89,8 @@ public class ResourceController { } /** - * - * @param cfg - * @return + * @param cfg Config file. + * @return Http response. */ @GET @Path(DEFAULT_CONFIG + "{cfg}") @@ -111,7 +108,7 @@ public class ResourceController { */ private static Response handleRequest(File resource, String type, String attachmentName) { final Response.ResponseBuilder builder = Response.ok(resource, type); - builder.header("Content-Disposition", String.format("attachment; filename=\"%s\"", attachmentName)); + builder.header("Content-Disposition", "attachment; filename=\"" + attachmentName + "\""); return builder.build(); } @@ -124,7 +121,7 @@ public class ResourceController { */ private static Response handleRequest(InputStream resource, String type, String attachmentName) { final Response.ResponseBuilder builder = Response.ok(resource, type); - builder.header("Content-Disposition", String.format("attachment; filename=\"%s\"", attachmentName)); + builder.header("Content-Disposition", "attachment; filename=\"" + attachmentName + "\""); return builder.build(); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceProvider.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceProvider.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceProvider.java index 544b15c..1b1f615 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceProvider.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/ResourceProvider.java @@ -25,7 +25,7 @@ import java.util.*; import static org.apache.ignite.mesos.resource.ResourceController.*; /** - * + * Provides path to user's libs and config file. */ public class ResourceProvider { /** Ignite url. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76a0d0ae/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/package-info.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/package-info.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/package-info.java new file mode 100644 index 0000000..7e3614e --- /dev/null +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/package-info.java @@ -0,0 +1,22 @@ +/* + * 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 description. --> + * Contains classes provide access to resources. + */ +package org.apache.ignite.mesos.resource; \ No newline at end of file