You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mz...@apache.org on 2019/07/10 05:01:23 UTC

[mesos] 01/03: Refactored `QuotaTree` insertion logic.

This is an automated email from the ASF dual-hosted git repository.

mzhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit 231200cf395cfbe651b9d995f4f9a6ed0d99fa58
Author: Meng Zhu <mz...@mesosphere.io>
AuthorDate: Fri Jul 5 14:55:35 2019 -0700

    Refactored `QuotaTree` insertion logic.
    
    This patch replaces the `insert` method with `update` to make it
    easier to update individual role's quota information in the tree.
    
    Review: https://reviews.apache.org/r/71019
---
 src/master/quota_handler.cpp | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/src/master/quota_handler.cpp b/src/master/quota_handler.cpp
index f9c7431..9a43110 100644
--- a/src/master/quota_handler.cpp
+++ b/src/master/quota_handler.cpp
@@ -97,11 +97,11 @@ public:
     : root(new Node(""))
   {
     foreachpair (const string& role, const Quota& quota, quotas) {
-      insert(role, quota);
+      update(role, quota);
     }
   }
 
-  void insert(const string& role, const Quota& quota)
+  void update(const string& role, const Quota& quota)
   {
     // Create the path from root->leaf in the tree. Any missing nodes
     // are created implicitly.
@@ -117,10 +117,6 @@ public:
       current = current->children.at(component).get();
     }
 
-    // Update `current` with the configured quota for this role.
-    // A path in the tree should be associated with at most one
-    // quota, so the current quota should be unset (default).
-    CHECK(current->quota == DEFAULT_QUOTA);
     current->quota = quota;
   }
 
@@ -206,12 +202,10 @@ Option<Error> Master::QuotaHandler::overcommitCheck(
     QuotaTree quotaTree({});
 
     foreachpair (const string& role, const Quota& quota, quotas) {
-      if (role != request.role()) {
-        quotaTree.insert(role, quota);
-      }
+        quotaTree.update(role, quota);
     }
 
-    quotaTree.insert(request.role(), Quota{request});
+    quotaTree.update(request.role(), Quota{request});
 
     // Hard CHECK since this is already validated earlier
     // during request validation.
@@ -564,15 +558,15 @@ Future<http::Response> Master::QuotaHandler::_set(
   // Validate that adding this quota does not violate the hierarchical
   // relationship between quotas.
   {
+     // TODO(mzhu): Keep an update-to-date `QuotaTree` in the memory
+     // to avoid construction from scratch every time.
     QuotaTree quotaTree({});
 
     foreachpair (const string& role, const Quota& quota, master->quotas) {
-      if (role != quotaInfo.role()) {
-        quotaTree.insert(role, quota);
-      }
+      quotaTree.update(role, quota);
     }
 
-    quotaTree.insert(quotaInfo.role(), Quota{quotaInfo});
+    quotaTree.update(quotaInfo.role(), Quota{quotaInfo});
 
     Option<Error> error = quotaTree.validate();
     if (error.isSome()) {