diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-01-24 17:04:44 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-01-25 09:43:56 +0100 |
commit | 0b7a7117aafc8d4e0e723a15e3cbb4d3452fca13 (patch) | |
tree | f93cd482f819d4bd8f172d858190877dd7684d58 /container-disc/src | |
parent | 971037fe260c6bdbcb4f8f99780853dbf17c8ebc (diff) |
Delegate responsibility/timing of cleaning up old components to caller
Diffstat (limited to 'container-disc/src')
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java | 12 |
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 |