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 4DB2E10B6E for ; Sat, 15 Nov 2014 05:58:39 +0000 (UTC) Received: (qmail 85223 invoked by uid 500); 15 Nov 2014 05:58:34 -0000 Delivered-To: apmail-hbase-issues-archive@hbase.apache.org Received: (qmail 85166 invoked by uid 500); 15 Nov 2014 05:58:34 -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 85154 invoked by uid 99); 15 Nov 2014 05:58:34 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 15 Nov 2014 05:58:34 +0000 Date: Sat, 15 Nov 2014 05:58:34 +0000 (UTC) From: "stack (JIRA)" To: issues@hbase.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Updated] (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:all-tabpanel ] stack updated HBASE-12359: -------------------------- Resolution: Fixed Fix Version/s: 0.99.2 2.0.0 Hadoop Flags: Reviewed Status: Resolved (was: Patch Available) Committed to branch-1+. Tried 0.98 but conflict. Thanks [~tianq] > 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.(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)