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 2015/02/09 16:36:31 UTC

[12/22] incubator-brooklyn git commit: test that changing version applies to specs

test that changing version applies to specs


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

Branch: refs/heads/master
Commit: 71c82da572ae28d73c31f1c102f4ac4c5a7f2280
Parents: 0dc533d
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Feb 6 17:59:49 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Feb 6 22:12:14 2015 +0000

----------------------------------------------------------------------
 .../rebind/ActivePartialRebindIteration.java    |  2 +-
 .../management/internal/LocalEntityManager.java | 21 +++++++---
 .../rebind/ActivePartialRebindVersionTest.java  | 44 ++++++++++++++++++--
 3 files changed, 57 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/71c82da5/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java
index 56c467f..d3c4f5f 100644
--- a/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java
@@ -142,7 +142,7 @@ public class ActivePartialRebindIteration extends RebindIteration {
 
     @Override
     protected Collection<String> getMementoRootEntities() {
-        // TODO must parents
+        // all entities are roots here, because we are not recursing
         return memento.getEntityIds();
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/71c82da5/core/src/main/java/brooklyn/management/internal/LocalEntityManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/LocalEntityManager.java b/core/src/main/java/brooklyn/management/internal/LocalEntityManager.java
index 3e9e4c0..cd66e5b 100644
--- a/core/src/main/java/brooklyn/management/internal/LocalEntityManager.java
+++ b/core/src/main/java/brooklyn/management/internal/LocalEntityManager.java
@@ -65,9 +65,9 @@ import brooklyn.util.task.Tasks;
 import brooklyn.util.time.CountdownTimer;
 import brooklyn.util.time.Duration;
 
-import com.google.common.base.Preconditions;
 import com.google.common.annotations.Beta;
 import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
@@ -285,7 +285,7 @@ public class LocalEntityManager implements EntityManagerInternal {
         }
 
         final List<EntityInternal> allEntities =  Lists.newArrayList();
-        recursively(e, new Predicate<EntityInternal>() { public boolean apply(EntityInternal it) {
+        Predicate<EntityInternal> manageEntity = new Predicate<EntityInternal>() { public boolean apply(EntityInternal it) {
             ManagementTransitionMode mode = getLastManagementTransitionMode(it.getId());
             if (mode==null) {
                 setManagementTransitionMode(it, mode = initialMode);
@@ -309,9 +309,13 @@ public class LocalEntityManager implements EntityManagerInternal {
                     // silently bail out
                     return false;
                 } else {
-                    // on rebind, should not have any deployed instances
-                    log.warn("Already deployed "+it+" when managing "+mode+"/"+initialMode+"; ignoring this and all descendants");
-                    return false;
+                    if (mode.wasPrimary() && mode.isPrimary()) {
+                        // active partial rebind; continue
+                    } else {
+                        // on rebind, should not have any deployed instances
+                        log.warn("Already deployed "+it+" when managing "+mode+"/"+initialMode+"; ignoring this and all descendants");
+                        return false;
+                    }
                 }
             }
             
@@ -325,7 +329,12 @@ public class LocalEntityManager implements EntityManagerInternal {
             preManageNonRecursive(it, mode);
             it.getManagementSupport().onManagementStarting( new ManagementTransitionInfo(managementContext, mode) ); 
             return manageNonRecursive(it, mode);
-        } });
+        } };
+        if (initialMode.wasPrimary() && initialMode.isPrimary()) {
+            manageEntity.apply( (EntityInternal)e );
+        } else {
+            recursively(e, manageEntity);
+        }
         
         for (EntityInternal it : allEntities) {
             if (!it.getManagementSupport().isFullyManaged()) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/71c82da5/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java
index b239f1a..9eec02b 100644
--- a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java
@@ -24,11 +24,14 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import brooklyn.catalog.CatalogItem;
+import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.entity.Entity;
+import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.proxying.EntitySpec;
 import brooklyn.entity.rebind.transformer.CompoundTransformer;
 import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.management.osgi.OsgiTestResources;
 import brooklyn.management.osgi.OsgiVersionMoreEntityTest;
+import brooklyn.util.collections.MutableList;
 
 public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
 
@@ -64,8 +67,8 @@ public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
         
         // now transform, with a version change
         CompoundTransformer transformer = CompoundTransformer.builder().changeCatalogItemId(
-            OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, "1.0",
-            OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, "1.1").build();
+            catV1.getSymbolicName(), catV1.getVersion(),
+            catV2.getSymbolicName(), catV2.getVersion()).build();
         doPartialRebindByObjectById(transformer, childV1.getId());
 
         Entity childV2 = origManagementContext.lookup(childV1.getId(), Entity.class);
@@ -78,4 +81,39 @@ public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
         Assert.assertTrue(childV1==childV2, "Expected same instance: "+childV1+" / "+childV2);
     }
 
+    @Test
+    public void testSwitchingVersionsInCluster() throws Exception {
+        CatalogItem<?, ?> catV1 = OsgiVersionMoreEntityTest.addMoreEntityV1(origManagementContext, "1.0");
+        CatalogItem<?, ?> catV2 = OsgiVersionMoreEntityTest.addMoreEntityV2(origManagementContext, "1.1");
+        
+        // could do a yaml test in a downstream project (no camp available here)
+//        CreationResult<List<Entity>, List<String>> clusterR = EntityManagementUtils.addChildren(origApp, 
+//              "services:\n"
+//            + "- type: "+DynamicCluster.class.getName()+"\n"
+//            + "  initialSize: 1\n"
+//            + "  entitySpec: { type: "+catV1.getId()+" }\n", true);
+        DynamicCluster cluster = origApp.createAndManageChild(EntitySpec.create(DynamicCluster.class)
+            .configure(DynamicCluster.INITIAL_SIZE, 1)
+            .configure(DynamicCluster.MEMBER_SPEC, CatalogUtils.createEntitySpec(origManagementContext, catV1))
+            );
+        cluster.start(MutableList.of(origApp.newSimulatedLocation()));
+        Entity childV1 = MutableList.copyOf(cluster.getChildren()).get(1);
+        
+        OsgiVersionMoreEntityTest.assertV1EffectorCall(childV1);
+        
+        // now transform, with a version change
+        CompoundTransformer transformer = CompoundTransformer.builder().changeCatalogItemId(
+            catV1.getSymbolicName(), catV1.getVersion(),
+            catV2.getSymbolicName(), catV2.getVersion()).build();
+        doPartialRebindByObjectById(transformer, cluster.getId(), childV1.getId());
+
+        // existing child now points to new implementation -- saying HI
+        OsgiVersionMoreEntityTest.assertV2EffectorCall(childV1);
+
+        // and scale out new child also gets new impl
+        cluster.resize(2);
+        Entity child2 = MutableList.copyOf(cluster.getChildren()).get(2);
+        OsgiVersionMoreEntityTest.assertV2EffectorCall(child2);
+    }
+
 }