hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hudson (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-12359) MulticastPublisher should specify IPv4/v6 protocol family when creating multicast channel
Date Sat, 15 Nov 2014 07:19:34 GMT

    [ https://issues.apache.org/jira/browse/HBASE-12359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14213440#comment-14213440
] 

Hudson commented on HBASE-12359:
--------------------------------

SUCCESS: Integrated in HBase-TRUNK #5780 (See [https://builds.apache.org/job/HBase-TRUNK/5780/])
HBASE-12359 MulticastPublisher should specify IPv4/v6 protocol family when creating multicast
channel (Qiang Tian) (stack: rev 0255fc2bf161741efbcddb1d5fa27c5f3ac95a45)
* hbase-server/src/main/java/org/apache/hadoop/hbase/master/ClusterStatusPublisher.java


> MulticastPublisher should specify IPv4/v6 protocol family when creating multicast channel
> -----------------------------------------------------------------------------------------
>
>                 Key: HBASE-12359
>                 URL: https://issues.apache.org/jira/browse/HBASE-12359
>             Project: HBase
>          Issue Type: Bug
>          Components: master
>    Affects Versions: 2.0.0
>            Reporter: Qiang Tian
>            Assignee: Qiang Tian
>            Priority: Minor
>             Fix For: 2.0.0, 0.99.2
>
>         Attachments: hbase-12359-master.patch
>
>
> see http://osdir.com/ml/general/2014-10/msg56689.html
> {code}
> 014-10-28 12:21:47,337 ERROR [main] hbase.MiniHBaseCluster(230): Error starting cluster
> java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster
>        at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:145)
>        at org.apache.hadoop.hbase.LocalHBaseCluster.addMaster(LocalHBaseCluster.java:215)
>        at org.apache.hadoop.hbase.LocalHBaseCluster.<init>(LocalHBaseCluster.java:153)
>        at org.apache.hadoop.hbase.MiniHBaseCluster.init(MiniHBaseCluster.java:215)
>        at org.apache.hadoop.hbase.MiniHBaseCluster.<init>(MiniHBaseCluster.java:94)
>        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniHBaseCluster(HBaseTestingUtility.java:914)
>        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:877)
>        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:794)
>        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:765)
>        at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniCluster(HBaseTestingUtility.java:752)
>        at org.apache.hadoop.hbase.client.TestHCM.setUpBeforeClass(TestHCM.java:138)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>        at java.lang.reflect.Method.invoke(Method.java:601)
>        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
>        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
>        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
>        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
>        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
>        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.lang.IllegalArgumentException: IPv6 socket cannot join IPv4 multicast
group
>        at sun.nio.ch.DatagramChannelImpl.innerJoin(DatagramChannelImpl.java:779)
>        at sun.nio.ch.DatagramChannelImpl.join(DatagramChannelImpl.java:865)
>        at io.netty.channel.socket.nio.NioDatagramChannel.joinGroup(NioDatagramChannel.java:394)
>        at org.apache.hadoop.hbase.master.ClusterStatusPublisher$MulticastPublisher.connect(ClusterStatusPublisher.java:273)
>        at org.apache.hadoop.hbase.master.ClusterStatusPublisher.<init>(ClusterStatusPublisher.java:121)
>        at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:307)
>        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
>        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
>        at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:142)
>        ... 26 more
> {code}
> the exception comes from below JDK code:
> {code}
>  765           if (group instanceof Inet4Address) {
>  766               if (family == StandardProtocolFamily.INET6 && !Net.canIPv6SocketJoinIPv4Group())
>  767                   throw new IllegalArgumentException("IPv6 socket cannot join IPv4
multicast group");
> {code}
> according to document(http://docs.oracle.com/javase/7/docs/api/java/nio/channels/MulticastChannel.html)
> {quote}
> The multicast implementation is intended to map directly to the native multicasting facility.
Consequently, the following items should be considered when developing an application that
receives IP multicast datagrams:
>     The creation of the channel should specify the ProtocolFamily that corresponds to
the address type of the multicast groups that the channel will join. There is no guarantee
that a channel to a socket in one protocol family can join and receive multicast datagrams
when the address of the multicast group corresponds to another protocol family. For example,
it is implementation specific if a channel to an IPv6 socket can join an IPv4 multicast group
and receive multicast datagrams sent to the group. 
> {quote}
> if not specifying family, the ProtocolFamily of the channel's socket is platform (and
possibly configuration) dependent and therefore unspecified
> the publisher code:
> {code}
>     @Override
>     public void connect(Configuration conf) throws IOException {
> ...
>       Bootstrap b = new Bootstrap();
>       b.group(group)
>           .channel(NioDatagramChannel.class)
>           .option(ChannelOption.SO_REUSEADDR, true)
>           .handler(new ClusterStatusEncoder(isa));
> {code}
> looks should use this netty constructor
> {code}
>     public NioDatagramChannel(InternetProtocolFamily ipFamily) {
>         this(newSocket(DEFAULT_SELECTOR_PROVIDER, ipFamily));
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message