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