Repository: aurora Updated Branches: refs/heads/master 7c7dcb265 -> c33c77a7d
Adjusting /utilization and client to show correct consumption. Bugs closed: AURORA-1461 Reviewed at https://reviews.apache.org/r/38277/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/c33c77a7 Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/c33c77a7 Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/c33c77a7 Branch: refs/heads/master Commit: c33c77a7d032f5bbb2e0b0cc65a7da8d40120cbc Parents: 7c7dcb2 Author: Maxim Khutornenko <[email protected]> Authored: Fri Sep 11 13:11:52 2015 -0700 Committer: Maxim Khutornenko <[email protected]> Committed: Fri Sep 11 13:11:52 2015 -0700 ---------------------------------------------------------------------- .../aurora/scheduler/quota/QuotaManager.java | 16 +++++------ .../aurora/scheduler/stats/ResourceCounter.java | 26 +++++------------- .../python/apache/aurora/client/cli/quota.py | 10 +++++-- .../scheduler/stats/ResourceCounterTest.java | 2 +- .../apache/aurora/client/cli/test_quota.py | 28 +++++++++++++------- 5 files changed, 43 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/c33c77a7/src/main/java/org/apache/aurora/scheduler/quota/QuotaManager.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/quota/QuotaManager.java b/src/main/java/org/apache/aurora/scheduler/quota/QuotaManager.java index 6fbb582..a12910e 100644 --- a/src/main/java/org/apache/aurora/scheduler/quota/QuotaManager.java +++ b/src/main/java/org/apache/aurora/scheduler/quota/QuotaManager.java @@ -70,6 +70,14 @@ import static org.apache.aurora.scheduler.updater.Updates.getInstanceIds; * Allows access to resource quotas, and tracks quota consumption. */ public interface QuotaManager { + Predicate<ITaskConfig> PROD = ITaskConfig::isProduction; + Predicate<ITaskConfig> DEDICATED = + e -> ConfigurationManager.isDedicated(e.getConstraints()); + Predicate<ITaskConfig> PROD_SHARED = and(PROD, not(DEDICATED)); + Predicate<ITaskConfig> PROD_DEDICATED = and(PROD, DEDICATED); + Predicate<ITaskConfig> NON_PROD_SHARED = and(not(PROD), not(DEDICATED)); + Predicate<ITaskConfig> NON_PROD_DEDICATED = and(not(PROD), DEDICATED); + /** * Saves a new quota for the provided role or overrides the existing one. * @@ -140,14 +148,6 @@ public interface QuotaManager { * Quota provider that stores quotas in the canonical store. */ class QuotaManagerImpl implements QuotaManager { - - private static final Predicate<ITaskConfig> DEDICATED = - e -> ConfigurationManager.isDedicated(e.getConstraints()); - private static final Predicate<ITaskConfig> PROD = ITaskConfig::isProduction; - private static final Predicate<ITaskConfig> PROD_SHARED = and(PROD, not(DEDICATED)); - private static final Predicate<ITaskConfig> PROD_DEDICATED = and(PROD, DEDICATED); - private static final Predicate<ITaskConfig> NON_PROD_SHARED = and(not(PROD), not(DEDICATED)); - private static final Predicate<ITaskConfig> NON_PROD_DEDICATED = and(not(PROD), DEDICATED); private static final Predicate<ITaskConfig> NO_QUOTA_CHECK = or(PROD_DEDICATED, not(PROD)); @Override http://git-wip-us.apache.org/repos/asf/aurora/blob/c33c77a7/src/main/java/org/apache/aurora/scheduler/stats/ResourceCounter.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/stats/ResourceCounter.java b/src/main/java/org/apache/aurora/scheduler/stats/ResourceCounter.java index 36e2c93..c8ef858 100644 --- a/src/main/java/org/apache/aurora/scheduler/stats/ResourceCounter.java +++ b/src/main/java/org/apache/aurora/scheduler/stats/ResourceCounter.java @@ -32,7 +32,6 @@ import com.google.common.collect.Iterables; import org.apache.aurora.scheduler.base.Query; import org.apache.aurora.scheduler.base.Tasks; -import org.apache.aurora.scheduler.configuration.ConfigurationManager; import org.apache.aurora.scheduler.storage.Storage; import org.apache.aurora.scheduler.storage.Storage.StorageException; import org.apache.aurora.scheduler.storage.Storage.StoreProvider; @@ -40,6 +39,10 @@ import org.apache.aurora.scheduler.storage.Storage.Work; import org.apache.aurora.scheduler.storage.entities.IResourceAggregate; import org.apache.aurora.scheduler.storage.entities.ITaskConfig; +import static org.apache.aurora.scheduler.quota.QuotaManager.DEDICATED; +import static org.apache.aurora.scheduler.quota.QuotaManager.NON_PROD_SHARED; +import static org.apache.aurora.scheduler.quota.QuotaManager.PROD_SHARED; + /** * Computes aggregate metrics about resource allocation and consumption in the scheduler. */ @@ -133,24 +136,9 @@ public class ResourceCounter { public enum MetricType { TOTAL_CONSUMED(Predicates.<ITaskConfig>alwaysTrue()), - DEDICATED_CONSUMED(new Predicate<ITaskConfig>() { - @Override - public boolean apply(ITaskConfig task) { - return ConfigurationManager.isDedicated(task.getConstraints()); - } - }), - QUOTA_CONSUMED(new Predicate<ITaskConfig>() { - @Override - public boolean apply(ITaskConfig task) { - return task.isProduction(); - } - }), - FREE_POOL_CONSUMED(new Predicate<ITaskConfig>() { - @Override - public boolean apply(ITaskConfig task) { - return !ConfigurationManager.isDedicated(task.getConstraints()) && !task.isProduction(); - } - }); + DEDICATED_CONSUMED(DEDICATED), + QUOTA_CONSUMED(PROD_SHARED), + FREE_POOL_CONSUMED(NON_PROD_SHARED); public final Predicate<ITaskConfig> filter; http://git-wip-us.apache.org/repos/asf/aurora/blob/c33c77a7/src/main/python/apache/aurora/client/cli/quota.py ---------------------------------------------------------------------- diff --git a/src/main/python/apache/aurora/client/cli/quota.py b/src/main/python/apache/aurora/client/cli/quota.py index fe29333..43d9810 100644 --- a/src/main/python/apache/aurora/client/cli/quota.py +++ b/src/main/python/apache/aurora/client/cli/quota.py @@ -57,11 +57,17 @@ class GetQuotaCmd(Verb): result = ['Allocated:'] result += get_quota_str(quota_result.quota) if quota_result.prodSharedConsumption: - result.append('Production resources consumed:') + result.append('Production shared pool resources consumed:') result += get_quota_str(quota_result.prodSharedConsumption) + if quota_result.prodDedicatedConsumption: + result.append('Production dedicated pool resources consumed:') + result += get_quota_str(quota_result.prodDedicatedConsumption) if quota_result.nonProdSharedConsumption: - result.append('Non-production resources consumed:') + result.append('Non-production shared pool resources consumed:') result += get_quota_str(quota_result.nonProdSharedConsumption) + if quota_result.nonProdDedicatedConsumption: + result.append('Non-production dedicated pool resources consumed:') + result += get_quota_str(quota_result.nonProdDedicatedConsumption) return '\n'.join(result) def execute(self, context): http://git-wip-us.apache.org/repos/asf/aurora/blob/c33c77a7/src/test/java/org/apache/aurora/scheduler/stats/ResourceCounterTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/stats/ResourceCounterTest.java b/src/test/java/org/apache/aurora/scheduler/stats/ResourceCounterTest.java index f2facfa..24dcf61 100644 --- a/src/test/java/org/apache/aurora/scheduler/stats/ResourceCounterTest.java +++ b/src/test/java/org/apache/aurora/scheduler/stats/ResourceCounterTest.java @@ -108,7 +108,7 @@ public class ResourceCounterTest { Set<GlobalMetric> expected = ImmutableSet.of( new GlobalMetric(TOTAL_CONSUMED, 8, 8 * GB, 8 * GB), new GlobalMetric(DEDICATED_CONSUMED, 2, 2 * GB, 2 * GB), - new GlobalMetric(QUOTA_CONSUMED, 5, 5 * GB, 5 * GB), + new GlobalMetric(QUOTA_CONSUMED, 4, 4 * GB, 4 * GB), new GlobalMetric(FREE_POOL_CONSUMED, 2, 2 * GB, 2 * GB) ); http://git-wip-us.apache.org/repos/asf/aurora/blob/c33c77a7/src/test/python/apache/aurora/client/cli/test_quota.py ---------------------------------------------------------------------- diff --git a/src/test/python/apache/aurora/client/cli/test_quota.py b/src/test/python/apache/aurora/client/cli/test_quota.py index bf79180..e2d7f42 100644 --- a/src/test/python/apache/aurora/client/cli/test_quota.py +++ b/src/test/python/apache/aurora/client/cli/test_quota.py @@ -31,7 +31,9 @@ class TestGetQuotaCommand(AuroraClientCommandTest): response.result = Result(getQuotaResult=GetQuotaResult( quota=ResourceAggregate(numCpus=5, ramMb=20480, diskMb=40960), prodSharedConsumption=None, - nonProdSharedConsumption=None + prodDedicatedConsumption=None, + nonProdSharedConsumption=None, + nonProdDedicatedConsumption=None )) api.get_quota.return_value = response @@ -41,8 +43,10 @@ class TestGetQuotaCommand(AuroraClientCommandTest): response = cls.create_simple_success_response() response.result = Result(getQuotaResult=GetQuotaResult( quota=ResourceAggregate(numCpus=5, ramMb=20480, diskMb=40960), - prodSharedConsumption=ResourceAggregate(numCpus=1, ramMb=1024, diskMb=2048), - nonProdSharedConsumption=ResourceAggregate(numCpus=1, ramMb=1024, diskMb=2048), + prodSharedConsumption=ResourceAggregate(numCpus=1, ramMb=512, diskMb=1024), + prodDedicatedConsumption=ResourceAggregate(numCpus=2, ramMb=1024, diskMb=2048), + nonProdSharedConsumption=ResourceAggregate(numCpus=3, ramMb=2048, diskMb=4096), + nonProdDedicatedConsumption=ResourceAggregate(numCpus=4, ramMb=4096, diskMb=8192), )) api.get_quota.return_value = response @@ -52,10 +56,14 @@ class TestGetQuotaCommand(AuroraClientCommandTest): def test_get_quota_with_consumption(self): expected_output = ('Allocated:\n CPU: 5\n RAM: 20.000000 GB\n Disk: 40.000000 GB\n' - 'Production resources consumed:\n' - ' CPU: 1\n RAM: 1.000000 GB\n Disk: 2.000000 GB\n' - 'Non-production resources consumed:\n' - ' CPU: 1\n RAM: 1.000000 GB\n Disk: 2.000000 GB') + 'Production shared pool resources consumed:\n' + ' CPU: 1\n RAM: 0.500000 GB\n Disk: 1.000000 GB\n' + 'Production dedicated pool resources consumed:\n' + ' CPU: 2\n RAM: 1.000000 GB\n Disk: 2.000000 GB\n' + 'Non-production shared pool resources consumed:\n' + ' CPU: 3\n RAM: 2.000000 GB\n Disk: 4.000000 GB\n' + 'Non-production dedicated pool resources consumed:\n' + ' CPU: 4\n RAM: 4.000000 GB\n Disk: 8.000000 GB') assert expected_output == self._get_quota(True, ['quota', 'get', 'west/bozo']) def test_get_quota_with_no_consumption_json(self): @@ -65,8 +73,10 @@ class TestGetQuotaCommand(AuroraClientCommandTest): def test_get_quota_with_consumption_json(self): expected_response = json.loads( '{"quota":{"numCpus":5,"ramMb":20480,"diskMb":40960},' - '"prodSharedConsumption":{"numCpus":1,"ramMb":1024,"diskMb":2048},' - '"nonProdSharedConsumption":{"numCpus":1,"ramMb":1024,"diskMb":2048}}') + '"prodSharedConsumption":{"numCpus":1,"ramMb":512,"diskMb":1024},' + '"prodDedicatedConsumption":{"numCpus":2,"ramMb":1024,"diskMb":2048},' + '"nonProdSharedConsumption":{"numCpus":3,"ramMb":2048,"diskMb":4096},' + '"nonProdDedicatedConsumption":{"numCpus":4,"ramMb":4096,"diskMb":8192}}') assert (expected_response == json.loads(self._get_quota(True, ['quota', 'get', '--write-json', 'west/bozo'])))
