summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-01-25 14:17:58 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2022-01-25 14:17:58 +0100
commitd7616adac5ab388192acfea71625296295909ee2 (patch)
treeb9102dfc911e90f28a20e9245ddcad5509f1f7b6 /container-core
parent144216ecb6712be44fb1dce5ab637159750bc9b3 (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')
-rw-r--r--container-core/src/main/java/com/yahoo/container/core/config/HandlersConfigurerDi.java4
-rw-r--r--container-core/src/main/java/com/yahoo/container/core/config/testutil/HandlersConfigurerTestWrapper.java2
-rw-r--r--container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java3
-rw-r--r--container-core/src/main/java/com/yahoo/container/di/Container.java5
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();
}
}