You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2015/09/19 01:16:59 UTC
[1/6] mesos git commit: Added QUIESCE call interface to the scheduler.
Repository: mesos
Updated Branches:
refs/heads/master 461c521d4 -> 63f1c2ec8
Added QUIESCE call interface to the scheduler.
Review: https://reviews.apache.org/r/37532
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/3a1f2d36
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/3a1f2d36
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/3a1f2d36
Branch: refs/heads/master
Commit: 3a1f2d36f8de0cacc085a828bd9bbc1f2a78f747
Parents: 461c521
Author: Guangya Liu <gy...@gmail.com>
Authored: Fri Sep 18 16:13:18 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Sep 18 16:13:18 2015 -0700
----------------------------------------------------------------------
include/mesos/scheduler.hpp | 6 +++++
include/mesos/scheduler/scheduler.proto | 1 +
src/master/master.cpp | 15 +++++++++++++
src/master/master.hpp | 2 ++
src/sched/sched.cpp | 33 ++++++++++++++++++++++++++++
5 files changed, 57 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/3a1f2d36/include/mesos/scheduler.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/scheduler.hpp b/include/mesos/scheduler.hpp
index ee198b6..071f448 100644
--- a/include/mesos/scheduler.hpp
+++ b/include/mesos/scheduler.hpp
@@ -268,6 +268,10 @@ public:
// those filtered slaves.
virtual Status reviveOffers() = 0;
+ // Inform Mesos master to stop sending offers to the framework. The
+ // scheduler should call reviveOffers() to resume getting offers.
+ virtual Status quiesceOffers() = 0;
+
// Acknowledges the status update. This should only be called
// once the status update is processed durably by the scheduler.
// Not that explicit acknowledgements must be requested via the
@@ -416,6 +420,8 @@ public:
virtual Status reviveOffers();
+ virtual Status quiesceOffers();
+
virtual Status acknowledgeStatusUpdate(
const TaskStatus& status);
http://git-wip-us.apache.org/repos/asf/mesos/blob/3a1f2d36/include/mesos/scheduler/scheduler.proto
----------------------------------------------------------------------
diff --git a/include/mesos/scheduler/scheduler.proto b/include/mesos/scheduler/scheduler.proto
index 19f548d..89ddc10 100644
--- a/include/mesos/scheduler/scheduler.proto
+++ b/include/mesos/scheduler/scheduler.proto
@@ -174,6 +174,7 @@ message Call {
RECONCILE = 9; // See 'Reconcile' below.
MESSAGE = 10; // See 'Message' below.
REQUEST = 11; // See 'Request' below.
+ QUIESCE = 12; // Inform master to stop sending offers to the framework.
// TODO(benh): Consider adding an 'ACTIVATE' and 'DEACTIVATE' for
// already subscribed frameworks as a way of stopping offers from
http://git-wip-us.apache.org/repos/asf/mesos/blob/3a1f2d36/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 3b390d7..7ae4ef8 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -1781,6 +1781,10 @@ void Master::receive(
request(framework, call.request());
break;
+ case scheduler::Call::QUIESCE:
+ quiesce(framework);
+ break;
+
default:
// Should be caught during call validation above.
LOG(FATAL) << "Unexpected " << call.type() << " call"
@@ -2597,6 +2601,17 @@ void Master::request(
}
+void Master::quiesce(Framework* framework)
+{
+ CHECK_NOTNULL(framework);
+
+ LOG(INFO) << "Processing QUIESCE call for framework " << *framework;
+
+ //TODO(gyliu513): Add quiesce logic here.
+ LOG(WARNING) << "Not implemented yet, ignoring the QUIESCE call.";
+}
+
+
void Master::launchTasks(
const UPID& from,
const FrameworkID& frameworkId,
http://git-wip-us.apache.org/repos/asf/mesos/blob/3a1f2d36/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index d48ef7c..6805177 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -829,6 +829,8 @@ private:
Framework* framework,
const scheduler::Call::Request& request);
+ void quiesce(Framework* framework);
+
bool elected() const
{
return leader.isSome() && leader.get() == info_;
http://git-wip-us.apache.org/repos/asf/mesos/blob/3a1f2d36/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index a1723f3..84c2edb 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -1242,6 +1242,23 @@ protected:
send(master.get().pid(), call);
}
+ void quiesceOffers()
+ {
+ if (!connected) {
+ VLOG(1) << "Ignoring quiesce offers message as master is disconnected";
+ return;
+ }
+
+ Call call;
+
+ CHECK(framework.has_id());
+ call.mutable_framework_id()->CopyFrom(framework.id());
+ call.set_type(Call::QUIESCE);
+
+ CHECK_SOME(master);
+ send(master.get().pid(), call);
+ }
+
void acknowledgeStatusUpdate(
const TaskStatus& status)
{
@@ -1934,6 +1951,22 @@ Status MesosSchedulerDriver::reviveOffers()
}
+Status MesosSchedulerDriver::quiesceOffers()
+{
+ synchronized (mutex) {
+ if (status != DRIVER_RUNNING) {
+ return status;
+ }
+
+ CHECK(process != NULL);
+
+ dispatch(process, &SchedulerProcess::quiesceOffers);
+
+ return status;
+ }
+}
+
+
Status MesosSchedulerDriver::acknowledgeStatusUpdate(
const TaskStatus& taskStatus)
{
[3/6] mesos git commit: Added metrics of messages_quiesce_offers.
Posted by vi...@apache.org.
Added metrics of messages_quiesce_offers.
Review: https://reviews.apache.org/r/38119
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c68f6d71
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c68f6d71
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c68f6d71
Branch: refs/heads/master
Commit: c68f6d71327434e50aff72892b9781549ba7616d
Parents: 3de5bf0
Author: Guangya Liu <gy...@gmail.com>
Authored: Fri Sep 18 16:14:04 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Sep 18 16:14:04 2015 -0700
----------------------------------------------------------------------
src/master/master.cpp | 2 ++
src/master/metrics.cpp | 4 ++++
src/master/metrics.hpp | 1 +
src/tests/master_tests.cpp | 1 +
src/tests/metrics_tests.cpp | 1 +
5 files changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/c68f6d71/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 151ce71..64e5fb9 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -2607,6 +2607,8 @@ void Master::quiesce(Framework* framework)
LOG(INFO) << "Processing QUIESCE call for framework " << *framework;
+ ++metrics->messages_quiesce_offers;
+
allocator->quiesceOffers(framework->id());
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/c68f6d71/src/master/metrics.cpp
----------------------------------------------------------------------
diff --git a/src/master/metrics.cpp b/src/master/metrics.cpp
index d79206f..6bce80b 100644
--- a/src/master/metrics.cpp
+++ b/src/master/metrics.cpp
@@ -114,6 +114,8 @@ Metrics::Metrics(const Master& master)
"master/messages_decline_offers"),
messages_revive_offers(
"master/messages_revive_offers"),
+ messages_quiesce_offers(
+ "master/messages_quiesce_offers"),
messages_reconcile_tasks(
"master/messages_reconcile_tasks"),
messages_framework_to_executor(
@@ -218,6 +220,7 @@ Metrics::Metrics(const Master& master)
process::metrics::add(messages_launch_tasks);
process::metrics::add(messages_decline_offers);
process::metrics::add(messages_revive_offers);
+ process::metrics::add(messages_quiesce_offers);
process::metrics::add(messages_reconcile_tasks);
process::metrics::add(messages_framework_to_executor);
process::metrics::add(messages_executor_to_framework);
@@ -353,6 +356,7 @@ Metrics::~Metrics()
process::metrics::remove(messages_launch_tasks);
process::metrics::remove(messages_decline_offers);
process::metrics::remove(messages_revive_offers);
+ process::metrics::remove(messages_quiesce_offers);
process::metrics::remove(messages_reconcile_tasks);
process::metrics::remove(messages_framework_to_executor);
process::metrics::remove(messages_executor_to_framework);
http://git-wip-us.apache.org/repos/asf/mesos/blob/c68f6d71/src/master/metrics.hpp
----------------------------------------------------------------------
diff --git a/src/master/metrics.hpp b/src/master/metrics.hpp
index 2d07a16..a3c0c0c 100644
--- a/src/master/metrics.hpp
+++ b/src/master/metrics.hpp
@@ -130,6 +130,7 @@ struct Metrics
process::metrics::Counter messages_launch_tasks;
process::metrics::Counter messages_decline_offers;
process::metrics::Counter messages_revive_offers;
+ process::metrics::Counter messages_quiesce_offers;
process::metrics::Counter messages_reconcile_tasks;
process::metrics::Counter messages_framework_to_executor;
http://git-wip-us.apache.org/repos/asf/mesos/blob/c68f6d71/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index 2cb8b3c..a044286 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -1511,6 +1511,7 @@ TEST_F(MasterTest, MetricsInMetricsEndpoint)
EXPECT_EQ(1u, snapshot.values.count("master/messages_launch_tasks"));
EXPECT_EQ(1u, snapshot.values.count("master/messages_decline_offers"));
EXPECT_EQ(1u, snapshot.values.count("master/messages_revive_offers"));
+ EXPECT_EQ(1u, snapshot.values.count("master/messages_quiesce_offers"));
EXPECT_EQ(1u, snapshot.values.count("master/messages_reconcile_tasks"));
EXPECT_EQ(1u, snapshot.values.count("master/messages_framework_to_executor"));
http://git-wip-us.apache.org/repos/asf/mesos/blob/c68f6d71/src/tests/metrics_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/metrics_tests.cpp b/src/tests/metrics_tests.cpp
index 3e9d7c2..9b7f84a 100644
--- a/src/tests/metrics_tests.cpp
+++ b/src/tests/metrics_tests.cpp
@@ -97,6 +97,7 @@ TEST_F(MetricsTest, Master)
EXPECT_EQ(1u, stats.values.count("master/messages_launch_tasks"));
EXPECT_EQ(1u, stats.values.count("master/messages_decline_offers"));
EXPECT_EQ(1u, stats.values.count("master/messages_revive_offers"));
+ EXPECT_EQ(1u, stats.values.count("master/messages_quiesce_offers"));
EXPECT_EQ(1u, stats.values.count("master/messages_reconcile_tasks"));
EXPECT_EQ(1u, stats.values.count("master/messages_framework_to_executor"));
[6/6] mesos git commit: Added V1 Support for QuiesceOffers.
Posted by vi...@apache.org.
Added V1 Support for QuiesceOffers.
Review: https://reviews.apache.org/r/38124
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/63f1c2ec
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/63f1c2ec
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/63f1c2ec
Branch: refs/heads/master
Commit: 63f1c2ec861a8fd527c89a37ce0f87b4735aa39f
Parents: dd3fbe8
Author: Guangya Liu <gy...@gmail.com>
Authored: Fri Sep 18 16:16:19 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Sep 18 16:16:19 2015 -0700
----------------------------------------------------------------------
include/mesos/v1/scheduler/scheduler.proto | 1 +
src/master/http.cpp | 4 +
src/master/validation.cpp | 3 +
src/tests/scheduler_tests.cpp | 106 ++++++++++++++++++++++++
4 files changed, 114 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/63f1c2ec/include/mesos/v1/scheduler/scheduler.proto
----------------------------------------------------------------------
diff --git a/include/mesos/v1/scheduler/scheduler.proto b/include/mesos/v1/scheduler/scheduler.proto
index 0118b46..bc19b8d 100644
--- a/include/mesos/v1/scheduler/scheduler.proto
+++ b/include/mesos/v1/scheduler/scheduler.proto
@@ -174,6 +174,7 @@ message Call {
RECONCILE = 9; // See 'Reconcile' below.
MESSAGE = 10; // See 'Message' below.
REQUEST = 11; // See 'Request' below.
+ QUIESCE = 12; // Inform master to stop sending offers to the framework.
// TODO(benh): Consider adding an 'ACTIVATE' and 'DEACTIVATE' for
// already subscribed frameworks as a way of stopping offers from
http://git-wip-us.apache.org/repos/asf/mesos/blob/63f1c2ec/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 8bb5935..7cca8b1 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -482,6 +482,10 @@ Future<Response> Master::Http::scheduler(const Request& request) const
master->revive(framework);
return Accepted();
+ case scheduler::Call::QUIESCE:
+ master->quiesce(framework);
+ return Accepted();
+
case scheduler::Call::KILL:
master->kill(framework, call.kill());
return Accepted();
http://git-wip-us.apache.org/repos/asf/mesos/blob/63f1c2ec/src/master/validation.cpp
----------------------------------------------------------------------
diff --git a/src/master/validation.cpp b/src/master/validation.cpp
index f97eba6..0f3fc1a 100644
--- a/src/master/validation.cpp
+++ b/src/master/validation.cpp
@@ -97,6 +97,9 @@ Option<Error> validate(const mesos::scheduler::Call& call)
case mesos::scheduler::Call::REVIVE:
return None();
+ case mesos::scheduler::Call::QUIESCE:
+ return None();
+
case mesos::scheduler::Call::KILL:
if (!call.has_kill()) {
return Error("Expecting 'kill' to be present");
http://git-wip-us.apache.org/repos/asf/mesos/blob/63f1c2ec/src/tests/scheduler_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_tests.cpp b/src/tests/scheduler_tests.cpp
index 77c2635..0f892f9 100644
--- a/src/tests/scheduler_tests.cpp
+++ b/src/tests/scheduler_tests.cpp
@@ -941,6 +941,112 @@ TEST_P(SchedulerTest, Revive)
}
+TEST_P(SchedulerTest, Quiesce)
+{
+ master::Flags flags = CreateMasterFlags();
+ flags.authenticate_frameworks = false;
+
+ Try<PID<Master>> master = StartMaster(flags);
+ ASSERT_SOME(master);
+
+ Try<PID<Slave>> slave = StartSlave();
+ ASSERT_SOME(slave);
+
+ Callbacks callbacks;
+
+ Future<Nothing> connected;
+ EXPECT_CALL(callbacks, connected())
+ .WillOnce(FutureSatisfy(&connected));
+
+ Mesos mesos(
+ master.get(),
+ GetParam(),
+ lambda::bind(&Callbacks::connected, lambda::ref(callbacks)),
+ lambda::bind(&Callbacks::disconnected, lambda::ref(callbacks)),
+ lambda::bind(&Callbacks::received, lambda::ref(callbacks), lambda::_1));
+
+ AWAIT_READY(connected);
+
+ Queue<Event> events;
+
+ EXPECT_CALL(callbacks, received(_))
+ .WillRepeatedly(Enqueue(&events));
+
+ {
+ Call call;
+ call.set_type(Call::SUBSCRIBE);
+
+ Call::Subscribe* subscribe = call.mutable_subscribe();
+ subscribe->mutable_framework_info()->CopyFrom(DEFAULT_V1_FRAMEWORK_INFO);
+
+ mesos.send(call);
+ }
+
+ Future<Event> event = events.get();
+ AWAIT_READY(event);
+ EXPECT_EQ(Event::SUBSCRIBED, event.get().type());
+
+ v1::FrameworkID id(event.get().subscribed().framework_id());
+
+ event = events.get();
+ AWAIT_READY(event);
+ EXPECT_EQ(Event::OFFERS, event.get().type());
+ EXPECT_NE(0, event.get().offers().offers().size());
+
+ v1::Offer offer = event.get().offers().offers(0);
+ {
+ Call call;
+ call.mutable_framework_id()->CopyFrom(id);
+ call.set_type(Call::DECLINE);
+
+ Call::Decline* decline = call.mutable_decline();
+ decline->add_offer_ids()->CopyFrom(offer.id());
+
+ // Set 1hr filter to not immediately get another offer.
+ v1::Filters filters;
+ filters.set_refuse_seconds(Hours(1).secs());
+ decline->mutable_filters()->CopyFrom(filters);
+
+ mesos.send(call);
+ }
+
+ {
+ Call call;
+ call.mutable_framework_id()->CopyFrom(id);
+ call.set_type(Call::QUIESCE);
+
+ mesos.send(call);
+ }
+
+ // No offers should be sent within 100 mins because the framework
+ // quiesced offers.
+ Clock::pause();
+ Clock::advance(Minutes(100));
+ Clock::settle();
+
+ event = events.get();
+ ASSERT_TRUE(event.isPending());
+
+ // On revival the quiescent should be set as false and the scheduler
+ // should get another offer with same amount of resources. Framework
+ // should receive offers only after calling reviving offers.
+ {
+ Call call;
+ call.mutable_framework_id()->CopyFrom(id);
+ call.set_type(Call::REVIVE);
+
+ mesos.send(call);
+ }
+
+ AWAIT_READY(event);
+ EXPECT_EQ(Event::OFFERS, event.get().type());
+ EXPECT_NE(0, event.get().offers().offers().size());
+ ASSERT_EQ(offer.resources(), event.get().offers().offers(0).resources());
+
+ Shutdown(); // Must shutdown before 'containerizer' gets deallocated.
+}
+
+
TEST_P(SchedulerTest, Message)
{
master::Flags flags = CreateMasterFlags();
[4/6] mesos git commit: Added Java Support for QuiesceOffers.
Posted by vi...@apache.org.
Added Java Support for QuiesceOffers.
Review: https://reviews.apache.org/r/38120
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9c20b5d4
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9c20b5d4
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9c20b5d4
Branch: refs/heads/master
Commit: 9c20b5d46f6c6d99802bf4cb1e461e594c347b64
Parents: c68f6d7
Author: Guangya Liu <gy...@gmail.com>
Authored: Fri Sep 18 16:15:31 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Sep 18 16:15:31 2015 -0700
----------------------------------------------------------------------
.../org_apache_mesos_MesosSchedulerDriver.cpp | 20 ++++++++++++++++++++
.../org/apache/mesos/MesosSchedulerDriver.java | 2 ++
.../src/org/apache/mesos/SchedulerDriver.java | 10 ++++++++++
3 files changed, 32 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/9c20b5d4/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
index a89ebed..d8acc4f 100644
--- a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
+++ b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
@@ -988,6 +988,26 @@ JNIEXPORT jobject JNICALL Java_org_apache_mesos_MesosSchedulerDriver_reviveOffer
/*
* Class: org_apache_mesos_MesosSchedulerDriver
+ * Method: quiesceOffers
+ * Signature: ()Lorg/apache/mesos/Protos/Status;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_MesosSchedulerDriver_quiesceOffers
+ (JNIEnv* env, jobject thiz)
+{
+ jclass clazz = env->GetObjectClass(thiz);
+
+ jfieldID __driver = env->GetFieldID(clazz, "__driver", "J");
+ MesosSchedulerDriver* driver =
+ (MesosSchedulerDriver*) env->GetLongField(thiz, __driver);
+
+ Status status = driver->quiesceOffers();
+
+ return convert<Status>(env, status);
+}
+
+
+/*
+ * Class: org_apache_mesos_MesosSchedulerDriver
* Method: requestResources
* Signature: (Ljava/util/Collection;)Lorg/apache/mesos/Protos/Status;
*/
http://git-wip-us.apache.org/repos/asf/mesos/blob/9c20b5d4/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
----------------------------------------------------------------------
diff --git a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
index b9b2ea8..de88463 100644
--- a/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
+++ b/src/java/src/org/apache/mesos/MesosSchedulerDriver.java
@@ -288,6 +288,8 @@ public class MesosSchedulerDriver implements SchedulerDriver {
public native Status reviveOffers();
+ public native Status quiesceOffers();
+
public native Status acknowledgeStatusUpdate(TaskStatus status);
public native Status sendFrameworkMessage(ExecutorID executorId,
http://git-wip-us.apache.org/repos/asf/mesos/blob/9c20b5d4/src/java/src/org/apache/mesos/SchedulerDriver.java
----------------------------------------------------------------------
diff --git a/src/java/src/org/apache/mesos/SchedulerDriver.java b/src/java/src/org/apache/mesos/SchedulerDriver.java
index 183eec8..ba4bc58 100644
--- a/src/java/src/org/apache/mesos/SchedulerDriver.java
+++ b/src/java/src/org/apache/mesos/SchedulerDriver.java
@@ -251,6 +251,16 @@ public interface SchedulerDriver {
Status reviveOffers();
/**
+ * Inform Mesos master to stop sending offers to the framework. The
+ * scheduler should call reviveOffers() to resume getting offers.
+ *
+ * @return The state of the driver after the call.
+ *
+ * @see Status
+ */
+ Status quiesceOffers();
+
+ /**
* Acknowledges the status update. This should only be called
* once the status update is processed durably by the scheduler.
* Not that explicit acknowledgements must be requested via the
[2/6] mesos git commit: Added quiesce logic in allocator.
Posted by vi...@apache.org.
Added quiesce logic in allocator.
Review: https://reviews.apache.org/r/37873
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/3de5bf08
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/3de5bf08
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/3de5bf08
Branch: refs/heads/master
Commit: 3de5bf088b595b8c0f38cb24743465f586e0d81d
Parents: 3a1f2d3
Author: Guangya Liu <gy...@gmail.com>
Authored: Fri Sep 18 16:13:44 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Sep 18 16:13:44 2015 -0700
----------------------------------------------------------------------
include/mesos/master/allocator.hpp | 4 ++++
src/master/allocator/mesos/allocator.hpp | 17 +++++++++++++++++
src/master/allocator/mesos/hierarchical.hpp | 24 ++++++++++++++++++++++++
src/master/master.cpp | 3 +--
src/tests/mesos.hpp | 13 +++++++++++++
5 files changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/3de5bf08/include/mesos/master/allocator.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/master/allocator.hpp b/include/mesos/master/allocator.hpp
index fb09e2a..2dc6312 100644
--- a/include/mesos/master/allocator.hpp
+++ b/include/mesos/master/allocator.hpp
@@ -171,6 +171,10 @@ public:
// offers for those resources the master invokes this callback.
virtual void reviveOffers(
const FrameworkID& frameworkId) = 0;
+
+ // Informs the allocator to stop sending resources for the framework
+ virtual void quiesceOffers(
+ const FrameworkID& frameworkId) = 0;
};
} // namespace allocator {
http://git-wip-us.apache.org/repos/asf/mesos/blob/3de5bf08/src/master/allocator/mesos/allocator.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/allocator.hpp b/src/master/allocator/mesos/allocator.hpp
index 171548b..86f6c55 100644
--- a/src/master/allocator/mesos/allocator.hpp
+++ b/src/master/allocator/mesos/allocator.hpp
@@ -127,6 +127,9 @@ public:
const Resources& resources,
const Option<Filters>& filters);
+ void quiesceOffers(
+ const FrameworkID& frameworkId);
+
void reviveOffers(
const FrameworkID& frameworkId);
@@ -231,6 +234,9 @@ public:
const Resources& resources,
const Option<Filters>& filters) = 0;
+ virtual void quiesceOffers(
+ const FrameworkID& frameworkId) = 0;
+
virtual void reviveOffers(
const FrameworkID& frameworkId) = 0;
};
@@ -509,6 +515,17 @@ inline void MesosAllocator<AllocatorProcess>::recoverResources(
template <typename AllocatorProcess>
+inline void MesosAllocator<AllocatorProcess>::quiesceOffers(
+ const FrameworkID& frameworkId)
+{
+ process::dispatch(
+ process,
+ &MesosAllocatorProcess::quiesceOffers,
+ frameworkId);
+}
+
+
+template <typename AllocatorProcess>
inline void MesosAllocator<AllocatorProcess>::reviveOffers(
const FrameworkID& frameworkId)
{
http://git-wip-us.apache.org/repos/asf/mesos/blob/3de5bf08/src/master/allocator/mesos/hierarchical.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/hierarchical.hpp b/src/master/allocator/mesos/hierarchical.hpp
index 3374d63..8f2232a 100644
--- a/src/master/allocator/mesos/hierarchical.hpp
+++ b/src/master/allocator/mesos/hierarchical.hpp
@@ -165,6 +165,9 @@ public:
const Resources& resources,
const Option<Filters>& filters);
+ void quiesceOffers(
+ const FrameworkID& frameworkId);
+
void reviveOffers(
const FrameworkID& frameworkId);
@@ -241,6 +244,9 @@ protected:
std::string role;
bool checkpoint; // Whether the framework desires checkpointing.
+ // Whether the framework quiesces resources.
+ bool quiesced;
+
// Whether the framework desires revocable resources.
bool revocable;
@@ -450,6 +456,8 @@ HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::addFramework(
}
}
+ frameworks[frameworkId].quiesced = false;
+
LOG(INFO) << "Added framework " << frameworkId;
allocate();
@@ -1006,12 +1014,23 @@ HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::recoverResources(
template <class RoleSorter, class FrameworkSorter>
void
+HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::quiesceOffers(
+ const FrameworkID& frameworkId)
+{
+ CHECK(initialized);
+ frameworks[frameworkId].quiesced = true;
+}
+
+
+template <class RoleSorter, class FrameworkSorter>
+void
HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::reviveOffers(
const FrameworkID& frameworkId)
{
CHECK(initialized);
frameworks[frameworkId].filters.clear();
+ frameworks[frameworkId].quiesced = false;
// We delete each actual Filter when
// HierarchicalAllocatorProcess::expire gets invoked. If we delete the
@@ -1101,6 +1120,11 @@ HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::allocate(
FrameworkID frameworkId;
frameworkId.set_value(frameworkId_);
+ // If the framework has quiesced, ignore.
+ if (frameworks[frameworkId].quiesced) {
+ continue;
+ }
+
// Calculate the currently available resources on the slave.
Resources available = slaves[slaveId].total - slaves[slaveId].allocated;
http://git-wip-us.apache.org/repos/asf/mesos/blob/3de5bf08/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 7ae4ef8..151ce71 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -2607,8 +2607,7 @@ void Master::quiesce(Framework* framework)
LOG(INFO) << "Processing QUIESCE call for framework " << *framework;
- //TODO(gyliu513): Add quiesce logic here.
- LOG(WARNING) << "Not implemented yet, ignoring the QUIESCE call.";
+ allocator->quiesceOffers(framework->id());
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/3de5bf08/src/tests/mesos.hpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index 3db97ac..760dcb7 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -1380,6 +1380,12 @@ ACTION_P2(InvokeRecoverResourcesWithFilters, allocator, timeout)
}
+ACTION_P(InvokeQuiesceOffers, allocator)
+{
+ allocator->real->quiesceOffers(arg0);
+}
+
+
ACTION_P(InvokeReviveOffers, allocator)
{
allocator->real->reviveOffers(arg0);
@@ -1507,6 +1513,11 @@ public:
.WillByDefault(InvokeReviveOffers(this));
EXPECT_CALL(*this, reviveOffers(_))
.WillRepeatedly(DoDefault());
+
+ ON_CALL(*this, quiesceOffers(_))
+ .WillByDefault(InvokeQuiesceOffers(this));
+ EXPECT_CALL(*this, quiesceOffers(_))
+ .WillRepeatedly(DoDefault());
}
virtual ~TestAllocator() {}
@@ -1592,6 +1603,8 @@ public:
MOCK_METHOD1(reviveOffers, void(const FrameworkID&));
+ MOCK_METHOD1(quiesceOffers, void(const FrameworkID&));
+
process::Owned<mesos::master::allocator::Allocator> real;
};
[5/6] mesos git commit: Added Python Support for QuiesceOffers.
Posted by vi...@apache.org.
Added Python Support for QuiesceOffers.
Review: https://reviews.apache.org/r/38121
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/dd3fbe81
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/dd3fbe81
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/dd3fbe81
Branch: refs/heads/master
Commit: dd3fbe815b0edb74fec4101776af2830f47f90d5
Parents: 9c20b5d
Author: Guangya Liu <gy...@gmail.com>
Authored: Fri Sep 18 16:15:55 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Sep 18 16:15:55 2015 -0700
----------------------------------------------------------------------
.../interface/src/mesos/interface/__init__.py | 6 ++++++
.../mesos/native/mesos_scheduler_driver_impl.cpp | 17 +++++++++++++++++
.../mesos/native/mesos_scheduler_driver_impl.hpp | 3 +++
3 files changed, 26 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/dd3fbe81/src/python/interface/src/mesos/interface/__init__.py
----------------------------------------------------------------------
diff --git a/src/python/interface/src/mesos/interface/__init__.py b/src/python/interface/src/mesos/interface/__init__.py
index 686abb2..cd60ead 100644
--- a/src/python/interface/src/mesos/interface/__init__.py
+++ b/src/python/interface/src/mesos/interface/__init__.py
@@ -230,6 +230,12 @@ class SchedulerDriver(object):
those filtered slaves.
"""
+ def quiesceOffers(self):
+ """
+ Inform Mesos master to stop sending offers to the framework. The
+ scheduler should call reviveOffers() to resume getting offers.
+ """
+
def acknowledgeStatusUpdate(self, status):
"""
Acknowledges the status update. This should only be called
http://git-wip-us.apache.org/repos/asf/mesos/blob/dd3fbe81/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.cpp
----------------------------------------------------------------------
diff --git a/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.cpp b/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.cpp
index 609dfa3..10208b1 100644
--- a/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.cpp
+++ b/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.cpp
@@ -143,6 +143,11 @@ PyMethodDef MesosSchedulerDriverImpl_methods[] = {
METH_NOARGS,
"Remove all filters and ask Mesos for new offers"
},
+ { "quiesceOffers",
+ (PyCFunction) MesosSchedulerDriverImpl_quiesceOffers,
+ METH_NOARGS,
+ "Set quiescent attribute as true for the Framework"
+ },
{ "acknowledgeStatusUpdate",
(PyCFunction) MesosSchedulerDriverImpl_acknowledgeStatusUpdate,
METH_VARARGS,
@@ -654,6 +659,18 @@ PyObject* MesosSchedulerDriverImpl_reviveOffers(MesosSchedulerDriverImpl* self)
}
+PyObject* MesosSchedulerDriverImpl_quiesceOffers(MesosSchedulerDriverImpl* self)
+{
+ if (self->driver == NULL) {
+ PyErr_Format(PyExc_Exception, "MesosSchedulerDriverImpl.driver is NULL");
+ return NULL;
+ }
+
+ Status status = self->driver->quiesceOffers();
+ return PyInt_FromLong(status); // Sets exception if creating long fails.
+}
+
+
PyObject* MesosSchedulerDriverImpl_acknowledgeStatusUpdate(
MesosSchedulerDriverImpl* self,
PyObject* args)
http://git-wip-us.apache.org/repos/asf/mesos/blob/dd3fbe81/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.hpp
----------------------------------------------------------------------
diff --git a/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.hpp b/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.hpp
index b1ad8e5..04e3190 100644
--- a/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.hpp
+++ b/src/python/native/src/mesos/native/mesos_scheduler_driver_impl.hpp
@@ -115,6 +115,9 @@ PyObject* MesosSchedulerDriverImpl_declineOffer(
PyObject* MesosSchedulerDriverImpl_reviveOffers(MesosSchedulerDriverImpl* self);
+PyObject* MesosSchedulerDriverImpl_quiesceOffers(
+ MesosSchedulerDriverImpl* self);
+
PyObject* MesosSchedulerDriverImpl_acknowledgeStatusUpdate(
MesosSchedulerDriverImpl* self,
PyObject* args);