summaryrefslogtreecommitdiffstats
path: root/container-disc
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-01-24 17:04:44 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2022-01-25 09:43:56 +0100
commit0b7a7117aafc8d4e0e723a15e3cbb4d3452fca13 (patch)
treef93cd482f819d4bd8f172d858190877dd7684d58 /container-disc
parent971037fe260c6bdbcb4f8f99780853dbf17c8ebc (diff)
Delegate responsibility/timing of cleaning up old components to caller
Diffstat (limited to 'container-disc')
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java12
1 files changed, 7 insertions, 5 deletions
diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java
index fad4393d4f8..a1fa63e2599 100644
--- a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java
+++ b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java
@@ -26,6 +26,7 @@ import com.yahoo.jdisc.application.Application;
import com.yahoo.jdisc.application.BindingRepository;
import com.yahoo.jdisc.application.ContainerActivator;
import com.yahoo.jdisc.application.ContainerBuilder;
+import com.yahoo.jdisc.application.DeactivatedContainer;
import com.yahoo.jdisc.application.GuiceRepository;
import com.yahoo.jdisc.application.OsgiFramework;
import com.yahoo.jdisc.handler.RequestHandler;
@@ -144,7 +145,7 @@ public final class ConfiguredApplication implements Application {
ContainerBuilder builder = createBuilderWithGuiceBindings();
configurer = createConfigurer(builder.guiceModules().activate());
- initializeAndActivateContainer(builder);
+ initializeAndActivateContainer(builder, () -> {});
startReconfigurerThread();
portWatcher = new Thread(this::watchPortChange, "configured-application-port-watcher");
portWatcher.setDaemon(true);
@@ -249,12 +250,13 @@ public final class ConfiguredApplication implements Application {
shutdownTimeoutS.set(qrConfig.shutdown().timeout());
}
- private void initializeAndActivateContainer(ContainerBuilder builder) {
+ private void initializeAndActivateContainer(ContainerBuilder builder, Runnable cleanupTask) {
addHandlerBindings(builder, Container.get().getRequestHandlerRegistry(),
configurer.getComponent(ApplicationContext.class).discBindingsConfig);
installServerProviders(builder);
- activator.activateContainer(builder); // TODO: .notifyTermination(.. decompose previous component graph ..)
+ DeactivatedContainer deactivated = activator.activateContainer(builder);
+ if (deactivated != null) deactivated.notifyTermination(cleanupTask);
startClients();
startAndStopServers();
@@ -277,8 +279,8 @@ public final class ConfiguredApplication implements Application {
ContainerBuilder builder = createBuilderWithGuiceBindings();
// Block until new config arrives, and it should be applied
- configurer.waitForNextComponentGeneration(builder.guiceModules().activate(), false);
- initializeAndActivateContainer(builder);
+ Runnable cleanupTask = configurer.waitForNextComponentGeneration(builder.guiceModules().activate(), false);
+ initializeAndActivateContainer(builder, cleanupTask);
} catch (UncheckedInterruptedException | ConfigInterruptedException e) {
break;
} catch (Exception | LinkageError e) { // LinkageError: OSGi problems