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 18:45:08 UTC

[10/35] 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-218-hdfs-only
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