[jboss-cvs] JBossAS SVN: r76218 - in trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp: impl and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 25 00:40:04 EDT 2008


Author: bstansberry at jboss.com
Date: 2008-07-25 00:40:03 -0400 (Fri, 25 Jul 2008)
New Revision: 76218

Modified:
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/MCMPUtils.java
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/impl/DefaultMCMPHandler.java
Log:
[JBAS-5659] Use INFO to reestablish ERROR state proxy; don't expose internal, non-serializable Proxy class via getProxyStates

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/MCMPUtils.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/MCMPUtils.java	2008-07-25 04:38:19 UTC (rev 76217)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/MCMPUtils.java	2008-07-25 04:40:03 UTC (rev 76218)
@@ -24,6 +24,7 @@
 
 import java.net.InetAddress;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -47,6 +48,8 @@
  */
 public class MCMPUtils
 {
+   private static final MCMPRequest INFO = new MCMPRequest(MCMPRequestType.INFO, false, new HashMap<String, String>());
+   
    public static MCMPRequest createConfigRequest(Engine engine, NodeConfiguration nodeConfig, BalancerConfiguration balancerConfig)
    {
         Connector connector = Utils.findProxyConnector(engine.getService().findConnectors());
@@ -203,6 +206,11 @@
        return requests;        
    }
    
+   public static MCMPRequest getInfoRequest()
+   {
+      return INFO;
+   }
+   
    private static Map<String, String> createEngineParameters(Engine engine)
    {
       Map<String, String> parameters = new HashMap<String, String>();

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/impl/DefaultMCMPHandler.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/impl/DefaultMCMPHandler.java	2008-07-25 04:38:19 UTC (rev 76217)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/modcluster/mcmp/impl/DefaultMCMPHandler.java	2008-07-25 04:40:03 UTC (rev 76218)
@@ -27,12 +27,12 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
+import java.io.Serializable;
 import java.net.InetAddress;
 import java.net.Socket;
 import java.net.UnknownHostException;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -41,6 +41,8 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 
+import net.jcip.annotations.Immutable;
+
 import org.apache.catalina.util.StringManager;
 import org.apache.tomcat.util.buf.CharChunk;
 import org.apache.tomcat.util.buf.UEncoder;
@@ -56,6 +58,7 @@
 import org.jboss.web.tomcat.service.modcluster.mcmp.MCMPServerState;
 import org.jboss.web.tomcat.service.modcluster.mcmp.MCMPUtils;
 import org.jboss.web.tomcat.service.modcluster.mcmp.ResetRequestSource;
+import org.jboss.web.tomcat.service.modcluster.mcmp.MCMPServerState.State;
 
 /**
  * Default implementation of {@link MCMPHandler}.
@@ -339,7 +342,7 @@
       Set<MCMPServerState> result = new HashSet<MCMPServerState>(local.length);
       for (Proxy proxy : local)
       {
-         result.add(proxy);
+         result.add(new MCMPServerStateImpl(proxy));
       }
       return result;
    }
@@ -350,7 +353,7 @@
       Proxy[] local = proxies;
       for (Proxy proxy : local)
       {
-         if (proxy.getState() != Proxy.State.OK)
+         if (proxy.getState() != MCMPServerState.State.OK)
          {
             ok = false;
             break;
@@ -366,7 +369,7 @@
       {
          synchronized (proxy)
          {
-            if (proxy.getState() == Proxy.State.OK)
+            if (proxy.getState() == State.OK)
             {
                proxy.setState(Proxy.State.ERROR);
             }
@@ -513,14 +516,20 @@
            {
               if (proxy.getState() == Proxy.State.ERROR) {
                  proxy.setState(Proxy.State.OK);
-                 if (resetRequests == null)
-                 {
-                    resetRequests = this.resetRequestSource.getResetRequests();
-                 }
                  
-                 for (MCMPRequest request : resetRequests)
+                 sendRequest(MCMPUtils.getInfoRequest());
+                 
+                 if (proxy.getState() == Proxy.State.OK)
                  {
-                    sendRequest(request, proxy);
+                    if (resetRequests == null)
+                    {
+                       resetRequests = this.resetRequestSource.getResetRequests();
+                    }
+                    
+                    for (MCMPRequest request : resetRequests)
+                    {
+                       sendRequest(request, proxy);
+                    }
                  }
               }
            }
@@ -992,5 +1001,83 @@
           connection = null;
       }
    }
+   
+   @Immutable
+   private static class MCMPServerStateImpl implements MCMPServerState, Serializable
+   {
+      /** The serialVersionUID */
+      private static final long serialVersionUID = 5219680414337319908L;
+      
+      private final State state;
+      private final InetAddress address;
+      private final int port;
+      private final boolean established;
+      
+      private MCMPServerStateImpl(MCMPServerState source)
+      {
+         this.state = source.getState();
+         this.address = source.getAddress();
+         this.port = source.getPort();
+         this.established = source.isEstablished();
+      }
+      
+      public State getState()
+      {
+         return state;
+      }
 
+      public InetAddress getAddress()
+      {
+         return address;
+      }
+
+      public int getPort()
+      {
+         return port;
+      }
+
+      public boolean isEstablished()
+      {
+         return established;
+      }
+
+      @Override
+      public boolean equals(Object obj)
+      {
+         if (this == obj)
+            return true;
+         
+         if (obj instanceof MCMPServerStateImpl)
+         {
+            MCMPServerStateImpl other = (MCMPServerStateImpl) obj;
+            return (this.port == other.port && this.address.equals(other.address) 
+                        && this.state == other.state && this.established == other.established);
+         }
+         return false;
+      }
+
+      @Override
+      public int hashCode()
+      {
+         int result = 17;
+         result += 23 * (this.address == null ? 0 : this.address.hashCode());
+         result += 23 * this.port;
+         result += 23 * this.state.hashCode();
+         result += 23 * (this.established ? 0 : 1);
+         return result;
+      }
+
+      @Override
+      public String toString()
+      {
+         StringBuilder sb = new StringBuilder(getClass().getSimpleName()); 
+         sb.append("{address=").append(address)
+           .append(",port=").append(port)
+           .append(",state=").append(state)
+           .append(",established").append(established).append("}");
+         return sb.toString();
+      }
+      
+   }
+
 }




More information about the jboss-cvs-commits mailing list