diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-01-25 14:17:58 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-01-25 14:17:58 +0100 |
commit | d7616adac5ab388192acfea71625296295909ee2 (patch) | |
tree | b9102dfc911e90f28a20e9245ddcad5509f1f7b6 /container-core | |
parent | 144216ecb6712be44fb1dce5ab637159750bc9b3 (diff) |
Redesign ComponentDeconstructor to start deconstruction immediately
There is no need to wait with deconstruction after new generation
as the container knows when an old graph can be safely GCed.
Add shutdown() that waits for all previous graphs to complete deconstruction.
Diffstat (limited to 'container-core')
4 files changed, 8 insertions, 6 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java b/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java index 716f7b496b1..bcd3665a3d6 100644 --- a/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java +++ b/container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java @@ -143,9 +143,7 @@ public class HandlersConfigurerDi { return currentGraph.getInstance(componentClass); } - public void shutdown(ComponentDeconstructor deconstructor) { - container.shutdown(currentGraph, deconstructor); - } + public void shutdown() { container.shutdown(currentGraph); } /** Returns the currently active application configuration generation */ public long generation() { return currentGraph.generation(); } diff --git a/container-core/src/main/java/com/yahoo/container/core/config/testutil/HandlersConfigurerTestWrapper.java b/container-core/src/main/java/com/yahoo/container/core/config/testutil/HandlersConfigurerTestWrapper.java index b9ff5a08785..eadb6b52294 100644 --- a/container-core/src/main/java/com/yahoo/container/core/config/testutil/HandlersConfigurerTestWrapper.java +++ b/container-core/src/main/java/com/yahoo/container/core/config/testutil/HandlersConfigurerTestWrapper.java @@ -125,7 +125,7 @@ public class HandlersConfigurerTestWrapper { } public void shutdown() { - configurer.shutdown(getTestDeconstructor()); + configurer.shutdown(); // TODO: Remove once tests use ConfigSet rather than dir: for (File f : createdFiles) { f.delete(); diff --git a/container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java b/container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java index bc5ddb3fa7a..95a15e12735 100644 --- a/container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java +++ b/container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java @@ -15,4 +15,7 @@ public interface ComponentDeconstructor { /** Deconstructs the given components in order, then the given bundles. */ void deconstruct(List<Object> components, Collection<Bundle> bundles); + /** Wait for all previous destruction tasks to complete */ + default void shutdown() {} + } diff --git a/container-core/src/main/java/com/yahoo/container/di/Container.java b/container-core/src/main/java/com/yahoo/container/di/Container.java index 8fc72d8cddb..8d8a05408a9 100644 --- a/container-core/src/main/java/com/yahoo/container/di/Container.java +++ b/container-core/src/main/java/com/yahoo/container/di/Container.java @@ -245,10 +245,11 @@ public class Container { } } - public void shutdown(ComponentGraph graph, ComponentDeconstructor deconstructor) { + public void shutdown(ComponentGraph graph) { shutdownConfigurer(); if (graph != null) { - deconstructAllComponents(graph, deconstructor); + deconstructAllComponents(graph, componentDeconstructor); + componentDeconstructor.shutdown(); } } |