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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]