Return-Path: X-Original-To: apmail-hbase-issues-archive@www.apache.org Delivered-To: apmail-hbase-issues-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D30A917220 for ; Mon, 3 Nov 2014 09:00:55 +0000 (UTC) Received: (qmail 40751 invoked by uid 500); 3 Nov 2014 09:00:55 -0000 Delivered-To: apmail-hbase-issues-archive@hbase.apache.org Received: (qmail 40707 invoked by uid 500); 3 Nov 2014 09:00:55 -0000 Mailing-List: contact issues-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list issues@hbase.apache.org Received: (qmail 40694 invoked by uid 99); 3 Nov 2014 09:00:55 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Nov 2014 09:00:55 +0000 Date: Mon, 3 Nov 2014 09:00:55 +0000 (UTC) From: "Qiang Tian (JIRA)" To: issues@hbase.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (HBASE-12359) MulticastPublisher should specify IPv4/v6 protocol family when creating multicast channel MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/HBASE-12359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14194370#comment-14194370 ] Qiang Tian commented on HBASE-12359: ------------------------------------ Thanks [~ashish singhi], just noticed there are only 2 watchers! :-) ping [~stack] Considering the description of the document. bq. The creation of the channel should specify the ProtocolFamily that corresponds to the address type of the multicast groups that the channel will join. I'd think putting the new factory code into netty is better... > 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 > 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.(LocalHBaseCluster.java:153) > at org.apache.hadoop.hbase.MiniHBaseCluster.init(MiniHBaseCluster.java:215) > at org.apache.hadoop.hbase.MiniHBaseCluster.(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.(ClusterStatusPublisher.java:121) > at org.apache.hadoop.hbase.master.HMaster.(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)