Bug 50503

Summary: Engine level Clustering does not work correctly if the web application has a version.
Product: Tomcat 7 Reporter: Keiichi Fujino <kfujino>
Component: ClusterAssignee: Tomcat Developers Mailing List <dev>
Severity: normal    
Priority: P2    
Version: trunk   
Target Milestone: ---   
Hardware: All   
OS: All   
Attachments: I made a patch.

Description Keiichi Fujino 2010-12-21 01:42:21 UTC
In Engine level clustering, the name of the cluster manager is  "HostName#contextName". 
SimpleTcpCluster#getManagerName(String, Manager) is as follows. 
public String getManagerName(String name, Manager manager) {
    String clusterName = name ;
    if ( clusterName == null ) clusterName = manager.getContainer().getName();
    if(getContainer() instanceof Engine) {
        Container context = manager.getContainer() ;
        if(context != null && context instanceof Context) {
            Container host = ((Context)context).getParent();
            if(host != null && host instanceof Host && clusterName!=null && !(clusterName.indexOf("#")>=0))
                clusterName = host.getName() +"#" + clusterName ;
    return clusterName;

In this method, clusterName.indexOf("#") >= 0 is checked. 

Because the context name becomes contextName##version if the web application has a version, 
the name of the cluster manager doesn't become a format of "HostName#contextName". 
As a result, Engine level Clustering doesn't work correctly. 

Best regards.
Comment 1 Keiichi Fujino 2010-12-21 01:44:09 UTC
Created attachment 26431 [details]
I made a patch.

I changed "clusterName.indexOf("#") >= 0" into "clusterName.startsWith(host.getName() +"#")".
Comment 2 Keiichi Fujino 2010-12-21 01:58:22 UTC
Fixed in 7.0.x and will be in 7.0.6 onwards.