You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@twill.apache.org by ch...@apache.org on 2014/04/22 08:06:28 UTC

[31/50] [abbrv] git commit: made changes as per review #18209 for #TWILL-40

made changes as per review #18209 for #TWILL-40

Signed-off-by: Terence Yim <te...@continuuity.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-twill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-twill/commit/e3ccab18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-twill/tree/e3ccab18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-twill/diff/e3ccab18

Branch: refs/heads/site
Commit: e3ccab184dcea843fa12b877b238a2ca0256f906
Parents: fd10dc9
Author: Fabian Murariu <mu...@gmail.com>
Authored: Wed Feb 19 17:03:49 2014 +0200
Committer: Terence Yim <te...@continuuity.com>
Committed: Fri Feb 21 12:33:26 2014 -0800

----------------------------------------------------------------------
 .../apache/twill/api/ResourceSpecification.java | 71 +++++++++++++-------
 .../internal/DefaultResourceSpecification.java  | 20 +++---
 .../json/ResourceSpecificationCodec.java        |  7 +-
 .../json/ResourceSpecificationCodecTest.java    | 30 +++++++--
 .../twill/internal/yarn/YarnAMClient.java       | 10 +--
 5 files changed, 90 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-twill/blob/e3ccab18/twill-api/src/main/java/org/apache/twill/api/ResourceSpecification.java
----------------------------------------------------------------------
diff --git a/twill-api/src/main/java/org/apache/twill/api/ResourceSpecification.java b/twill-api/src/main/java/org/apache/twill/api/ResourceSpecification.java
index 5416346..b37e491 100644
--- a/twill-api/src/main/java/org/apache/twill/api/ResourceSpecification.java
+++ b/twill-api/src/main/java/org/apache/twill/api/ResourceSpecification.java
@@ -19,6 +19,11 @@ package org.apache.twill.api;
 
 import org.apache.twill.internal.DefaultResourceSpecification;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * This interface provides specifications for resource requirements including set and get methods
  * for number of cores, amount of memory, and number of instances.
@@ -83,14 +88,14 @@ public interface ResourceSpecification {
    * This is a suggestion for the scheduler depending on cluster load it may ignore it
    * @return An array containing the hosts where the containers should run
    */
-  String[] getHosts();
+  List<String> getHosts();
 
   /**
    * Returns the execution racks.
    * This is a suggestion for the scheduler depending on cluster load it may ignore it
    * @return An array containing the racks where the containers should run
    */
-  String[] getRacks();
+  List<String> getRacks();
 
   /**
    * Builder for creating {@link ResourceSpecification}.
@@ -102,31 +107,13 @@ public interface ResourceSpecification {
     private int uplink = -1;
     private int downlink = -1;
     private int instances = 1;
-    private String[] hosts = new String[0];
-    private String[] racks = new String[0];
+    private List<String> hosts = new LinkedList<String>();
+    private List<String> racks = new LinkedList<String>();
 
     public static CoreSetter with() {
       return new Builder().new CoreSetter();
     }
 
-    public final class HostsSetter extends Build {
-      public RackSetter setHosts(String... hosts) {
-        if (hosts != null) {
-          Builder.this.hosts = hosts.clone();
-        }
-        return new RackSetter();
-      }
-    }
-
-    public final class RackSetter extends Build {
-      public AfterRacks setRacks(String... racks) {
-        if (racks != null) {
-          Builder.this.racks = racks.clone();
-        }
-        return new AfterRacks();
-      }
-    }
-
     public final class CoreSetter {
       @Deprecated
       public MemorySetter setCores(int cores) {
@@ -148,13 +135,13 @@ public interface ResourceSpecification {
     }
 
     public final class AfterMemory extends Build {
-      public HostsSetter setInstances(int instances) {
+      public AfterInstances setInstances(int instances) {
         Builder.this.instances = instances;
-        return new HostsSetter();
+        return new AfterInstances();
       }
     }
 
-    public final class AfterRacks extends Build {
+    public final class AfterInstances extends Build {
       public AfterUplink setUplink(int uplink, SizeUnit unit) {
         Builder.this.uplink = uplink * unit.multiplier;
         return new AfterUplink();
@@ -162,10 +149,42 @@ public interface ResourceSpecification {
     }
 
     public final class AfterUplink extends Build {
-      public Done setDownlink(int downlink, SizeUnit unit) {
+      public AfterDownlink setDownlink(int downlink, SizeUnit unit) {
         Builder.this.downlink = downlink * unit.multiplier;
+        return new AfterDownlink();
+      }
+    }
+
+    public final class AfterHosts extends Build {
+      public Done setRacks(String... racks) {
+        if (racks != null) {
+          Builder.this.racks = Arrays.asList(racks);
+        }
         return new Done();
       }
+
+      public Done setRacks(Collection<String> racks){
+        if (racks != null){
+          Builder.this.racks.addAll(racks);
+        }
+        return new Done();
+      }
+    }
+
+    public final class AfterDownlink extends Build {
+      public AfterHosts setHosts(String... hosts) {
+        if (hosts != null) {
+          Builder.this.hosts = Arrays.asList(hosts);
+        }
+        return new AfterHosts();
+      }
+
+      public AfterHosts setHosts(Collection<String> hosts){
+        if (hosts != null){
+          Builder.this.hosts.addAll(hosts);
+        }
+        return new AfterHosts();
+      }
     }
 
     public final class Done extends Build {

http://git-wip-us.apache.org/repos/asf/incubator-twill/blob/e3ccab18/twill-api/src/main/java/org/apache/twill/internal/DefaultResourceSpecification.java
----------------------------------------------------------------------
diff --git a/twill-api/src/main/java/org/apache/twill/internal/DefaultResourceSpecification.java b/twill-api/src/main/java/org/apache/twill/internal/DefaultResourceSpecification.java
index 7274b5c..3b1cc26 100644
--- a/twill-api/src/main/java/org/apache/twill/internal/DefaultResourceSpecification.java
+++ b/twill-api/src/main/java/org/apache/twill/internal/DefaultResourceSpecification.java
@@ -19,6 +19,9 @@ package org.apache.twill.internal;
 
 import org.apache.twill.api.ResourceSpecification;
 
+import java.util.Collections;
+import java.util.List;
+
 /**
  * Straightforward implementation of {@link org.apache.twill.api.ResourceSpecification}.
  */
@@ -28,16 +31,17 @@ public final class DefaultResourceSpecification implements ResourceSpecification
   private final int instances;
   private final int uplink;
   private final int downlink;
-  private final String[] hosts;
-  private final String[] racks;
+  private final List<String> hosts;
+  private final List<String> racks;
 
   public DefaultResourceSpecification(int virtualCores, int memorySize, int instances, int uplink, int downlink) {
-    this(virtualCores, memorySize, instances, uplink, downlink, new String[0], new String[0]);
+    this(virtualCores, memorySize, instances, uplink, downlink,
+            Collections.<String>emptyList(), Collections.<String>emptyList());
   }
 
   public DefaultResourceSpecification(int virtualCores, int memorySize, int instances,
                                       int uplink, int downlink,
-                                      String[] hosts, String[] racks) {
+                                      List<String> hosts, List<String> racks) {
     this.virtualCores = virtualCores;
     this.memorySize = memorySize;
     this.instances = instances;
@@ -69,13 +73,13 @@ public final class DefaultResourceSpecification implements ResourceSpecification
   }
 
   @Override
-  public String[] getHosts() {
-    return hosts.clone();
+  public List<String> getHosts() {
+    return Collections.unmodifiableList(this.hosts);
   }
 
   @Override
-  public String[] getRacks() {
-    return racks.clone();
+  public List<String> getRacks() {
+    return Collections.unmodifiableList(this.racks);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-twill/blob/e3ccab18/twill-core/src/main/java/org/apache/twill/internal/json/ResourceSpecificationCodec.java
----------------------------------------------------------------------
diff --git a/twill-core/src/main/java/org/apache/twill/internal/json/ResourceSpecificationCodec.java b/twill-core/src/main/java/org/apache/twill/internal/json/ResourceSpecificationCodec.java
index 5233220..5f7d7ae 100644
--- a/twill-core/src/main/java/org/apache/twill/internal/json/ResourceSpecificationCodec.java
+++ b/twill-core/src/main/java/org/apache/twill/internal/json/ResourceSpecificationCodec.java
@@ -28,6 +28,7 @@ import org.apache.twill.api.ResourceSpecification;
 import org.apache.twill.internal.DefaultResourceSpecification;
 
 import java.lang.reflect.Type;
+import java.util.List;
 
 /**
  *
@@ -52,8 +53,8 @@ final class ResourceSpecificationCodec implements JsonSerializer<ResourceSpecifi
   public ResourceSpecification deserialize(JsonElement json, Type typeOfT,
                                            JsonDeserializationContext context) throws JsonParseException {
     JsonObject jsonObj = json.getAsJsonObject();
-    final String[] hosts = context.deserialize(jsonObj.getAsJsonArray("hosts"), String[].class);
-    final String[] racks = context.deserialize(jsonObj.getAsJsonArray("racks"), String[].class);
+    final List<String> hosts = context.deserialize(jsonObj.getAsJsonArray("hosts"), List.class);
+    final List<String> racks = context.deserialize(jsonObj.getAsJsonArray("racks"), List.class);
     return new DefaultResourceSpecification(jsonObj.get("cores").getAsInt(),
                                             jsonObj.get("memorySize").getAsInt(),
                                             jsonObj.get("instances").getAsInt(),
@@ -61,8 +62,6 @@ final class ResourceSpecificationCodec implements JsonSerializer<ResourceSpecifi
                                             jsonObj.get("downlink").getAsInt(),
                                             hosts,
                                             racks);
-
-
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-twill/blob/e3ccab18/twill-core/src/test/java/org/apache/twill/internal/json/ResourceSpecificationCodecTest.java
----------------------------------------------------------------------
diff --git a/twill-core/src/test/java/org/apache/twill/internal/json/ResourceSpecificationCodecTest.java b/twill-core/src/test/java/org/apache/twill/internal/json/ResourceSpecificationCodecTest.java
index b5ffec6..044a465 100644
--- a/twill-core/src/test/java/org/apache/twill/internal/json/ResourceSpecificationCodecTest.java
+++ b/twill-core/src/test/java/org/apache/twill/internal/json/ResourceSpecificationCodecTest.java
@@ -9,6 +9,8 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.unitils.reflectionassert.ReflectionAssert;
 
+import java.util.Arrays;
+
 /**
  * Maybe this checkstyle rule needs to be removed
  */
@@ -32,7 +34,7 @@ public class ResourceSpecificationCodecTest {
             "}";
     final ResourceSpecification expected =
             new DefaultResourceSpecification(2, 1024, 2, 100, 100,
-                    new String[]{"one1", "two2"}, new String[]{"three3"});
+                    Arrays.asList("one1", "two2"), Arrays.asList("three3"));
     final String actualString = gson.toJson(expected);
     Assert.assertEquals(expectedString, actualString);
 
@@ -50,14 +52,32 @@ public class ResourceSpecificationCodecTest {
             .setVirtualCores(5)
             .setMemory(4, ResourceSpecification.SizeUnit.GIGA)
             .setInstances(3)
+            .setUplink(10, ResourceSpecification.SizeUnit.GIGA)
+            .setDownlink(5, ResourceSpecification.SizeUnit.GIGA)
             .setHosts("a1", "b2", "c3")
             .setRacks("r2")
+            .build();
+    final DefaultResourceSpecification expected =
+            new DefaultResourceSpecification(5, 4096, 3, 10240, 5120,
+                    Arrays.asList("a1", "b2", "c3"), Arrays.asList("r2"));
+    ReflectionAssert.assertLenientEquals(expected, actual);
+  }
+
+  @Test
+  public void testBuilderWithLists() throws Exception {
+    final ResourceSpecification actual = ResourceSpecification.Builder.with()
+            .setVirtualCores(5)
+            .setMemory(4, ResourceSpecification.SizeUnit.GIGA)
+            .setInstances(3)
             .setUplink(10, ResourceSpecification.SizeUnit.GIGA)
-            .setDownlink(5, ResourceSpecification.SizeUnit.GIGA).build();
-    final DefaultResourceSpecification expectd =
+            .setDownlink(5, ResourceSpecification.SizeUnit.GIGA)
+            .setHosts(Arrays.asList("a1", "b2", "c3"))
+            .setRacks(Arrays.asList("r2"))
+            .build();
+    final DefaultResourceSpecification expected =
             new DefaultResourceSpecification(5, 4096, 3, 10240, 5120,
-                    new String[]{"a1", "b2", "c3"}, new String[]{"r2"});
-    ReflectionAssert.assertLenientEquals(expectd, actual);
+                    Arrays.asList("a1", "b2", "c3"), Arrays.asList("r2"));
+    ReflectionAssert.assertLenientEquals(expected, actual);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-twill/blob/e3ccab18/twill-yarn/src/main/java/org/apache/twill/internal/yarn/YarnAMClient.java
----------------------------------------------------------------------
diff --git a/twill-yarn/src/main/java/org/apache/twill/internal/yarn/YarnAMClient.java b/twill-yarn/src/main/java/org/apache/twill/internal/yarn/YarnAMClient.java
index 9351201..370ca3c 100644
--- a/twill-yarn/src/main/java/org/apache/twill/internal/yarn/YarnAMClient.java
+++ b/twill-yarn/src/main/java/org/apache/twill/internal/yarn/YarnAMClient.java
@@ -55,11 +55,11 @@ public interface YarnAMClient extends Service {
       this.count = count;
     }
 
-    public ContainerRequestBuilder addHosts(String...newHosts) {
+    public ContainerRequestBuilder addHosts(Collection<String> newHosts) {
       return add(hosts, newHosts);
     }
 
-    public ContainerRequestBuilder addRacks(String...newRacks) {
+    public ContainerRequestBuilder addRacks(Collection<String> newRacks) {
       return add(racks, newRacks);
     }
 
@@ -73,9 +73,9 @@ public interface YarnAMClient extends Service {
      */
     public abstract String apply();
 
-    private <T> ContainerRequestBuilder add(Collection<T> collection, T... more) {
-      if (!ArrayUtils.isEmpty(more)){
-        Collections.addAll(collection, more);
+    private <T> ContainerRequestBuilder add(Collection<T> collection, Collection<T> more) {
+      if (more != null){
+        collection.addAll(more);
       }
       return this;
     }