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());