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 2014/07/29 21:32:22 UTC

[27/31] git commit: avoid NPE on rebind when locations have been unmanaged

avoid NPE on rebind when locations have been unmanaged


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

Branch: refs/heads/master
Commit: 6b4b9e5d31281d76b1478926e195a556592796c8
Parents: 04a18c0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Jul 29 14:37:27 2014 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Jul 29 15:18:22 2014 -0400

----------------------------------------------------------------------
 .../FixedListMachineProvisioningLocation.java   | 25 +++++++++++++++-----
 1 file changed, 19 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6b4b9e5d/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java b/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
index 242319b..595ab8a 100644
--- a/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/FixedListMachineProvisioningLocation.java
@@ -28,6 +28,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import brooklyn.location.Location;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.MachineLocation;
@@ -35,6 +38,7 @@ import brooklyn.location.MachineProvisioningLocation;
 import brooklyn.location.NoMachinesAvailableException;
 import brooklyn.management.LocationManager;
 import brooklyn.util.collections.MutableMap;
+import brooklyn.util.collections.MutableSet;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.stream.Streams;
 import brooklyn.util.text.WildcardGlobs;
@@ -63,6 +67,8 @@ implements MachineProvisioningLocation<T>, Closeable {
     // and getMachines() returns the real sets risking 
     // ConcurrentModificationException in the caller if it iterates over them etc.
     
+    private static final Logger log = LoggerFactory.getLogger(FixedListMachineProvisioningLocation.class);
+    
     private final Object lock = new Object();
     
     @SetFromFlag
@@ -89,14 +95,21 @@ implements MachineProvisioningLocation<T>, Closeable {
     public void init() {
         super.init();
         
-        for (MachineLocation location: machines) {
-            // FIXME Bad casting
-            Location machine = (Location) location;
-            Location parent = machine.getParent();
-            if (parent == null) {
-                addChild(machine);
+        Set<T> machinesCopy = MutableSet.of();
+        for (T location: machines) {
+            if (location==null) {
+                log.warn(""+this+" initialized with null location, removing (may be due to rebind with reference to an unmanaged location)");
+            } else {
+                Location parent = location.getParent();
+                if (parent == null) {
+                    addChild(location);
+                }
+                machinesCopy.add(location);
             }
         }
+        if (!machinesCopy.equals(machines)) {
+            machines = machinesCopy;
+        }
     }
     
     @Override