diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-04-03 12:22:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-03 12:22:42 +0200 |
commit | 49413ece8a980c07bf4906233cd221c41d2dc91d (patch) | |
tree | c2a15add9998321f4264d48b7c2821fffefc7b5f | |
parent | 706cb2d3b2d623318ba9c0a8db0e4355448af65a (diff) | |
parent | 2d997c17f1a35a216dee4b90babc389ded7fe2f8 (diff) |
Merge pull request #12812 from vespa-engine/gjoranv/always-uninstall-obsolete-bundles
Ensure that obsolete bundles are uninstalled
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/component/Deconstructor.java | 2 | ||||
-rw-r--r-- | container-disc/src/test/java/com/yahoo/container/jdisc/component/DeconstructorTest.java | 26 |
2 files changed, 23 insertions, 5 deletions
diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/component/Deconstructor.java b/container-disc/src/main/java/com/yahoo/container/jdisc/component/Deconstructor.java index 3a153ec3d8a..6a46e331762 100644 --- a/container-disc/src/main/java/com/yahoo/container/jdisc/component/Deconstructor.java +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/component/Deconstructor.java @@ -61,7 +61,7 @@ public class Deconstructor implements ComponentDeconstructor { ((SharedResource) component).release(); } } - if (! destructibleComponents.isEmpty()) + if (! destructibleComponents.isEmpty() || ! bundles.isEmpty()) executor.schedule(new DestructComponentTask(destructibleComponents, bundles), delay.getSeconds(), TimeUnit.SECONDS); } diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/component/DeconstructorTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/component/DeconstructorTest.java index 345f75f7eb6..efdc8f44c17 100644 --- a/container-disc/src/test/java/com/yahoo/container/jdisc/component/DeconstructorTest.java +++ b/container-disc/src/test/java/com/yahoo/container/jdisc/component/DeconstructorTest.java @@ -2,14 +2,13 @@ package com.yahoo.container.jdisc.component; import com.yahoo.component.AbstractComponent; +import com.yahoo.container.bundle.MockBundle; import com.yahoo.container.di.componentgraph.Provider; import com.yahoo.jdisc.ResourceReference; import com.yahoo.jdisc.SharedResource; import org.junit.Before; import org.junit.Test; -import java.util.Collections; - import static java.util.Collections.emptyList; import static java.util.Collections.singleton; import static org.junit.Assert.assertTrue; @@ -51,22 +50,41 @@ public class DeconstructorTest { assertTrue(sharedResource.released); } + @Test + public void bundles_are_uninstalled() throws InterruptedException { + var bundle = new UninstallableMockBundle(); + // Done by executor, so it takes some time even with a 0 delay. + deconstructor.deconstruct(emptyList(), singleton(bundle)); + int cnt = 0; + while (! bundle.uninstalled && (cnt++ < 12000)) { + Thread.sleep(10); + } + assertTrue(bundle.uninstalled); + } + private static class TestAbstractComponent extends AbstractComponent { boolean destructed = false; @Override public void deconstruct() { destructed = true; } } private static class TestProvider implements Provider<Void> { - boolean destructed = false; + volatile boolean destructed = false; @Override public Void get() { return null; } @Override public void deconstruct() { destructed = true; } } private static class TestSharedResource implements SharedResource { - boolean released = false; + volatile boolean released = false; @Override public ResourceReference refer() { return null; } @Override public void release() { released = true; } } + + private static class UninstallableMockBundle extends MockBundle { + boolean uninstalled = false; + @Override public void uninstall() { + uninstalled = true; + } + } } |