You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2015/04/18 01:48:27 UTC
mesos git commit: Updated the allocator to take framework's resources
by SlaveID.
Repository: mesos
Updated Branches:
refs/heads/master c0bf80e2b -> 11105f7c0
Updated the allocator to take framework's resources by SlaveID.
Review: https://reviews.apache.org/r/31666
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/11105f7c
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/11105f7c
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/11105f7c
Branch: refs/heads/master
Commit: 11105f7c009e186ae3e47ff8987671ab5078de7b
Parents: c0bf80e
Author: Michael Park <mc...@gmail.com>
Authored: Fri Apr 17 16:34:50 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Fri Apr 17 16:34:52 2015 -0700
----------------------------------------------------------------------
src/master/allocator/allocator.hpp | 2 +-
src/master/allocator/mesos/allocator.hpp | 6 +--
src/master/allocator/mesos/hierarchical.hpp | 8 +++-
src/master/master.cpp | 5 +--
src/tests/hierarchical_allocator_tests.cpp | 51 ++++++++++++++++--------
src/tests/mesos.hpp | 2 +-
6 files changed, 46 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/11105f7c/src/master/allocator/allocator.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/allocator.hpp b/src/master/allocator/allocator.hpp
index 91f8050..5e3e613 100644
--- a/src/master/allocator/allocator.hpp
+++ b/src/master/allocator/allocator.hpp
@@ -65,7 +65,7 @@ public:
virtual void addFramework(
const FrameworkID& frameworkId,
const FrameworkInfo& frameworkInfo,
- const Resources& used) = 0;
+ const hashmap<SlaveID, Resources>& used) = 0;
virtual void removeFramework(
const FrameworkID& frameworkId) = 0;
http://git-wip-us.apache.org/repos/asf/mesos/blob/11105f7c/src/master/allocator/mesos/allocator.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/allocator.hpp b/src/master/allocator/mesos/allocator.hpp
index fb898f1..af27a9b 100644
--- a/src/master/allocator/mesos/allocator.hpp
+++ b/src/master/allocator/mesos/allocator.hpp
@@ -53,7 +53,7 @@ public:
void addFramework(
const FrameworkID& frameworkId,
const FrameworkInfo& frameworkInfo,
- const Resources& used);
+ const hashmap<SlaveID, Resources>& used);
void removeFramework(
const FrameworkID& frameworkId);
@@ -130,7 +130,7 @@ public:
virtual void addFramework(
const FrameworkID& frameworkId,
const FrameworkInfo& frameworkInfo,
- const Resources& used) = 0;
+ const hashmap<SlaveID, Resources>& used) = 0;
virtual void removeFramework(
const FrameworkID& frameworkId) = 0;
@@ -217,7 +217,7 @@ template <typename AllocatorProcess>
inline void MesosAllocator<AllocatorProcess>::addFramework(
const FrameworkID& frameworkId,
const FrameworkInfo& frameworkInfo,
- const Resources& used)
+ const hashmap<SlaveID, Resources>& used)
{
process::dispatch(
process,
http://git-wip-us.apache.org/repos/asf/mesos/blob/11105f7c/src/master/allocator/mesos/hierarchical.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/hierarchical.hpp b/src/master/allocator/mesos/hierarchical.hpp
index 9f9a631..90ac197 100644
--- a/src/master/allocator/mesos/hierarchical.hpp
+++ b/src/master/allocator/mesos/hierarchical.hpp
@@ -81,7 +81,7 @@ public:
void addFramework(
const FrameworkID& frameworkId,
const FrameworkInfo& frameworkInfo,
- const Resources& used);
+ const hashmap<SlaveID, Resources>& used);
void removeFramework(
const FrameworkID& frameworkId);
@@ -295,7 +295,7 @@ void
HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::addFramework(
const FrameworkID& frameworkId,
const FrameworkInfo& frameworkInfo,
- const Resources& used)
+ const hashmap<SlaveID, Resources>& used_)
{
CHECK(initialized);
@@ -310,6 +310,10 @@ HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::addFramework(
// framework's role.
// Update the allocation to this framework.
+ // TODO(mpark): Once the sorter API is updated to operate on
+ // 'hashmap<SlaveID, Resources>' rather than 'Resources', update
+ // the sorters for each slave instead.
+ Resources used = Resources::sum(used_);
roleSorter->allocated(role, used.unreserved());
frameworkSorters[role]->add(used);
frameworkSorters[role]->allocated(frameworkId.value(), used);
http://git-wip-us.apache.org/repos/asf/mesos/blob/11105f7c/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 944a943..e30b951 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -4131,13 +4131,10 @@ void Master::addFramework(Framework* framework)
// There should be no offered resources yet!
CHECK_EQ(Resources(), framework->totalOfferedResources);
- // TODO(mpark): Once the allocator API is updated to operate on
- // 'hashmap<SlaveID, Resources>' rather than 'Resources', pass
- // 'framework->usedResources' instead.
allocator->addFramework(
framework->id(),
framework->info,
- framework->totalUsedResources);
+ framework->usedResources);
// Export framework metrics.
http://git-wip-us.apache.org/repos/asf/mesos/blob/11105f7c/src/tests/hierarchical_allocator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/hierarchical_allocator_tests.cpp b/src/tests/hierarchical_allocator_tests.cpp
index 8861bf3..0b564a7 100644
--- a/src/tests/hierarchical_allocator_tests.cpp
+++ b/src/tests/hierarchical_allocator_tests.cpp
@@ -184,7 +184,8 @@ TEST_F(HierarchicalAllocatorTest, UnreservedDRF)
// framework1 will be offered all of slave1's resources since it is
// the only framework running so far.
FrameworkInfo framework1 = createFrameworkInfo("role1");
- allocator->addFramework(framework1.id(), framework1, Resources());
+ allocator->addFramework(
+ framework1.id(), framework1, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
AWAIT_READY(allocation);
@@ -195,7 +196,8 @@ TEST_F(HierarchicalAllocatorTest, UnreservedDRF)
// framework1 share = 1
FrameworkInfo framework2 = createFrameworkInfo("role2");
- allocator->addFramework(framework2.id(), framework2, Resources());
+ allocator->addFramework(
+ framework2.id(), framework2, hashmap<SlaveID, Resources>());
// Total cluster resources will become cpus=3, mem=1536:
// role1 share = 0.66 (cpus=2, mem=1024)
@@ -238,7 +240,8 @@ TEST_F(HierarchicalAllocatorTest, UnreservedDRF)
// framework2 share = 1
FrameworkInfo framework3 = createFrameworkInfo("role1");
- allocator->addFramework(framework3.id(), framework3, Resources());
+ allocator->addFramework(
+ framework3.id(), framework3, hashmap<SlaveID, Resources>());
// Total cluster resources will become cpus=10, mem=7680:
// role1 share = 0.2 (cpus=2, mem=1024)
@@ -264,7 +267,8 @@ TEST_F(HierarchicalAllocatorTest, UnreservedDRF)
// framework2 share = 1
FrameworkInfo framework4 = createFrameworkInfo("role1");
- allocator->addFramework(framework4.id(), framework4, Resources());
+ allocator->addFramework(
+ framework4.id(), framework4, hashmap<SlaveID, Resources>());
// Total cluster resources will become cpus=11, mem=8192
// role1 share = 0.63 (cpus=6, mem=5120)
@@ -306,7 +310,8 @@ TEST_F(HierarchicalAllocatorTest, ReservedDRF)
// framework1 will be offered all of the resources.
FrameworkInfo framework1 = createFrameworkInfo("role1");
- allocator->addFramework(framework1.id(), framework1, Resources());
+ allocator->addFramework(
+ framework1.id(), framework1, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
AWAIT_READY(allocation);
@@ -314,7 +319,8 @@ TEST_F(HierarchicalAllocatorTest, ReservedDRF)
EXPECT_EQ(slave1.resources(), Resources::sum(allocation.get().resources));
FrameworkInfo framework2 = createFrameworkInfo("role2");
- allocator->addFramework(framework2.id(), framework2, Resources());
+ allocator->addFramework(
+ framework2.id(), framework2, hashmap<SlaveID, Resources>());
// framework2 will be allocated the new resoures.
SlaveInfo slave2 = createSlaveInfo("cpus:2;mem:512;disk:0");
@@ -342,7 +348,8 @@ TEST_F(HierarchicalAllocatorTest, ReservedDRF)
// expect framework3 to receive the next allocation of role1
// resources.
FrameworkInfo framework3 = createFrameworkInfo("role1");
- allocator->addFramework(framework3.id(), framework3, Resources());
+ allocator->addFramework(
+ framework3.id(), framework3, hashmap<SlaveID, Resources>());
SlaveInfo slave4 = createSlaveInfo(
"cpus(role1):2;mem(role1):1024;disk(role1):0");
@@ -378,7 +385,8 @@ TEST_F(HierarchicalAllocatorTest, CoarseGrained)
// resources so that we can test what happens when there are 2
// frameworks and 2 slaves to consider during allocation.
FrameworkInfo framework1 = createFrameworkInfo("role1");
- allocator->addFramework(framework1.id(), framework1, Resources());
+ allocator->addFramework(
+ framework1.id(), framework1, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
AWAIT_READY(allocation);
@@ -400,7 +408,8 @@ TEST_F(HierarchicalAllocatorTest, CoarseGrained)
// Now add the second framework, we expect there to be 2 subsequent
// allocations, each framework being allocated a full slave.
FrameworkInfo framework2 = createFrameworkInfo("role2");
- allocator->addFramework(framework2.id(), framework2, Resources());
+ allocator->addFramework(
+ framework2.id(), framework2, hashmap<SlaveID, Resources>());
hashmap<FrameworkID, Allocation> allocations;
@@ -440,10 +449,12 @@ TEST_F(HierarchicalAllocatorTest, SameShareFairness)
hashmap<FrameworkID, Resources> EMPTY;
FrameworkInfo framework1 = createFrameworkInfo("*");
- allocator->addFramework(framework1.id(), framework1, Resources());
+ allocator->addFramework(
+ framework1.id(), framework1, hashmap<SlaveID, Resources>());
FrameworkInfo framework2 = createFrameworkInfo("*");
- allocator->addFramework(framework2.id(), framework2, Resources());
+ allocator->addFramework(
+ framework2.id(), framework2, hashmap<SlaveID, Resources>());
SlaveInfo slave = createSlaveInfo("cpus:2;mem:1024;disk:0");
allocator->addSlave(slave.id(), slave, slave.resources(), EMPTY);
@@ -501,7 +512,8 @@ TEST_F(HierarchicalAllocatorTest, Reservations)
// framework1 should get all the resources from slave1, and the
// unreserved resources from slave2.
FrameworkInfo framework1 = createFrameworkInfo("role1");
- allocator->addFramework(framework1.id(), framework1, Resources());
+ allocator->addFramework(
+ framework1.id(), framework1, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
AWAIT_READY(allocation);
@@ -514,7 +526,8 @@ TEST_F(HierarchicalAllocatorTest, Reservations)
// framework2 should get all of its reserved resources on slave2.
FrameworkInfo framework2 = createFrameworkInfo("role2");
- allocator->addFramework(framework2.id(), framework2, Resources());
+ allocator->addFramework(
+ framework2.id(), framework2, hashmap<SlaveID, Resources>());
allocation = queue.get();
AWAIT_READY(allocation);
@@ -542,7 +555,8 @@ TEST_F(HierarchicalAllocatorTest, RecoverResources)
// Initially, all the resources are allocated.
FrameworkInfo framework1 = createFrameworkInfo("role1");
- allocator->addFramework(framework1.id(), framework1, Resources());
+ allocator->addFramework(
+ framework1.id(), framework1, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
AWAIT_READY(allocation);
@@ -599,7 +613,8 @@ TEST_F(HierarchicalAllocatorTest, Allocatable)
initialize(vector<string>{"role1"});
FrameworkInfo framework = createFrameworkInfo("role1");
- allocator->addFramework(framework.id(), framework, Resources());
+ allocator->addFramework(
+ framework.id(), framework, hashmap<SlaveID, Resources>());
hashmap<FrameworkID, Resources> EMPTY;
@@ -671,7 +686,8 @@ TEST_F(HierarchicalAllocatorTest, UpdateAllocation)
// Initially, all the resources are allocated.
FrameworkInfo framework = createFrameworkInfo("role1");
- allocator->addFramework(framework.id(), framework, Resources());
+ allocator->addFramework(
+ framework.id(), framework, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
AWAIT_READY(allocation);
@@ -749,7 +765,8 @@ TEST_F(HierarchicalAllocatorTest, Whitelist)
allocator->addSlave(slave.id(), slave, slave.resources(), EMPTY);
FrameworkInfo framework = createFrameworkInfo("*");
- allocator->addFramework(framework.id(), framework, Resources());
+ allocator->addFramework(
+ framework.id(), framework, hashmap<SlaveID, Resources>());
Future<Allocation> allocation = queue.get();
http://git-wip-us.apache.org/repos/asf/mesos/blob/11105f7c/src/tests/mesos.hpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index 42e42ac..7744df5 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -855,7 +855,7 @@ public:
MOCK_METHOD3(addFramework, void(
const FrameworkID&,
const FrameworkInfo&,
- const Resources&));
+ const hashmap<SlaveID, Resources>&));
MOCK_METHOD1(removeFramework, void(
const FrameworkID&));