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'])))
 

Reply via email to