You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2016/02/02 22:01:39 UTC

aurora git commit: Map Aurora task metadata to Mesos task labels.

Repository: aurora
Updated Branches:
  refs/heads/master 3fc9dc24e -> 2a28cfc76


Map Aurora task metadata to Mesos task labels.

Bugs closed: AURORA-1052

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


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

Branch: refs/heads/master
Commit: 2a28cfc764805e527d4ccfaeb6f3fe5cf76374d3
Parents: 3fc9dc2
Author: Stephan Erb <st...@dev.static-void.de>
Authored: Tue Feb 2 12:55:39 2016 -0800
Committer: Bill Farner <wf...@apache.org>
Committed: Tue Feb 2 12:55:39 2016 -0800

----------------------------------------------------------------------
 NEWS                                            |  2 ++
 .../scheduler/mesos/MesosTaskFactory.java       | 21 +++++++++++++++++++
 .../mesos/MesosTaskFactoryImplTest.java         | 22 ++++++++++++++++++++
 3 files changed, 45 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/2a28cfc7/NEWS
----------------------------------------------------------------------
diff --git a/NEWS b/NEWS
index a6c2a90..b171360 100644
--- a/NEWS
+++ b/NEWS
@@ -49,6 +49,8 @@
 - Removed the following deprecated `HealthCheckConfig` client-side configuration fields: `endpoint`,
   `expected_response`, `expected_response_code`.  These are now set exclusively in like-named fields
   of `HttpHealthChecker.`
+- Aurora task metadata is now mapped to Mesos task labels. Labels are prefixed with
+  `org.apache.aurora.metadata.` to prevent clashes with other, external label sources.
 
 0.11.0
 ------

http://git-wip-us.apache.org/repos/asf/aurora/blob/2a28cfc7/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 fcad0e7..a34af4d 100644
--- a/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java
+++ b/src/main/java/org/apache/aurora/scheduler/mesos/MesosTaskFactory.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.protobuf.ByteString;
 
+import org.apache.aurora.GuavaUtils;
 import org.apache.aurora.Protobufs;
 import org.apache.aurora.codec.ThriftBinaryCodec;
 import org.apache.aurora.scheduler.AcceptedOffer;
@@ -40,6 +41,8 @@ import org.apache.mesos.Protos;
 import org.apache.mesos.Protos.ContainerInfo;
 import org.apache.mesos.Protos.ExecutorID;
 import org.apache.mesos.Protos.ExecutorInfo;
+import org.apache.mesos.Protos.Label;
+import org.apache.mesos.Protos.Labels;
 import org.apache.mesos.Protos.Offer;
 import org.apache.mesos.Protos.Resource;
 import org.apache.mesos.Protos.SlaveID;
@@ -70,6 +73,9 @@ public interface MesosTaskFactory {
     private static final Logger LOG = LoggerFactory.getLogger(MesosTaskFactoryImpl.class);
     private static final String EXECUTOR_PREFIX = "thermos-";
 
+    @VisibleForTesting
+    static final String METADATA_LABEL_PREFIX = "org.apache.aurora.metadata.";
+
     private final ExecutorSettings executorSettings;
     private final TierManager tierManager;
 
@@ -140,6 +146,8 @@ public interface MesosTaskFactory {
               .addAllResources(resources)
               .setData(ByteString.copyFrom(taskInBytes));
 
+      configureTaskLabels(config, taskBuilder);
+
       if (config.getContainer().isSetMesos()) {
         configureTaskForNoContainer(task, config, taskBuilder, acceptedOffer);
       } else if (config.getContainer().isSetDocker()) {
@@ -204,5 +212,18 @@ public interface MesosTaskFactory {
     private void configureContainerVolumes(ContainerInfo.Builder containerBuilder) {
       containerBuilder.addAllVolumes(executorSettings.getExecutorConfig().getVolumeMounts());
     }
+
+    private void configureTaskLabels(ITaskConfig taskConfig, TaskInfo.Builder taskBuilder) {
+      ImmutableSet<Label> labels = taskConfig.getMetadata().stream()
+          .map(m -> Label.newBuilder()
+              .setKey(METADATA_LABEL_PREFIX + m.getKey())
+              .setValue(m.getValue())
+              .build())
+          .collect(GuavaUtils.toImmutableSet());
+
+      if (!labels.isEmpty()) {
+        taskBuilder.setLabels(Labels.newBuilder().addAllLabels(labels));
+      }
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/aurora/blob/2a28cfc7/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 cc2a415..3db531b 100644
--- a/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/mesos/MesosTaskFactoryImplTest.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
+import org.apache.aurora.GuavaUtils;
 import org.apache.aurora.common.testing.easymock.EasyMockTest;
 import org.apache.aurora.gen.AssignedTask;
 import org.apache.aurora.gen.Container;
@@ -52,6 +53,7 @@ import org.junit.Test;
 import static org.apache.aurora.scheduler.ResourceSlot.makeMesosRangeResource;
 import static org.apache.aurora.scheduler.TierInfo.DEFAULT;
 import static org.apache.aurora.scheduler.base.TaskTestUtil.REVOCABLE_TIER;
+import static org.apache.aurora.scheduler.mesos.MesosTaskFactory.MesosTaskFactoryImpl.METADATA_LABEL_PREFIX;
 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.apache.aurora.scheduler.mesos.TestExecutorSettings.THERMOS_CONFIG;
@@ -261,6 +263,26 @@ public class MesosTaskFactoryImplTest extends EasyMockTest {
         taskInfo.getExecutor().getContainer().getVolumesList());
   }
 
+  @Test
+  public void testMetadataLabelMapping() {
+    expect(tierManager.getTier(TASK.getTask())).andReturn(DEFAULT);
+    taskFactory = new MesosTaskFactoryImpl(config, tierManager);
+
+    control.replay();
+
+    TaskInfo task = taskFactory.createFrom(TASK, OFFER_THERMOS_EXECUTOR);
+    ImmutableSet<String> labels = task.getLabels().getLabelsList().stream()
+        .map(l -> l.getKey() + l.getValue())
+        .collect(GuavaUtils.toImmutableSet());
+
+    ImmutableSet<String> metadata = TASK.getTask().getMetadata().stream()
+        .map(m -> METADATA_LABEL_PREFIX + m.getKey() + m.getValue())
+        .collect(GuavaUtils.toImmutableSet());
+
+    assertTrue(labels.size() > 0);
+    assertEquals(labels, metadata);
+  }
+
   private static ResourceSlot getTotalTaskResources(TaskInfo task) {
     Resources taskResources = fromResourceList(task.getResourcesList());
     Resources executorResources = fromResourceList(task.getExecutor().getResourcesList());