[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mesos-commits
Subject:    [1/2] git commit: Refactored the scheduler/executor driver to remove calling 'stop'.
From:       benh () apache ! org
Date:       2014-06-29 16:28:19
Message-ID: 96befbe71e5746f0bfd28df9ce246b84 () git ! apache ! org
[Download RAW message or body]

Repository: mesos
Updated Branches:
  refs/heads/master 451c3b6a7 -> 294337466


Refactored the scheduler/executor driver to remove calling 'stop'.

Review: https://reviews.apache.org/r/23142


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0821ffec
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0821ffec
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0821ffec

Branch: refs/heads/master
Commit: 0821ffeca1ec958c1bb01b203d57d20de3933341
Parents: 451c3b6
Author: Benjamin Hindman <benjamin.hindman@gmail.com>
Authored: Fri Jun 27 12:07:30 2014 -0700
Committer: Benjamin Hindman <benjamin.hindman@gmail.com>
Committed: Sun Jun 29 09:25:14 2014 -0700

----------------------------------------------------------------------
 src/exec/exec.cpp                                      |  6 ++++--
 src/java/jni/org_apache_mesos_MesosExecutorDriver.cpp  | 10 ++++++----
 src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp | 10 ++++++----
 src/python/native/mesos_executor_driver_impl.cpp       |  2 --
 src/python/native/mesos_scheduler_driver_impl.cpp      |  2 --
 5 files changed, 16 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0821ffec/src/exec/exec.cpp
----------------------------------------------------------------------
diff --git a/src/exec/exec.cpp b/src/exec/exec.cpp
index 346e39f..e09ac8d 100644
--- a/src/exec/exec.cpp
+++ b/src/exec/exec.cpp
@@ -598,8 +598,10 @@ MesosExecutorDriver::MesosExecutorDriver(Executor* _executor)
 
 MesosExecutorDriver::~MesosExecutorDriver()
 {
-  // Just as in SchedulerProcess, we might wait here indefinitely if
-  // MesosExecutorDriver::stop has not been invoked.
+  // Just like with the MesosSchedulerDriver it's possible to get a
+  // deadlock here. Otherwise we terminate the ExecutorProcess and
+  // wait for it before deleting.
+  terminate(process);
   wait(process);
   delete process;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/0821ffec/src/java/jni/org_apache_mesos_MesosExecutorDriver.cpp
                
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_MesosExecutorDriver.cpp \
b/src/java/jni/org_apache_mesos_MesosExecutorDriver.cpp index 32e9a28..8cbc798 100644
--- a/src/java/jni/org_apache_mesos_MesosExecutorDriver.cpp
+++ b/src/java/jni/org_apache_mesos_MesosExecutorDriver.cpp
@@ -390,10 +390,12 @@ JNIEXPORT void JNICALL \
Java_org_apache_mesos_MesosExecutorDriver_finalize  MesosExecutorDriver* driver =
     (MesosExecutorDriver*) env->GetLongField(thiz, __driver);
 
-  // Call stop just in case.
-  driver->stop();
-  driver->join();
-
+  // Note that we DO NOT want to call 'abort' or 'stop' as this may be
+  // misinterpreted by the executor. It is possible, however, that
+  // since we haven't called 'abort' or 'stop' there are still threads
+  // executing within the executor callbacks but the
+  // MesosExecutorDriver destructor will wait until this is not the
+  // case before returning.
   delete driver;
 
   jfieldID __executor = env->GetFieldID(clazz, "__executor", "J");

http://git-wip-us.apache.org/repos/asf/mesos/blob/0821ffec/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 d0b7152..3498930 \
                100644
--- a/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
+++ b/src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp
@@ -548,10 +548,12 @@ JNIEXPORT void JNICALL \
Java_org_apache_mesos_MesosSchedulerDriver_finalize  MesosSchedulerDriver* driver =
     (MesosSchedulerDriver*) env->GetLongField(thiz, __driver);
 
-  // Call stop just in case.
-  driver->stop();
-  driver->join();
-
+  // Note that we DO NOT want to call 'abort' or 'stop' as this may be
+  // misinterpreted by the scheduler. It is possible, however, that
+  // since we haven't called 'abort' or 'stop' there are still threads
+  // executing within the scheduler callbacks but the
+  // MesosSchedulerDriver destructor will wait until this is not the
+  // case before returning.
   delete driver;
 
   jfieldID __scheduler = env->GetFieldID(clazz, "__scheduler", "J");

http://git-wip-us.apache.org/repos/asf/mesos/blob/0821ffec/src/python/native/mesos_executor_driver_impl.cpp
                
----------------------------------------------------------------------
diff --git a/src/python/native/mesos_executor_driver_impl.cpp \
b/src/python/native/mesos_executor_driver_impl.cpp index aa564ed..407d8d1 100644
--- a/src/python/native/mesos_executor_driver_impl.cpp
+++ b/src/python/native/mesos_executor_driver_impl.cpp
@@ -167,7 +167,6 @@ int MesosExecutorDriverImpl_init(MesosExecutorDriverImpl *self,
   }
 
   if (self->driver != NULL) {
-    self->driver->stop();
     delete self->driver;
     self->driver = NULL;
   }
@@ -190,7 +189,6 @@ int MesosExecutorDriverImpl_init(MesosExecutorDriverImpl *self,
 void MesosExecutorDriverImpl_dealloc(MesosExecutorDriverImpl* self)
 {
   if (self->driver != NULL) {
-    self->driver->stop();
     // We need to wrap the driver destructor in an "allow threads"
     // macro since the MesosExecutorDriver destructor waits for the
     // ExecutorProcess to terminate and there might be a thread that

http://git-wip-us.apache.org/repos/asf/mesos/blob/0821ffec/src/python/native/mesos_scheduler_driver_impl.cpp
                
----------------------------------------------------------------------
diff --git a/src/python/native/mesos_scheduler_driver_impl.cpp \
b/src/python/native/mesos_scheduler_driver_impl.cpp index 1c82532..e014eed 100644
--- a/src/python/native/mesos_scheduler_driver_impl.cpp
+++ b/src/python/native/mesos_scheduler_driver_impl.cpp
@@ -214,7 +214,6 @@ int MesosSchedulerDriverImpl_init(MesosSchedulerDriverImpl* self,
 
 
   if (self->driver != NULL) {
-    self->driver->stop();
     delete self->driver;
     self->driver = NULL;
   }
@@ -244,7 +243,6 @@ int MesosSchedulerDriverImpl_init(MesosSchedulerDriverImpl* self,
 void MesosSchedulerDriverImpl_dealloc(MesosSchedulerDriverImpl* self)
 {
   if (self->driver != NULL) {
-    self->driver->stop();
     // We need to wrap the driver destructor in an "allow threads"
     // macro since the MesosSchedulerDriver destructor waits for the
     // SchedulerProcess to terminate and there might be a thread that


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic