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/22 12:10:34 UTC
git commit: Added logic to terminate fault handling logic if none of
the members could serve a given request
Updated Branches:
refs/heads/master a851484a4 -> 815e9b3e1
Added logic to terminate fault handling logic if none of the members could serve a given request
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/815e9b3e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/815e9b3e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/815e9b3e
Branch: refs/heads/master
Commit: 815e9b3e16c42af1ec61107b3f0957f0f1c9e238
Parents: a851484
Author: Imesh Gunaratne <im...@apache.org>
Authored: Fri Nov 22 16:40:15 2013 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Fri Nov 22 16:40:15 2013 +0530
----------------------------------------------------------------------
.../TenantAwareLoadBalanceEndpoint.java | 36 +++++++++++++-------
1 file changed, 24 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/815e9b3e/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
index e54fb60..f516a52 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/endpoint/TenantAwareLoadBalanceEndpoint.java
@@ -381,15 +381,16 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
EndpointReference to = getEndpointReferenceAfterURLRewrite(currentMember, transport, address, incomingPort);
synCtx.setTo(to);
- faultHandler.setTo(to);
- faultHandler.setCurrentMember(currentMember);
- synCtx.pushFaultHandler(faultHandler);
+ Endpoint endpoint = getEndpoint(to, currentMember, synCtx);
+
if (isFailover()) {
+ faultHandler.setTo(to);
+ faultHandler.setCurrentMember(currentMember);
+ faultHandler.setCurrentEp(endpoint);
+ synCtx.pushFaultHandler(faultHandler);
synCtx.getEnvelope().build();
}
- Endpoint endpoint = getEndpoint(to, currentMember, synCtx);
- faultHandler.setCurrentEp(endpoint);
if (isSessionAffinityBasedLB() && newSession) {
prepareEndPointSequence(synCtx, endpoint);
synCtx.setProperty(SynapseConstants.PROP_SAL_ENDPOINT_CURRENT_MEMBER, currentMember);
@@ -465,6 +466,11 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
private org.apache.axis2.clustering.Member currentMember;
private Endpoint currentEp;
private EndpointReference to;
+ private Map<String, Boolean> faultyMembers;
+
+ public TenantAwareLoadBalanceFaultHandler() {
+ faultyMembers = new HashMap<String, Boolean>();
+ }
@Override
public void setCurrentMember(org.apache.axis2.clustering.Member currentMember) {
@@ -483,7 +489,7 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
@Override
public void onFault(MessageContext synCtx) {
- //cleanup endpoint if exists
+ // Cleanup endpoint if exists
if (currentEp != null) {
currentEp.destroy();
}
@@ -491,17 +497,23 @@ public class TenantAwareLoadBalanceEndpoint extends org.apache.synapse.endpoints
return;
}
- Stack faultStack = synCtx.getFaultStack();
- if (faultStack != null && !faultStack.isEmpty()) {
- faultStack.pop(); // Remove the LoadbalanceFaultHandler
- }
+ // Add current member to faulty members
+ faultyMembers.put(currentMember.getHostName(), true);
currentMember = findNextMember(synCtx);
if (currentMember == null) {
String msg = String.format("No application members available to serve the request %s", synCtx.getTo().getAddress());
- log.error(msg);
- throw new SynapseException(msg);
+ if(log.isErrorEnabled()) {
+ log.error(msg);
+ }
+ throwSynapseException(synCtx, 404, msg);
}
+ if(faultyMembers.containsKey(currentMember.getHostName())) {
+ // This member has been identified as faulty previously. It implies that
+ // this request could not be served by any of the members in the cluster.
+ throwSynapseException(synCtx, 404, String.format("Requested resource could not be found"));
+ }
+
synCtx.setTo(to);
if (isSessionAffinityBasedLB()) {
//We are sending the this message on a new session,