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);
+ }
+
}