You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ma...@apache.org on 2015/08/26 20:52:12 UTC

aurora git commit: Setting revocable flag on a TaskInfo.

Repository: aurora
Updated Branches:
  refs/heads/master d901347cf -> 3fdbc8c16


Setting revocable flag on a TaskInfo.

Reviewed at https://reviews.apache.org/r/37776/


Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/3fdbc8c1
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/3fdbc8c1
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/3fdbc8c1

Branch: refs/heads/master
Commit: 3fdbc8c163002d397b42eb0ba219c2e75aab5a3e
Parents: d901347
Author: Maxim Khutornenko <ma...@apache.org>
Authored: Wed Aug 26 11:49:50 2015 -0700
Committer: Maxim Khutornenko <ma...@apache.org>
Committed: Wed Aug 26 11:49:50 2015 -0700

----------------------------------------------------------------------
 .../org/apache/aurora/benchmark/Offers.java     |   4 +-
 .../apache/aurora/scheduler/ResourceSlot.java   |  38 ++++---
 .../scheduler/mesos/MesosTaskFactory.java       |  10 +-
 .../aurora/scheduler/ResourceSlotTest.java      |  31 ++++--
 .../apache/aurora/scheduler/ResourcesTest.java  |  39 ++-----
 .../mesos/MesosTaskFactoryImplTest.java         | 103 ++++++++++++++-----
 .../preemptor/PreemptionVictimFilterTest.java   |   3 +-
 7 files changed, 145 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/jmh/java/org/apache/aurora/benchmark/Offers.java
----------------------------------------------------------------------
diff --git a/src/jmh/java/org/apache/aurora/benchmark/Offers.java b/src/jmh/java/org/apache/aurora/benchmark/Offers.java
index 9f3ce16..28aace7 100644
--- a/src/jmh/java/org/apache/aurora/benchmark/Offers.java
+++ b/src/jmh/java/org/apache/aurora/benchmark/Offers.java
@@ -21,6 +21,7 @@ import com.twitter.common.quantity.Data;
 
 import org.apache.aurora.scheduler.HostOffer;
 import org.apache.aurora.scheduler.ResourceSlot;
+import org.apache.aurora.scheduler.TierInfo;
 import org.apache.aurora.scheduler.offers.OfferManager;
 import org.apache.aurora.scheduler.storage.entities.IHostAttributes;
 import org.apache.mesos.Protos;
@@ -88,7 +89,8 @@ final class Offers {
       int id = 0;
       for (IHostAttributes attributes : hostAttributes) {
         Protos.Offer offer = Protos.Offer.newBuilder()
-            .addAllResources(new ResourceSlot(cpu, ram, disk, ports).toResourceList())
+            .addAllResources(new ResourceSlot(cpu, ram, disk, ports)
+                .toResourceList(new TierInfo(false)))
             .setId(Protos.OfferID.newBuilder().setValue(String.format(OFFER_ID_FORMAT, id++)))
             .setFrameworkId(Protos.FrameworkID.newBuilder().setValue(FRAMEWORK_ID))
             .setSlaveId(Protos.SlaveID.newBuilder().setValue(attributes.getSlaveId()))

http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/main/java/org/apache/aurora/scheduler/ResourceSlot.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/ResourceSlot.java b/src/main/java/org/apache/aurora/scheduler/ResourceSlot.java
index e5953bb..b0e20ce 100644
--- a/src/main/java/org/apache/aurora/scheduler/ResourceSlot.java
+++ b/src/main/java/org/apache/aurora/scheduler/ResourceSlot.java
@@ -100,17 +100,18 @@ public final class ResourceSlot {
   }
 
   /**
-   * Adapts this slot object to a list of mesos resources.
+   * Adapts this slot object to a list of Mesos resources.
    *
    * @param selectedPorts The ports selected, to be applied as concrete task ranges.
+   * @param tierInfo Task tier info.
    * @return Mesos resources.
    */
-  public List<Protos.Resource> toResourceList(Set<Integer> selectedPorts) {
+  public List<Protos.Resource> toResourceList(Set<Integer> selectedPorts, TierInfo tierInfo) {
     ImmutableList.Builder<Protos.Resource> resourceBuilder =
         ImmutableList.<Protos.Resource>builder()
-            .add(makeMesosResource(CPUS, numCpus))
-            .add(makeMesosResource(DISK_MB, disk.as(Data.MB)))
-            .add(makeMesosResource(RAM_MB, ram.as(Data.MB)));
+            .add(makeMesosResource(CPUS, numCpus, tierInfo.isRevocable()))
+            .add(makeMesosResource(DISK_MB, disk.as(Data.MB), false))
+            .add(makeMesosResource(RAM_MB, ram.as(Data.MB), false));
     if (!selectedPorts.isEmpty()) {
       resourceBuilder.add(makeMesosRangeResource(PORTS, selectedPorts));
     }
@@ -119,13 +120,14 @@ public final class ResourceSlot {
   }
 
   /**
-   * Convenience method for adapting to mesos resources without applying a port range.
+   * Convenience method for adapting to Mesos resources without applying a port range.
    *
-   * @see {@link #toResourceList(java.util.Set)}
+   * @see {@link #toResourceList(java.util.Set, TierInfo)}
+   * @param tierInfo Task tier info.
    * @return Mesos resources.
    */
-  public List<Protos.Resource> toResourceList() {
-    return toResourceList(ImmutableSet.of());
+  public List<Protos.Resource> toResourceList(TierInfo tierInfo) {
+    return toResourceList(ImmutableSet.of(), tierInfo);
   }
 
   /**
@@ -167,15 +169,25 @@ public final class ResourceSlot {
    *
    * @param resourceType Resource type.
    * @param value Value for the resource.
+   * @param revocable Flag indicating if this resource is revocable.
    * @return A mesos resource.
    */
   @VisibleForTesting
-  static Protos.Resource makeMesosResource(ResourceType resourceType, double value) {
-    return Protos.Resource.newBuilder()
+  static Protos.Resource makeMesosResource(
+      ResourceType resourceType,
+      double value,
+      boolean revocable) {
+
+    Protos.Resource.Builder builder = Protos.Resource.newBuilder()
         .setName(resourceType.getName())
         .setType(Protos.Value.Type.SCALAR)
-        .setScalar(Protos.Value.Scalar.newBuilder().setValue(value))
-        .build();
+        .setScalar(Protos.Value.Scalar.newBuilder().setValue(value));
+
+    if (revocable) {
+      builder.setRevocable(Protos.Resource.RevocableInfo.newBuilder());
+    }
+
+    return builder.build();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java b/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java
index ff6eb98..ddf51ef 100644
--- a/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java
+++ b/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java
@@ -30,6 +30,7 @@ import com.twitter.common.quantity.Data;
 import org.apache.aurora.Protobufs;
 import org.apache.aurora.codec.ThriftBinaryCodec;
 import org.apache.aurora.scheduler.ResourceSlot;
+import org.apache.aurora.scheduler.TierManager;
 import org.apache.aurora.scheduler.base.CommandUtil;
 import org.apache.aurora.scheduler.base.JobKeys;
 import org.apache.aurora.scheduler.base.SchedulerException;
@@ -79,10 +80,12 @@ public interface MesosTaskFactory {
     static final String EXECUTOR_NAME = "aurora.task";
 
     private final ExecutorSettings executorSettings;
+    private final TierManager tierManager;
 
     @Inject
-    MesosTaskFactoryImpl(ExecutorSettings executorSettings) {
+    MesosTaskFactoryImpl(ExecutorSettings executorSettings, TierManager tierManager) {
       this.executorSettings = requireNonNull(executorSettings);
+      this.tierManager = requireNonNull(tierManager);
     }
 
     @VisibleForTesting
@@ -137,7 +140,8 @@ public interface MesosTaskFactory {
       List<Resource> resources = resourceSlot.toResourceList(
           task.isSetAssignedPorts()
               ? ImmutableSet.copyOf(task.getAssignedPorts().values())
-              : ImmutableSet.of());
+              : ImmutableSet.of(),
+          tierManager.getTier(task.getTask()));
 
       if (LOG.isLoggable(Level.FINE)) {
         LOG.fine("Setting task resources to "
@@ -223,7 +227,7 @@ public interface MesosTaskFactory {
           .setExecutorId(getExecutorId(task.getTaskId()))
           .setName(EXECUTOR_NAME)
           .setSource(getInstanceSourceName(config, task.getInstanceId()))
-          .addAllResources(RESOURCES_EPSILON.toResourceList());
+          .addAllResources(RESOURCES_EPSILON.toResourceList(tierManager.getTier(config)));
     }
 
     private void configureContainerVolumes(ContainerInfo.Builder containerBuilder) {

http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/test/java/org/apache/aurora/scheduler/ResourceSlotTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/ResourceSlotTest.java b/src/test/java/org/apache/aurora/scheduler/ResourceSlotTest.java
index 50e7fc9..cab50bc 100644
--- a/src/test/java/org/apache/aurora/scheduler/ResourceSlotTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/ResourceSlotTest.java
@@ -101,16 +101,29 @@ public class ResourceSlotTest {
   }
 
   @Test
-  public void testToResourceList() {
+  public void testToResourceListNoRevocable() {
     ResourceSlot resources = ResourceSlot.from(TASK);
     Set<Integer> ports = ImmutableSet.of(80, 443);
     assertEquals(
         ImmutableSet.of(
-            makeMesosResource(CPUS, TASK.getNumCpus()),
-            makeMesosResource(RAM_MB, TASK.getRamMb()),
-            makeMesosResource(DISK_MB, TASK.getDiskMb()),
+            makeMesosResource(CPUS, TASK.getNumCpus(), false),
+            makeMesosResource(RAM_MB, TASK.getRamMb(), false),
+            makeMesosResource(DISK_MB, TASK.getDiskMb(), false),
             makeMesosRangeResource(PORTS, ports)),
-        ImmutableSet.copyOf(resources.toResourceList(ports)));
+        ImmutableSet.copyOf(resources.toResourceList(ports, new TierInfo(false))));
+  }
+
+  @Test
+  public void testToResourceListRevocable() {
+    ResourceSlot resources = ResourceSlot.from(TASK);
+    Set<Integer> ports = ImmutableSet.of(80, 443);
+    assertEquals(
+        ImmutableSet.of(
+            makeMesosResource(CPUS, TASK.getNumCpus(), true),
+            makeMesosResource(RAM_MB, TASK.getRamMb(), false),
+            makeMesosResource(DISK_MB, TASK.getDiskMb(), false),
+            makeMesosRangeResource(PORTS, ports)),
+        ImmutableSet.copyOf(resources.toResourceList(ports, new TierInfo(true))));
   }
 
   @Test
@@ -118,10 +131,10 @@ public class ResourceSlotTest {
     ResourceSlot resources = ResourceSlot.from(TASK);
     assertEquals(
         ImmutableSet.of(
-            makeMesosResource(CPUS, TASK.getNumCpus()),
-            makeMesosResource(RAM_MB, TASK.getRamMb()),
-            makeMesosResource(DISK_MB, TASK.getDiskMb())),
-        ImmutableSet.copyOf(resources.toResourceList(ImmutableSet.of())));
+            makeMesosResource(CPUS, TASK.getNumCpus(), true),
+            makeMesosResource(RAM_MB, TASK.getRamMb(), false),
+            makeMesosResource(DISK_MB, TASK.getDiskMb(), false)),
+        ImmutableSet.copyOf(resources.toResourceList(new TierInfo(true))));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/test/java/org/apache/aurora/scheduler/ResourcesTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/ResourcesTest.java b/src/test/java/org/apache/aurora/scheduler/ResourcesTest.java
index c48d096..38d9abf 100644
--- a/src/test/java/org/apache/aurora/scheduler/ResourcesTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/ResourcesTest.java
@@ -29,12 +29,12 @@ import org.junit.Test;
 
 import static com.twitter.common.quantity.Data.MB;
 
+import static org.apache.aurora.scheduler.ResourceSlot.makeMesosResource;
 import static org.apache.aurora.scheduler.ResourceType.CPUS;
 import static org.apache.aurora.scheduler.ResourceType.DISK_MB;
 import static org.apache.aurora.scheduler.ResourceType.PORTS;
 import static org.apache.aurora.scheduler.ResourceType.RAM_MB;
 import static org.apache.mesos.Protos.Value.Type.RANGES;
-import static org.apache.mesos.Protos.Value.Type.SCALAR;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
@@ -93,9 +93,9 @@ public class ResourcesTest {
   @Test
   public void testGetSlot() {
     ImmutableList<Resource> resources = ImmutableList.<Resource>builder()
-        .add(createCpuResource(8.0, false))
-        .add(createMemResource(1024, RAM_MB))
-        .add(createMemResource(2048, DISK_MB))
+        .add(makeMesosResource(CPUS, 8.0, false))
+        .add(makeMesosResource(RAM_MB, 1024, false))
+        .add(makeMesosResource(DISK_MB, 2048, false))
         .add(createPortRange(Pair.of(1, 10)))
         .build();
 
@@ -112,8 +112,8 @@ public class ResourcesTest {
   @Test
   public void testFilter() {
     ImmutableList<Resource> resources = ImmutableList.<Resource>builder()
-        .add(createCpuResource(8.0, true))
-        .add(createMemResource(1024, RAM_MB))
+        .add(makeMesosResource(CPUS, 8.0, true))
+        .add(makeMesosResource(RAM_MB, 1024, false))
         .build();
 
     assertEquals(
@@ -124,9 +124,9 @@ public class ResourcesTest {
   @Test
   public void testFilterByTier() {
     ImmutableList<Resource> resources = ImmutableList.<Resource>builder()
-        .add(createCpuResource(8.0, true))
-        .add(createCpuResource(8.0, false))
-        .add(createMemResource(1024, RAM_MB))
+        .add(makeMesosResource(CPUS, 8.0, true))
+        .add(makeMesosResource(CPUS, 8.0, false))
+        .add(makeMesosResource(RAM_MB, 1024, false))
         .build();
 
     assertEquals(
@@ -160,27 +160,6 @@ public class ResourcesTest {
         .build();
   }
 
-  private static Resource createCpuResource(double cpus, boolean revocable) {
-    Protos.Resource.Builder builder = Resource.newBuilder()
-        .setName(CPUS.getName())
-        .setType(SCALAR)
-        .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpus));
-
-    if (revocable) {
-      builder.setRevocable(Resource.RevocableInfo.newBuilder().build());
-    }
-
-    return builder.build();
-  }
-
-  private static Resource createMemResource(long mem, ResourceType resourceType) {
-    return Resource.newBuilder()
-        .setName(resourceType.getName())
-        .setType(SCALAR)
-        .setScalar(Protos.Value.Scalar.newBuilder().setValue(mem))
-        .build();
-  }
-
   private static Protos.Offer createOffer(Resource resource) {
     return createOffer(ImmutableList.of(resource));
   }

http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java b/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java
index 02fe964..b171177 100644
--- a/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.twitter.common.quantity.Data;
+import com.twitter.common.testing.easymock.EasyMockTest;
 
 import org.apache.aurora.gen.AssignedTask;
 import org.apache.aurora.gen.Container;
@@ -30,6 +31,8 @@ import org.apache.aurora.gen.TaskConfig;
 import org.apache.aurora.gen.Volume;
 import org.apache.aurora.scheduler.ResourceSlot;
 import org.apache.aurora.scheduler.Resources;
+import org.apache.aurora.scheduler.TierInfo;
+import org.apache.aurora.scheduler.TierManager;
 import org.apache.aurora.scheduler.mesos.MesosTaskFactory.MesosTaskFactoryImpl;
 import org.apache.aurora.scheduler.storage.entities.IAssignedTask;
 import org.apache.aurora.scheduler.storage.entities.ITaskConfig;
@@ -39,6 +42,7 @@ import org.apache.mesos.Protos.CommandInfo.URI;
 import org.apache.mesos.Protos.ContainerInfo.DockerInfo;
 import org.apache.mesos.Protos.ExecutorInfo;
 import org.apache.mesos.Protos.Parameter;
+import org.apache.mesos.Protos.Resource;
 import org.apache.mesos.Protos.SlaveID;
 import org.apache.mesos.Protos.TaskInfo;
 import org.junit.Before;
@@ -48,26 +52,29 @@ import static org.apache.aurora.scheduler.ResourceSlot.MIN_THERMOS_RESOURCES;
 import static org.apache.aurora.scheduler.mesos.MesosTaskFactory.MesosTaskFactoryImpl.RESOURCES_EPSILON;
 import static org.apache.aurora.scheduler.mesos.TaskExecutors.NO_OVERHEAD_EXECUTOR;
 import static org.apache.aurora.scheduler.mesos.TaskExecutors.SOME_OVERHEAD_EXECUTOR;
+import static org.easymock.EasyMock.expect;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class MesosTaskFactoryImplTest {
+public class MesosTaskFactoryImplTest extends EasyMockTest {
 
   private static final String EXECUTOR_WRAPPER_PATH = "/fake/executor_wrapper.sh";
+  private static final ITaskConfig TASK_CONFIG = ITaskConfig.build(new TaskConfig()
+      .setJob(new JobKey("role", "environment", "job-name"))
+      .setOwner(new Identity("role", "user"))
+      .setEnvironment("environment")
+      .setJobName("job-name")
+      .setDiskMb(10)
+      .setRamMb(100)
+      .setNumCpus(5)
+      .setContainer(Container.mesos(new MesosContainer()))
+      .setRequestedPorts(ImmutableSet.of("http")));
+  private static final TierInfo DEFAULT_TIER = new TierInfo(false);
   private static final IAssignedTask TASK = IAssignedTask.build(new AssignedTask()
       .setInstanceId(2)
       .setTaskId("task-id")
       .setAssignedPorts(ImmutableMap.of("http", 80))
-      .setTask(new TaskConfig()
-          .setJob(new JobKey("role", "environment", "job-name"))
-          .setOwner(new Identity("role", "user"))
-          .setEnvironment("environment")
-          .setJobName("job-name")
-          .setDiskMb(10)
-          .setRamMb(100)
-          .setNumCpus(5)
-          .setContainer(Container.mesos(new MesosContainer()))
-          .setRequestedPorts(ImmutableSet.of("http"))));
+      .setTask(TASK_CONFIG.newBuilder()));
   private static final IAssignedTask TASK_WITH_DOCKER = IAssignedTask.build(TASK.newBuilder()
       .setTask(
           new TaskConfig(TASK.getTask().newBuilder())
@@ -84,12 +91,13 @@ public class MesosTaskFactoryImplTest {
 
   private MesosTaskFactory taskFactory;
   private ExecutorSettings config;
+  private TierManager tierManager;
 
   private static final ExecutorInfo DEFAULT_EXECUTOR = ExecutorInfo.newBuilder()
       .setExecutorId(MesosTaskFactoryImpl.getExecutorId(TASK.getTaskId()))
       .setName(MesosTaskFactoryImpl.EXECUTOR_NAME)
       .setSource(MesosTaskFactoryImpl.getInstanceSourceName(TASK.getTask(), TASK.getInstanceId()))
-      .addAllResources(RESOURCES_EPSILON.toResourceList())
+      .addAllResources(RESOURCES_EPSILON.toResourceList(DEFAULT_TIER))
       .setCommand(CommandInfo.newBuilder()
           .setValue("./executor.pex")
           .addUris(URI.newBuilder().setValue(NO_OVERHEAD_EXECUTOR.getExecutorPath())
@@ -108,24 +116,47 @@ public class MesosTaskFactoryImplTest {
   @Before
   public void setUp() {
     config = TaskExecutors.SOME_OVERHEAD_EXECUTOR;
+    tierManager = createMock(TierManager.class);
   }
 
   @Test
   public void testExecutorInfoUnchanged() {
-    taskFactory = new MesosTaskFactoryImpl(config);
+    expect(tierManager.getTier(TASK_CONFIG)).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
     TaskInfo task = taskFactory.createFrom(TASK, SLAVE);
     assertEquals(DEFAULT_EXECUTOR, task.getExecutor());
     checkTaskResources(TASK.getTask(), task);
   }
 
   @Test
+  public void testTaskInfoRevocable() {
+    expect(tierManager.getTier(TASK_CONFIG)).andReturn(new TierInfo(true)).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
+    TaskInfo task = taskFactory.createFrom(TASK, SLAVE);
+    checkTaskResources(TASK.getTask(), task);
+    assertTrue(task.getExecutor().getResourcesList().stream().anyMatch(Resource::hasRevocable));
+    assertTrue(task.getResourcesList().stream().anyMatch(Resource::hasRevocable));
+  }
+
+  @Test
   public void testCreateFromPortsUnset() {
-    taskFactory = new MesosTaskFactoryImpl(config);
-    AssignedTask assignedTask = TASK.newBuilder();
-    assignedTask.getTask().unsetRequestedPorts();
-    assignedTask.unsetAssignedPorts();
-    TaskInfo task = taskFactory.createFrom(IAssignedTask.build(assignedTask), SLAVE);
-    checkTaskResources(ITaskConfig.build(assignedTask.getTask()), task);
+    AssignedTask builder = TASK.newBuilder();
+    builder.getTask().unsetRequestedPorts();
+    builder.unsetAssignedPorts();
+    IAssignedTask assignedTask = IAssignedTask.build(builder);
+    expect(tierManager.getTier(assignedTask.getTask())).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
+    TaskInfo task = taskFactory.createFrom(IAssignedTask.build(builder), SLAVE);
+    checkTaskResources(ITaskConfig.build(builder.getTask()), task);
   }
 
   @Test
@@ -133,7 +164,11 @@ public class MesosTaskFactoryImplTest {
     // Here the ram required for the executor is greater than the sum of task resources
     // + executor overhead. We need to ensure we allocate a non-zero amount of ram in this case.
     config = NO_OVERHEAD_EXECUTOR;
-    taskFactory = new MesosTaskFactoryImpl(config);
+    expect(tierManager.getTier(TASK_CONFIG)).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
     TaskInfo task = taskFactory.createFrom(TASK, SLAVE);
     assertEquals(DEFAULT_EXECUTOR, task.getExecutor());
 
@@ -149,8 +184,6 @@ public class MesosTaskFactoryImplTest {
     // executor.
 
     config = NO_OVERHEAD_EXECUTOR;
-    taskFactory = new MesosTaskFactoryImpl(config);
-
     AssignedTask builder = TASK.newBuilder();
     builder.getTask()
         .setNumCpus(0.001)
@@ -159,6 +192,10 @@ public class MesosTaskFactoryImplTest {
         .setRequestedPorts(ImmutableSet.of());
     IAssignedTask assignedTask =
         IAssignedTask.build(builder.setAssignedPorts(ImmutableMap.of()));
+    expect(tierManager.getTier(assignedTask.getTask())).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
 
     assertEquals(
         MIN_THERMOS_RESOURCES,
@@ -177,7 +214,11 @@ public class MesosTaskFactoryImplTest {
 
   private TaskInfo getDockerTaskInfo(IAssignedTask task) {
     config = TaskExecutors.SOME_OVERHEAD_EXECUTOR;
-    taskFactory = new MesosTaskFactoryImpl(config);
+    expect(tierManager.getTier(task.getTask())).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
     return taskFactory.createFrom(task, SLAVE);
   }
 
@@ -198,6 +239,8 @@ public class MesosTaskFactoryImplTest {
 
   @Test(expected = NullPointerException.class)
   public void testInvalidExecutorSettings() {
+    control.replay();
+
     ExecutorSettings.newBuilder()
         .setExecutorPath(null)
         .setThermosObserverRoot("")
@@ -212,7 +255,11 @@ public class MesosTaskFactoryImplTest {
         .setThermosObserverRoot("/var/run/thermos")
         .setExecutorOverhead(SOME_OVERHEAD_EXECUTOR.getExecutorOverhead())
         .build();
-    taskFactory = new MesosTaskFactoryImpl(config);
+    expect(tierManager.getTier(TASK_CONFIG)).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
     TaskInfo taskInfo = taskFactory.createFrom(TASK, SLAVE);
     assertEquals(EXECUTOR_WITH_WRAPPER, taskInfo.getExecutor());
   }
@@ -226,7 +273,11 @@ public class MesosTaskFactoryImplTest {
         .setExecutorOverhead(SOME_OVERHEAD_EXECUTOR.getExecutorOverhead())
         .setGlobalContainerMounts(ImmutableList.of(new Volume("/container", "/host", Mode.RO)))
         .build();
-    taskFactory = new MesosTaskFactoryImpl(config);
+    expect(tierManager.getTier(TASK_WITH_DOCKER.getTask())).andReturn(DEFAULT_TIER).times(2);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
     TaskInfo taskInfo = taskFactory.createFrom(TASK_WITH_DOCKER, SLAVE);
     Protos.Volume expected = Protos.Volume.newBuilder()
         .setHostPath("/host")
@@ -242,7 +293,7 @@ public class MesosTaskFactoryImplTest {
     return taskResources.slot().add(executorResources.slot());
   }
 
-  private static Resources fromResourceList(Iterable<Protos.Resource> resources) {
+  private static Resources fromResourceList(Iterable<Resource> resources) {
     return Resources.from(Protos.Offer.newBuilder()
         .setId(Protos.OfferID.newBuilder().setValue("ignored"))
         .setFrameworkId(Protos.FrameworkID.newBuilder().setValue("ignored"))

http://git-wip-us.apache.org/repos/asf/aurora/blob/3fdbc8c1/src/test/java/org/apache/aurora/scheduler/preemptor/PreemptionVictimFilterTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/preemptor/PreemptionVictimFilterTest.java b/src/test/java/org/apache/aurora/scheduler/preemptor/PreemptionVictimFilterTest.java
index 8a1599a..ca2ee0d 100644
--- a/src/test/java/org/apache/aurora/scheduler/preemptor/PreemptionVictimFilterTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/preemptor/PreemptionVictimFilterTest.java
@@ -503,7 +503,8 @@ public class PreemptionVictimFilterTest extends EasyMockTest {
       int numPorts,
       boolean revocable) {
 
-    List<Resource> resources = new ResourceSlot(cpu, ram, disk, numPorts).toResourceList();
+    List<Resource> resources =
+        new ResourceSlot(cpu, ram, disk, numPorts).toResourceList(new TierInfo(false));
     if (revocable) {
       resources = ImmutableList.<Resource>builder()
           .addAll(FluentIterable.from(resources)