Qiang Tian created HBASE-12359: ---------------------------------- Summary: TestHCM.java failed on windows 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 Priority: Minor
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)