You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gr...@apache.org on 2018/05/14 17:05:40 UTC
mesos git commit: Fixed a crash when metrics race with quota removal.
Repository: mesos
Updated Branches:
refs/heads/master 90ce79767 -> 20c3c34b0
Fixed a crash when metrics race with quota removal.
This patch addresses a race condition in which the removal of
a role from the allocator's quota sorter races with execution
of a callback tied to a `PullGauge`. The gauge's callback
assumed that the role would be present in the sorter, but it's
possible for the role to be removed before the callback is
executed.
Review: https://reviews.apache.org/r/67104/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/20c3c34b
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/20c3c34b
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/20c3c34b
Branch: refs/heads/master
Commit: 20c3c34b08ade3b9cf93d55c1f81c0413eb268c4
Parents: 90ce797
Author: Greg Mann <gr...@mesosphere.io>
Authored: Mon May 14 09:21:26 2018 -0700
Committer: Greg Mann <gr...@gmail.com>
Committed: Mon May 14 09:21:29 2018 -0700
----------------------------------------------------------------------
src/master/allocator/mesos/hierarchical.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/20c3c34b/src/master/allocator/mesos/hierarchical.cpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/hierarchical.cpp b/src/master/allocator/mesos/hierarchical.cpp
index 1000968..c221999 100644
--- a/src/master/allocator/mesos/hierarchical.cpp
+++ b/src/master/allocator/mesos/hierarchical.cpp
@@ -2512,8 +2512,14 @@ double HierarchicalAllocatorProcess::_quota_allocated(
const string& role,
const string& resource)
{
+ if (!roleSorter->contains(role)) {
+ // This can occur when execution of this callback races with removal of the
+ // metric for a role which does not have any associated frameworks.
+ return 0.;
+ }
+
Option<Value::Scalar> used =
- quotaRoleSorter->allocationScalarQuantities(role)
+ roleSorter->allocationScalarQuantities(role)
.get<Value::Scalar>(resource);
return used.isSome() ? used->value() : 0;