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/03/21 19:18:17 UTC
svn commit: r387596 - in /tomcat/container/tc5.5.x/modules/groupcom:
src/share/org/apache/catalina/tribes/group/interceptors/
src/share/org/apache/catalina/tribes/tcp/nio/
src/share/org/apache/catalina/tribes/tipis/
test/org/apache/catalina/tribes/demos/
Author: fhanik
Date: Tue Mar 21 10:18:15 2006
New Revision: 387596
URL: http://svn.apache.org/viewcvs?rev=387596&view=rev
Log:
Fixed deadlock in the RPC channel, responses can not be sent with ACK, cause everyone ends up waiting for ACKs
Modified:
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/MessageDispatchInterceptor.java
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/RpcChannel.java
tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/MessageDispatchInterceptor.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/MessageDispatchInterceptor.java?rev=387596&r1=387595&r2=387596&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/MessageDispatchInterceptor.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/MessageDispatchInterceptor.java Tue Mar 21 10:18:15 2006
@@ -62,20 +62,6 @@
}
}
- public void messageReceived(ChannelMessage msg) {
- super.messageReceived(msg);
- }
-
- public void memberAdded(Member member) {
- //todo, nothing
- super.memberAdded(member);
- }
-
- public void memberDisappeared(Member member) {
- super.memberDisappeared(member);
- //clean up existing queue items
- }
-
public void setMaxQueueSize(long maxQueueSize) {
this.maxQueueSize = maxQueueSize;
}
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java?rev=387596&r1=387595&r2=387596&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java Tue Mar 21 10:18:15 2006
@@ -64,6 +64,9 @@
protected XByteBuffer ackbuf = new XByteBuffer(128,true);
protected int remaining = 0;
protected boolean complete;
+
+ protected boolean connecting = false;
+
public NioSender(Member destination) throws UnknownHostException {
super(destination);
@@ -82,6 +85,7 @@
if ( socketChannel.finishConnect() ) {
//we connected, register ourselves for writing
setConnected(true);
+ connecting = false;
setRequestCount(0);
setConnectTime(System.currentTimeMillis());
socketChannel.socket().setSendBufferSize(getTxBufSize());
@@ -143,7 +147,10 @@
ackbuf.append(readbuf,read);
readbuf.clear();
if (ackbuf.doesPackageExist() ) {
- return Arrays.equals(ackbuf.extractDataPackage(true),org.apache.catalina.tribes.tcp.Constants.ACK_DATA);
+ System.out.print("Reading ack:");
+ boolean result = Arrays.equals(ackbuf.extractDataPackage(true),org.apache.catalina.tribes.tcp.Constants.ACK_DATA);
+ System.out.println(result);
+ return result;
} else {
return false;
}
@@ -183,6 +190,8 @@
* @todo Implement this org.apache.catalina.tribes.tcp.IDataSender method
*/
public synchronized void connect() throws IOException {
+ if ( connecting ) return;
+ connecting = true;
if ( isConnected() ) throw new IOException("NioSender is already in connected state.");
if ( readbuf == null ) {
readbuf = getReadBuffer();
@@ -205,16 +214,20 @@
*/
public void disconnect() {
try {
+ connecting = false;
setConnected(false);
if ( socketChannel != null ) {
- Socket socket = socketChannel.socket();
- //error free close, all the way
- try {socket.shutdownOutput();}catch ( Exception x){}
- try {socket.shutdownInput();}catch ( Exception x){}
- try {socket.close();}catch ( Exception x){}
- try {socketChannel.close();}catch ( Exception x){}
- socket = null;
- socketChannel = null;
+ try {
+ Socket socket = socketChannel.socket();
+ //error free close, all the way
+ try {socket.shutdownOutput();}catch ( Exception x){}
+ try {socket.shutdownInput();}catch ( Exception x){}
+ try {socket.close();}catch ( Exception x){}
+ try {socketChannel.close();}catch ( Exception x){}
+ socket = null;
+ }finally {
+ socketChannel = null;
+ }
}
} catch ( Exception x ) {
log.error("Unable to disconnect NioSender. msg="+x.getMessage());
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/RpcChannel.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/RpcChannel.java?rev=387596&r1=387595&r2=387596&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/RpcChannel.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/RpcChannel.java Tue Mar 21 10:18:15 2006
@@ -89,6 +89,7 @@
collector.wait(timeout);
}
} catch ( InterruptedException ix ) {
+ Thread.currentThread().interrupted();
throw new ChannelException(ix);
}finally {
responseMap.remove(key);
@@ -120,7 +121,7 @@
rmsg.reply = true;
rmsg.message = reply;
try {
- channel.send(new Member[] {sender}, rmsg,Channel.SEND_OPTIONS_DEFAULT);
+ channel.send(new Member[] {sender}, rmsg,0);
}catch ( Exception x ) {
log.error("Unable to send back reply in RpcChannel.",x);
}
Modified: tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java?rev=387596&r1=387595&r2=387596&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java Tue Mar 21 10:18:15 2006
@@ -24,8 +24,8 @@
import org.apache.catalina.tribes.ManagedChannel;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.MembershipListener;
+import org.apache.catalina.tribes.tipis.AbstractReplicatedMap;
import org.apache.catalina.tribes.tipis.LazyReplicatedMap;
-import org.apache.catalina.tribes.tcp.*;
/**
* <p>Title: </p>
@@ -162,7 +162,6 @@
}
if ( row == 0 ) return columnNames[col];
Object[] entries = map.entrySetFull().toArray();
-
Map.Entry e = (Map.Entry)entries [row-1];
LazyReplicatedMap.MapEntry entry = (LazyReplicatedMap.MapEntry)e.getValue();
switch (col) {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org