You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2017/11/01 15:50:57 UTC

[03/10] brooklyn-server git commit: fix ordering of catalog lookup, and tidy naming of tests for rebind with catalog upgrades

fix ordering of catalog lookup, and tidy naming of tests for rebind with catalog upgrades


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/b539605f
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/b539605f
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/b539605f

Branch: refs/heads/master
Commit: b539605ff4b1ad313812fef81fe326de8478e31e
Parents: 305df9c
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Oct 30 15:56:58 2017 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Oct 30 15:56:58 2017 +0000

----------------------------------------------------------------------
 .../core/typereg/BasicBrooklynTypeRegistry.java |  7 ++-
 .../BrooklynLauncherRebindCatalogOsgiTest.java  | 52 +++++++++++++-------
 2 files changed, 40 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b539605f/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
index 46d3400..dd0b4b9 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
@@ -43,6 +43,7 @@ import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
 import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
 import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
+import org.apache.brooklyn.core.typereg.RegisteredTypes.RegisteredTypeNameThenBestFirstComparator;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
@@ -50,6 +51,7 @@ import org.apache.brooklyn.util.concurrent.Locks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.osgi.VersionedName;
+import org.apache.brooklyn.util.osgi.VersionedName.VersionedNameComparator;
 import org.apache.brooklyn.util.osgi.VersionedName.VersionedNameStringComparator;
 import org.apache.brooklyn.util.text.BrooklynVersionSyntax;
 import org.apache.brooklyn.util.text.Identifiers;
@@ -93,9 +95,10 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
     
     private Iterable<RegisteredType> getAllWithoutCatalog(Predicate<? super RegisteredType> filter) {
         // TODO optimisation? make indexes and look up?
+        Ordering<RegisteredType> typeOrder = Ordering.from(RegisteredTypeNameThenBestFirstComparator.INSTANCE);
         return Locks.withLock(localRegistryLock.readLock(), 
             () -> localRegisteredTypesAndContainingBundles.values().stream().
-                flatMap(m -> m.values().stream()).filter(filter::apply).collect(Collectors.toList()) );
+                flatMap(m -> { return typeOrder.sortedCopy(m.values()).stream(); }).filter(filter::apply).collect(Collectors.toList()) );
     }
 
     private Maybe<RegisteredType> getExactWithoutLegacyCatalog(String symbolicName, String version, RegisteredTypeLoadingContext constraint) {
@@ -109,7 +112,7 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
         if (m.isEmpty()) return null;
         if (m.size()==1) return m.values().iterator().next();
         // get the highest version of first alphabetical - to have a canonical order
-        return m.get( Ordering.from(VersionedNameStringComparator.INSTANCE).max(m.keySet()) );
+        return m.get( Ordering.from(VersionedNameStringComparator.INSTANCE).min(m.keySet()) );
     }
 
     @SuppressWarnings("deprecation")

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b539605f/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherRebindCatalogOsgiTest.java
----------------------------------------------------------------------
diff --git a/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherRebindCatalogOsgiTest.java b/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherRebindCatalogOsgiTest.java
index b2e4484..e925b33 100644
--- a/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherRebindCatalogOsgiTest.java
+++ b/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherRebindCatalogOsgiTest.java
@@ -416,7 +416,7 @@ public abstract class BrooklynLauncherRebindCatalogOsgiTest extends AbstractBroo
     }
     
     @Test
-    public void testRebindUpgradesBundleWithSameItems() throws Exception {
+    public void testRestartWithNewBundleWithSameItemsReplacesItems() throws Exception {
         Set<VersionedName> bundleItems = ImmutableSet.of(VersionedName.fromString("one:1.0.0"));
         String bundleBom = createCatalogYaml(ImmutableList.of(), bundleItems);
         
@@ -431,13 +431,30 @@ public abstract class BrooklynLauncherRebindCatalogOsgiTest extends AbstractBroo
         startupAssertions = () -> {
             assertCatalogConsistsOfIds(launcherLast, bundleItems);
             assertManagedBundle(launcherLast, bundleNameV1, bundleItems);
+            
+            String bundleVersionSupplyingType = getBundleSupplyingFirstType(bundleItems);
+            if (launcherT2==null) {
+                Assert.assertEquals(bundleVersionSupplyingType, "1.0.0");
+                
+            } else {
+                assertManagedBundle(launcherLast, bundleNameV2, bundleItems);
+                getBundleSupplyingFirstType(bundleItems);
+                Assert.assertEquals(bundleVersionSupplyingType, "2.0.0");
+            }
         };
         startT1(newLauncherForTests(initialBomFileV1.getAbsolutePath()));
         startT2(newLauncherForTests(initialBomFileV2.getAbsolutePath()));
+        assertManagedBundle(launcherLast, bundleNameV2, bundleItems);
+        promoteT2IfStandby();
+    }
+
+    protected String getBundleSupplyingFirstType(Set<VersionedName> bundleItems) {
+        return VersionedName.fromString( launcherLast.getManagementContext().getTypeRegistry().get(
+            bundleItems.iterator().next().toString() ).getContainingBundle() ).getVersionString();
     }
 
     @Test
-    public void testRebindUpgradesBundleWithNewerItems() throws Exception {
+    public void testRestartWithNewBundleWithNewItemsAddsItems() throws Exception {
         Set<VersionedName> bundleItemsV1 = ImmutableSet.of(VersionedName.fromString("one:1.0.0"));
         String bundleBomV1 = createCatalogYaml(ImmutableList.of(), bundleItemsV1);
         VersionedName bundleNameV1 = new VersionedName("org.example.testRebindGetsInitialOsgiCatalog", "1.0.0");
@@ -450,17 +467,20 @@ public abstract class BrooklynLauncherRebindCatalogOsgiTest extends AbstractBroo
         File bundleFileV2 = newTmpBundle(ImmutableMap.of(BasicBrooklynCatalog.CATALOG_BOM, bundleBomV2.getBytes(StandardCharsets.UTF_8)), bundleNameV2);
         File initialBomFileV2 = newTmpFile(createCatalogYaml(ImmutableList.of(bundleFileV2.toURI()), ImmutableList.of()));
         
-        startT1(newLauncherForTests(initialBomFileV1.getAbsolutePath()));
-        
-        assertCatalogConsistsOfIds(launcherLast, bundleItemsV1);
-        assertManagedBundle(launcherLast, bundleNameV1, bundleItemsV1);
-        // above for T1 should become the following for T2
         startupAssertions = () -> {
-            assertCatalogConsistsOfIds(launcherLast, Iterables.concat(bundleItemsV1, bundleItemsV2));
             assertManagedBundle(launcherLast, bundleNameV1, bundleItemsV1);
-            assertManagedBundle(launcherLast, bundleNameV2, bundleItemsV2);
+            Assert.assertEquals(getBundleSupplyingFirstType(bundleItemsV1), "1.0.0");
+            if (launcherT2==null) {
+                assertCatalogConsistsOfIds(launcherLast, bundleItemsV1);
+                
+            } else {
+                assertCatalogConsistsOfIds(launcherLast, Iterables.concat(bundleItemsV1, bundleItemsV2));
+                
+                assertManagedBundle(launcherLast, bundleNameV2, bundleItemsV2);
+                Assert.assertEquals(getBundleSupplyingFirstType(bundleItemsV2), "2.0.0");
+            }
         };
-        
+        startT1(newLauncherForTests(initialBomFileV1.getAbsolutePath()));
         startT2(newLauncherForTests(initialBomFileV2.getAbsolutePath()));
         promoteT2IfStandby();
     }
@@ -584,13 +604,11 @@ public abstract class BrooklynLauncherRebindCatalogOsgiTest extends AbstractBroo
         }
     }
     
-    // TODO tests:
-    // TODO remove on hot standby promotion (above), succeed and failing
-    // TODO deploy blueprint with old item after upgrade
-    // TODO rebind upgrade item deployed
-    // TODO rebind upgrade spec item in deployment
-    // TODO deploy mention of old item after upgrade
-    // TODO upgrade on hot standby and promotion
+    // TODO removed item in deployment fails - rebind and upgrade uses new item
+    // TODO removed item in deployment upgrades - rebind and upgrade uses new item
+    // TODO removed item in spec fails
+    // TODO removed item in spec upgrades
+    // TODO removed item deployed after rebind
     
     protected void assertPersistedBundleListingEqualsEventually(BrooklynLauncher launcher, Set<VersionedName> bundles) {
         Asserts.succeedsEventually(new Runnable() {