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));