You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/06/01 16:44:59 UTC
[07/50] incubator-ignite git commit: #IGNITE-857 Update javadoc.
#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-10385
Commit: 76a0d0aeb676366a2733b25d8162bdfeb039354d
Parents: 4b48218
Author: nikolay tikhonov <nt...@gridgain.com>
Authored: Mon May 25 19:03:49 2015 +0300
Committer: nikolay tikhonov <nt...@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