You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2013/11/01 07:38:43 UTC

git commit: Improved error messages returned to client if no target host found or no active application instances found

Updated Branches:
  refs/heads/master 41bf53777 -> 37eb28ed9


Improved error messages returned to client if no target host found or no active application instances found


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/37eb28ed
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/37eb28ed
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/37eb28ed

Branch: refs/heads/master
Commit: 37eb28ed9f3eedef540cc35caf39edae9cfb663f
Parents: 41bf537
Author: Imesh Gunaratne <im...@apache.org>
Authored: Fri Nov 1 12:08:31 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Fri Nov 1 12:08:31 2013 +0530

----------------------------------------------------------------------
 .../stratos/lb/endpoint/RequestDelegator.java   |  4 +++
 .../TenantAwareLoadBalanceEndpoint.java         | 19 ++++++++++--
 .../distribution/src/main/conf/log4j.properties |  3 +-
 .../synapse-configs/default/sequences/fault.xml | 32 +++++++-------------
 4 files changed, 33 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/37eb28ed/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/RequestDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/RequestDelegator.java b/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/RequestDelegator.java
index dda1cd6..951d8f9 100644
--- a/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/RequestDelegator.java
+++ b/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/RequestDelegator.java
@@ -105,4 +105,8 @@ public class RequestDelegator {
         }
         return null;
     }
+
+    public boolean isTargetHostValid(String targetHost) {
+        return (findCluster(targetHost) != null);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/37eb28ed/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/endpoint/TenantAwareLoadBalanceEndpoint.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/endpoint/TenantAwareLoadBalanceEndpoint.java b/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/endpoint/TenantAwareLoadBalanceEndpoint.java
index 4a84ff8..3cd3d1b 100644
--- a/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/endpoint/TenantAwareLoadBalanceEndpoint.java
+++ b/components/org.apache.stratos.lb.endpoint/src/main/java/org/apache/stratos/lb/endpoint/endpoint/TenantAwareLoadBalanceEndpoint.java
@@ -118,11 +118,17 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
                 // Send request to member
                 sendToApplicationMember(synCtx, axis2Member, faultHandler, true);
             } else {
-                throw new SynapseException(String.format("No application members available to serve the request %s", synCtx.getTo().getAddress()));
+                throwSynapseException(synCtx, 404, "Active application instances not found");
             }
         }
     }
 
+    private void throwSynapseException(MessageContext synCtx, int errorCode, String errorMessage) {
+        synCtx.setProperty(SynapseConstants.ERROR_CODE, errorCode);
+        synCtx.setProperty(SynapseConstants.ERROR_MESSAGE, errorMessage);
+        throw new SynapseException(errorMessage);
+    }
+
     /**
      * Setup load balancer message context properties to be used by the out block of the main sequence.
      * These values will be used to update the Location value in the response header.
@@ -180,6 +186,9 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
 
     private org.apache.axis2.clustering.Member findNextMember(MessageContext synCtx) {
         String targetHost = extractTargetHost(synCtx);
+        if(!requestDelegator.isTargetHostValid(targetHost)) {
+            throwSynapseException(synCtx, 404, String.format("Unknown host name %s", targetHost));
+        }
         Member member = requestDelegator.findNextMember(targetHost);
         if (member == null)
             return null;
@@ -187,8 +196,12 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
         // Create Axi2 member object
         String transport = extractTransport(synCtx);
         Port transportPort = member.getPort(transport);
-        if (transportPort == null)
-            throw new RuntimeException(String.format("Port not found for transport %s in member %s", transport, member.getMemberId()));
+        if (transportPort == null) {
+            if(log.isErrorEnabled()) {
+                log.error(String.format("Port not found for transport %s in member %s", transport, member.getMemberId()));
+            }
+            throwSynapseException(synCtx, 500, "Internal server error");
+        }
 
         int memberPort = transportPort.getValue();
         org.apache.axis2.clustering.Member axis2Member = new org.apache.axis2.clustering.Member(member.getMemberIp(), memberPort);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/37eb28ed/products/elb/modules/distribution/src/main/conf/log4j.properties
----------------------------------------------------------------------
diff --git a/products/elb/modules/distribution/src/main/conf/log4j.properties b/products/elb/modules/distribution/src/main/conf/log4j.properties
index bf26023..649bb4c 100644
--- a/products/elb/modules/distribution/src/main/conf/log4j.properties
+++ b/products/elb/modules/distribution/src/main/conf/log4j.properties
@@ -48,7 +48,8 @@ log4j.logger.com.atomikos=INFO,ATOMIKOS
 log4j.logger.org.quartz=WARN
 log4j.logger.org.wso2=INFO
 log4j.logger.org.wso2.carbon=INFO
-log4j.logger.org.apache.stratos=INFO
+log4j.logger.org.apache.stratos.lb.endpoint=INFO
+log4j.logger.org.apache.stratos.messaging=INFO
 
 log4j.logger.org.apache.catalina=WARN
 log4j.logger.org.apache.synapse.endpoints.EndpointContext=ERROR

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/37eb28ed/products/elb/modules/distribution/src/main/conf/synapse-configs/default/sequences/fault.xml
----------------------------------------------------------------------
diff --git a/products/elb/modules/distribution/src/main/conf/synapse-configs/default/sequences/fault.xml b/products/elb/modules/distribution/src/main/conf/synapse-configs/default/sequences/fault.xml
index 9d2d8f7..91ec170 100644
--- a/products/elb/modules/distribution/src/main/conf/synapse-configs/default/sequences/fault.xml
+++ b/products/elb/modules/distribution/src/main/conf/synapse-configs/default/sequences/fault.xml
@@ -31,25 +31,11 @@
     <!-- Drops the messages by default if there is a fault -->
     <script language="js"><![CDATA[
         mc.setPayloadXML(
-           <{mc.getProperty("SERVICENAME")}Response xmlns="org.wso2.gateway">
-            <Timestamp>{new Date()}</Timestamp>
-            <Ack>Failure</Ack>
-            <Errors>
-             <ShortMessage>Gateway Error</ShortMessage>
-             <LongMessage>{mc.getProperty("ERROR_MESSAGE")}</LongMessage>
-             <ErrorCode>500</ErrorCode>
-             <SeverityCode>Error</SeverityCode>
-             <ErrorClassification>RequestError</ErrorClassification>
-            </Errors>
-            <ServiceName>{mc.getProperty("SERVICENAME")}</ServiceName>
-            <ResponseCode>{mc.getProperty("HTTP_SC")}</ResponseCode>
-            <ContentType>{mc.getProperty("Content-Type")}</ContentType>
-            <Version>1.5.1</Version>
-           </{mc.getProperty("SERVICENAME")}Response>
+             <body>{mc.getProperty("ERROR_MESSAGE")}</body>
         );
       ]]></script>
     <switch source="get-property('ERROR_CODE')">
-        <case regex="101504">   <!-- TIMEOUT ERROR -->
+        <case regex="101504">
             <property name="HTTP_SC" value="504" scope="axis2"/>
             <sequence key="seq_timeout"/>
         </case>
@@ -61,16 +47,20 @@
             <property name="HTTP_SC" value="503" scope="axis2"/>
             <sequence key="seq_endpoint_down"/>
         </case>
+        <case regex="404">
+            <property name="HTTP_SC" value="404" scope="axis2"/>
+        </case>
         <default>
             <property name="HTTP_SC" value="500" scope="axis2"/>
         </default>
     </switch>
+
     <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
     <header name="To" action="remove"/>
-    <property name="RESPONSE" value="true"/>
-    <property name="messageType" value="text/xml" scope="axis2"/>
-    <property name="ContentType" value="text/xml" scope="axis2"/>
+    <property name="RESPONSE" value="true" scope="default" type="STRING"/>
+    <property name="messageType" value="text/html" scope="axis2"/>
+    <property name="contentType" value="text/html" scope="axis2"/>
 
-    <send/>
+    <send />
 
-</sequence>
+</sequence>
\ No newline at end of file