summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-04-03 12:22:42 +0200
committerGitHub <noreply@github.com>2020-04-03 12:22:42 +0200
commit49413ece8a980c07bf4906233cd221c41d2dc91d (patch)
treec2a15add9998321f4264d48b7c2821fffefc7b5f
parent706cb2d3b2d623318ba9c0a8db0e4355448af65a (diff)
parent2d997c17f1a35a216dee4b90babc389ded7fe2f8 (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.java2
-rw-r--r--container-disc/src/test/java/com/yahoo/container/jdisc/component/DeconstructorTest.java26
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;
+ }
+ }
}