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/04/25 23:33:35 UTC
[08/11] mesos git commit: Renamed UNREGISTER call to TEARDOWN.
Renamed UNREGISTER call to TEARDOWN.
Review: https://reviews.apache.org/r/32845
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c3de1e8e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c3de1e8e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c3de1e8e
Branch: refs/heads/master
Commit: c3de1e8ec9cf0f4c228eaca71c050e4735712c08
Parents: eb3c958
Author: Vinod Kone <vi...@gmail.com>
Authored: Fri Apr 3 16:19:14 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Sat Apr 25 11:32:48 2015 -1000
----------------------------------------------------------------------
include/mesos/scheduler/scheduler.proto | 4 +-
src/examples/low_level_scheduler_libprocess.cpp | 2 +-
src/examples/low_level_scheduler_pthread.cpp | 2 +-
src/master/master.cpp | 5 +-
src/scheduler/scheduler.cpp | 6 +-
src/tests/scheduler_tests.cpp | 100 +++++++++++++++++++
6 files changed, 110 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/c3de1e8e/include/mesos/scheduler/scheduler.proto
----------------------------------------------------------------------
diff --git a/include/mesos/scheduler/scheduler.proto b/include/mesos/scheduler/scheduler.proto
index aea5607..ec9adf6 100644
--- a/include/mesos/scheduler/scheduler.proto
+++ b/include/mesos/scheduler/scheduler.proto
@@ -110,7 +110,7 @@ message Call {
// applicable.
enum Type {
SUBSCRIBE = 1; // See 'framework_info' below.
- UNREGISTER = 3;
+ TEARDOWN = 3; // Shuts down all tasks and executors.
REVIVE = 6;
DECLINE = 5;
ACCEPT = 12;
@@ -208,7 +208,7 @@ message Call {
// Identifies who generated this call. Always necessary, but the
// only thing that needs to be set for certain calls, e.g.,
- // SUBSCRIBE and UNREGISTER. 'framework_info.id()' must be always
+ // SUBSCRIBE and TEARDOWN. 'framework_info.id()' must be always
// set except when a brand new scheduler SUBSCRIBEs for the very
// first time.
required FrameworkInfo framework_info = 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/c3de1e8e/src/examples/low_level_scheduler_libprocess.cpp
----------------------------------------------------------------------
diff --git a/src/examples/low_level_scheduler_libprocess.cpp b/src/examples/low_level_scheduler_libprocess.cpp
index cf85c76..b55ad60 100644
--- a/src/examples/low_level_scheduler_libprocess.cpp
+++ b/src/examples/low_level_scheduler_libprocess.cpp
@@ -311,7 +311,7 @@ private:
{
Call call;
call.mutable_framework_info()->CopyFrom(framework);
- call.set_type(Call::UNREGISTER);
+ call.set_type(Call::TEARDOWN);
mesos.send(call);
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/c3de1e8e/src/examples/low_level_scheduler_pthread.cpp
----------------------------------------------------------------------
diff --git a/src/examples/low_level_scheduler_pthread.cpp b/src/examples/low_level_scheduler_pthread.cpp
index 4af576d..64a0e44 100644
--- a/src/examples/low_level_scheduler_pthread.cpp
+++ b/src/examples/low_level_scheduler_pthread.cpp
@@ -358,7 +358,7 @@ private:
void finalize()
{
Call call;
- call.set_type(Call::UNREGISTER);
+ call.set_type(Call::TEARDOWN);
call.mutable_framework_info()->CopyFrom(framework);
mesos.send(call);
http://git-wip-us.apache.org/repos/asf/mesos/blob/c3de1e8e/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 502d3ba..ce9d263 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -1588,7 +1588,6 @@ void Master::receive(
// framework id is set and non-empty except for SUBSCRIBE call.
switch (call.type()) {
- case scheduler::Call::UNREGISTER:
case scheduler::Call::REVIVE:
case scheduler::Call::DECLINE:
drop(from, call, "Unimplemented");
@@ -1629,6 +1628,10 @@ void Master::receive(
drop(from, call, "Unimplemented");
break;
+ case scheduler::Call::TEARDOWN:
+ removeFramework(framework);
+ break;
+
default:
drop(from, call, "Unknown call type");
break;
http://git-wip-us.apache.org/repos/asf/mesos/blob/c3de1e8e/src/scheduler/scheduler.cpp
----------------------------------------------------------------------
diff --git a/src/scheduler/scheduler.cpp b/src/scheduler/scheduler.cpp
index 82cbfcb..2047ee4 100644
--- a/src/scheduler/scheduler.cpp
+++ b/src/scheduler/scheduler.cpp
@@ -229,10 +229,8 @@ public:
break;
}
- case Call::UNREGISTER: {
- UnregisterFrameworkMessage message;
- message.mutable_framework_id()->CopyFrom(call.framework_info().id());
- send(master.get(), message);
+ case Call::TEARDOWN: {
+ send(master.get(), call);
break;
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/c3de1e8e/src/tests/scheduler_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_tests.cpp b/src/tests/scheduler_tests.cpp
index ddbb712..54d6bc9 100644
--- a/src/tests/scheduler_tests.cpp
+++ b/src/tests/scheduler_tests.cpp
@@ -555,6 +555,106 @@ TEST_F(SchedulerTest, ShutdownExecutor)
}
+TEST_F(SchedulerTest, Teardown)
+{
+ Try<PID<Master>> master = StartMaster();
+ ASSERT_SOME(master);
+
+ MockExecutor exec(DEFAULT_EXECUTOR_ID);
+
+ TestContainerizer containerizer(&exec);
+
+ Try<PID<Slave>> slave = StartSlave(&containerizer);
+ ASSERT_SOME(slave);
+
+ Callbacks callbacks;
+
+ Future<Nothing> connected;
+ EXPECT_CALL(callbacks, connected())
+ .WillOnce(FutureSatisfy(&connected));
+
+ scheduler::Mesos mesos(
+ master.get(),
+ DEFAULT_CREDENTIAL,
+ 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.mutable_framework_info()->CopyFrom(DEFAULT_FRAMEWORK_INFO);
+ call.set_type(Call::SUBSCRIBE);
+
+ mesos.send(call);
+ }
+
+ Future<Event> event = events.get();
+ AWAIT_READY(event);
+ EXPECT_EQ(Event::SUBSCRIBED, event.get().type());
+
+ 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());
+
+ EXPECT_CALL(exec, registered(_, _, _, _))
+ .Times(1);
+
+ EXPECT_CALL(exec, launchTask(_, _))
+ .WillOnce(SendStatusUpdateFromTask(TASK_RUNNING));
+
+ Offer offer = event.get().offers().offers(0);
+ TaskInfo taskInfo = createTask(offer,"", DEFAULT_EXECUTOR_ID);
+
+ {
+ Call call;
+ call.mutable_framework_info()->CopyFrom(DEFAULT_FRAMEWORK_INFO);
+ call.mutable_framework_info()->mutable_id()->CopyFrom(id);
+ call.set_type(Call::ACCEPT);
+
+ Call::Accept* accept = call.mutable_accept();
+ accept->add_offer_ids()->CopyFrom(offer.id());
+
+ Offer::Operation* operation = accept->add_operations();
+ operation->set_type(Offer::Operation::LAUNCH);
+ operation->mutable_launch()->add_task_infos()->CopyFrom(taskInfo);
+
+ mesos.send(call);
+ }
+
+ event = events.get();
+ AWAIT_READY(event);
+ EXPECT_EQ(Event::UPDATE, event.get().type());
+ EXPECT_EQ(TASK_RUNNING, event.get().update().status().state());
+
+ Future<Nothing> shutdown;
+ EXPECT_CALL(exec, shutdown(_))
+ .WillOnce(FutureSatisfy(&shutdown));
+
+ {
+ Call call;
+ call.mutable_framework_info()->CopyFrom(DEFAULT_FRAMEWORK_INFO);
+ call.mutable_framework_info()->mutable_id()->CopyFrom(id);
+ call.set_type(Call::TEARDOWN);
+
+ mesos.send(call);
+ }
+
+ AWAIT_READY(shutdown);
+
+ Shutdown(); // Must shutdown before 'containerizer' gets deallocated.
+}
+
+
// TODO(benh): Write test for sending Call::Acknowledgement through
// master to slave when Event::Update was generated locally.