From 18e018b3d9016e7e3d5f515873adfe64a491a777 Mon Sep 17 00:00:00 2001 From: Enis Soztutar Date: Fri, 15 Nov 2013 22:52:25 +0000 Subject: [PATCH] HBASE-9961 [WINDOWS] Multicast should bind to local address git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1542425 13f79535-47bb-0310-9956-ffa450edef68 --- .../hbase/client/ClusterStatusListener.java | 30 +++++++++++-------- .../org/apache/hadoop/hbase/HConstants.java | 10 ++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java index cbaf7c00a2a..e3e0a68bb7a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java @@ -20,6 +20,18 @@ package org.apache.hadoop.hbase.client; +import java.io.Closeable; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience; @@ -40,18 +52,6 @@ import org.jboss.netty.channel.socket.DatagramChannelFactory; import org.jboss.netty.channel.socket.oio.OioDatagramChannelFactory; import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder; -import java.io.Closeable; -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - /** * A class that receives the cluster status, and provide it as a set of service to the client. @@ -185,6 +185,7 @@ class ClusterStatusListener implements Closeable { public MulticastListener() { } + @Override public void connect(Configuration conf) throws IOException { // Can't be NiO with Netty today => not implemented in Netty. DatagramChannelFactory f = new OioDatagramChannelFactory(service); @@ -196,9 +197,12 @@ class ClusterStatusListener implements Closeable { String mcAddress = conf.get(HConstants.STATUS_MULTICAST_ADDRESS, HConstants.DEFAULT_STATUS_MULTICAST_ADDRESS); + String bindAddress = conf.get(HConstants.STATUS_MULTICAST_BIND_ADDRESS, + HConstants.DEFAULT_STATUS_MULTICAST_BIND_ADDRESS); int port = conf.getInt(HConstants.STATUS_MULTICAST_PORT, HConstants.DEFAULT_STATUS_MULTICAST_PORT); - channel = (DatagramChannel) b.bind(new InetSocketAddress(mcAddress, port)); + + channel = (DatagramChannel) b.bind(new InetSocketAddress(bindAddress, port)); channel.getConfig().setReuseAddress(true); diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java index 31fb57fb8bc..7c2b47897a1 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java @@ -298,7 +298,7 @@ public final class HConstants { * The directory from which co-processor/custom filter jars can be loaded * dynamically by the region servers. This value can be overridden by the * hbase.dynamic.jars.dir config. - */ + */ public static final String LIB_DIR = "lib"; /** Used to construct the name of the compaction directory during compaction */ @@ -931,6 +931,14 @@ public final class HConstants { public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip"; public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3"; + /** + * The address to use for binding the local socket for receiving multicast. Defaults to + * 0.0.0.0. + * @see https://issues.apache.org/jira/browse/HBASE-9961 + */ + public static final String STATUS_MULTICAST_BIND_ADDRESS = "hbase.status.multicast.bind.address.ip"; + public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0"; + /** * The port to use for the multicast messages. */