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.