Repository: reef Updated Branches: refs/heads/master 5f4591083 -> 8ef0c4e2a
[REEF-1655] Close the driver restart manager on driver shutdown * Make `DriverRuntimeRestartManager` implement `AutoCloseable` to shut down the timer thread; * Invoke `.close()` method in `DriverRuntimeStopHandler` on driver shutdown JIRA: [REEF-1655](https://issues.apache.org/jira/browse/REEF-1655) Pull request: This closes #1170 Project: http://git-wip-us.apache.org/repos/asf/reef/repo Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/8ef0c4e2 Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/8ef0c4e2 Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/8ef0c4e2 Branch: refs/heads/master Commit: 8ef0c4e2a20da78d4547a9c31f6fa86c37d7678f Parents: 5f45910 Author: Sergiy Matusevych <[email protected]> Authored: Thu Oct 27 15:38:22 2016 -0700 Committer: Mariia Mykhailova <[email protected]> Committed: Mon Oct 31 16:55:19 2016 -0700 ---------------------------------------------------------------------- .../reef/driver/restart/DriverRestartManager.java | 15 +++++++++++++-- .../common/driver/DriverRuntimeStopHandler.java | 12 +++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/reef/blob/8ef0c4e2/lang/java/reef-common/src/main/java/org/apache/reef/driver/restart/DriverRestartManager.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-common/src/main/java/org/apache/reef/driver/restart/DriverRestartManager.java b/lang/java/reef-common/src/main/java/org/apache/reef/driver/restart/DriverRestartManager.java index 58c809e..c8f9f24 100644 --- a/lang/java/reef-common/src/main/java/org/apache/reef/driver/restart/DriverRestartManager.java +++ b/lang/java/reef-common/src/main/java/org/apache/reef/driver/restart/DriverRestartManager.java @@ -44,15 +44,17 @@ import java.util.logging.Logger; @DriverSide @Private @Unstable -public final class DriverRestartManager implements DriverIdlenessSource { +public final class DriverRestartManager implements DriverIdlenessSource, AutoCloseable { + private static final String CLASS_NAME = DriverRestartManager.class.getName(); private static final Logger LOG = Logger.getLogger(CLASS_NAME); + private final Timer restartCompletedTimer = new Timer(this.getClass().getSimpleName() + ":Timer"); + private final DriverRuntimeRestartManager driverRuntimeRestartManager; private final Set<EventHandler<DriverRestartCompleted>> driverRestartCompletedHandlers; private final Set<EventHandler<DriverRestartCompleted>> serviceDriverRestartCompletedHandlers; private final int driverRestartEvaluatorRecoverySeconds; - private final Timer restartCompletedTimer = new Timer(); private RestartEvaluators restartEvaluators; private DriverRestartState state = DriverRestartState.NOT_RESTARTED; @@ -335,4 +337,13 @@ public final class DriverRestartManager implements DriverIdlenessSource { CLASS_NAME + " currently in the process of restart."; return new IdleMessage(CLASS_NAME, idleMessage, idleState); } + + /** + * Close the restart timer. + */ + @Override + public void close() { + LOG.log(Level.FINER, "Closing restart timer. Final state: {0}", this.state); + this.restartCompletedTimer.cancel(); + } } http://git-wip-us.apache.org/repos/asf/reef/blob/8ef0c4e2/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 678a596..d344cf3 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 @@ -21,6 +21,7 @@ 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.driver.restart.DriverRestartManager; import org.apache.reef.exception.DriverFatalRuntimeException; import org.apache.reef.runtime.common.driver.api.ResourceManagerStopHandler; import org.apache.reef.runtime.common.driver.evaluator.Evaluators; @@ -44,6 +45,7 @@ final class DriverRuntimeStopHandler implements EventHandler<RuntimeStop> { private static final Logger LOG = Logger.getLogger(DriverRuntimeStopHandler.class.getName()); + private final DriverRestartManager driverRestartManager; private final DriverStatusManager driverStatusManager; private final ResourceManagerStopHandler resourceManagerStopHandler; private final RemoteManager remoteManager; @@ -51,13 +53,15 @@ final class DriverRuntimeStopHandler implements EventHandler<RuntimeStop> { private final boolean preserveEvaluatorsAcrossRestarts; @Inject - DriverRuntimeStopHandler( + private DriverRuntimeStopHandler( + @Parameter(ResourceManagerPreserveEvaluators.class) final boolean preserveEvaluatorsAcrossRestarts, + final DriverRestartManager driverRestartManager, final DriverStatusManager driverStatusManager, final ResourceManagerStopHandler resourceManagerStopHandler, final RemoteManager remoteManager, - final Evaluators evaluators, - @Parameter(ResourceManagerPreserveEvaluators.class) final boolean preserveEvaluatorsAcrossRestarts) { + final Evaluators evaluators) { + this.driverRestartManager = driverRestartManager; this.driverStatusManager = driverStatusManager; this.resourceManagerStopHandler = resourceManagerStopHandler; this.remoteManager = remoteManager; @@ -93,5 +97,7 @@ final class DriverRuntimeStopHandler implements EventHandler<RuntimeStop> { LOG.log(Level.WARNING, "Error when closing the RemoteManager", e); throw new RuntimeException("Unable to close the RemoteManager.", e); } + + this.driverRestartManager.close(); } }
