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: 89b3a663902fb6ecdfe6666c641ce75ffca514e0
Parents: 3118f42
Author: Aled Sage <[email protected]>
Authored: Tue Mar 22 12:46:02 2016 +0000
Committer: Aled Sage <[email protected]>
Committed: Tue Mar 22 12:46:02 2016 +0000

----------------------------------------------------------------------
 .../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)

Reply via email to