[2/2] brooklyn-library git commit: This closes #21

2016-03-22 Thread aledsage
This closes #21


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

Branch: refs/heads/master
Commit: be0d23240d6c165b752f54985c4079c45a33dc48
Parents: d7d44f9 d645aa8
Author: Aled Sage 
Authored: Tue Mar 22 20:32:43 2016 +
Committer: Aled Sage 
Committed: Tue Mar 22 20:32:43 2016 +

--
 .../database/mssql/Custom-Enable-CredSSP.ps1| 131 +++
 .../entity/database/mssql/installmssql.ps1  |  33 +++--
 .../brooklyn/entity/database/mssql/mssql.yaml   |   9 +-
 3 files changed, 152 insertions(+), 21 deletions(-)
--




[10/10] brooklyn-server git commit: This closes #59

2016-03-22 Thread grkvlt
This closes #59

* github/pr/59:
  Clocker-testing: fix where we delete the location
  Fix XML serialiser for SpecConverter
  LocationFactor’s “special constructor” for pre-existing loc
  Fix log.warn when calling Location.unmanage
  BROOKLYN-242: fix race in BasicTest.get()
  NotUpDiagnostics: don’t collect if starting && !up
  ServerPool: creates/registers single ServerPoolLocation
  Clocker pattern: change how LocationRegistry used
  Test the Clocker pattern (of LocationOwner and DynamicLocation)


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

Branch: refs/heads/master
Commit: b8211ed17c354dba49ad33d7bf6ee5db675ff6a9
Parents: 1e5f3b6 b59fda7
Author: Andrew Donald Kennedy 
Authored: Tue Mar 22 17:17:25 2016 +
Committer: Andrew Donald Kennedy 
Committed: Tue Mar 22 17:17:25 2016 +

--
 .../core/location/AbstractLocation.java |   4 +-
 .../core/location/dynamic/DynamicLocation.java  |  12 +
 .../core/location/dynamic/LocationOwner.java|   4 -
 .../core/mgmt/persist/XmlMementoSerializer.java |  14 +-
 .../objs/proxy/InternalLocationFactory.java |  13 ++
 .../brooklyn/util/core/task/BasicTask.java  |  11 +-
 .../core/effector/EffectorBasicTest.java|  29 +++
 .../entity/machine/pool/ServerPool.java |   5 +-
 .../entity/machine/pool/ServerPoolImpl.java |  53 +++--
 .../entity/machine/pool/ServerPoolLocation.java |  53 -
 .../pool/ServerPoolLocationResolver.java|  64 +++---
 ...ClockerDynamicLocationPatternRebindTest.java | 136 +++
 .../ClockerDynamicLocationPatternTest.java  | 110 +
 .../dynamic/clocker/StubAttributes.java |  34 +++
 .../location/dynamic/clocker/StubContainer.java |  33 +++
 .../dynamic/clocker/StubContainerImpl.java  | 131 +++
 .../dynamic/clocker/StubContainerLocation.java  |  52 +
 .../core/location/dynamic/clocker/StubHost.java |  38 
 .../location/dynamic/clocker/StubHostImpl.java  | 141 
 .../dynamic/clocker/StubHostLocation.java   | 171 ++
 .../dynamic/clocker/StubInfrastructure.java |  95 
 .../dynamic/clocker/StubInfrastructureImpl.java | 224 +++
 .../clocker/StubInfrastructureLocation.java | 139 
 .../location/dynamic/clocker/StubResolver.java  | 159 +
 .../dynamic/clocker/StubResolverTest.java   |  82 +++
 .../location/dynamic/clocker/StubUtils.java |  95 
 .../machine/pool/AbstractServerPoolTest.java|  23 +-
 .../pool/ServerPoolLocationResolverTest.java|  65 ++
 .../entity/machine/pool/ServerPoolTest.java |   8 +-
 29 files changed, 1865 insertions(+), 133 deletions(-)
--




[07/10] brooklyn-server git commit: LocationFactor’s “special constructor” for pre-existing loc

2016-03-22 Thread grkvlt
LocationFactor’s “special constructor” for pre-existing loc

If location already existed, then don’t try to manage it and don’t
reset its config. Previously we got a log.warn about an attempt to
manage the location when it was already managed.

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

Branch: refs/heads/master
Commit: 89b3a663902fb6ecdfec641ce75ffca514e0
Parents: 3118f42
Author: Aled Sage 
Authored: Tue Mar 22 12:46:02 2016 +
Committer: Aled Sage 
Committed: Tue Mar 22 12:46:02 2016 +

--
 .../core/objs/proxy/InternalLocationFactory.java   | 13 +
 1 file changed, 13 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/89b3a663/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
 
b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
index baf0e5b..4ba0658 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/objs/proxy/InternalLocationFactory.java
@@ -27,12 +27,15 @@ import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.location.AbstractLocation;
+import org.apache.brooklyn.core.location.Locations;
 import org.apache.brooklyn.core.location.internal.LocationInternal;
 import org.apache.brooklyn.core.mgmt.internal.LocalLocationManager;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.core.flags.FlagUtils;
 import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -46,6 +49,8 @@ import com.google.common.collect.ImmutableMap;
  */
 public class InternalLocationFactory extends InternalFactory {
 
+private static final Logger LOG = 
LoggerFactory.getLogger(InternalLocationFactory.class);
+
 /**
  * Returns true if this is a "new-style" location (i.e. where not expected 
to call the constructor to instantiate it).
  * 
@@ -96,9 +101,17 @@ public class InternalLocationFactory extends 
InternalFactory {
 
 T loc = construct(clazz, spec, null);
 
+if (Locations.isManaged(loc)) {
+// Construct can return an existing instance, if using 
SpecialBrooklynObjectConstructor.Config.SPECIAL_CONSTRUCTOR.
+// In which case, don't reconfigure it (don't change its 
parent, etc).
+LOG.debug("Location-factory returning pre-existing location; 
skipping initialization of {}", loc);
+return loc;
+}
+
 if (spec.getId() != null) {
 FlagUtils.setFieldsFromFlags(ImmutableMap.of("id", 
spec.getId()), loc);
 }
+
 managementContext.prePreManage(loc);
 
 if (spec.getDisplayName()!=null)



[09/10] brooklyn-server git commit: Clocker-testing: fix where we delete the location

2016-03-22 Thread grkvlt
Clocker-testing: fix where we delete the location

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

Branch: refs/heads/master
Commit: b59fda75be280dee68e44115d9ca2112e8404658
Parents: b5dae5b
Author: Aled Sage 
Authored: Tue Mar 22 12:48:01 2016 +
Committer: Aled Sage 
Committed: Tue Mar 22 12:48:01 2016 +

--
 .../location/dynamic/clocker/StubContainerImpl.java |  8 
 .../core/location/dynamic/clocker/StubHostImpl.java | 16 
 .../dynamic/clocker/StubInfrastructureImpl.java |  6 --
 3 files changed, 28 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b59fda75/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubContainerImpl.java
--
diff --git 
a/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubContainerImpl.java
 
b/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubContainerImpl.java
index 45cf9d0..2ef9480 100644
--- 
a/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubContainerImpl.java
+++ 
b/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubContainerImpl.java
@@ -27,11 +27,13 @@ import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.mgmt.LocationManager;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
+import org.apache.brooklyn.core.entity.trait.StartableMethods;
 import org.apache.brooklyn.core.feed.ConfigToAttributes;
 import org.apache.brooklyn.core.location.dynamic.DynamicLocation;
 import org.apache.brooklyn.entity.stock.BasicStartableImpl;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,6 +76,12 @@ public class StubContainerImpl extends BasicStartableImpl 
implements StubContain
 }
 
 @Override
+public void stop() {
+super.stop();
+deleteLocation();
+}
+
+@Override
 public StubContainerLocation createLocation(Map flags) {
 StubHost dockerHost = getDockerHost();
 StubHostLocation host = dockerHost.getDynamicLocation();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b59fda75/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubHostImpl.java
--
diff --git 
a/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubHostImpl.java
 
b/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubHostImpl.java
index 3139d93..314ebda 100644
--- 
a/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubHostImpl.java
+++ 
b/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/StubHostImpl.java
@@ -19,10 +19,15 @@
 package org.apache.brooklyn.core.location.dynamic.clocker;
 
 import java.util.Map;
+import java.util.Set;
 
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.location.LocationDefinition;
 import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.feed.ConfigToAttributes;
 import org.apache.brooklyn.core.location.Locations;
 import org.apache.brooklyn.core.location.Machines;
@@ -31,9 +36,14 @@ import org.apache.brooklyn.entity.group.DynamicCluster;
 import org.apache.brooklyn.entity.software.base.EmptySoftwareProcessImpl;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.QuorumCheck.QuorumChecks;
+import org.apache.brooklyn.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
 public class StubHostImpl extends EmptySoftwareProcessImpl implements StubHost 
{
 
 private static final Logger LOG = 
LoggerFactory.getLogger(StubHostImpl.class);
@@ -83,6 +93,12 @@ public class StubHostImpl extends 

[06/10] brooklyn-server git commit: Fix log.warn when calling Location.unmanage

2016-03-22 Thread grkvlt
Fix log.warn when calling Location.unmanage

Previously, if a location being unmanaged had a parent, we’d try to
unmanaged it twice - the second time would give a log.warn

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

Branch: refs/heads/master
Commit: 3118f427b4bc8e95ce4c19a54f97325957687d61
Parents: 3df2b8b
Author: Aled Sage 
Authored: Tue Mar 22 12:45:03 2016 +
Committer: Aled Sage 
Committed: Tue Mar 22 12:45:03 2016 +

--
 .../java/org/apache/brooklyn/core/location/AbstractLocation.java | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3118f427/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java 
b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
index dc48862..d4e565e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java
@@ -706,7 +706,9 @@ public abstract class AbstractLocation extends 
AbstractBrooklynObject implements
 }
 child.setParent(null);
 
-if (isManaged()) {
+if (isManaged() && Locations.isManaged(child)) {
+// This is called as part of child's 
LocalLocationManager.unmanage; don't try to 
+// unmanage it yet again as then would get a log.warn!
 getManagementContext().getLocationManager().unmanage(child);
 }
 }



[04/10] brooklyn-server git commit: NotUpDiagnostics: don’t collect if starting && !up

2016-03-22 Thread grkvlt
NotUpDiagnostics: don’t collect if starting && !up

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

Branch: refs/heads/master
Commit: 0b9682b8830df7715bb8b579cfc40a1734f03038
Parents: 9f1a120
Author: Aled Sage 
Authored: Fri Mar 18 23:09:04 2016 +
Committer: Aled Sage 
Committed: Sat Mar 19 22:03:56 2016 +

--
 .../apache/brooklyn/entity/software/base/SoftwareProcessImpl.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0b9682b8/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
--
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
index ace4ebe..4bf6543 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
@@ -172,7 +172,7 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
 Lifecycle state = entity.getAttribute(SERVICE_STATE_ACTUAL);
 if (up == null || up) {
 
entity.sensors().set(ServiceStateLogic.SERVICE_NOT_UP_DIAGNOSTICS, 
ImmutableMap.of());
-} else if (state == null || state == Lifecycle.CREATED) {
+} else if (state == null || state == Lifecycle.CREATED || state == 
Lifecycle.STARTING) {
 // not yet started; do nothing
 } else if (state == Lifecycle.STOPPING || state == 
Lifecycle.STOPPED || state == Lifecycle.DESTROYED) {
 // stopping/stopped, so expect not to be up; get rid of the 
diagnostics.



[05/10] brooklyn-server git commit: BROOKLYN-242: fix race in BasicTest.get()

2016-03-22 Thread grkvlt
BROOKLYN-242: fix race in BasicTest.get()

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

Branch: refs/heads/master
Commit: 3df2b8b4c131eedd889a319a8ba1f03cfe32e547
Parents: 0b9682b
Author: Aled Sage 
Authored: Tue Mar 22 12:44:11 2016 +
Committer: Aled Sage 
Committed: Tue Mar 22 12:44:11 2016 +

--
 .../brooklyn/util/core/task/BasicTask.java  | 11 +++-
 .../core/effector/EffectorBasicTest.java| 29 
 2 files changed, 39 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3df2b8b4/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java 
b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
index efd3001..410ba12 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicTask.java
@@ -451,7 +451,16 @@ public class BasicTask implements TaskInternal {
 }
 Long remaining = end==null ? null : end -  System.currentTimeMillis();
 if (isDone()) {
-return internalFuture.get(1, TimeUnit.MILLISECONDS);
+// Don't just call internalFuture.get(1ms) - see comment in 
isDone() about setting of endTimeUtc,
+// and see BROOKLYN-242.
+if (internalFuture == null) {
+assert cancelled: "task="+this+"; endTimeUtc="+endTimeUtc+"; 
cancelled="+cancelled+"; isDone=true; null internal future";
+throw new CancellationException();
+} else if (remaining == null) {
+return internalFuture.get();
+} else {
+return internalFuture.get(Math.max(remaining, 1000), 
TimeUnit.MILLISECONDS);
+}
 } else if (remaining == null) {
 return internalFuture.get();
 } else if (remaining > 0) {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3df2b8b4/core/src/test/java/org/apache/brooklyn/core/effector/EffectorBasicTest.java
--
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorBasicTest.java 
b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorBasicTest.java
index 05b3a10..8af533f 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorBasicTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorBasicTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.brooklyn.core.effector;
 
+import static org.testng.Assert.assertEquals;
+
 import java.util.List;
 import java.util.concurrent.Callable;
 
@@ -25,6 +27,7 @@ import org.apache.brooklyn.api.entity.EntitySpec;
 import org.apache.brooklyn.api.mgmt.HasTaskChildren;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.entity.StartableApplication;
 import org.apache.brooklyn.core.entity.trait.FailingEntity;
 import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.location.SimulatedLocation;
@@ -36,11 +39,13 @@ import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Duration;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 
 public class EffectorBasicTest extends BrooklynAppUnitTestSupport {
 
@@ -92,6 +97,30 @@ public class EffectorBasicTest extends 
BrooklynAppUnitTestSupport {
 
Assert.assertTrue(starting.getTags().contains(ManagementContextInternal.EFFECTOR_TAG));
 }
 
+@Test
+public void testInvokeEffectorListWithEmpty() throws Exception{
+Entities.invokeEffectorList(app, 
ImmutableList.of(), 
Startable.STOP).get(Duration.THIRTY_SECONDS); 
+}
+
+@Test
+public void testInvokeEffectorList() throws Exception{
+List entities = Lists.newArrayList();
+for (int i = 0; i < 10; i++) {
+entities.add(app.addChild(EntitySpec.create(TestEntity.class)));
+}
+Entities.invokeEffectorList(app, entities, 
Startable.STOP).get(Duration.THIRTY_SECONDS);
+for (TestEntity 

[01/10] brooklyn-server git commit: Test the Clocker pattern (of LocationOwner and DynamicLocation)

2016-03-22 Thread grkvlt
Repository: brooklyn-server
Updated Branches:
  refs/heads/master 1e5f3b608 -> b8211ed17


Test the Clocker pattern (of LocationOwner and DynamicLocation)


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

Branch: refs/heads/master
Commit: 292b4cfb8d5b0bbff0f38eba5fc84a1fc9fe4eee
Parents: d059088
Author: Aled Sage 
Authored: Fri Mar 11 19:37:13 2016 +
Committer: Aled Sage 
Committed: Fri Mar 18 22:18:21 2016 +

--
 ...ClockerDynamicLocationPatternRebindTest.java | 113 +
 .../ClockerDynamicLocationPatternTest.java  |  96 
 .../dynamic/clocker/StubAttributes.java |  34 +++
 .../location/dynamic/clocker/StubContainer.java |  33 +++
 .../dynamic/clocker/StubContainerImpl.java  | 123 ++
 .../dynamic/clocker/StubContainerLocation.java  |  41 
 .../core/location/dynamic/clocker/StubHost.java |  38 +++
 .../location/dynamic/clocker/StubHostImpl.java  | 127 ++
 .../dynamic/clocker/StubHostLocation.java   | 109 
 .../dynamic/clocker/StubInfrastructure.java |  92 +++
 .../dynamic/clocker/StubInfrastructureImpl.java | 246 +++
 .../clocker/StubInfrastructureLocation.java |  83 +++
 .../location/dynamic/clocker/StubResolver.java  | 196 +++
 .../location/dynamic/clocker/StubUtils.java |  95 +++
 14 files changed, 1426 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/292b4cfb/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/ClockerDynamicLocationPatternRebindTest.java
--
diff --git 
a/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/ClockerDynamicLocationPatternRebindTest.java
 
b/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/ClockerDynamicLocationPatternRebindTest.java
new file mode 100644
index 000..361ee95
--- /dev/null
+++ 
b/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/ClockerDynamicLocationPatternRebindTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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 org.apache.brooklyn.core.location.dynamic.clocker;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.location.BasicLocationRegistry;
+import org.apache.brooklyn.core.location.Locations;
+import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
+import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+public class ClockerDynamicLocationPatternRebindTest extends 
RebindTestFixtureWithApp {
+
+@Override
+protected LocalManagementContext createOrigManagementContext() {
+LocalManagementContext result = super.createOrigManagementContext();
+StubResolver stubResolver = new StubResolver();
+
((BasicLocationRegistry)result.getLocationRegistry()).registerResolver(stubResolver);
+return result;
+}
+
+@Override
+protected LocalManagementContext createNewManagementContext(File 
mementoDir) {
+LocalManagementContext result = 
super.createNewManagementContext(mementoDir);
+StubResolver stubResolver = new StubResolver();

[03/10] brooklyn-server git commit: ServerPool: creates/registers single ServerPoolLocation

2016-03-22 Thread grkvlt
ServerPool: creates/registers single ServerPoolLocation


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

Branch: refs/heads/master
Commit: 9f1a120812895a604f42df29f8e16ec4d4a1ed30
Parents: 453183f
Author: Aled Sage 
Authored: Thu Mar 17 12:59:24 2016 +
Committer: Aled Sage 
Committed: Sat Mar 19 22:03:55 2016 +

--
 .../entity/machine/pool/ServerPool.java |  5 +-
 .../entity/machine/pool/ServerPoolImpl.java | 53 +---
 .../entity/machine/pool/ServerPoolLocation.java | 53 ++--
 .../pool/ServerPoolLocationResolver.java| 64 +--
 .../machine/pool/AbstractServerPoolTest.java| 23 ---
 .../pool/ServerPoolLocationResolverTest.java| 65 ++--
 .../entity/machine/pool/ServerPoolTest.java |  8 +--
 7 files changed, 148 insertions(+), 123 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9f1a1208/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPool.java
--
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPool.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPool.java
index 668a89e..4e42778 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPool.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPool.java
@@ -21,8 +21,6 @@ package org.apache.brooklyn.entity.machine.pool;
 import java.util.Collection;
 import java.util.Map;
 
-import com.google.common.annotations.Beta;
-
 import org.apache.brooklyn.api.catalog.Catalog;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntitySpec;
@@ -41,6 +39,8 @@ import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.group.DynamicCluster;
 import org.apache.brooklyn.entity.machine.MachineEntity;
 
+import com.google.common.annotations.Beta;
+
 /**
  * A preallocated server pool is an entity that other applications can deploy 
to.
  * Behaving as a cluster, the machines it creates for its members are reused.
@@ -70,6 +70,7 @@ import org.apache.brooklyn.entity.machine.MachineEntity;
 @ImplementedBy(ServerPoolImpl.class)
 @Beta
 public interface ServerPool extends DynamicCluster, 
LocationOwner {
+ConfigKey LOCATION_NAME_PREFIX = 
ConfigKeys.newConfigKeyWithDefault(LocationOwner.LOCATION_NAME_PREFIX, 
"server-pool");
 
 ConfigKey INITIAL_SIZE = 
ConfigKeys.newConfigKeyWithDefault(DynamicCluster.INITIAL_SIZE, 2);
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9f1a1208/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
--
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
index 513ee29..e7ad6db 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/machine/pool/ServerPoolImpl.java
@@ -25,6 +25,8 @@ import java.util.Map;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationDefinition;
+import org.apache.brooklyn.api.location.LocationRegistry;
+import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.location.MachineLocation;
 import org.apache.brooklyn.api.location.NoMachinesAvailableException;
 import org.apache.brooklyn.api.mgmt.LocationManager;
@@ -38,19 +40,19 @@ import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.trait.Startable;
-import org.apache.brooklyn.core.location.BasicLocationDefinition;
 import org.apache.brooklyn.core.location.Machines;
 import org.apache.brooklyn.core.location.dynamic.DynamicLocation;
 import org.apache.brooklyn.core.location.internal.LocationInternal;
 import org.apache.brooklyn.core.mgmt.internal.LocalLocationManager;
+import org.apache.brooklyn.core.location.dynamic.LocationOwner;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.entity.group.AbstractMembershipTrackingPolicy;
 import 

[02/10] brooklyn-server git commit: Clocker pattern: change how LocationRegistry used

2016-03-22 Thread grkvlt
Clocker pattern: change how LocationRegistry used

Adds DynamicLocation.register() and .deregister()


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

Branch: refs/heads/master
Commit: 453183f1d89336ea793aab2edbe05c3b4070104b
Parents: 292b4cf
Author: Aled Sage 
Authored: Fri Mar 11 20:50:45 2016 +
Committer: Aled Sage 
Committed: Sat Mar 19 21:35:41 2016 +

--
 .../core/location/dynamic/DynamicLocation.java  |  12 ++
 .../core/location/dynamic/LocationOwner.java|   4 -
 ...ClockerDynamicLocationPatternRebindTest.java |  35 -
 .../ClockerDynamicLocationPatternTest.java  |  22 ++-
 .../dynamic/clocker/StubContainerLocation.java  |  13 +-
 .../core/location/dynamic/clocker/StubHost.java |   4 +-
 .../location/dynamic/clocker/StubHostImpl.java  |  38 +++--
 .../dynamic/clocker/StubHostLocation.java   |  70 -
 .../dynamic/clocker/StubInfrastructure.java |   7 +-
 .../dynamic/clocker/StubInfrastructureImpl.java |  66 +++-
 .../clocker/StubInfrastructureLocation.java |  62 +++-
 .../location/dynamic/clocker/StubResolver.java  | 157 +++
 .../dynamic/clocker/StubResolverTest.java   |  82 ++
 13 files changed, 384 insertions(+), 188 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/453183f1/core/src/main/java/org/apache/brooklyn/core/location/dynamic/DynamicLocation.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/location/dynamic/DynamicLocation.java
 
b/core/src/main/java/org/apache/brooklyn/core/location/dynamic/DynamicLocation.java
index b04ebac..d961cdf 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/location/dynamic/DynamicLocation.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/location/dynamic/DynamicLocation.java
@@ -20,6 +20,8 @@ package org.apache.brooklyn.core.location.dynamic;
 
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.location.LocationDefinition;
+import org.apache.brooklyn.api.location.LocationRegistry;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
@@ -47,4 +49,14 @@ public interface DynamicLocation, L exten
 
 E getOwner();
 
+/**
+ * An opportunity to register this location (e.g. with the {@link 
LocationRegistry} or the 
+ * catalog, so that it will be persisted).
+ */
+LocationDefinition register();
+
+/**
+ * The complement of {@link #register()}, to deregister this location.
+ */
+void deregister();
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/453183f1/core/src/main/java/org/apache/brooklyn/core/location/dynamic/LocationOwner.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/location/dynamic/LocationOwner.java
 
b/core/src/main/java/org/apache/brooklyn/core/location/dynamic/LocationOwner.java
index 718b97e..2c5a66c 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/location/dynamic/LocationOwner.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/location/dynamic/LocationOwner.java
@@ -22,7 +22,6 @@ import java.util.Map;
 
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationDefinition;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
@@ -71,9 +70,6 @@ public interface LocationOwner, E ext
 AttributeSensor DYNAMIC_LOCATION_STATUS = 
Sensors.newBooleanSensor(
 "entity.dynamicLocation.status", "The status of the location owned 
by this entity");
 
-AttributeSensor LOCATION_DEFINITION = 
Sensors.newSensor(
-LocationDefinition.class, "entity.dynamicLocation.definition", "The 
location definition for the location owned by this entity");
-
 L getDynamicLocation();
 
 L createLocation(Map flags);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/453183f1/software/base/src/test/java/org/apache/brooklyn/core/location/dynamic/clocker/ClockerDynamicLocationPatternRebindTest.java
--
diff --git 

[08/10] brooklyn-server git commit: Fix XML serialiser for SpecConverter

2016-03-22 Thread grkvlt
Fix XML serialiser for SpecConverter

It was not thread-safe. The XmlMementoSerializer uses a single
instance of SpecConverter. If multiple threads tried to deserialise
different objects at the same time, they’d overwrite the “instance”
value and cause serious problems deserialising.

Now use thread-local storage for the “instance” cache.

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

Branch: refs/heads/master
Commit: b5dae5b7ad5b4d0919e00da1f02b5a54a1e4d3e1
Parents: 89b3a66
Author: Aled Sage 
Authored: Tue Mar 22 12:47:36 2016 +
Committer: Aled Sage 
Committed: Tue Mar 22 12:47:36 2016 +

--
 .../core/mgmt/persist/XmlMementoSerializer.java   | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b5dae5b7/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
--
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
 
b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
index 588f8fd..0df2340 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializer.java
@@ -393,6 +393,12 @@ public class XmlMementoSerializer extends 
XmlSerializer implements Memento
 }
 }
 
+// Would prefer this as a field of SpecConverter, but can't do that 
because the class is not static.
+// Must use thread-local storage because a single instance of the 
SpecConverter is used by this 
+// XmlMementoSerializer. In 
BrooklynMementoPersisterToObjectStore.visitMemento, it uses a thread-pool
+// for concurrently deserializing multiple objects.
+private static final ThreadLocal SpecConverterLocalInstance = new 
ThreadLocal();
+
 /** When reading/writing specs, it checks whether there is a catalog item 
id set and uses it to load */
 public class SpecConverter extends ReflectionConverter {
 SpecConverter() {
@@ -454,25 +460,25 @@ public class XmlMementoSerializer extends 
XmlSerializer implements Memento
 result.catalogItemId(catalogItemId);
 return result;
 } finally {
-instance = null;
+SpecConverterLocalInstance.remove();
 if (customLoaderSet) {
 popXstreamCustomClassLoader();
 }
 }
 }
 
-Object instance;
-
 @Override
 protected Object instantiateNewInstance(HierarchicalStreamReader 
reader, UnmarshallingContext context) {
 // the super calls getAttribute which requires that we have not 
yet done moveDown,
 // so we do this earlier and cache it for when we call 
super.unmarshal
+Object instance = SpecConverterLocalInstance.get();
 if (instance==null)
 throw new IllegalStateException("Instance should be created 
and cached");
 return instance;
 }
 protected void 
instantiateNewInstanceSettingCache(HierarchicalStreamReader reader, 
UnmarshallingContext context) {
-instance = super.instantiateNewInstance(reader, context);
+Object instance = super.instantiateNewInstance(reader, context);
+SpecConverterLocalInstance.set(instance);
 }
 }
 



[1/2] brooklyn-server git commit: NotUpDiagnostics: don’t collect if starting && !up

2016-03-22 Thread svet
Repository: brooklyn-server
Updated Branches:
  refs/heads/master 3767000c6 -> 1e5f3b608


NotUpDiagnostics: don’t collect if starting && !up

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

Branch: refs/heads/master
Commit: 13fe1c0dc828e342f6482442cdc3aef55d8df8e3
Parents: d059088
Author: Aled Sage 
Authored: Fri Mar 18 23:09:04 2016 +
Committer: Aled Sage 
Committed: Fri Mar 18 23:45:58 2016 +

--
 .../apache/brooklyn/entity/software/base/SoftwareProcessImpl.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/13fe1c0d/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
--
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
index ace4ebe..4bf6543 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcessImpl.java
@@ -172,7 +172,7 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
 Lifecycle state = entity.getAttribute(SERVICE_STATE_ACTUAL);
 if (up == null || up) {
 
entity.sensors().set(ServiceStateLogic.SERVICE_NOT_UP_DIAGNOSTICS, 
ImmutableMap.of());
-} else if (state == null || state == Lifecycle.CREATED) {
+} else if (state == null || state == Lifecycle.CREATED || state == 
Lifecycle.STARTING) {
 // not yet started; do nothing
 } else if (state == Lifecycle.STOPPING || state == 
Lifecycle.STOPPED || state == Lifecycle.DESTROYED) {
 // stopping/stopped, so expect not to be up; get rid of the 
diagnostics.