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 <[email protected]> Authored: Tue Feb 2 12:55:39 2016 -0800 Committer: Bill Farner <[email protected]> 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());
