Brian Stansberry wrote:
This is somewhat related to previous discussion at [1] and related
JGRP-1152 [2].
Since we've upgraded JBoss AS trunk to JGroups 2.10.0.Alpha3, it will no
longer start on a machine that supports both IPv4 and IPv6. This is
because we don't specify java.net.preferIPv4Stack in our startup
scripts, so Util.getIpStackType() returns StackType.IPv6. But we
configure IPv4 multicast addresses by default so the JGRP-1152 check
fails the startup.
Since we're specifying IPv4 addresses by default, perhaps our startup
scripts could set -Djava.net.preferIPv4Stack=true. Jason can comment if
he likes; it may be necessary although I don't really like it (yet
another config in an obscure location).
I'm wondering if JGroups can handle this situation more flexibly. I've
attached an *untested* patch that shows what I was thinking:
1) Add a new StackType.Either which Util.getIpStackType() returns if the
OS supports both stack types and no java.net.preferXXX property is set.
2) Configurator.setupProtocolStack() recognizes StackType.Either and
when it's analyzing the InetAddresses it's seeing, it uses the first one
it sees to switch to either StackType.IPv4 or StackType.IPv6. So in this
case the users choice of addresses controls the behavior.
3) Thereafter, the normal JGRP-1152 checks apply, so illegal
inconsistencies are caught and rejected.
I checked for other uses of Util.getIpStackType() and tweaked the one
that needed it to deal with a return value of StackType.Either. I
haven't checked *all* uses of StackType though; wanted to get some
feedback first.
Your patch sounds more flexible to me.
--
Jason T. Greene
JBoss, a division of Red Hat