Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 6212d198a -> 5d8ae8f44


Make SoftwareProcessImpl *much* fussier about which config it implicitly adds 
to the list of required open ports.

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

Branch: refs/heads/master
Commit: 21e554096b2da926f66799851449733743c0d4dd
Parents: 6212d19
Author: Alasdair Hodge <[email protected]>
Authored: Fri Aug 28 18:24:15 2015 +0100
Committer: Alasdair Hodge <[email protected]>
Committed: Fri Aug 28 18:24:15 2015 +0100

----------------------------------------------------------------------
 .../software/base/SoftwareProcessImpl.java      | 31 ++++++++------------
 .../base/SoftwareProcessEntityTest.java         | 19 ++++++++++++
 2 files changed, 31 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/21e55409/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 a777dcd..54b7c47 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
@@ -47,15 +47,13 @@ import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
 import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
-import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle.Transition;
+import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
 import 
org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic.ServiceNotUpLogic;
 import org.apache.brooklyn.core.location.LocationConfigKeys;
 import org.apache.brooklyn.core.location.cloud.CloudLocationConfig;
 import org.apache.brooklyn.feed.function.FunctionFeed;
 import org.apache.brooklyn.feed.function.FunctionPollConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
@@ -68,6 +66,8 @@ import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.time.CountdownTimer;
 import org.apache.brooklyn.util.time.Duration;
 import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Functions;
 import com.google.common.collect.ImmutableList;
@@ -487,6 +487,7 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
      * for each {@link 
org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey} config key 
{@link PortRange}
      * plus any ports defined with a config keys ending in {@code .port}.
      */
+    @SuppressWarnings("serial")
     protected Collection<Integer> getRequiredOpenPorts() {
         Set<Integer> ports = 
MutableSet.copyOf(getConfig(REQUIRED_OPEN_LOGIN_PORTS));
         Map<ConfigKey<?>, ?> allConfig = 
config().getBag().getAllConfigAsConfigKeyMap();
@@ -498,24 +499,16 @@ public abstract class SoftwareProcessImpl extends 
AbstractEntity implements Soft
            firewall will open the initial port instead. Mostly a problem for 
SameServerEntity, localhost location.
          */
         for (ConfigKey<?> k: configKeys) {
-            Object value;
             if (PortRange.class.isAssignableFrom(k.getType()) || 
k.getName().matches(".*\\.port")) {
-                value = config().get(k);
-            } else {
-                // config().get() will cause this to block until all config 
has been resolved
-                // using config().getRaw(k) means that we won't be able to use 
e.g. 'http.port: $brooklyn:component("x").attributeWhenReady("foo")'
-                // but that's unlikely to be used
-                Maybe<Object> maybeValue = config().getRaw(k);
-                value = maybeValue.isPresent() ? maybeValue.get() : null;
-            }
-
-            Maybe<PortRange> maybePortRange = TypeCoercions.tryCoerce(value, 
new TypeToken<PortRange>() {});
-
-            if (maybePortRange.isPresentAndNonNull()) {
-                PortRange p = maybePortRange.get();
-                if (p != null && !p.isEmpty()) ports.add(p.iterator().next());
+                Object value = config().get(k);
+                Maybe<PortRange> maybePortRange = 
TypeCoercions.tryCoerce(value, new TypeToken<PortRange>() {});
+                if (maybePortRange.isPresentAndNonNull()) {
+                    PortRange p = maybePortRange.get();
+                    if (p != null && !p.isEmpty())
+                        ports.add(p.iterator().next());
+                }
             }
-        }        
+        }
         
         log.debug("getRequiredOpenPorts detected default {} for {}", ports, 
this);
         return ports;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/21e55409/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
 
b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
index eb77899..0b71a5a 100644
--- 
a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
+++ 
b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessEntityTest.java
@@ -53,6 +53,7 @@ import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
 import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.location.Locations;
+import org.apache.brooklyn.core.location.PortRanges;
 import org.apache.brooklyn.core.location.SimulatedLocation;
 import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
@@ -134,6 +135,24 @@ public class SoftwareProcessEntityTest extends 
BrooklynAppUnitTestSupport {
     }
 
     @Test
+    public void testRequiredPortsFromConfig() throws Exception {
+        // getRequiredOpenPorts() should only consider numeric and string 
config whose names end in '.port'
+        MyService entity = 
app.createAndManageChild(EntitySpec.create(MyService.class)
+            .configure("foo.number.port", 1111)
+            .configure("foo.string.port", "2222")
+            .configure("foo.number.somethingElse", 3333)
+            .configure("foo.string.somethingElse", "4444")
+        );
+        entity.start(ImmutableList.of(loc));
+        
+        Collection<Integer> requiredPorts = entity.getRequiredOpenPorts();
+        assertTrue(requiredPorts.contains(1111));
+        assertTrue(requiredPorts.contains(2222));
+        assertFalse(requiredPorts.contains(3333));
+        assertFalse(requiredPorts.contains(4444));
+    }
+
+    @Test
     public void testProcessTemplateWithExtraSubstitutions() throws Exception {
         MyService entity = 
app.createAndManageChild(EntitySpec.create(MyService.class));
         entity.start(ImmutableList.of(loc));

Reply via email to