Repository: aurora Updated Branches: refs/heads/master e817eb11d -> 170a7d2f9
Fixing e2e tests. Reviewed at https://reviews.apache.org/r/46795/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/170a7d2f Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/170a7d2f Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/170a7d2f Branch: refs/heads/master Commit: 170a7d2f9ebf17ee4aecbde619a13022b705fd7f Parents: e817eb1 Author: Maxim Khutornenko <[email protected]> Authored: Thu Apr 28 11:49:22 2016 -0700 Committer: Maxim Khutornenko <[email protected]> Committed: Thu Apr 28 11:49:22 2016 -0700 ---------------------------------------------------------------------- .../scheduler/storage/db/DbQuotaStore.java | 2 +- .../scheduler/storage/db/TaskConfigManager.java | 2 +- .../scheduler/storage/db/TaskConfigMapper.java | 3 ++- .../V005_CreateQuotaResourceTable.java | 2 +- .../storage/db/views/DBResourceAggregate.java | 9 ++++----- .../scheduler/storage/log/ThriftBackfill.java | 13 ++++++++++++ .../scheduler/storage/db/TaskConfigMapper.xml | 6 +++--- .../aurora/scheduler/storage/db/schema.sql | 2 +- .../storage/log/ThriftBackfillTest.java | 21 ++++++++++++++++++++ 9 files changed, 47 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/java/org/apache/aurora/scheduler/storage/db/DbQuotaStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/db/DbQuotaStore.java b/src/main/java/org/apache/aurora/scheduler/storage/db/DbQuotaStore.java index e7afbad..0ea21b5 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/db/DbQuotaStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/db/DbQuotaStore.java @@ -76,7 +76,7 @@ class DbQuotaStore implements QuotaStore.Mutable { mapper.insert(role, quota.newBuilder(), quotaInsert); mapper.insertResources( quotaInsert.getId(), - DBResourceAggregate.mapFromResources(quota.getResources())); + Pairs.toMap(DBResourceAggregate.pairsFromResources(quota.getResources()))); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigManager.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigManager.java b/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigManager.java index 07bdf22..9eadf70 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigManager.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigManager.java @@ -99,7 +99,7 @@ class TaskConfigManager { if (!config.getResources().isEmpty()) { configMapper.insertResources( configInsert.getId(), - DBResourceAggregate.mapFromResources(config.getResources())); + DBResourceAggregate.pairsFromResources(config.getResources())); } if (!config.getRequestedPorts().isEmpty()) { http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.java b/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.java index 6e06af4..5712010 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.aurora.common.collections.Pair; import org.apache.aurora.scheduler.storage.db.views.DbTaskConfig; import org.apache.aurora.scheduler.storage.entities.IConstraint; import org.apache.aurora.scheduler.storage.entities.IDockerContainer; @@ -183,5 +184,5 @@ interface TaskConfigMapper extends GarbageCollectedTableMapper { */ void insertResources( @Param("configId") long configId, - @Param("values") Map<Integer, String> values); + @Param("values") List<Pair<Integer, String>> values); } http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/java/org/apache/aurora/scheduler/storage/db/migration/V005_CreateQuotaResourceTable.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/db/migration/V005_CreateQuotaResourceTable.java b/src/main/java/org/apache/aurora/scheduler/storage/db/migration/V005_CreateQuotaResourceTable.java index e9e5de1..cd06346 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/db/migration/V005_CreateQuotaResourceTable.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/db/migration/V005_CreateQuotaResourceTable.java @@ -36,7 +36,7 @@ public class V005_CreateQuotaResourceTable implements MigrationScript { + "quota_id BIGINT NOT NULL REFERENCES quotas(id) ON DELETE CASCADE," + "type_id INT NOT NULL REFERENCES resource_types(id)," + "value VARCHAR NOT NULL," - + "UNIQUE(quota_id, type_id, value)" + + "UNIQUE(quota_id, type_id)" + ");\n" + migrateScript(); } http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/java/org/apache/aurora/scheduler/storage/db/views/DBResourceAggregate.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/db/views/DBResourceAggregate.java b/src/main/java/org/apache/aurora/scheduler/storage/db/views/DBResourceAggregate.java index 4f5c07e..8c5d1f0 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/db/views/DBResourceAggregate.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/db/views/DBResourceAggregate.java @@ -14,10 +14,9 @@ package org.apache.aurora.scheduler.storage.db.views; import java.util.List; -import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; +import org.apache.aurora.GuavaUtils; import org.apache.aurora.common.collections.Pair; import org.apache.aurora.gen.ResourceAggregate; import org.apache.aurora.scheduler.resources.ResourceType; @@ -43,12 +42,12 @@ public final class DBResourceAggregate { .setResources(resources.stream().map(DBResource::toThrift).collect(toImmutableSet())); } - public static Map<Integer, String> mapFromResources(Set<IResource> resources) { - return Pairs.toMap(resources.stream() + public static List<Pair<Integer, String>> pairsFromResources(Set<IResource> resources) { + return resources.stream() .map(e -> Pair.of( ResourceType.fromResource(e).getValue(), ResourceType.fromResource(e).getTypeConverter().stringify(e.getRawValue()))) - .collect(Collectors.toList())); + .collect(GuavaUtils.toImmutableList()); } public IResourceAggregate toImmutable() { http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/java/org/apache/aurora/scheduler/storage/log/ThriftBackfill.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/log/ThriftBackfill.java b/src/main/java/org/apache/aurora/scheduler/storage/log/ThriftBackfill.java index ad45085..d1c62a8 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/log/ThriftBackfill.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/log/ThriftBackfill.java @@ -13,7 +13,9 @@ */ package org.apache.aurora.scheduler.storage.log; +import java.util.EnumSet; import java.util.Set; +import java.util.stream.Collectors; import org.apache.aurora.GuavaUtils; import org.apache.aurora.gen.JobConfiguration; @@ -117,6 +119,17 @@ public final class ThriftBackfill { aggregate.addToResources(Resource.ramMb(aggregate.getRamMb())); aggregate.addToResources(Resource.diskMb(aggregate.getDiskMb())); } else { + EnumSet<ResourceType> quotaResources = EnumSet.of(CPUS, RAM_MB, DISK_MB); + if (aggregate.getResources().size() > quotaResources.size()) { + throw new IllegalArgumentException("Too many resource values in quota."); + } + + if (!quotaResources.equals(aggregate.getResources().stream() + .map(e -> ResourceType.fromResource(IResource.build(e))) + .collect(Collectors.toSet()))) { + + throw new IllegalArgumentException("Quota resources must be exactly: " + quotaResources); + } aggregate.setNumCpus(getResource(aggregate.getResources(), CPUS).getNumCpus()); aggregate.setRamMb(getResource(aggregate.getResources(), RAM_MB).getRamMb()); aggregate.setDiskMb(getResource(aggregate.getResources(), DISK_MB).getDiskMb()); http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/resources/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.xml ---------------------------------------------------------------------- diff --git a/src/main/resources/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.xml b/src/main/resources/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.xml index 6b5e130..cd181bb 100644 --- a/src/main/resources/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.xml +++ b/src/main/resources/org/apache/aurora/scheduler/storage/db/TaskConfigMapper.xml @@ -284,10 +284,10 @@ type_id, value ) VALUES ( - <foreach index="type" item="value" collection="values" separator="),("> + <foreach item="value" collection="values" separator="),("> #{configId}, - #{type}, - #{value} + #{value.first}, + #{value.second} </foreach> ) </insert> http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/main/resources/org/apache/aurora/scheduler/storage/db/schema.sql ---------------------------------------------------------------------- diff --git a/src/main/resources/org/apache/aurora/scheduler/storage/db/schema.sql b/src/main/resources/org/apache/aurora/scheduler/storage/db/schema.sql index 5d905db..5069bed 100644 --- a/src/main/resources/org/apache/aurora/scheduler/storage/db/schema.sql +++ b/src/main/resources/org/apache/aurora/scheduler/storage/db/schema.sql @@ -122,7 +122,7 @@ CREATE TABLE quota_resource( type_id INT NOT NULL REFERENCES resource_types(id), value VARCHAR NOT NULL, - UNIQUE(quota_id, type_id, value) + UNIQUE(quota_id, type_id) ); CREATE TABLE task_constraints( http://git-wip-us.apache.org/repos/asf/aurora/blob/170a7d2f/src/test/java/org/apache/aurora/scheduler/storage/log/ThriftBackfillTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/log/ThriftBackfillTest.java b/src/test/java/org/apache/aurora/scheduler/storage/log/ThriftBackfillTest.java index f213b7f..0a2cd3d 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/log/ThriftBackfillTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/log/ThriftBackfillTest.java @@ -121,4 +121,25 @@ public class ThriftBackfillTest { assertEquals(expected, ThriftBackfill.backfillResourceAggregate(aggregate)); } + + @Test(expected = IllegalArgumentException.class) + public void testResourceAggregateTooManyResources() { + ResourceAggregate aggregate = new ResourceAggregate() + .setResources(ImmutableSet.of(numCpus(1.0), ramMb(32), diskMb(64), numCpus(2.0))); + ThriftBackfill.backfillResourceAggregate(aggregate); + } + + @Test(expected = IllegalArgumentException.class) + public void testResourceAggregateInvalidResources() { + ResourceAggregate aggregate = new ResourceAggregate() + .setResources(ImmutableSet.of(numCpus(1.0), ramMb(32), namedPort("http"))); + ThriftBackfill.backfillResourceAggregate(aggregate); + } + + @Test(expected = IllegalArgumentException.class) + public void testResourceAggregateMissingResources() { + ResourceAggregate aggregate = new ResourceAggregate() + .setResources(ImmutableSet.of(numCpus(1.0), ramMb(32))); + ThriftBackfill.backfillResourceAggregate(aggregate); + } }
