From a80b63f0f65b5d44444b4c47ee7803808b0fe8c6 Mon Sep 17 00:00:00 2001 From: gjoranv Date: Thu, 1 Sep 2022 08:44:48 +0200 Subject: Reapply "Set duplicate bundles to the set of bundles from the failed generation." This reverts commit c5d3f1d34c8dc637cc3cc38a8d3a246d3f32ce66. --- .../com/yahoo/container/core/config/ApplicationBundleLoader.java | 6 ++++-- .../yahoo/container/core/config/ApplicationBundleLoaderTest.java | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'container-core') diff --git a/container-core/src/main/java/com/yahoo/container/core/config/ApplicationBundleLoader.java b/container-core/src/main/java/com/yahoo/container/core/config/ApplicationBundleLoader.java index 972d6677e3b..1e30b19a48d 100644 --- a/container-core/src/main/java/com/yahoo/container/core/config/ApplicationBundleLoader.java +++ b/container-core/src/main/java/com/yahoo/container/core/config/ApplicationBundleLoader.java @@ -71,8 +71,10 @@ public class ApplicationBundleLoader { bundlesFromNewGeneration.forEach(reference2Bundle::remove); Collection ret = bundlesFromNewGeneration.values(); - // No duplicate bundles should be allowed until the next call to useBundles. - osgi.allowDuplicateBundles(Set.of()); + // For correct operation of the CollisionHook (more specifically its FindHook implementation), the set of + // allowed duplicates must reflect the next set of bundles to uninstall, which is now the bundles from the + // failed generation. + osgi.allowDuplicateBundles(ret); // Clear restore info in case this method is called multiple times, for some reason. bundlesFromNewGeneration = Map.of(); diff --git a/container-core/src/test/java/com/yahoo/container/core/config/ApplicationBundleLoaderTest.java b/container-core/src/test/java/com/yahoo/container/core/config/ApplicationBundleLoaderTest.java index bc5b6d6069b..54ef2d41ac6 100644 --- a/container-core/src/test/java/com/yahoo/container/core/config/ApplicationBundleLoaderTest.java +++ b/container-core/src/test/java/com/yahoo/container/core/config/ApplicationBundleLoaderTest.java @@ -106,9 +106,10 @@ public class ApplicationBundleLoaderTest { assertEquals(1, bundlesToUninstall.size()); assertEquals(BUNDLE_2.getSymbolicName(), bundlesToUninstall.iterator().next().getSymbolicName()); - // Both bundles are still current, until the bundle from the failed gen will be uninstalled. - // Uninstalling is handled by the Deconstructor, not included in this test setup. - assertEquals(2, osgi.getCurrentBundles().size()); + // The bundle from the failed generation is not seen as current. It will still be installed, + // as uninstalling is handled by the Deconstructor, not included in this test setup. + assertEquals(1, osgi.getCurrentBundles().size()); + assertEquals(BUNDLE_1.getSymbolicName(), osgi.getCurrentBundles().get(0).getSymbolicName()); // Only the bundle-1 file reference is active, bundle-2 is removed. assertEquals(1, bundleLoader.getActiveFileReferences().size()); -- cgit v1.2.3