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:38 UTC
[19/22] incubator-brooklyn git commit: Partial rebind - address code
review comments
Partial rebind - address code review comments
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/491ca49e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/491ca49e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/491ca49e
Branch: refs/heads/master
Commit: 491ca49efdfe4f8a7bb2bf5cbba5cd592bf4798a
Parents: 3c97a57
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Feb 9 12:32:29 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Feb 9 12:32:29 2015 +0000
----------------------------------------------------------------------
.../src/main/java/brooklyn/BrooklynVersion.java | 4 +-
.../brooklyn/catalog/internal/CatalogUtils.java | 10 -----
.../rebind/ActivePartialRebindIteration.java | 35 ++++++++-------
.../rebind/InitialFullRebindIteration.java | 12 ++---
.../brooklyn/entity/rebind/RebindIteration.java | 14 +++++-
.../entity/rebind/RebindManagerImpl.java | 2 +-
.../test/java/brooklyn/BrooklynVersionTest.java | 2 +-
.../catalog/internal/CatalogTestUtils.java | 46 ++++++++++++++++++++
.../entity/group/DynamicClusterTest.java | 14 ++++++
.../entity/rebind/ActivePartialRebindTest.java | 2 +-
.../rebind/ActivePartialRebindVersionTest.java | 4 +-
.../persister/XmlMementoSerializerTest.java | 5 +--
.../osgi/OsgiVersionMoreEntityTest.java | 3 +-
13 files changed, 104 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/main/java/brooklyn/BrooklynVersion.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/BrooklynVersion.java b/core/src/main/java/brooklyn/BrooklynVersion.java
index 0cdf375..3496d9e 100644
--- a/core/src/main/java/brooklyn/BrooklynVersion.java
+++ b/core/src/main/java/brooklyn/BrooklynVersion.java
@@ -67,7 +67,7 @@ public class BrooklynVersion {
// we read the maven pom metadata and osgi metadata and make sure it's sensible
// everything is put into a single map for now (good enough, but should be cleaned up)
readPropertiesFromMavenResource(BrooklynVersion.class.getClassLoader());
- readPropertiesFromOsgiResource(BrooklynVersion.class.getClassLoader(), "org.apache.brooklyn.core");
+ readPropertiesFromOsgiResource(BrooklynVersion.class.getClassLoader(), BROOKLYN_CORE_SYMBOLIC_NAME);
// TODO there is also build-metadata.properties used in ServerResource /v1/server/version endpoint
// see comments on that about folding it into this class instead
@@ -227,7 +227,7 @@ public class BrooklynVersion {
}
public static String get() {
- return getVersionFromStatic();
+ return INSTANCE.getVersion();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
index 9741672..ed4d06d 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java
@@ -34,7 +34,6 @@ import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
import brooklyn.config.BrooklynLogging;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker;
import brooklyn.management.ManagementContext;
import brooklyn.management.classloading.BrooklynClassLoadingContext;
@@ -228,13 +227,4 @@ public class CatalogUtils {
}
}
- @Beta
- public static EntitySpec<?> createEntitySpec(ManagementContext mgmt, CatalogItem<?, ?> catalogItem) {
- BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, catalogItem);
- @SuppressWarnings({ "unchecked", "rawtypes" })
- EntitySpec<?> spec = EntitySpec.create( (Class)loader.loadClass(catalogItem.getJavaType()) );
- spec.catalogItemId(catalogItem.getId());
- return spec;
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/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 d3c4f5f..ff315ca 100644
--- a/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java
@@ -74,18 +74,23 @@ public class ActivePartialRebindIteration extends RebindIteration {
}
public void applyTransformer(CompoundTransformer transformer) {
- if (transformer!=null)
- transformers.add(transformer);
+ transformers.add(Preconditions.checkNotNull(transformer, "transformer"));
}
@Override
protected void doRun() throws Exception {
- checkEnteringPhase(1);
- Preconditions.checkState(readOnlyRebindCount.get()==Integer.MIN_VALUE, "Partial rebind in read-only mode not supported");
+ Preconditions.checkState(rebindManager.getRebindMode()==ManagementNodeState.MASTER, "Partial rebind only supported in master mode, not "+rebindManager.getRebindMode());
+ Preconditions.checkState(readOnlyRebindCount.get()==Integer.MIN_VALUE, "Rebind count should be MIN when running in master mode");
Preconditions.checkNotNull(objectsToRebindInitial, "Objects to rebind must be set");
LOG.debug("Partial rebind Rebinding ("+mode+") from "+rebindManager.getPersister().getBackingStoreDescription()+"...");
+ super.doRun();
+ }
+
+ @Override
+ protected void loadManifestFiles() throws Exception {
+ checkEnteringPhase(1);
Builder mementoRawBuilder = BrooklynMementoRawData.builder();
/*
@@ -116,21 +121,8 @@ public class ActivePartialRebindIteration extends RebindIteration {
mementoRawData = mementoRawBuilder.build();
preprocessManifestFiles();
-
- // skip this phase, as catalog is not being changed
- // (and we don't want to unload things)
-// rebuildCatalog();
- phase++;
-
- instantiateLocationsAndEntities();
- instantiateMementos();
- instantiateAdjuncts(instantiator);
- reconstructEverything();
- associateAdjunctsWithEntities();
- manageTheObjects();
- finishingUp();
}
-
+
@Override
protected void preprocessManifestFiles() throws Exception {
for (CompoundTransformer transformer: transformers) {
@@ -141,6 +133,13 @@ public class ActivePartialRebindIteration extends RebindIteration {
}
@Override
+ protected void rebuildCatalog() {
+ checkEnteringPhase(2);
+
+ // skip; old catalog items should be re-used
+ }
+
+ @Override
protected Collection<String> getMementoRootEntities() {
// all entities are roots here, because we are not recursing
return memento.getEntityIds();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
index 44ef922..a84d34b 100644
--- a/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
@@ -60,22 +60,16 @@ public class InitialFullRebindIteration extends RebindIteration {
return false;
}
+ @Override
protected void doRun() throws Exception {
LOG.debug("Rebinding ("+mode+
(readOnlyRebindCount.get()>Integer.MIN_VALUE ? ", iteration "+readOnlyRebindCount : "")+
") from "+rebindManager.getPersister().getBackingStoreDescription()+"...");
- loadManifestFiles();
- rebuildCatalog();
- instantiateLocationsAndEntities();
- instantiateMementos();
- instantiateAdjuncts(instantiator);
- reconstructEverything();
- associateAdjunctsWithEntities();
- manageTheObjects();
- finishingUp();
+ super.doRun();
}
+ @Override
protected void loadManifestFiles() throws Exception {
checkEnteringPhase(1);
Preconditions.checkState(mementoRawData==null, "Memento raw data should not yet be set when calling this");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
index 3582030..3d22d0b 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
@@ -232,7 +232,19 @@ public abstract class RebindIteration {
return rebindContext;
}
- protected abstract void doRun() throws Exception;
+ protected void doRun() throws Exception {
+ loadManifestFiles();
+ rebuildCatalog();
+ instantiateLocationsAndEntities();
+ instantiateMementos();
+ instantiateAdjuncts(instantiator);
+ reconstructEverything();
+ associateAdjunctsWithEntities();
+ manageTheObjects();
+ finishingUp();
+ }
+
+ protected abstract void loadManifestFiles() throws Exception;
public void run() {
if (iterationStarted.getAndSet(true)) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index e6f4aea..ca85a03 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -382,7 +382,7 @@ public class RebindManagerImpl implements RebindManager {
rebindActive, readOnlyRebindCount, rebindMetrics, persistenceStoreAccess);
iteration.setObjectIterator(objectsToRebind);
- iteration.applyTransformer(transformer);
+ if (transformer!=null) iteration.applyTransformer(transformer);
iteration.run();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/test/java/brooklyn/BrooklynVersionTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/BrooklynVersionTest.java b/core/src/test/java/brooklyn/BrooklynVersionTest.java
index 887d8e4..9683600 100644
--- a/core/src/test/java/brooklyn/BrooklynVersionTest.java
+++ b/core/src/test/java/brooklyn/BrooklynVersionTest.java
@@ -63,7 +63,7 @@ public class BrooklynVersionTest {
log.info("sha1: "+sha1);
if (Strings.isNonBlank(sha1) || BrooklynVersion.isDevelopmentEnvironment())
return;
- // we might not have a SHA1 if it's a standalone source build; just log warn in that case
+ // we might not have a SHA1 if it's a standalone (non-git) source build; just log warn in that case
log.warn("This build does not have git SHA1 information.");
// (can't assert anything, except that sha1 lookup doesn't NPE)
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/test/java/brooklyn/catalog/internal/CatalogTestUtils.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/catalog/internal/CatalogTestUtils.java b/core/src/test/java/brooklyn/catalog/internal/CatalogTestUtils.java
new file mode 100644
index 0000000..14005a5
--- /dev/null
+++ b/core/src/test/java/brooklyn/catalog/internal/CatalogTestUtils.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package brooklyn.catalog.internal;
+
+import brooklyn.catalog.CatalogItem;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.management.ManagementContext;
+import brooklyn.management.classloading.BrooklynClassLoadingContext;
+
+import com.google.common.annotations.Beta;
+
+public class CatalogTestUtils {
+
+ /** creates entity spec with the java type of a catalog item;
+ * would be nice to have this in {@link CatalogUtils},
+ * but the logic for parsing the yaml is buried in camp code,
+ * so it's a little bit hard to make this a first class method.
+ * <p>
+ * (this impl ignores many things, including config and location.)
+ */
+ @Beta
+ public static EntitySpec<?> createEssentialEntitySpec(ManagementContext mgmt, CatalogItem<?, ?> catalogItem) {
+ BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, catalogItem);
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ EntitySpec<?> spec = EntitySpec.create( (Class)loader.loadClass(catalogItem.getJavaType()) );
+ spec.catalogItemId(catalogItem.getId());
+ return spec;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java b/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
index ad5394a..8f953a4 100644
--- a/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
+++ b/core/src/test/java/brooklyn/entity/group/DynamicClusterTest.java
@@ -46,6 +46,7 @@ import org.testng.annotations.Test;
import brooklyn.entity.BrooklynAppUnitTestSupport;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.Attributes;
+import brooklyn.entity.basic.BasicEntity;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityFactory;
@@ -64,6 +65,7 @@ import brooklyn.test.EntityTestUtils;
import brooklyn.test.entity.TestEntity;
import brooklyn.test.entity.TestEntityImpl;
import brooklyn.util.collections.MutableMap;
+import brooklyn.util.collections.QuorumCheck.QuorumChecks;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.time.Time;
@@ -875,6 +877,18 @@ public class DynamicClusterTest extends BrooklynAppUnitTestSupport {
assertEquals(cluster.getMembers().size(), 1);
}
+ @Test
+ public void testWithNonStartableEntity() throws Exception {
+ DynamicCluster cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
+ .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(BasicEntity.class))
+ .configure(DynamicCluster.UP_QUORUM_CHECK, QuorumChecks.alwaysTrue())
+ .configure(DynamicCluster.INITIAL_SIZE, 2));
+ cluster.start(ImmutableList.of(loc));
+
+ EntityTestUtils.assertAttributeEqualsEventually(cluster, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+ assertTrue(cluster.getAttribute(Attributes.SERVICE_UP));
+ }
+
private Throwable unwrapException(Throwable e) {
if (e instanceof ExecutionException) {
return unwrapException(e.getCause());
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java
index 414ca25..f43cbe5 100644
--- a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java
@@ -87,7 +87,7 @@ public class ActivePartialRebindTest extends RebindTestFixtureWithApp {
gcAndLog("before");
long used0 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
- for (int i=0; i<500; i++) {
+ for (int i=0; i<200; i++) {
doPartialRebindOfIds(c1.getId());
origManagementContext.getGarbageCollector().gcIteration();
gcAndLog("iteration "+i);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/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 9eec02b..e9594b9 100644
--- a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java
@@ -24,7 +24,7 @@ import org.testng.Assert;
import org.testng.annotations.Test;
import brooklyn.catalog.CatalogItem;
-import brooklyn.catalog.internal.CatalogUtils;
+import brooklyn.catalog.internal.CatalogTestUtils;
import brooklyn.entity.Entity;
import brooklyn.entity.group.DynamicCluster;
import brooklyn.entity.proxying.EntitySpec;
@@ -94,7 +94,7 @@ public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp {
// + " 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))
+ .configure(DynamicCluster.MEMBER_SPEC, CatalogTestUtils.createEssentialEntitySpec(origManagementContext, catV1))
);
cluster.start(MutableList.of(origApp.newSimulatedLocation()));
Entity childV1 = MutableList.copyOf(cluster.getChildren()).get(1);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java b/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
index 6083134..a57c9eb 100644
--- a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
@@ -37,7 +37,7 @@ import brooklyn.basic.BrooklynObject;
import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.internal.CatalogItemBuilder;
import brooklyn.catalog.internal.CatalogItemDtoAbstract;
-import brooklyn.catalog.internal.CatalogUtils;
+import brooklyn.catalog.internal.CatalogTestUtils;
import brooklyn.entity.Entity;
import brooklyn.entity.Feed;
import brooklyn.entity.basic.Entities;
@@ -47,7 +47,6 @@ import brooklyn.entity.rebind.BrooklynObjectType;
import brooklyn.location.Location;
import brooklyn.location.LocationSpec;
import brooklyn.management.ManagementContext;
-import brooklyn.management.internal.LocalManagementContext;
import brooklyn.management.osgi.OsgiVersionMoreEntityTest;
import brooklyn.mementos.BrooklynMementoPersister.LookupContext;
import brooklyn.policy.Enricher;
@@ -203,7 +202,7 @@ public class XmlMementoSerializerTest {
EntitySpec<DynamicCluster> spec = EntitySpec.create(DynamicCluster.class)
.configure(DynamicCluster.INITIAL_SIZE, 1)
- .configure(DynamicCluster.MEMBER_SPEC, CatalogUtils.createEntitySpec(mgmt, ci));
+ .configure(DynamicCluster.MEMBER_SPEC, CatalogTestUtils.createEssentialEntitySpec(mgmt, ci));
serializer.setLookupContext(new LookupContextImpl(mgmt,
ImmutableList.<Entity>of(), ImmutableList.<Location>of(), ImmutableList.<Policy>of(),
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/491ca49e/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java b/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
index 4e1bb94..967bb6d 100644
--- a/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
+++ b/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java
@@ -36,6 +36,7 @@ import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.internal.CatalogEntityItemDto;
import brooklyn.catalog.internal.CatalogItemBuilder;
import brooklyn.catalog.internal.CatalogItemDtoAbstract;
+import brooklyn.catalog.internal.CatalogTestUtils;
import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.Entities;
@@ -162,7 +163,7 @@ public class OsgiVersionMoreEntityTest {
}
public static Entity addItemFromCatalog(ManagementContext mgmt, TestApplication parent, CatalogItem<?, ?> c2) {
- return parent.createAndManageChild( CatalogUtils.createEntitySpec(mgmt, c2) );
+ return parent.createAndManageChild( CatalogTestUtils.createEssentialEntitySpec(mgmt, c2) );
}
public static void assertV1MethodCall(Entity me) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {