diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2020-12-08 01:22:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-08 01:22:25 +0100 |
commit | 71b593e14a2ae149af28e78fb76b57f8e7767b19 (patch) | |
tree | 3ba357bce820c97e3129279f7666ecd384ab67b6 /container-di/src/main/java/com/yahoo/container/di/Container.java | |
parent | 96cf054bba808ff36e80cf939fadbc358b5ed7aa (diff) |
Revert "Revert "Revert "Revert "Always deconstruct in reverse creation order, including Provider objects""""
Diffstat (limited to 'container-di/src/main/java/com/yahoo/container/di/Container.java')
-rw-r--r-- | container-di/src/main/java/com/yahoo/container/di/Container.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/container-di/src/main/java/com/yahoo/container/di/Container.java b/container-di/src/main/java/com/yahoo/container/di/Container.java index af580767a17..7fc2f2e55bc 100644 --- a/container-di/src/main/java/com/yahoo/container/di/Container.java +++ b/container-di/src/main/java/com/yahoo/container/di/Container.java @@ -21,6 +21,7 @@ import com.yahoo.container.di.config.SubscriberFactory; import com.yahoo.vespa.config.ConfigKey; import org.osgi.framework.Bundle; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -159,10 +160,16 @@ public class Container { private void deconstructObsoleteComponents(ComponentGraph oldGraph, ComponentGraph newGraph, Collection<Bundle> obsoleteBundles) { - IdentityHashMap<Object, Object> oldComponents = new IdentityHashMap<>(); - oldGraph.allConstructedComponentsAndProviders().forEach(c -> oldComponents.put(c, null)); - newGraph.allConstructedComponentsAndProviders().forEach(oldComponents::remove); - componentDeconstructor.deconstruct(oldComponents.keySet(), obsoleteBundles); + Map<Object, ?> newComponents = new IdentityHashMap<>(newGraph.size()); + for (Object component : newGraph.allConstructedComponentsAndProviders()) + newComponents.put(component, null); + + List<Object> obsoleteComponents = new ArrayList<>(); + for (Object component : oldGraph.allConstructedComponentsAndProviders()) + if ( ! newComponents.containsKey(component)) + obsoleteComponents.add(component); + + componentDeconstructor.deconstruct(obsoleteComponents, obsoleteBundles); } private Set<Bundle> installApplicationBundles(Map<ConfigKey<? extends ConfigInstance>, ConfigInstance> configsIncludingBootstrapConfigs) { |