Repository: mesos Updated Branches: refs/heads/master a0811310c -> b56f7d27d
Added callback to the QoS Controller to retrieve usages from the monitor. Review: https://reviews.apache.org/r/35164 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/37533b92 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/37533b92 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/37533b92 Branch: refs/heads/master Commit: 37533b92b95f14c4713218952140804e8c60a3c0 Parents: a081131 Author: Bartek Plotka <[email protected]> Authored: Fri Jun 12 13:47:56 2015 -0700 Committer: Jie Yu <[email protected]> Committed: Fri Jun 12 13:47:58 2015 -0700 ---------------------------------------------------------------------- include/mesos/slave/qos_controller.hpp | 11 ++++++++--- src/slave/qos_controller.cpp | 6 +++--- src/slave/qos_controller.hpp | 5 ++++- src/slave/slave.cpp | 5 +++-- src/tests/mesos.hpp | 8 +++++--- 5 files changed, 23 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/37533b92/include/mesos/slave/qos_controller.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/slave/qos_controller.hpp b/include/mesos/slave/qos_controller.hpp index 1d89acf..7e280cc 100644 --- a/include/mesos/slave/qos_controller.hpp +++ b/include/mesos/slave/qos_controller.hpp @@ -29,6 +29,7 @@ #include <process/future.hpp> #include <process/queue.hpp> +#include <stout/lambda.hpp> #include <stout/nothing.hpp> #include <stout/option.hpp> #include <stout/try.hpp> @@ -52,9 +53,13 @@ public: virtual ~QoSController() {} - // Initializes this QoS Controller. - // TODO(nnielsen): Pass ResourceMonitor* once it's exposed. - virtual Try<Nothing> initialize() = 0; + // Initializes this QoS Controller. This method needs to be + // called before any other member method is called. It registers + // a callback in the QoS Controller. The callback allows the + // QoS Controller to fetch the current resource usage for each + // executor on slave. + virtual Try<Nothing> initialize( + const lambda::function<process::Future<ResourceUsage>()>& usage) = 0; // A QoS Controller informs the slave about corrections to carry // out, but returning futures to QoSCorrection objects. For more http://git-wip-us.apache.org/repos/asf/mesos/blob/37533b92/src/slave/qos_controller.cpp ---------------------------------------------------------------------- diff --git a/src/slave/qos_controller.cpp b/src/slave/qos_controller.cpp index febb236..5788368 100644 --- a/src/slave/qos_controller.cpp +++ b/src/slave/qos_controller.cpp @@ -81,7 +81,8 @@ NoopQoSController::~NoopQoSController() } -Try<Nothing> NoopQoSController::initialize() +Try<Nothing> NoopQoSController::initialize( + const lambda::function<Future<ResourceUsage>()>& usage) { if (process.get() != NULL) { return Error("Noop QoS Controller has already been initialized"); @@ -94,8 +95,7 @@ Try<Nothing> NoopQoSController::initialize() } -process::Future<list<mesos::slave::QoSCorrection>> -NoopQoSController::corrections() +Future<list<mesos::slave::QoSCorrection>> NoopQoSController::corrections() { return Future<list<mesos::slave::QoSCorrection>>(); } http://git-wip-us.apache.org/repos/asf/mesos/blob/37533b92/src/slave/qos_controller.hpp ---------------------------------------------------------------------- diff --git a/src/slave/qos_controller.hpp b/src/slave/qos_controller.hpp index b377983..6188a74 100644 --- a/src/slave/qos_controller.hpp +++ b/src/slave/qos_controller.hpp @@ -21,6 +21,8 @@ #include <mesos/slave/qos_controller.hpp> +#include <stout/lambda.hpp> + #include <process/owned.hpp> namespace mesos { @@ -39,7 +41,8 @@ class NoopQoSController : public mesos::slave::QoSController public: virtual ~NoopQoSController(); - virtual Try<Nothing> initialize(); + virtual Try<Nothing> initialize( + const lambda::function<process::Future<ResourceUsage>()>& usage); virtual process::Future<std::list<mesos::slave::QoSCorrection>> corrections(); http://git-wip-us.apache.org/repos/asf/mesos/blob/37533b92/src/slave/slave.cpp ---------------------------------------------------------------------- diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp index b523c2f..9af69d8 100644 --- a/src/slave/slave.cpp +++ b/src/slave/slave.cpp @@ -335,8 +335,9 @@ void Slave::initialize() << initialize.error(); } - // TODO(nnielsen): Pass ResourceMonitor* to 'initialize'. - initialize = qosController->initialize(); + initialize = qosController->initialize( + defer(self(), &Self::usage)); + if (initialize.isError()) { EXIT(1) << "Failed to initialize the QoS Controller: " << initialize.error(); http://git-wip-us.apache.org/repos/asf/mesos/blob/37533b92/src/tests/mesos.hpp ---------------------------------------------------------------------- diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp index e19ef98..b80987b 100644 --- a/src/tests/mesos.hpp +++ b/src/tests/mesos.hpp @@ -753,9 +753,9 @@ class MockQoSController : public mesos::slave::QoSController public: MockQoSController() { - ON_CALL(*this, initialize()) + ON_CALL(*this, initialize(_)) .WillByDefault(Return(Nothing())); - EXPECT_CALL(*this, initialize()) + EXPECT_CALL(*this, initialize(_)) .WillRepeatedly(DoDefault()); ON_CALL(*this, corrections()) @@ -765,7 +765,9 @@ public: .WillRepeatedly(DoDefault()); } - MOCK_METHOD0(initialize, Try<Nothing>()); + MOCK_METHOD1( + initialize, + Try<Nothing>(const lambda::function<process::Future<ResourceUsage>()>&)); MOCK_METHOD0( corrections, process::Future<std::list<mesos::slave::QoSCorrection>>());
