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 2016/02/01 18:50:46 UTC

[30/50] [abbrv] brooklyn-server git commit: Make SoftwareProcessImpl *much* fussier about which config it implicitly adds to the list of required open ports.

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/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/17a57500
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/17a57500
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/17a57500

Branch: refs/heads/0.8.0-incubating
Commit: 17a57500e4c5d29824741a8ec40148d2d219eeac
Parents: ae51aac
Author: Alasdair Hodge <gi...@alasdairhodge.co.uk>
Authored: Fri Aug 28 18:24:15 2015 +0100
Committer: Alasdair Hodge <gi...@alasdairhodge.co.uk>
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/brooklyn-server/blob/17a57500/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/brooklyn-server/blob/17a57500/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));