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:20 UTC

[17/50] brooklyn-library git commit: code review cleanup of Controller so that domain=null means serve all domains

code review cleanup of Controller so that domain=null means serve all domains


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/4e8721cc
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/4e8721cc
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/4e8721cc

Branch: refs/heads/0.4.0
Commit: 4e8721cc17ea215eed68bdaffbed40212f17f813
Parents: 8830359
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 28 13:39:50 2012 -0400
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 28 13:39:50 2012 -0400

----------------------------------------------------------------------
 .../entity/proxy/AbstractController.java        | 12 ++++--
 .../entity/proxy/nginx/NginxController.groovy   |  9 +---
 .../proxy/nginx/NginxIntegrationTest.groovy     | 43 ++++++++++++++++++++
 3 files changed, 54 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e8721cc/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 4b85c2c..d1e5de3 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -61,7 +61,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
     
     @SetFromFlag("domain")
     public static final BasicAttributeSensorAndConfigKey<String> DOMAIN_NAME = new BasicAttributeSensorAndConfigKey<String>(
-            String.class, "proxy.domainName", "Domain name that this controller responds to", null);
+            String.class, "proxy.domainName", "Domain name that this controller responds to, or null if it responds to all domains", null);
         
     @SetFromFlag("ssl")
     public static final BasicConfigKey<ProxySslConfig> SSL_CONFIG = 
@@ -153,6 +153,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getAttribute(PROTOCOL);
     }
 
+    /** returns primary domain this controller responds to, or null if it responds to all domains */
     public String getDomain() {
         return getAttribute(DOMAIN_NAME);
     }
@@ -161,6 +162,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getAttribute(PROXY_HTTP_PORT);
     }
 
+    /** primary URL this controller serves, if one can / has been inferred */
     public String getUrl() {
         return getAttribute(ROOT_URL);
     }
@@ -176,9 +178,12 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         return getConfig(SSL_CONFIG)!=null ? "https" : "http";
     }
     
+    /** returns URL, if it can be inferred; null otherwise */
     protected String inferUrl() {
         String protocol = checkNotNull(getProtocol(), "protocol must not be null");
-        String domain = checkNotNull(getDomain(), "domain must not be null");
+        String domain = getDomain();
+        if (domain==null) domain = getAttribute(HOSTNAME);
+        if (domain==null) return null;
         Integer port = checkNotNull(getPort(), "port must not be null");
         return protocol+"://"+domain+":"+port+"/";
     }
@@ -195,7 +200,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         super.preStart();
         
         setAttribute(PROTOCOL, inferProtocol());
-        setAttribute(DOMAIN_NAME, elvis(getConfig(DOMAIN_NAME), getAttribute(HOSTNAME)));
+        setAttribute(DOMAIN_NAME);
         setAttribute(ROOT_URL, inferUrl());
         
         checkNotNull(getPortNumberSensor(), "port number sensor must not be null");
@@ -206,6 +211,7 @@ public abstract class AbstractController extends SoftwareProcessEntity implement
         super.postStart();
         LOG.info("Adding policy {} to {} on AbstractController.start", serverPoolMemberTrackerPolicy, this);
         addPolicy(serverPoolMemberTrackerPolicy);
+        if (getUrl()==null) setAttribute(ROOT_URL, inferUrl());
         reset();
         isActive = true;
         update();

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e8721cc/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 d82c7c1..2e32eef 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
@@ -203,7 +203,7 @@ public class NginxController extends AbstractController {
         
         // If no servers, then defaults to returning 404
         // TODO Give nicer page back 
-        if (!isExclusive()) {
+        if (getDomain()!=null || serverPoolAddresses==null || serverPoolAddresses.isEmpty()) {
             config.append("  server {\n");
             config.append("    listen "+getPort()+";\n")
             config.append("    return 404;\n")
@@ -222,7 +222,7 @@ public class NginxController extends AbstractController {
             config.append("  }\n")
             config.append("  server {\n");
             config.append("    listen "+getPort()+";\n")
-            if (!isExclusive())
+            if (getDomain()!=null)
                 config.append("    server_name "+getDomain()+";\n")
             config.append("    location / {\n");
             config.append("      proxy_pass "+(globalSslConfig && globalSslConfig.targetIsSsl ? "https" : "http")+"://"+getId()+";\n");
@@ -364,9 +364,4 @@ public class NginxController extends AbstractController {
         }
     }
 
-    /** true iff this nginx server is routing for exactly one domain with no mappings, with downstream servers; 
-     * in such cases, forward all inbound traffic */    
-    protected boolean isExclusive() {
-        return serverPoolAddresses && !findUrlMappings();
-    }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/4e8721cc/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
index 5dd7eda..e2a1a44 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxIntegrationTest.groovy
@@ -110,6 +110,49 @@ public class NginxIntegrationTest {
         }
     }
     
+    /**
+     * Test that the Nginx proxy works, serving all domains, if no domain is set
+     */
+    @Test(groups = "Integration")
+    public void testDomainless() {
+        def template = { Map properties -> new JBoss7Server(properties) }
+        URL war = getClass().getClassLoader().getResource("hello-world.war")
+        Preconditions.checkState war != null, "Unable to locate resource $war"
+        
+        serverPool = new DynamicCluster(owner:app, factory:template, initialSize:1)
+        serverPool.setConfig(JavaWebAppService.ROOT_WAR, war.path)
+        
+        nginx = new NginxController([
+                "owner" : app,
+                "serverPool" : serverPool,
+                "portNumberSensor" : WebAppService.HTTP_PORT,
+            ])
+        
+        app.start([ new LocalhostMachineProvisioningLocation() ])
+        
+        // App-servers and nginx has started
+        assertAttributeEventually(serverPool, SoftwareProcessEntity.SERVICE_UP, true);
+        serverPool.members.each {
+            assertAttributeEventually(it, SoftwareProcessEntity.SERVICE_UP, true);
+        }
+        assertAttributeEventually(nginx, SoftwareProcessEntity.SERVICE_UP, true);
+
+        // URLs reachable
+        assertUrlStatusCodeEventually(nginx.getAttribute(NginxController.ROOT_URL), 200);
+        serverPool.members.each {
+            assertUrlStatusCodeEventually(it.getAttribute(WebAppService.ROOT_URL), 200);
+        }
+
+        app.stop();
+
+        // Services have stopped
+        assertFalse(nginx.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        assertFalse(serverPool.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        serverPool.members.each {
+            assertFalse(it.getAttribute(SoftwareProcessEntity.SERVICE_UP));
+        }
+    }
+    
     @Test(groups = "Integration")
     public void testTwoNginxesGetDifferentPorts() {
         def serverFactory = { throw new UnsupportedOperationException(); }