HA-JNDI: Multicast and multiple instances on one machine
rmontag Oct 29, 2003 7:31 AMHello,
I just made some expiriences with the HA-JNDI multicast and running multiple instances on a single machine. I encountered some problems, found some solutions and like to ask if the problems are considered to be a bug...
My setup:
- JBoss 3.2.2
- Two instances running on a single W2K-PC, alternatively I 'm using two instances running on a single SUN solaris. instance 1 using 1200 as HA-JNDI port, instance 2 using 1300.
- "JBoss Clustering" documentation, 4. edition
- Standalone testclient (JUnit) on PC or SUN, configured for Multicast (url-property not set)
The problem:
When starting my testclient and making a lookup, both instances receive the GET_ADDRESS datagram. Then each server send a datagram packet back NOT using a multcast. Since the testclient opens a MulticastSocket on the Multigroup port 1102, each server sends a response datagramm back to <client-ip>:1102.
I encountered two problems with this approach:
1) If client and server are one the same instance, they have the same ip-address. In my environment one server instance "catches" all the answers, so the client timed-out with no answers (Note: On W2K, I set "loopback" to true, on SUN to false as described in the cluster document).
2) Same problem if two clients on one instance make a concurrent multicast call (servers on other machine): Both waiting for responses, only one client catches all the responses. The second client ever lose.
Two possible solutions come to my mind:
1) Currently the NamingContext opens a MulticastSocket on the multicast group port. If the client would use a different dedicated port, he can send his call with the multicast group address and the server could reply to <client-ip>:<dedicated client-port> with his answer. No one else (another client or server) would "catch" the server response if using different port numbers (Disadvantage: One additional HA-JNDI JNP property like "jnp.multicastPort").
2) HANamingService simply send a response datagram back to a dedicated IP:port address (Unicast). Why doesn't the server also sends a multicast call using the well-known multicast group address to propagate his answer ? A multicast answer seems to be a clean solution because: a) All clients waiting for an answer will receive them and b) other server receiving the answer will ignore them.
I applied both solutions to my private jboss and solved my problems. I would like to know if the solutions I mentioned are reasonable, respectively why not.
Any feedback on this issue is welcome.
Thanks for reading and greetings,
Rainer