You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pe...@apache.org on 2005/03/25 23:11:40 UTC

cvs commit: jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp SimpleTcpCluster.java

pero        2005/03/25 14:11:40

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster/tcp
                        SimpleTcpCluster.java
  Log:
  Add a lot Fixme for next 5.5.10 release :-)
  
  Revision  Changes    Path
  1.59      +65 -22    jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
  
  Index: SimpleTcpCluster.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- SimpleTcpCluster.java	15 Feb 2005 09:31:45 -0000	1.58
  +++ SimpleTcpCluster.java	25 Mar 2005 22:11:39 -0000	1.59
  @@ -58,8 +58,17 @@
    * setting up a cluster and provides callers with a valid multicast
    * receiver/sender.
    * 
  + * FIXME remove install/remove/start/stop context dummys
  + * FIXME better stats
  + * FIXME factor out receiver handling
  + * FIXME Support JMX and Lifecycle Listener Notification (start/stop member) (start/stop context/manager)
  + * FIXME optimize message package creation
  + * FIXME better compress message handling
  + * FIXME Clearer implementation from notifyListenersOnReplication flag
  + *
    * @author Filip Hanik
    * @author Remy Maucherat
  + * @author Peter Rossbach
    * @version $Revision$, $Date$
    */
   
  @@ -297,10 +306,18 @@
           return manager;
       }
   
  +    /* remove an application form cluster replication bus
  +     * FIXME notify someone (JMX(Listener)
  +     * @see org.apache.catalina.cluster.CatalinaCluster#removeManager(java.lang.String)
  +     */
       public void removeManager(String name) {
           managers.remove(name);
       }
   
  +    /* add an application to cluster replication bus
  +     * FIXME notify someone (JMX(Listener)
  +     * @see org.apache.catalina.cluster.CatalinaCluster#addManager(java.lang.String, org.apache.catalina.cluster.ClusterManager)
  +     */
       public void addManager(String name, ClusterManager manager) {
           manager.setName(name);
           manager.setCluster(this);
  @@ -366,6 +383,7 @@
        * other nodes in the cluster, and request the current session state to be
        * transferred to this node.
        * 
  +     * FIXME notify someone (JMX(Listener)   
        * @exception IllegalStateException
        *                if this component has already been started
        * @exception LifecycleException
  @@ -389,7 +407,7 @@
   
               }
               registerMBeans();
  -            clusterReceiver.setWaitForAck(clusterSender.isWaitForAck());
  +            clusterReceiver.setSendAck(clusterSender.isWaitForAck());
               clusterReceiver.setCatalinaCluster(this);
               clusterReceiver.start();
               clusterSender.setCatalinaCluster(this);
  @@ -435,20 +453,15 @@
                           && (smsg.getEventType() == SessionMessage.EVT_GET_ALL_SESSIONS)
                           && (membershipService.getMembers().length > 0)) {
                       destination = membershipService.getMembers()[0];
  -                }//end if
  -            }//end if
  -            msg.setTimestamp(System.currentTimeMillis());
  -            java.io.ByteArrayOutputStream outs = new java.io.ByteArrayOutputStream();
  -            java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(
  -                    outs);
  -            out.writeObject(msg);
  -            byte[] data = outs.toByteArray();
  +                }
  +            }
  +            byte[] data = createMessageData(msg);
               if (destination != null) {
                   Member tcpdest = dest;
                   if ((tcpdest != null)
                           && (!membershipService.getLocalMember().equals(tcpdest))) {
                       clusterSender.sendMessage(msg.getUniqueId(), data, tcpdest);
  -                }//end if
  +                }
               } else {
                   clusterSender.sendMessage(msg.getUniqueId(), data);
               }
  @@ -458,6 +471,22 @@
       }
   
       /**
  +     * Send Message create Timestamp and generate message bytes form msg
  +     * @param msg cluster message
  +     * @return cluster message as byte array
  +     * @throws IOException
  +     */
  +    protected byte[] createMessageData(ClusterMessage msg) throws IOException {
  +        msg.setTimestamp(System.currentTimeMillis());
  +        java.io.ByteArrayOutputStream outs = new java.io.ByteArrayOutputStream();
  +        java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(
  +                outs);
  +        out.writeObject(msg);
  +        byte[] data = outs.toByteArray();
  +        return data;
  +    }
  +
  +    /**
        * send message to all cluster members
        * 
        * @see org.apache.catalina.cluster.CatalinaCluster#send(org.apache.catalina.cluster.ClusterMessage)
  @@ -473,6 +502,7 @@
        * This will disconnect the cluster communication channel and stop the
        * listener thread.
        * 
  +     * FIXME notify someone (JMX(Listener)
        * @exception IllegalStateException
        *                if this component has not been started
        * @exception LifecycleException
  @@ -504,6 +534,10 @@
           started = false;
       }
   
  +    /* New cluster member is registered
  +     * FIXME notify someone (JMX(Listener)
  +     * @see org.apache.catalina.cluster.MembershipListener#memberAdded(org.apache.catalina.cluster.Member)
  +     */
       public void memberAdded(Member member) {
           try {
               if (log.isInfoEnabled())
  @@ -515,6 +549,10 @@
   
       }
   
  +    /* Cluster member is gone
  +     * FIXME notify someone (JMX(Listener)
  +     * @see org.apache.catalina.cluster.MembershipListener#memberDisappeared(org.apache.catalina.cluster.Member)
  +     */
       public void memberDisappeared(Member member) {
           if (log.isInfoEnabled())
               log.info("Received member disappeared:" + member);
  @@ -587,13 +625,15 @@
                       new java.io.ByteArrayInputStream(data), getClass()
                               .getClassLoader());
               Object myobj = stream.readObject();
  +            if (log.isDebugEnabled()
  +                    && myobj != null && myobj instanceof ClusterMessage)
  +                log.debug("Assuming clocks are synched: Replication for " 
  +                        + ((ClusterMessage) myobj).getUniqueId() + " took="
  +                        + (System.currentTimeMillis() - ((ClusterMessage) myobj).getTimestamp())
  +                        + " ms.");
               if (myobj != null && myobj instanceof SessionMessage) {
   
                   SessionMessage msg = (SessionMessage) myobj;
  -                if (log.isDebugEnabled())
  -                    log.debug("Assuming clocks are synched: Replication took="
  -                            + (System.currentTimeMillis() - msg.getTimestamp())
  -                            + " ms.");
                   String ctxname = msg.getContextName();
                   //check if the message is a EVT_GET_ALL_SESSIONS,
                   //if so, wait until we are fully started up
  @@ -611,14 +651,14 @@
                                   log.debug("Context manager doesn't exist:"
                                           + key);
                           }
  -                    }//while
  +                    }
                   } else {
                       ClusterManager mgr = (ClusterManager) managers.get(ctxname);
                       if (mgr != null)
                           mgr.messageDataReceived(msg);
                       else if (log.isWarnEnabled())
                           log.warn("Context manager doesn't exist:" + ctxname);
  -                }//end if
  +                }
               } else {
                   //invoke all the listeners
                   for (int i = 0; i < clusterListeners.size(); i++) {
  @@ -626,11 +666,14 @@
                               .elementAt(i);
                       if (myobj != null && myobj instanceof ClusterMessage
                               && listener.accept((ClusterMessage) myobj)) {
  -                        listener.messageReceived((ClusterMessage) myobj);
  -                    }//end if
  -
  -                }//for
  -            }//end if
  +                      listener.messageReceived((ClusterMessage) myobj);
  +                    } else
  +                        if(log.isDebugEnabled())
  +                            log.debug("Message " + myobj.toString() 
  +                                    + " from type " + myobj.getClass().getName() 
  +                                    + " transfered but no listener registered");
  +                }
  +            }
   
           } catch (Exception x) {
               log.error("Unable to deserialize session message.", x);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org