Cleanup on shutdown.
This commit is contained in:
parent
d60f37e0fe
commit
12c2601b92
1 changed files with 25 additions and 7 deletions
|
|
@ -38,6 +38,7 @@ import java.lang.reflect.UndeclaredThrowableException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
@ -52,7 +53,6 @@ import org.apache.commons.cli.Options;
|
||||||
import org.jdrupes.vmoperator.runner.qemu.StateController.State;
|
import org.jdrupes.vmoperator.runner.qemu.StateController.State;
|
||||||
import org.jdrupes.vmoperator.util.ExtendedObjectWrapper;
|
import org.jdrupes.vmoperator.util.ExtendedObjectWrapper;
|
||||||
import org.jdrupes.vmoperator.util.FsdUtils;
|
import org.jdrupes.vmoperator.util.FsdUtils;
|
||||||
import org.jgrapes.core.Channel;
|
|
||||||
import org.jgrapes.core.Component;
|
import org.jgrapes.core.Component;
|
||||||
import org.jgrapes.core.Components;
|
import org.jgrapes.core.Components;
|
||||||
import org.jgrapes.core.TypedIdKey;
|
import org.jgrapes.core.TypedIdKey;
|
||||||
|
|
@ -486,6 +486,29 @@ public class Runner extends Component {
|
||||||
state.set(State.TERMINATING);
|
state.set(State.TERMINATING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void shutdown() {
|
||||||
|
if (state.get() != State.TERMINATING) {
|
||||||
|
fire(new Stop());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Components.awaitExhaustion();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
logger.log(Level.WARNING, e, () -> "Proper shutdown failed.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional.ofNullable(config).map(c -> c.runtimeDir)
|
||||||
|
.ifPresent(runtimeDir -> {
|
||||||
|
try {
|
||||||
|
Files.walk(runtimeDir).sorted(Comparator.reverseOrder())
|
||||||
|
.map(Path::toFile).forEach(File::delete);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.warning(() -> String.format(
|
||||||
|
"Cannot delete runtime directory \"%s\".",
|
||||||
|
runtimeDir));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
InputStream props;
|
InputStream props;
|
||||||
|
|
@ -520,12 +543,7 @@ public class Runner extends Component {
|
||||||
|
|
||||||
// Prepare Stop
|
// Prepare Stop
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||||
try {
|
app.shutdown();
|
||||||
app.fire(new Stop(), Channel.BROADCAST);
|
|
||||||
Components.awaitExhaustion();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// Cannot do anything about this.
|
|
||||||
}
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Start the application
|
// Start the application
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue