]
Bela Ban resolved JGRP-264.
---------------------------
Resolution: Done
Fixed by adding the id/MuxChannel binding back into Multiplexer.services on connect() (it
was removed on disconnect(), so we want to be symmetric)
Multiplexer: reconnect fails
----------------------------
Key: JGRP-264
URL:
http://jira.jboss.com/jira/browse/JGRP-264
Project: JGroups
Issue Type: Bug
Affects Versions: 2.2.8, 2.2.9, 2.3, 2.2.9.1, 2.2.9.2, 2.2.9 SP3 (2.2.9.3), 2.3 SP1
Reporter: Bela Ban
Assigned To: Bela Ban
Fix For: 2.4
[Brian Stansberry]
AS test o.j.t.c.partition.test.PartitionRestartUnitTestCase surfaced an
issue with the multiplexer and a disconnect followed by a reconnect (w/o
close()).
Problem is basically the Map<String, Channel> service field in
Multiplexer. A service gets added to this map when a MuxChannel is
created. It currently gets removed as part of
Multiplexer.handleServiceDown(), which gets called as part of
disconnect().
Problem is once its removed, it doesn't get added again as part of
connect() processing, so thereafter things fail. I think it should be
removed as part of close(), but haven't looked carefully enough to see
if would have side effects.
I've added a couple tests to MultiplexerTest to ensure things work with
a disconnect() followed by a new connect().
I looked at it a little bit and it seemed an easy solution was to move
the call to Multiplexer.unregister() from
Multiplexer.handleServiceDown() to JChannelFactory.close().
Index: JChannelFactory.java
===================================================================
RCS file:
/cvsroot/javagroups/JGroups/src/org/jgroups/JChannelFactory.java,v
retrieving revision 1.29
diff -u -r1.29 JChannelFactory.java
--- JChannelFactory.java 14 Jul 2006 12:17:24 -0000 1.29
+++ JChannelFactory.java 26 Jul 2006 21:35:24 -0000
@@ -389,6 +389,7 @@
if(addr != null) {
try {
mux.sendServiceDownMessage(ch.getId(),
addr);
+ mux.unregister(ch.getId());
}
catch(Exception e) {
if(log.isErrorEnabled())
Index: mux/Multiplexer.java
===================================================================
RCS file:
/cvsroot/javagroups/JGroups/src/org/jgroups/mux/Multiplexer.java,v
retrieving revision 1.17
diff -u -r1.17 Multiplexer.java
--- mux/Multiplexer.java 14 Jul 2006 13:09:25 -0000 1.17
+++ mux/Multiplexer.java 26 Jul 2006 21:35:26 -0000
@@ -599,9 +599,9 @@
}
}
- Address local_address=getLocalAddress();
- if(local_address != null && host != null &&
host.equals(local_address))
- unregister(service);
+// Address local_address=getLocalAddress();
+// if(local_address != null && host != null &&
host.equals(local_address))
+// unregister(service);
}
With this, as the MultiplexerTest cases pass, as does the AS integration
test.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: