You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by nk...@apache.org on 2014/05/20 12:57:11 UTC

svn commit: r1596192 - in /hbase/trunk: ./ hbase-client/ hbase-client/src/main/java/org/apache/hadoop/hbase/client/ hbase-common/src/main/java/org/apache/hadoop/hbase/util/ hbase-prefix-tree/ hbase-server/ hbase-server/src/main/java/org/apache/hadoop/h...

Author: nkeywal
Date: Tue May 20 10:57:11 2014
New Revision: 1596192

URL: http://svn.apache.org/r1596192
Log:
HBASE-10573 Use Netty 4

Modified:
    hbase/trunk/hbase-client/pom.xml
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientIdGenerator.java
    hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java
    hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java
    hbase/trunk/hbase-prefix-tree/pom.xml
    hbase/trunk/hbase-server/pom.xml
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ClusterStatusPublisher.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowAndColumnRangeFilter.java
    hbase/trunk/pom.xml

Modified: hbase/trunk/hbase-client/pom.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/pom.xml?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-client/pom.xml (original)
+++ hbase/trunk/hbase-client/pom.xml Tue May 20 10:57:11 2014
@@ -116,7 +116,7 @@
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
-      <artifactId>netty</artifactId>
+      <artifactId>netty-all</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.zookeeper</groupId>

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientIdGenerator.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientIdGenerator.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientIdGenerator.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientIdGenerator.java Tue May 20 10:57:11 2014
@@ -29,6 +29,7 @@ import java.util.Enumeration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.util.Addressing;
 import org.apache.hadoop.hbase.util.Bytes;
 
 /**
@@ -84,22 +85,7 @@ class ClientIdGenerator {
    */
   public static byte[] getIpAddressBytes() {
     try {
-      // Before we connect somewhere, we cannot be sure about what we'd be bound to; however,
-      // we only connect when the message where client ID is, is long constructed. Thus,
-      // just use whichever IP address we can find.
-      Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
-      while (interfaces.hasMoreElements()) {
-        NetworkInterface current = interfaces.nextElement();
-        if (!current.isUp() || current.isLoopback() || current.isVirtual()) continue;
-        Enumeration<InetAddress> addresses = current.getInetAddresses();
-        while (addresses.hasMoreElements()) {
-          InetAddress addr = addresses.nextElement();
-          if (addr.isLoopbackAddress()) continue;
-          if (addr instanceof Inet4Address || addr instanceof Inet6Address) {
-            return addr.getAddress();
-          }
-        }
-      }
+      return Addressing.getIpAddress().getAddress();
     } catch (IOException ex) {
       LOG.warn("Failed to get IP address bytes", ex);
     }

Modified: hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java (original)
+++ hbase/trunk/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java Tue May 20 10:57:11 2014
@@ -20,18 +20,16 @@
 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 io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.ByteBufInputStream;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.DatagramChannel;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.channel.socket.nio.NioDatagramChannel;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.classification.InterfaceAudience;
@@ -40,17 +38,19 @@ import org.apache.hadoop.hbase.ClusterSt
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos;
+import org.apache.hadoop.hbase.util.Addressing;
+import org.apache.hadoop.hbase.util.ExceptionUtil;
 import org.apache.hadoop.hbase.util.Threads;
-import org.jboss.netty.bootstrap.ConnectionlessBootstrap;
-import org.jboss.netty.channel.ChannelHandlerContext;
-import org.jboss.netty.channel.Channels;
-import org.jboss.netty.channel.ExceptionEvent;
-import org.jboss.netty.channel.MessageEvent;
-import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
-import org.jboss.netty.channel.socket.DatagramChannel;
-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.NetworkInterface;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -178,22 +178,14 @@ class ClusterStatusListener implements C
    */
   class MulticastListener implements Listener {
     private DatagramChannel channel;
-    private final ExecutorService service = Executors.newSingleThreadExecutor(
-        Threads.newDaemonThreadFactory("hbase-client-clusterStatus-multiCastListener"));
-
+    private final EventLoopGroup group = new NioEventLoopGroup(
+        1, Threads.newDaemonThreadFactory("hbase-client-clusterStatusListener"));
 
     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);
-
-      ConnectionlessBootstrap b = new ConnectionlessBootstrap(f);
-      b.setPipeline(Channels.pipeline(
-          new ProtobufDecoder(ClusterStatusProtos.ClusterStatus.getDefaultInstance()),
-          new ClusterStatusHandler()));
 
       String mcAddress = conf.get(HConstants.STATUS_MULTICAST_ADDRESS,
           HConstants.DEFAULT_STATUS_MULTICAST_ADDRESS);
@@ -202,17 +194,29 @@ class ClusterStatusListener implements C
       int port = conf.getInt(HConstants.STATUS_MULTICAST_PORT,
           HConstants.DEFAULT_STATUS_MULTICAST_PORT);
 
-      channel = (DatagramChannel) b.bind(new InetSocketAddress(bindAddress, port));
-
-      channel.getConfig().setReuseAddress(true);
-
       InetAddress ina;
       try {
         ina = InetAddress.getByName(mcAddress);
       } catch (UnknownHostException e) {
+        close();
         throw new IOException("Can't connect to " + mcAddress, e);
       }
-      channel.joinGroup(ina);
+
+      try {
+        Bootstrap b = new Bootstrap();
+        b.group(group)
+            .channel(NioDatagramChannel.class)
+            .option(ChannelOption.SO_REUSEADDR, true)
+            .handler(new ClusterStatusHandler());
+
+        channel = (DatagramChannel)b.bind(bindAddress, port).sync().channel();
+      } catch (InterruptedException e) {
+        close();
+        throw ExceptionUtil.asInterrupt(e);
+      }
+
+      NetworkInterface ni = NetworkInterface.getByInetAddress(Addressing.getIpAddress());
+      channel.joinGroup(ina, ni, null, channel.newPromise());
     }
 
     @Override
@@ -221,30 +225,40 @@ class ClusterStatusListener implements C
         channel.close();
         channel = null;
       }
-      service.shutdown();
+      group.shutdownGracefully();
     }
 
 
+
     /**
      * Class, conforming to the Netty framework, that manages the message received.
      */
-    private class ClusterStatusHandler extends SimpleChannelUpstreamHandler {
+    private class ClusterStatusHandler extends SimpleChannelInboundHandler<DatagramPacket> {
 
       @Override
-      public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
-        ClusterStatusProtos.ClusterStatus csp = (ClusterStatusProtos.ClusterStatus) e.getMessage();
-        ClusterStatus ncs = ClusterStatus.convert(csp);
-        receive(ncs);
+      public void exceptionCaught(
+          ChannelHandlerContext ctx, Throwable cause)
+          throws Exception {
+        LOG.error("Unexpected exception, continuing.", cause);
       }
 
-      /**
-       * Invoked when an exception was raised by an I/O thread or a
-       * {@link org.jboss.netty.channel.ChannelHandler}.
-       */
       @Override
-      public void exceptionCaught(
-          ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
-        LOG.error("Unexpected exception, continuing.", e.getCause());
+      public boolean acceptInboundMessage(Object msg)
+          throws Exception {
+        return super.acceptInboundMessage(msg);
+      }
+
+
+      @Override
+      protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket dp) throws Exception {
+        ByteBufInputStream bis = new ByteBufInputStream(dp.content());
+        try {
+          ClusterStatusProtos.ClusterStatus csp = ClusterStatusProtos.ClusterStatus.parseFrom(bis);
+          ClusterStatus ncs = ClusterStatus.convert(csp);
+          receive(ncs);
+        } finally {
+          bis.close();
+        }
       }
     }
   }

Modified: hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java (original)
+++ hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Addressing.java Tue May 20 10:57:11 2014
@@ -18,7 +18,13 @@
  */
 package org.apache.hadoop.hbase.util;
 
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
 
 import org.apache.hadoop.classification.InterfaceAudience;
 
@@ -75,4 +81,25 @@ public class Addressing {
     }
     return Integer.parseInt(hostAndPort.substring(colonIndex + 1));
   }
+
+  public static InetAddress getIpAddress() throws SocketException {
+    // Before we connect somewhere, we cannot be sure about what we'd be bound to; however,
+    // we only connect when the message where client ID is, is long constructed. Thus,
+    // just use whichever IP address we can find.
+    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
+    while (interfaces.hasMoreElements()) {
+      NetworkInterface current = interfaces.nextElement();
+      if (!current.isUp() || current.isLoopback() || current.isVirtual()) continue;
+      Enumeration<InetAddress> addresses = current.getInetAddresses();
+      while (addresses.hasMoreElements()) {
+        InetAddress addr = addresses.nextElement();
+        if (addr.isLoopbackAddress()) continue;
+        if (addr instanceof Inet4Address || addr instanceof Inet6Address) {
+          return addr;
+        }
+      }
+    }
+
+    throw new SocketException("Can't get our ip address, interfaces are: " + interfaces);
+  }
 }

Modified: hbase/trunk/hbase-prefix-tree/pom.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-prefix-tree/pom.xml?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-prefix-tree/pom.xml (original)
+++ hbase/trunk/hbase-prefix-tree/pom.xml Tue May 20 10:57:11 2014
@@ -101,6 +101,10 @@
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
     </dependency>
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-all</artifactId>
+    </dependency>
   </dependencies>
 
   <profiles>

Modified: hbase/trunk/hbase-server/pom.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/pom.xml?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-server/pom.xml (original)
+++ hbase/trunk/hbase-server/pom.xml Tue May 20 10:57:11 2014
@@ -415,6 +415,10 @@
       <groupId>org.jamon</groupId>
       <artifactId>jamon-runtime</artifactId>
     </dependency>
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-all</artifactId>
+    </dependency>
     <!-- REST dependencies -->
     <dependency>
       <groupId>com.google.protobuf</groupId>
@@ -607,6 +611,13 @@
           <artifactId>hadoop-minicluster</artifactId>
           <scope>test</scope>
         </dependency>
+        <!-- Hadoop needs Netty 3.x at test scope for the minicluster -->
+        <dependency>
+          <groupId>io.netty</groupId>
+          <artifactId>netty</artifactId>
+          <version>3.6.2.Final</version>
+          <scope>test</scope>
+        </dependency>
       </dependencies>
       <build>
         <plugins>
@@ -660,6 +671,13 @@
           <groupId>org.apache.hadoop</groupId>
           <artifactId>hadoop-minicluster</artifactId>
         </dependency>
+        <!-- Hadoop needs Netty 3.x at test scope for the minicluster -->
+        <dependency>
+          <groupId>io.netty</groupId>
+          <artifactId>netty</artifactId>
+          <version>3.6.2.Final</version>
+          <scope>test</scope>
+        </dependency>
       </dependencies>
       <build>
         <plugins>

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java Tue May 20 10:57:11 2014
@@ -685,7 +685,7 @@ public class TableMapReduceUtil {
       org.apache.hadoop.hbase.mapreduce.TableMapper.class,           // hbase-server
       // pull necessary dependencies
       org.apache.zookeeper.ZooKeeper.class,
-      org.jboss.netty.channel.ChannelFactory.class,
+      io.netty.channel.Channel.class,
       com.google.protobuf.Message.class,
       com.google.common.collect.Lists.class,
       org.htrace.Trace.class);

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ClusterStatusPublisher.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ClusterStatusPublisher.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ClusterStatusPublisher.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ClusterStatusPublisher.java Tue May 20 10:57:11 2014
@@ -21,6 +21,16 @@
 package org.apache.hadoop.hbase.master;
 
 
+import io.netty.bootstrap.Bootstrap;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.DatagramChannel;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.channel.socket.nio.NioDatagramChannel;
+import io.netty.handler.codec.MessageToMessageEncoder;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Chore;
@@ -28,24 +38,18 @@ import org.apache.hadoop.hbase.ClusterSt
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos;
+import org.apache.hadoop.hbase.util.Addressing;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
+import org.apache.hadoop.hbase.util.ExceptionUtil;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.hbase.util.VersionInfo;
-import org.jboss.netty.bootstrap.ConnectionlessBootstrap;
-import org.jboss.netty.channel.ChannelEvent;
-import org.jboss.netty.channel.ChannelHandlerContext;
-import org.jboss.netty.channel.ChannelUpstreamHandler;
-import org.jboss.netty.channel.Channels;
-import org.jboss.netty.channel.socket.DatagramChannel;
-import org.jboss.netty.channel.socket.DatagramChannelFactory;
-import org.jboss.netty.channel.socket.oio.OioDatagramChannelFactory;
-import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder;
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -54,8 +58,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 
 /**
  * Class to publish the cluster status to the client. This allows them to know immediately
@@ -233,50 +235,65 @@ public class ClusterStatusPublisher exte
 
   public static class MulticastPublisher implements Publisher {
     private DatagramChannel channel;
-    private final ExecutorService service = Executors.newSingleThreadExecutor(
-        Threads.newDaemonThreadFactory("hbase-master-clusterStatus-worker"));
+    private final EventLoopGroup group = new NioEventLoopGroup(
+        1, Threads.newDaemonThreadFactory("hbase-master-clusterStatusPublisher"));
 
     public MulticastPublisher() {
     }
 
     @Override
     public void connect(Configuration conf) throws IOException {
+      NetworkInterface ni = NetworkInterface.getByInetAddress(Addressing.getIpAddress());
+
       String mcAddress = conf.get(HConstants.STATUS_MULTICAST_ADDRESS,
           HConstants.DEFAULT_STATUS_MULTICAST_ADDRESS);
       int port = conf.getInt(HConstants.STATUS_MULTICAST_PORT,
           HConstants.DEFAULT_STATUS_MULTICAST_PORT);
 
-      // Can't be NiO with Netty today => not implemented in Netty.
-      DatagramChannelFactory f = new OioDatagramChannelFactory(service);
-
-      ConnectionlessBootstrap b = new ConnectionlessBootstrap(f);
-      b.setPipeline(Channels.pipeline(new ProtobufEncoder(),
-          new ChannelUpstreamHandler() {
-            @Override
-            public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e)
-                throws Exception {
-              // We're just writing here. Discard any incoming data. See HBASE-8466.
-            }
-          }));
-
-
-      channel = (DatagramChannel) b.bind(new InetSocketAddress(0));
-      channel.getConfig().setReuseAddress(true);
-
-      InetAddress ina;
+      final InetAddress ina;
       try {
         ina = InetAddress.getByName(mcAddress);
       } catch (UnknownHostException e) {
+        close();
         throw new IOException("Can't connect to " + mcAddress, e);
       }
-      channel.joinGroup(ina);
-      channel.connect(new InetSocketAddress(mcAddress, port));
+
+      final InetSocketAddress isa = new InetSocketAddress(mcAddress, port);
+
+      Bootstrap b = new Bootstrap();
+      b.group(group)
+          .channel(NioDatagramChannel.class)
+          .option(ChannelOption.SO_REUSEADDR, true)
+          .handler(new ClusterStatusEncoder(isa));
+
+      try {
+        channel = (DatagramChannel) b.bind(new InetSocketAddress(0)).sync().channel();
+        channel.joinGroup(ina, ni, null, channel.newPromise()).sync();
+        channel.connect(isa).sync();
+      } catch (InterruptedException e) {
+        close();
+        throw ExceptionUtil.asInterrupt(e);
+      }
+    }
+
+    private static class ClusterStatusEncoder extends MessageToMessageEncoder<ClusterStatus> {
+      final private InetSocketAddress isa;
+
+      private ClusterStatusEncoder(InetSocketAddress isa) {
+        this.isa = isa;
+      }
+
+      @Override
+      protected void encode(ChannelHandlerContext channelHandlerContext,
+                            ClusterStatus clusterStatus, List<Object> objects) {
+        ClusterStatusProtos.ClusterStatus csp = clusterStatus.convert();
+        objects.add(new DatagramPacket(Unpooled.wrappedBuffer(csp.toByteArray()), isa));
+      }
     }
 
     @Override
     public void publish(ClusterStatus cs) {
-      ClusterStatusProtos.ClusterStatus csp = cs.convert();
-      channel.write(csp);
+      channel.writeAndFlush(cs).syncUninterruptibly();
     }
 
     @Override
@@ -284,7 +301,7 @@ public class ClusterStatusPublisher exte
       if (channel != null) {
         channel.close();
       }
-      service.shutdown();
+      group.shutdownGracefully();
     }
   }
 }

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java Tue May 20 10:57:11 2014
@@ -212,7 +212,7 @@ public class TestHCM {
     con1.close();
   }
 
-  @Ignore ("Fails in IDEs: HBASE-9042") @Test(expected = RegionServerStoppedException.class)
+  @Test(expected = RegionServerStoppedException.class)
   public void testClusterStatus() throws Exception {
     TableName tn =
         TableName.valueOf("testClusterStatus");

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowAndColumnRangeFilter.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowAndColumnRangeFilter.java?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowAndColumnRangeFilter.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFuzzyRowAndColumnRangeFilter.java Tue May 20 10:57:11 2014
@@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.filter;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -35,8 +36,6 @@ import org.apache.hadoop.hbase.client.Re
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.buffer.ChannelBuffers;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -100,11 +99,11 @@ public class TestFuzzyRowAndColumnRangeF
       for (int i2 = 0; i2 < 5; i2++) {
         byte[] rk = new byte[10];
 
-        ChannelBuffer buf = ChannelBuffers.wrappedBuffer(rk);
+        ByteBuffer buf = ByteBuffer.wrap(rk);
         buf.clear();
-        buf.writeShort((short) 2);
-        buf.writeInt(i1);
-        buf.writeInt(i2);
+        buf.putShort((short) 2);
+        buf.putInt(i1);
+        buf.putInt(i2);
 
         for (int c = 0; c < 5; c++) {
           byte[] cq = new byte[4];
@@ -132,12 +131,12 @@ public class TestFuzzyRowAndColumnRangeF
   private void runTest(HTable hTable, int cqStart, int expectedSize) throws IOException {
     // [0, 2, ?, ?, ?, ?, 0, 0, 0, 1]
     byte[] fuzzyKey = new byte[10];
-    ChannelBuffer buf = ChannelBuffers.wrappedBuffer(fuzzyKey);
+    ByteBuffer buf = ByteBuffer.wrap(fuzzyKey);
     buf.clear();
-    buf.writeShort((short) 2);
+    buf.putShort((short) 2);
     for (int i = 0; i < 4; i++)
-      buf.writeByte((short)63);
-    buf.writeInt((short)1);
+      buf.put((byte)63);
+    buf.putInt((short)1);
 
     byte[] mask = new byte[] {0 , 0, 1, 1, 1, 1, 0, 0, 0, 0};
 

Modified: hbase/trunk/pom.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/pom.xml?rev=1596192&r1=1596191&r2=1596192&view=diff
==============================================================================
--- hbase/trunk/pom.xml (original)
+++ hbase/trunk/pom.xml Tue May 20 10:57:11 2014
@@ -931,7 +931,7 @@
     <clover.version>2.6.3</clover.version>
     <jamon-runtime.version>2.3.1</jamon-runtime.version>
     <jettison.version>1.3.1</jettison.version>
-    <netty.version>3.6.6.Final</netty.version>
+    <netty.version>4.0.19.Final</netty.version>
     <!-- Plugin Dependencies -->
     <maven.assembly.version>2.4</maven.assembly.version>
     <maven.antrun.version>1.6</maven.antrun.version>
@@ -1179,14 +1179,14 @@
             <artifactId>jms</artifactId>
           </exclusion>
           <exclusion>
-            <groupId>org.jboss.netty</groupId>
+            <groupId>io.netty</groupId>
             <artifactId>netty</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
-        <artifactId>netty</artifactId>
+        <artifactId>netty-all</artifactId>
         <version>${netty.version}</version>
       </dependency>
       <dependency>
@@ -1529,11 +1529,23 @@
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-mapreduce-client-core</artifactId>
             <version>${hadoop-two.version}</version>
+            <exclusions>
+              <exclusion>
+                <groupId>io.netty</groupId>
+                <artifactId>netty</artifactId>
+              </exclusion>
+            </exclusions>
           </dependency>
           <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
             <version>${hadoop-two.version}</version>
+            <exclusions>
+              <exclusion>
+                <groupId>io.netty</groupId>
+                <artifactId>netty</artifactId>
+              </exclusion>
+            </exclusions>
           </dependency>
           <dependency>
             <groupId>org.apache.hadoop</groupId>
@@ -1541,6 +1553,12 @@
             <version>${hadoop-two.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
+            <exclusions>
+              <exclusion>
+                <groupId>io.netty</groupId>
+                <artifactId>netty</artifactId>
+              </exclusion>
+            </exclusions>
           </dependency>
           <dependency>
             <groupId>org.apache.hadoop</groupId>
@@ -1604,6 +1622,10 @@
                 <groupId>stax</groupId>
                 <artifactId>stax-api</artifactId>
               </exclusion>
+              <exclusion>
+                <groupId>io.netty</groupId>
+                <artifactId>netty</artifactId>
+              </exclusion>
             </exclusions>
           </dependency>
           <dependency>
@@ -1635,6 +1657,10 @@
                 <groupId>stax</groupId>
                 <artifactId>stax-api</artifactId>
               </exclusion>
+              <exclusion>
+                <groupId>io.netty</groupId>
+                <artifactId>netty</artifactId>
+              </exclusion>
             </exclusions>
           </dependency>
         </dependencies>