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,