[Carbon-commits] [Carbon] svn commit r113738 - branches/carbon/3.2.0/dependencies/synapse/2.1.0-wso2v4/modules/core/src/main/java/org/apache/synapse/endpoints
hiranya at wso2.com
hiranya at wso2.com
Wed Oct 12 03:20:11 EDT 2011
Author: hiranya
Date: Wed Oct 12 00:20:11 2011
New Revision: 113738
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=113738
Log:
Supporting LB on multiple HTTP ports on the same server
Modified:
branches/carbon/3.2.0/dependencies/synapse/2.1.0-wso2v4/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java
Modified: branches/carbon/3.2.0/dependencies/synapse/2.1.0-wso2v4/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java
URL: http://wso2.org/svn/browse/wso2/branches/carbon/3.2.0/dependencies/synapse/2.1.0-wso2v4/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java?rev=113738&r1=113737&r2=113738&view=diff
==============================================================================
--- branches/carbon/3.2.0/dependencies/synapse/2.1.0-wso2v4/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java (original)
+++ branches/carbon/3.2.0/dependencies/synapse/2.1.0-wso2v4/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java Wed Oct 12 00:20:11 2011
@@ -40,12 +40,7 @@
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
/**
* Represents a dynamic load balance endpoint. The application membership is not static,
@@ -55,6 +50,8 @@
private static final Log log = LogFactory.getLog(DynamicLoadbalanceEndpoint.class);
+ private static final String PORT_MAPPING_PREFIX = "port.mapping.";
+
/**
* Flag to enable session affinity based load balancing.
*/
@@ -182,8 +179,7 @@
Object cookieObj = headerMap.get(key);
if (cookieObj instanceof String) {
- String cookie = (String) cookieObj;
- return cookie;
+ return (String) cookieObj;
} else {
if (log.isDebugEnabled()) {
log.debug("Couldn't find the " + key + " header to find the session");
@@ -216,7 +212,7 @@
// algorithmContext.setContextID(name);
}
- public Dispatcher getDispatcher() {
+ public Dispatcher getDispatcher() {
return dispatcher;
}
@@ -241,9 +237,9 @@
}
protected void sendToApplicationMember(MessageContext synCtx,
- Member currentMember,
- DynamicLoadbalanceFaultHandler faultHandler,
- boolean newSession) {
+ Member currentMember,
+ DynamicLoadbalanceFaultHandler faultHandler,
+ boolean newSession) {
//Rewriting the URL
org.apache.axis2.context.MessageContext axis2MsgCtx =
((Axis2MessageContext) synCtx).getAxis2MessageContext();
@@ -256,8 +252,9 @@
String transport = axis2MsgCtx.getTransportIn().getName();
String address = synCtx.getTo().getAddress();
+ int incomingPort = extractPort(synCtx, transport);
EndpointReference to = getEndpointReferenceAfterURLRewrite(currentMember,
- transport, address);
+ transport, address, incomingPort);
synCtx.setTo(to);
faultHandler.setTo(to);
@@ -282,7 +279,7 @@
Map<String, String> memberHosts;
if ((memberHosts = (Map<String, String>) currentMember.getProperties().get(HttpSessionDispatcher.HOSTS)) == null) {
currentMember.getProperties().put(HttpSessionDispatcher.HOSTS,
- memberHosts = new HashMap<String, String>());
+ memberHosts = new HashMap<String, String>());
}
memberHosts.put(extractHost(synCtx), "true");
@@ -330,9 +327,11 @@
private EndpointReference getEndpointReferenceAfterURLRewrite(Member currentMember,
String transport,
- String address) {
- // URL rewrite
- if (transport.equals("http") || transport.equals("https")) {
+ String address,
+ int incomingPort) {
+
+ // URL Rewrite
+ if ("http".equals(transport) || "https".equals(transport)) {
if (address.startsWith("http://") || address.startsWith("https://")) {
try {
address = new URL(address).getPath();
@@ -343,9 +342,19 @@
}
}
+ int port;
+ Properties memberProperties = currentMember.getProperties();
+ String mappedPort = memberProperties.getProperty(PORT_MAPPING_PREFIX + incomingPort);
+ if (mappedPort != null) {
+ port = Integer.parseInt(mappedPort);
+ } else if ("http".equals(transport)) {
+ port = currentMember.getHttpPort();
+ } else {
+ port = currentMember.getHttpsPort();
+ }
+
return new EndpointReference(transport + "://" + currentMember.getHostName() +
- ":" + ("http".equals(transport) ? currentMember.getHttpPort() :
- currentMember.getHttpsPort()) + address);
+ ":" + port + address);
} else {
String msg = "Cannot load balance for non-HTTP/S transport " + transport;
log.error(msg);
@@ -364,7 +373,7 @@
AddressEndpoint endpoint = new AddressEndpoint();
endpoint.setEnableMBeanStats(false);
endpoint.setName("DLB:" + member.getHostName() +
- ":" + member.getPort() + ":" + UUID.randomUUID());
+ ":" + member.getPort() + ":" + UUID.randomUUID());
EndpointDefinition definition = new EndpointDefinition();
definition.setSuspendMaximumDuration(10000);
definition.setReplicationDisabled(true);
@@ -378,20 +387,44 @@
}
private String extractHost(MessageContext synCtx) {
- org.apache.axis2.context.MessageContext msgCtx =
- ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+ org.apache.axis2.context.MessageContext msgCtx =
+ ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+
+ Map headerMap = (Map) msgCtx.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+ String hostName = null;
+ if (headerMap != null) {
+ Object hostObj = headerMap.get(HTTP.TARGET_HOST);
+ hostName = (String) hostObj;
+ if (hostName.contains(":")) {
+ hostName = hostName.substring(0, hostName.indexOf(":"));
+ }
+ }
+ return hostName;
+ }
+
+ private int extractPort(MessageContext synCtx, String transport) {
+ org.apache.axis2.context.MessageContext msgCtx =
+ ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+
+ Map headerMap = (Map) msgCtx.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+ int port = -1;
+ if (headerMap != null) {
+ String hostHeader = (String) headerMap.get(HTTP.TARGET_HOST);
+ int index = hostHeader.indexOf(':');
+ if (index != -1) {
+ port = Integer.parseInt(hostHeader.trim().substring(index + 1));
+ } else {
+ if ("http".equals(transport)) {
+ port = 80;
+ } else if ("https".equals(transport)) {
+ port = 443;
+ }
+ }
+ }
+ return port;
+ }
+
- Map headerMap = (Map) msgCtx.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
- String hostName = null;
- if (headerMap != null) {
- Object hostObj = headerMap.get(HTTP.TARGET_HOST);
- hostName = (String) hostObj;
- if (hostName.contains(":")) {
- hostName = hostName.substring(0, hostName.indexOf(":"));
- }
- }
- return hostName;
- }
/**
* This FaultHandler will try to resend the message to another member if an error occurs
More information about the Carbon-commits
mailing list