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:46:10 UTC
[07/50] brooklyn-library git commit: AbstractController: use
config/sensors instead of fields
AbstractController: use config/sensors instead of fields
Will make it easier to serialize/deserialize if using standard
mechanism of getAttribute rather than duplicating the values in
fields.
Also, "fixes" makeUrl which was called from checkEntity. It therefore
overwrote the value of SPECIFIED_URL attribute each time. And tests
only worked because of the call to makeUrl inside checkEntity, which
was very misleading.
I'm not sure about the old comment in preStart:
previously we would attempt to infer values from a specified URL, but now we don't
as that specified URL might be for another machine with port-forwarding
I've changed it so we really do believe the SPECIFIED_URL for reporting the
protocol and specified_url attributes.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/4e9a81a1
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/4e9a81a1
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/4e9a81a1
Branch: refs/heads/0.4.0
Commit: 4e9a81a18f4cecd317fb0d5ba70242f55bcf5515
Parents: 71c8f49
Author: Aled Sage <al...@gmail.com>
Authored: Tue Sep 25 13:37:57 2012 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Sep 26 11:16:17 2012 +0100
----------------------------------------------------------------------
.../entity/proxy/AbstractController.java | 106 ++++++++++---------
.../entity/proxy/nginx/NginxController.groovy | 9 +-
2 files changed, 57 insertions(+), 58 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e9a81a1/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index eff7df1..520cc21 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -41,7 +41,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
/** sensor for port to forward to on target entities */
@SetFromFlag("portNumberSensor")
- public static final BasicConfigKey<AttributeSensor> PORT_NUMBER_SENSOR = new BasicConfigKey<AttributeSensor>(
+ public static final BasicAttributeSensorAndConfigKey<AttributeSensor> PORT_NUMBER_SENSOR = new BasicAttributeSensorAndConfigKey<AttributeSensor>(
AttributeSensor.class, "member.sensor.portNumber", "Port number sensor on members (defaults to http.port)", Attributes.HTTP_PORT);
@SetFromFlag("port")
@@ -73,14 +73,9 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
public static final MethodEffector<Void> RELOAD = new MethodEffector(AbstractController.class, "reload");
- protected String domain;
- protected Integer port;
- protected String protocol;
- protected String url;
- protected AttributeSensor<Integer> portNumber;
- protected boolean isActive = false;
- protected boolean updateNeeded = true;
protected Group serverPool;
+ protected boolean isActive;
+ protected boolean updateNeeded = true;
AbstractMembershipTrackingPolicy policy;
protected Set<String> addresses = new LinkedHashSet<String>();
@@ -137,47 +132,61 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
}
}
+ public boolean isActive() {
+ return isActive;
+ }
+
public String getDomain() {
- return domain;
+ return getAttribute(DOMAIN_NAME);
}
public Integer getPort() {
- return port;
+ return getAttribute(PROXY_HTTP_PORT);
}
public String getProtocol() {
- return protocol;
+ return getAttribute(PROTOCOL);
}
public String getUrl() {
- return url;
+ return getAttribute(SPECIFIED_URL);
+ }
+
+ public AttributeSensor getPortNumberSensor() {
+ return getAttribute(PORT_NUMBER_SENSOR);
}
@Description("Forces reload of the configuration")
public abstract void reload();
+
+ protected String inferProtocol(String url) {
+ if (url!=null && !url.startsWith("null:")) {
+ return url.substring(0, url.indexOf(':'));
+ } else {
+ return inferProtocol();
+ }
+ }
- protected void makeUrl() {
- if (url==null || url.contains("://"+ANONYMOUS+":")) {
- String hostname = domain;
- // use 'hostname' instead of domain if domain is anonymous
- if (hostname==null || hostname==ANONYMOUS) {
- hostname = getAttribute(HOSTNAME);
- if (hostname!=null) {
- domain = hostname;
- setConfigEvenIfOwned(DOMAIN_NAME, hostname);
- setAttribute(DOMAIN_NAME, hostname);
- } else {
- LOG.warn("Unable to determine domain/hostname for "+this);
- }
- }
- if (hostname==null) hostname = ANONYMOUS;
- if (protocol==null) {
- if (url!=null && !url.startsWith("null:")) protocol = url.substring(0, url.indexOf(':'));
- else protocol = getConfig(SSL_CONFIG)!=null ? "https" : "http";
+ protected String inferProtocol() {
+ return getConfig(SSL_CONFIG)!=null ? "https" : "http";
+ }
+
+ protected String inferHostname() {
+ String hostname = getDomain();
+ // use 'hostname' instead of domain if domain is anonymous
+ if (hostname==null || hostname.equals(ANONYMOUS)) {
+ hostname = getAttribute(HOSTNAME);
+ if (hostname == null) {
+ LOG.warn("Unable to determine domain/hostname for {}", this);
}
- url = protocol+"://"+hostname+":"+port+"/";
- setAttribute(SPECIFIED_URL, url);
}
+ if (hostname==null) hostname = ANONYMOUS;
+
+ return hostname;
+ }
+
+ protected String inferUrl() {
+ return getProtocol()+"://"+getDomain()+":"+getPort()+"/";
}
@Override
@@ -191,24 +200,24 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
super.preStart();
// use http port by default
- portNumber = checkNotNull(getConfig(PORT_NUMBER_SENSOR));
-
- port = getAttribute(PROXY_HTTP_PORT);
- Preconditions.checkNotNull(port, "Port must be set for controller");
+ checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
- protocol = getConfig(PROTOCOL);
- domain = getConfig(DOMAIN_NAME);
-
- if (!groovyTruth(getConfig(SPECIFIED_URL))) {
+ if (groovyTruth(getConfig(SPECIFIED_URL))) {
// previously we would attempt to infer values from a specified URL, but now we don't
// as that specified URL might be for another machine with port-forwarding
+ setAttribute(PROTOCOL, inferProtocol(getConfig(SPECIFIED_URL)));
+ setAttribute(HOSTNAME, inferHostname());
+ setAttribute(DOMAIN_NAME, getAttribute(HOSTNAME));
+ setAttribute(SPECIFIED_URL, getConfig(SPECIFIED_URL));
+
} else {
- makeUrl();
+ setAttribute(PROTOCOL, inferProtocol());
+ setAttribute(HOSTNAME, inferHostname());
+ setAttribute(DOMAIN_NAME, getAttribute(HOSTNAME));
+ setAttribute(SPECIFIED_URL, inferUrl());
}
- setAttribute(PROTOCOL, protocol);
- setAttribute(DOMAIN_NAME, domain);
- Preconditions.checkNotNull(domain, "Domain must be set for controller");
+ Preconditions.checkNotNull(getDomain(), "Domain must be set for controller");
}
public void checkEntity(Entity member) {
@@ -247,7 +256,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
MachineLocation machine = (MachineLocation) loc;
//use hostname as this is more portable (eg in amazon, ip doesn't resolve)
String ip = machine.getAddress().getHostName();
- Integer port = member.getAttribute(portNumber);
+ Integer port = member.getAttribute(getPortNumberSensor());
if (ip==null || port==null) {
LOG.warn("Missing ip/port for web controller {} target {}, skipping", this, member);
} else {
@@ -260,9 +269,6 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
}
LOG.info("Adding to {}, new member {} in locations {}", new Object[] {getDisplayName(), member.getDisplayName(), member.getLocations()});
- // TODO shouldn't need to do this here? (no harm though)
- makeUrl();
-
update();
targets.add(member);
}
@@ -274,7 +280,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
for (Location loc : member.getLocations()) {
MachineLocation machine = (MachineLocation) loc;
String ip = machine.getAddress().getHostAddress();
- int port = member.getAttribute(portNumber);
+ int port = member.getAttribute(getPortNumberSensor());
addresses.remove(ip+":"+port);
}
if (addresses==oldAddresses) {
@@ -304,7 +310,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
protected abstract void reconfigureService();
public void update() {
- if (!isActive) updateNeeded = true;
+ if (!isActive()) updateNeeded = true;
else {
updateNeeded = false;
LOG.debug("Updating {} in response to changes", this);
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e9a81a1/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
index 824fc34..7324bf6 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.groovy
@@ -23,7 +23,6 @@ import brooklyn.util.ResourceUtils
import brooklyn.util.flags.SetFromFlag
import brooklyn.util.internal.TimeExtras
-import com.google.common.base.Predicates
import com.google.common.collect.Iterables
import com.google.common.collect.LinkedHashMultimap
import com.google.common.collect.Multimap
@@ -107,8 +106,6 @@ public class NginxController extends AbstractController {
public void connectSensors() {
super.connectSensors();
- makeUrl();
-
sensorRegistry.register(new ConfigSensorAdapter());
HttpSensorAdapter http = sensorRegistry.register(
@@ -134,11 +131,6 @@ public class NginxController extends AbstractController {
setAttribute(SERVICE_UP, false);
}
- protected void makeUrl() {
- super.makeUrl();
- setAttribute(ROOT_URL, url);
- }
-
@Override
public Class getDriverInterface() {
return NginxDriver.class;
@@ -150,6 +142,7 @@ public class NginxController extends AbstractController {
protected void preStart() {
super.preStart();
+ setAttribute(ROOT_URL, getUrl());
}
protected void reconfigureService() {