You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2006/10/10 23:50:44 UTC

svn commit: r462592 - in /tomcat/tc6.0.x/trunk/java/org/apache/catalina: ha/tcp/SimpleTcpCluster.java tribes/membership/McastServiceImpl.java tribes/tipis/AbstractReplicatedMap.java

Author: fhanik
Date: Tue Oct 10 14:50:43 2006
New Revision: 462592

URL: http://svn.apache.org/viewvc?view=rev&rev=462592
Log:
Fixes and improvements

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?view=diff&rev=462592&r1=462591&r2=462592
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java Tue Oct 10 14:50:43 2006
@@ -555,12 +555,13 @@
      */
     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 = host.getName()  + name ;
+                    clusterName = host.getName() +"#" + name ;
             }
         }
         return clusterName;

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java?view=diff&rev=462592&r1=462591&r2=462592
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java Tue Oct 10 14:50:43 2006
@@ -163,6 +163,7 @@
     protected void setupSocket() throws IOException {
         if (mcastBindAddress != null) socket = new MulticastSocket(new InetSocketAddress(mcastBindAddress, port));
         else socket = new MulticastSocket(port);
+        socket.setLoopbackMode(false); //hint that we don't need loop back messages
         if (mcastBindAddress != null) {
 			if(log.isInfoEnabled())
                 log.info("Setting multihome multicast interface to:" +mcastBindAddress);

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java?view=diff&rev=462592&r1=462591&r2=462592
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java Tue Oct 10 14:50:43 2006
@@ -45,6 +45,7 @@
 import org.apache.catalina.tribes.util.Arrays;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import java.util.ConcurrentModificationException;
 
 /**
  *
@@ -760,57 +761,63 @@
     }
     
     public Object get(Object key) {
-            MapEntry entry = (MapEntry)super.get(key);
-            if (log.isTraceEnabled()) log.trace("Requesting id:"+key+" entry:"+entry);
-            if ( entry == null ) return null;
-            if ( !entry.isPrimary() ) {
-                //if the message is not primary, we need to retrieve the latest value
-                try {
-                    Member[] backup = null;
-                    MapMessage msg = null;
-                    if ( !entry.isBackup() ) {
-                        //make sure we don't retrieve from ourselves
-                        msg = new MapMessage(getMapContextName(), MapMessage.MSG_RETRIEVE_BACKUP, false,
-                                             (Serializable) key, null, null, null);
-                        Response[] resp = getRpcChannel().send(entry.getBackupNodes(),msg, this.getRpcChannel().FIRST_REPLY, Channel.SEND_OPTIONS_DEFAULT, getRpcTimeout());
-                        if (resp == null || resp.length == 0) {
-                            //no responses
-                            log.warn("Unable to retrieve remote object for key:" + key);
-                            return null;
-                        }
-                        msg = (MapMessage) resp[0].getMessage();
-                        msg.deserialize(getExternalLoaders());
-                        backup = entry.getBackupNodes();
-                        if ( entry.getValue() instanceof ReplicatedMapEntry ) {
-                            ReplicatedMapEntry val = (ReplicatedMapEntry)entry.getValue();
-                            val.setOwner(getMapOwner());
-                        }
-                        if ( msg.getValue()!=null ) entry.setValue(msg.getValue());
+        MapEntry entry = (MapEntry)super.get(key);
+        if (log.isTraceEnabled()) log.trace("Requesting id:"+key+" entry:"+entry);
+        if ( entry == null ) return null;
+        if ( !entry.isPrimary() ) {
+            //if the message is not primary, we need to retrieve the latest value
+            try {
+                Member[] backup = null;
+                MapMessage msg = null;
+                if ( !entry.isBackup() ) {
+                    //make sure we don't retrieve from ourselves
+                    msg = new MapMessage(getMapContextName(), MapMessage.MSG_RETRIEVE_BACKUP, false,
+                                         (Serializable) key, null, null, null);
+                    Response[] resp = getRpcChannel().send(entry.getBackupNodes(),msg, this.getRpcChannel().FIRST_REPLY, Channel.SEND_OPTIONS_DEFAULT, getRpcTimeout());
+                    if (resp == null || resp.length == 0) {
+                        //no responses
+                        log.warn("Unable to retrieve remote object for key:" + key);
+                        return null;
                     }
-                    if (entry.isBackup()) {
-                        //select a new backup node
-                        backup = publishEntryInfo(key, entry.getValue());
-                    } else if ( entry.isProxy() ) {
-                        //invalidate the previous primary
-                        msg = new MapMessage(getMapContextName(),MapMessage.MSG_PROXY,false,(Serializable)key,null,null,backup);
-                        Member[] dest = getMapMembersExcl(backup);
-                        if ( dest!=null && dest.length >0) {
-                            getChannel().send(dest, msg, getChannelSendOptions());
-                        }
+                    msg = (MapMessage) resp[0].getMessage();
+                    msg.deserialize(getExternalLoaders());
+                    backup = entry.getBackupNodes();
+                    if ( entry.getValue() instanceof ReplicatedMapEntry ) {
+                        ReplicatedMapEntry val = (ReplicatedMapEntry)entry.getValue();
+                        val.setOwner(getMapOwner());
                     }
-    
-                    entry.setBackupNodes(backup);
-                    entry.setBackup(false);
-                    entry.setProxy(false);
-    
-    
-                } catch (Exception x) {
-                    log.error("Unable to replicate out data for a LazyReplicatedMap.get operation", x);
-                    return null;
+                    if ( msg.getValue()!=null ) entry.setValue(msg.getValue());
                 }
+                if (entry.isBackup()) {
+                    //select a new backup node
+                    backup = publishEntryInfo(key, entry.getValue());
+                } else if ( entry.isProxy() ) {
+                    //invalidate the previous primary
+                    msg = new MapMessage(getMapContextName(),MapMessage.MSG_PROXY,false,(Serializable)key,null,null,backup);
+                    Member[] dest = getMapMembersExcl(backup);
+                    if ( dest!=null && dest.length >0) {
+                        getChannel().send(dest, msg, getChannelSendOptions());
+                    }
+                }
+
+                entry.setBackupNodes(backup);
+                entry.setBackup(false);
+                entry.setProxy(false);
+
+
+            } catch (Exception x) {
+                log.error("Unable to replicate out data for a LazyReplicatedMap.get operation", x);
+                return null;
             }
-            if (log.isTraceEnabled()) log.trace("Requesting id:"+key+" result:"+entry.getValue());
-            return entry.getValue();
+        }
+        if (log.isTraceEnabled()) log.trace("Requesting id:"+key+" result:"+entry.getValue());
+        if ( entry.getValue() != null && entry.getValue() instanceof ReplicatedMapEntry ) {
+            ReplicatedMapEntry val = (ReplicatedMapEntry)entry.getValue();
+            //hack, somehow this is not being set above
+            val.setOwner(getMapOwner());
+            
+        }
+        return entry.getValue();
     }    
 
     
@@ -950,7 +957,7 @@
             //todo, implement a counter variable instead
             //only count active members in this node
             int counter = 0;
-            Iterator it = super.entrySet().iterator();
+            Iterator it = Collections.unmodifiableSet(super.entrySet()).iterator();
             while (it.hasNext() ) {
                 Map.Entry e = (Map.Entry) it.next();
                 if ( e != null ) {



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