Repository: incubator-reef
Updated Branches:
  refs/heads/master 1ea4d64b1 -> e999e994c


[REEF-601] Don't close Evaluators on driver failure if restart is enabled

This addressed the issue by not closing evaluators on unhandled
exceptions if user has restart enabled.

JIRA:
  [REEF-601](https://issues.apache.org/jira/browse/REEF-601)

Pull Request:
  This closes #376


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/e999e994
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/e999e994
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/e999e994

Branch: refs/heads/master
Commit: e999e994c9439261cf2b1e7ff3d4d70eff8432eb
Parents: 1ea4d64
Author: Andrew Chung <afchun...@gmail.com>
Authored: Mon Aug 17 14:58:51 2015 -0700
Committer: Markus Weimer <wei...@apache.org>
Committed: Tue Aug 18 09:13:58 2015 -0700

----------------------------------------------------------------------
 .../common/driver/DriverRuntimeStopHandler.java | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/e999e994/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/DriverRuntimeStopHandler.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/DriverRuntimeStopHandler.java
 
b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/DriverRuntimeStopHandler.java
index f580ed9..e57ba0a 100644
--- 
a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/DriverRuntimeStopHandler.java
+++ 
b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/DriverRuntimeStopHandler.java
@@ -20,9 +20,12 @@ package org.apache.reef.runtime.common.driver;
 
 import org.apache.reef.annotations.audience.DriverSide;
 import org.apache.reef.annotations.audience.Private;
+import org.apache.reef.driver.parameters.ResourceManagerPreserveEvaluators;
+import org.apache.reef.exception.DriverFatalRuntimeException;
 import org.apache.reef.runtime.common.driver.api.ResourceManagerStopHandler;
 import org.apache.reef.runtime.common.driver.evaluator.Evaluators;
 import org.apache.reef.runtime.common.utils.RemoteManager;
+import org.apache.reef.tang.annotations.Parameter;
 import org.apache.reef.util.Optional;
 import org.apache.reef.wake.EventHandler;
 import org.apache.reef.wake.time.runtime.event.RuntimeStop;
@@ -44,23 +47,34 @@ final class DriverRuntimeStopHandler implements 
EventHandler<RuntimeStop> {
   private final ResourceManagerStopHandler resourceManagerStopHandler;
   private final RemoteManager remoteManager;
   private final Evaluators evaluators;
+  private final boolean preserveEvaluatorsAcrossRestarts;
 
   @Inject
   DriverRuntimeStopHandler(final DriverStatusManager driverStatusManager,
                            final ResourceManagerStopHandler 
resourceManagerStopHandler,
                            final RemoteManager remoteManager,
-                           final Evaluators evaluators) {
+                           final Evaluators evaluators,
+                           @Parameter(ResourceManagerPreserveEvaluators.class)
+                           final boolean preserveEvaluatorsAcrossRestarts) {
     this.driverStatusManager = driverStatusManager;
     this.resourceManagerStopHandler = resourceManagerStopHandler;
     this.remoteManager = remoteManager;
     this.evaluators = evaluators;
+    this.preserveEvaluatorsAcrossRestarts = preserveEvaluatorsAcrossRestarts;
   }
 
   @Override
   public synchronized void onNext(final RuntimeStop runtimeStop) {
     LOG.log(Level.FINEST, "RuntimeStop: {0}", runtimeStop);
-    // Shutdown the Evaluators.
-    this.evaluators.close();
+
+    // Shut down evaluators if there are no exceptions, the driver is 
forcefully
+    // shut down by a non-recoverable exception, or restart is not enabled.
+    if (runtimeStop.getException() == null ||
+        runtimeStop.getException() instanceof DriverFatalRuntimeException ||
+        !this.preserveEvaluatorsAcrossRestarts) {
+      this.evaluators.close();
+    }
+
     this.resourceManagerStopHandler.onNext(runtimeStop);
     // Inform the client of the shutdown.
     final Optional<Throwable> exception = 
Optional.<Throwable>ofNullable(runtimeStop.getException());

Reply via email to