http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestProtos.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestProtos.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestProtos.java
index 3da0254..d28945c 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestProtos.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestProtos.java
@@ -1718,6 +1718,965 @@ public final class TestProtos {
     // @@protoc_insertion_point(class_scope:EchoResponseProto)
   }
 
+  public interface PauseRequestProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+
+    // required uint32 ms = 1;
+    /**
+     * <code>required uint32 ms = 1;</code>
+     */
+    boolean hasMs();
+    /**
+     * <code>required uint32 ms = 1;</code>
+     */
+    int getMs();
+  }
+  /**
+   * Protobuf type {@code PauseRequestProto}
+   */
+  public static final class PauseRequestProto extends
+      com.google.protobuf.GeneratedMessage
+      implements PauseRequestProtoOrBuilder {
+    // Use PauseRequestProto.newBuilder() to construct.
+    private PauseRequestProto(com.google.protobuf.GeneratedMessage.Builder<?> 
builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private PauseRequestProto(boolean noInit) { this.unknownFields = 
com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final PauseRequestProto defaultInstance;
+    public static PauseRequestProto getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public PauseRequestProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PauseRequestProto(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              ms_ = input.readUInt32();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_PauseRequestProto_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_PauseRequestProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.class,
 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<PauseRequestProto> PARSER =
+        new com.google.protobuf.AbstractParser<PauseRequestProto>() {
+      public PauseRequestProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PauseRequestProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PauseRequestProto> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // required uint32 ms = 1;
+    public static final int MS_FIELD_NUMBER = 1;
+    private int ms_;
+    /**
+     * <code>required uint32 ms = 1;</code>
+     */
+    public boolean hasMs() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required uint32 ms = 1;</code>
+     */
+    public int getMs() {
+      return ms_;
+    }
+
+    private void initFields() {
+      ms_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (!hasMs()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeUInt32(1, ms_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, ms_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto)) {
+        return super.equals(obj);
+      }
+      
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
other = 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto) 
obj;
+
+      boolean result = true;
+      result = result && (hasMs() == other.hasMs());
+      if (hasMs()) {
+        result = result && (getMs()
+            == other.getMs());
+      }
+      result = result &&
+          getUnknownFields().equals(other.getUnknownFields());
+      return result;
+    }
+
+    private int memoizedHashCode = 0;
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptorForType().hashCode();
+      if (hasMs()) {
+        hash = (37 * hash) + MS_FIELD_NUMBER;
+        hash = (53 * hash) + getMs();
+      }
+      hash = (29 * hash) + getUnknownFields().hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder 
newBuilder(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto
 prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code PauseRequestProto}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProtoOrBuilder
 {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_PauseRequestProto_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_PauseRequestProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.class,
 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.Builder.class);
+      }
+
+      // Construct using 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        ms_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_PauseRequestProto_descriptor;
+      }
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
getDefaultInstanceForType() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.getDefaultInstance();
+      }
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
build() {
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
buildPartial() {
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
result = new 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.ms_ = ms_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto) {
+          return 
mergeFrom((org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder 
mergeFrom(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto
 other) {
+        if (other == 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.getDefaultInstance())
 return this;
+        if (other.hasMs()) {
+          setMs(other.getMs());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (!hasMs()) {
+
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto) 
e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // required uint32 ms = 1;
+      private int ms_ ;
+      /**
+       * <code>required uint32 ms = 1;</code>
+       */
+      public boolean hasMs() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>required uint32 ms = 1;</code>
+       */
+      public int getMs() {
+        return ms_;
+      }
+      /**
+       * <code>required uint32 ms = 1;</code>
+       */
+      public Builder setMs(int value) {
+        bitField0_ |= 0x00000001;
+        ms_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required uint32 ms = 1;</code>
+       */
+      public Builder clearMs() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        ms_ = 0;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:PauseRequestProto)
+    }
+
+    static {
+      defaultInstance = new PauseRequestProto(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:PauseRequestProto)
+  }
+
+  public interface AddrResponseProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+
+    // required string addr = 1;
+    /**
+     * <code>required string addr = 1;</code>
+     */
+    boolean hasAddr();
+    /**
+     * <code>required string addr = 1;</code>
+     */
+    java.lang.String getAddr();
+    /**
+     * <code>required string addr = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getAddrBytes();
+  }
+  /**
+   * Protobuf type {@code AddrResponseProto}
+   */
+  public static final class AddrResponseProto extends
+      com.google.protobuf.GeneratedMessage
+      implements AddrResponseProtoOrBuilder {
+    // Use AddrResponseProto.newBuilder() to construct.
+    private AddrResponseProto(com.google.protobuf.GeneratedMessage.Builder<?> 
builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private AddrResponseProto(boolean noInit) { this.unknownFields = 
com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final AddrResponseProto defaultInstance;
+    public static AddrResponseProto getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public AddrResponseProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AddrResponseProto(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              addr_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_AddrResponseProto_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_AddrResponseProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.class,
 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<AddrResponseProto> PARSER =
+        new com.google.protobuf.AbstractParser<AddrResponseProto>() {
+      public AddrResponseProto parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AddrResponseProto(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AddrResponseProto> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // required string addr = 1;
+    public static final int ADDR_FIELD_NUMBER = 1;
+    private java.lang.Object addr_;
+    /**
+     * <code>required string addr = 1;</code>
+     */
+    public boolean hasAddr() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required string addr = 1;</code>
+     */
+    public java.lang.String getAddr() {
+      java.lang.Object ref = addr_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          addr_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>required string addr = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getAddrBytes() {
+      java.lang.Object ref = addr_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b =
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        addr_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private void initFields() {
+      addr_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      if (!hasAddr()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getAddrBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getAddrBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto)) {
+        return super.equals(obj);
+      }
+      
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
other = 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto) 
obj;
+
+      boolean result = true;
+      result = result && (hasAddr() == other.hasAddr());
+      if (hasAddr()) {
+        result = result && getAddr()
+            .equals(other.getAddr());
+      }
+      result = result &&
+          getUnknownFields().equals(other.getUnknownFields());
+      return result;
+    }
+
+    private int memoizedHashCode = 0;
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptorForType().hashCode();
+      if (hasAddr()) {
+        hash = (37 * hash) + ADDR_FIELD_NUMBER;
+        hash = (53 * hash) + getAddr().hashCode();
+      }
+      hash = (29 * hash) + getUnknownFields().hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder 
newBuilder(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto
 prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code AddrResponseProto}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProtoOrBuilder
 {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_AddrResponseProto_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_AddrResponseProto_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.class,
 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.Builder.class);
+      }
+
+      // Construct using 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        addr_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.internal_static_AddrResponseProto_descriptor;
+      }
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
getDefaultInstanceForType() {
+        return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance();
+      }
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
build() {
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
buildPartial() {
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
result = new 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.addr_ = addr_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto) {
+          return 
mergeFrom((org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder 
mergeFrom(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto
 other) {
+        if (other == 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance())
 return this;
+        if (other.hasAddr()) {
+          bitField0_ |= 0x00000001;
+          addr_ = other.addr_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        if (!hasAddr()) {
+
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto) 
e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // required string addr = 1;
+      private java.lang.Object addr_ = "";
+      /**
+       * <code>required string addr = 1;</code>
+       */
+      public boolean hasAddr() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>required string addr = 1;</code>
+       */
+      public java.lang.String getAddr() {
+        java.lang.Object ref = addr_;
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
+          addr_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>required string addr = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getAddrBytes() {
+        java.lang.Object ref = addr_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b =
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          addr_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>required string addr = 1;</code>
+       */
+      public Builder setAddr(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        addr_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required string addr = 1;</code>
+       */
+      public Builder clearAddr() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        addr_ = getDefaultInstance().getAddr();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required string addr = 1;</code>
+       */
+      public Builder setAddrBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        addr_ = value;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:AddrResponseProto)
+    }
+
+    static {
+      defaultInstance = new AddrResponseProto(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:AddrResponseProto)
+  }
+
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_EmptyRequestProto_descriptor;
   private static
@@ -1738,6 +2697,16 @@ public final class TestProtos {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_EchoResponseProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_PauseRequestProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_PauseRequestProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_AddrResponseProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_AddrResponseProto_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -1750,8 +2719,10 @@ public final class TestProtos {
       "\n\ntest.proto\"\023\n\021EmptyRequestProto\"\024\n\022Emp" +
       "tyResponseProto\"#\n\020EchoRequestProto\022\017\n\007m" +
       "essage\030\001 \002(\t\"$\n\021EchoResponseProto\022\017\n\007mes" +
-      "sage\030\001 \002(\tB?\n.org.apache.hadoop.hbase.ip" +
-      "c.protobuf.generatedB\nTestProtos\240\001\001"
+      "sage\030\001 \002(\t\"\037\n\021PauseRequestProto\022\n\n\002ms\030\001 
" +
+      "\002(\r\"!\n\021AddrResponseProto\022\014\n\004addr\030\001 \002(\tB?" +
+      "\n.org.apache.hadoop.hbase.ipc.protobuf.g" +
+      "eneratedB\nTestProtos\240\001\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -1782,6 +2753,18 @@ public final class TestProtos {
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_EchoResponseProto_descriptor,
               new java.lang.String[] { "Message", });
+          internal_static_PauseRequestProto_descriptor =
+            getDescriptor().getMessageTypes().get(4);
+          internal_static_PauseRequestProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_PauseRequestProto_descriptor,
+              new java.lang.String[] { "Ms", });
+          internal_static_AddrResponseProto_descriptor =
+            getDescriptor().getMessageTypes().get(5);
+          internal_static_AddrResponseProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_AddrResponseProto_descriptor,
+              new java.lang.String[] { "Addr", });
           return null;
         }
       };

http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestRpcServiceProtos.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestRpcServiceProtos.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestRpcServiceProtos.java
index 3fd34e9..a5b1777 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestRpcServiceProtos.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/protobuf/generated/TestRpcServiceProtos.java
@@ -45,6 +45,22 @@ public final class TestRpcServiceProtos {
           
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>
 done);
 
+      /**
+       * <code>rpc pause(.PauseRequestProto) returns 
(.EmptyResponseProto);</code>
+       */
+      public abstract void pause(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>
 done);
+
+      /**
+       * <code>rpc addr(.EmptyRequestProto) returns 
(.AddrResponseProto);</code>
+       */
+      public abstract void addr(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto>
 done);
+
     }
 
     public static com.google.protobuf.Service newReflectiveService(
@@ -74,6 +90,22 @@ public final class TestRpcServiceProtos {
           impl.error(controller, request, done);
         }
 
+        @java.lang.Override
+        public  void pause(
+            com.google.protobuf.RpcController controller,
+            
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>
 done) {
+          impl.pause(controller, request, done);
+        }
+
+        @java.lang.Override
+        public  void addr(
+            com.google.protobuf.RpcController controller,
+            
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto>
 done) {
+          impl.addr(controller, request, done);
+        }
+
       };
     }
 
@@ -102,6 +134,10 @@ public final class TestRpcServiceProtos {
               return impl.echo(controller, 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoRequestProto)request);
             case 2:
               return impl.error(controller, 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto)request);
+            case 3:
+              return impl.pause(controller, 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto)request);
+            case 4:
+              return impl.addr(controller, 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto)request);
             default:
               throw new java.lang.AssertionError("Can't get here.");
           }
@@ -122,6 +158,10 @@ public final class TestRpcServiceProtos {
               return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoRequestProto.getDefaultInstance();
             case 2:
               return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto.getDefaultInstance();
+            case 3:
+              return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.getDefaultInstance();
+            case 4:
+              return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto.getDefaultInstance();
             default:
               throw new java.lang.AssertionError("Can't get here.");
           }
@@ -142,6 +182,10 @@ public final class TestRpcServiceProtos {
               return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoResponseProto.getDefaultInstance();
             case 2:
               return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance();
+            case 3:
+              return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance();
+            case 4:
+              return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance();
             default:
               throw new java.lang.AssertionError("Can't get here.");
           }
@@ -174,6 +218,22 @@ public final class TestRpcServiceProtos {
         
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request,
         
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>
 done);
 
+    /**
+     * <code>rpc pause(.PauseRequestProto) returns 
(.EmptyResponseProto);</code>
+     */
+    public abstract void pause(
+        com.google.protobuf.RpcController controller,
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>
 done);
+
+    /**
+     * <code>rpc addr(.EmptyRequestProto) returns (.AddrResponseProto);</code>
+     */
+    public abstract void addr(
+        com.google.protobuf.RpcController controller,
+        
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto>
 done);
+
     public static final
         com.google.protobuf.Descriptors.ServiceDescriptor
         getDescriptor() {
@@ -211,6 +271,16 @@ public final class TestRpcServiceProtos {
             
com.google.protobuf.RpcUtil.<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>specializeCallback(
               done));
           return;
+        case 3:
+          this.pause(controller, 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>specializeCallback(
+              done));
+          return;
+        case 4:
+          this.addr(controller, 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto>specializeCallback(
+              done));
+          return;
         default:
           throw new java.lang.AssertionError("Can't get here.");
       }
@@ -231,6 +301,10 @@ public final class TestRpcServiceProtos {
           return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoRequestProto.getDefaultInstance();
         case 2:
           return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto.getDefaultInstance();
+        case 3:
+          return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto.getDefaultInstance();
+        case 4:
+          return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto.getDefaultInstance();
         default:
           throw new java.lang.AssertionError("Can't get here.");
       }
@@ -251,6 +325,10 @@ public final class TestRpcServiceProtos {
           return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EchoResponseProto.getDefaultInstance();
         case 2:
           return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance();
+        case 3:
+          return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance();
+        case 4:
+          return 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance();
         default:
           throw new java.lang.AssertionError("Can't get here.");
       }
@@ -316,6 +394,36 @@ public final class TestRpcServiceProtos {
             
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.class,
             
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance()));
       }
+
+      public  void pause(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(3),
+          controller,
+          request,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.class,
+            
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance()));
+      }
+
+      public  void addr(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(4),
+          controller,
+          request,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.class,
+            
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance()));
+      }
     }
 
     public static BlockingInterface newBlockingStub(
@@ -338,6 +446,16 @@ public final class TestRpcServiceProtos {
           com.google.protobuf.RpcController controller,
           
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request)
           throws com.google.protobuf.ServiceException;
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto 
pause(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
addr(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
     }
 
     private static final class BlockingStub implements BlockingInterface {
@@ -382,6 +500,30 @@ public final class TestRpcServiceProtos {
           
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance());
       }
 
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto 
pause(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.PauseRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(3),
+          controller,
+          request,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyResponseProto.getDefaultInstance());
+      }
+
+
+      public 
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto 
addr(
+          com.google.protobuf.RpcController controller,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.EmptyRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(4),
+          controller,
+          request,
+          
org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos.AddrResponseProto.getDefaultInstance());
+      }
+
     }
 
     // @@protoc_insertion_point(class_scope:TestProtobufRpcProto)
@@ -396,14 +538,16 @@ public final class TestRpcServiceProtos {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\026test_rpc_service.proto\032\ntest.proto2\250\001\n" +
+      "\n\026test_rpc_service.proto\032\ntest.proto2\212\002\n" +
       "\024TestProtobufRpcProto\022/\n\004ping\022\022.EmptyReq" +
       "uestProto\032\023.EmptyResponseProto\022-\n\004echo\022\021" +
       ".EchoRequestProto\032\022.EchoResponseProto\0220\n" +
       "\005error\022\022.EmptyRequestProto\032\023.EmptyRespon" +
-      "seProtoBL\n.org.apache.hadoop.hbase.ipc.p" +
-      "rotobuf.generatedB\024TestRpcServiceProtos\210" +
-      "\001\001\240\001\001"
+      "seProto\0220\n\005pause\022\022.PauseRequestProto\032\023.E" +
+      "mptyResponseProto\022.\n\004addr\022\022.EmptyRequest" +
+      "Proto\032\022.AddrResponseProtoBL\n.org.apache." +
+      "hadoop.hbase.ipc.protobuf.generatedB\024Tes" +
+      "tRpcServiceProtos\210\001\001\240\001\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {

http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
index 5cb7e8f..14bd2fd 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
@@ -17,6 +17,10 @@
  */
 package org.apache.hadoop.hbase.master;
 
+import com.google.protobuf.RpcController;
+import com.google.protobuf.Service;
+import com.google.protobuf.ServiceException;
+
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
@@ -43,7 +47,7 @@ import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.executor.ExecutorService;
-import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
+import org.apache.hadoop.hbase.ipc.HBaseRpcController;
 import org.apache.hadoop.hbase.ipc.RpcServerInterface;
 import org.apache.hadoop.hbase.master.TableLockManager.NullTableLockManager;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
@@ -66,8 +70,6 @@ import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsReques
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
-import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;
-import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
@@ -80,6 +82,8 @@ import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfiguratio
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
+import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;
+import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
 import 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
 import 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;
@@ -111,9 +115,7 @@ import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.zookeeper.KeeperException;
 
-import com.google.protobuf.RpcController;
-import com.google.protobuf.Service;
-import com.google.protobuf.ServiceException;
+import net.sf.ehcache.search.Results;
 
 /**
  * A mock RegionServer implementation.
@@ -405,7 +407,7 @@ ClientProtos.ClientService.BlockingInterface, 
RegionServerServices {
           builder.addCellsPerResult(result.size());
           List<CellScannable> results = new ArrayList<CellScannable>(1);
           results.add(result);
-          ((PayloadCarryingRpcController) controller).setCellScanner(CellUtil
+          ((HBaseRpcController) controller).setCellScanner(CellUtil
               .createCellScanner(results));
           builder.setMoreResults(true);
         }

http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
index dfb01cb..b6e2424 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
@@ -22,6 +22,10 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Sets;
+import com.google.protobuf.ServiceException;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -56,7 +60,7 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
-import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
+import org.apache.hadoop.hbase.ipc.HBaseRpcControllerImpl;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.protobuf.RequestConverter;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
@@ -73,10 +77,6 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Sets;
-import com.google.protobuf.ServiceException;
-
 @Category(LargeTests.class)
 public class TestEndToEndSplitTransaction {
   private static final Log LOG = 
LogFactory.getLog(TestEndToEndSplitTransaction.class);
@@ -179,7 +179,7 @@ public class TestEndToEndSplitTransaction {
         regionName, new Scan(row), 1, true);
       try {
         server.getRSRpcServices().scan(
-          new PayloadCarryingRpcController(), scanRequest);
+          new HBaseRpcControllerImpl(), scanRequest);
       } catch (ServiceException se) {
         throw ProtobufUtil.getRemoteException(se);
       }

http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/security/AbstractTestSecureIPC.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/AbstractTestSecureIPC.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/AbstractTestSecureIPC.java
deleted file mode 100644
index 6db0b75..0000000
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/AbstractTestSecureIPC.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.security;
-
-import static 
org.apache.hadoop.hbase.security.HBaseKerberosUtils.getKeytabFileForTesting;
-import static 
org.apache.hadoop.hbase.security.HBaseKerberosUtils.getPrincipalForTesting;
-import static 
org.apache.hadoop.hbase.security.HBaseKerberosUtils.getSecuredConfiguration;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-import com.google.protobuf.RpcController;
-import com.google.protobuf.ServiceException;
-import org.apache.commons.lang.RandomStringUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.CommonConfigurationKeys;
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.CellScanner;
-import org.apache.hadoop.hbase.CellUtil;
-import org.apache.hadoop.hbase.HBaseTestingUtility;
-import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.ipc.FifoRpcScheduler;
-import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
-import org.apache.hadoop.hbase.ipc.RpcClient;
-import org.apache.hadoop.hbase.ipc.RpcClientFactory;
-import org.apache.hadoop.hbase.ipc.RpcServer;
-import org.apache.hadoop.hbase.ipc.RpcServerInterface;
-import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;
-import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;
-import org.apache.hadoop.minikdc.MiniKdc;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
-
-import com.google.common.collect.Lists;
-import com.google.protobuf.BlockingRpcChannel;
-import com.google.protobuf.BlockingService;
-
-import javax.security.sasl.SaslException;
-
-public abstract class AbstractTestSecureIPC {
-
-  private static final HBaseTestingUtility TEST_UTIL = new 
HBaseTestingUtility();
-
-  private static final File KEYTAB_FILE = new 
File(TEST_UTIL.getDataTestDir("keytab").toUri()
-      .getPath());
-
-  static final BlockingService SERVICE =
-      TestRpcServiceProtos.TestProtobufRpcProto.newReflectiveBlockingService(
-          new TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface() {
-
-            @Override
-            public TestProtos.EmptyResponseProto ping(RpcController controller,
-                                                      
TestProtos.EmptyRequestProto request)
-                throws ServiceException {
-              return null;
-            }
-
-            @Override
-            public TestProtos.EmptyResponseProto error(RpcController 
controller,
-                                                       
TestProtos.EmptyRequestProto request)
-                throws ServiceException {
-              return null;
-            }
-
-            @Override
-            public TestProtos.EchoResponseProto echo(RpcController controller,
-                                                     
TestProtos.EchoRequestProto request)
-                throws ServiceException {
-              if (controller instanceof PayloadCarryingRpcController) {
-                PayloadCarryingRpcController pcrc = 
(PayloadCarryingRpcController) controller;
-                // If cells, scan them to check we are able to iterate what we 
were given and since
-                // this is
-                // an echo, just put them back on the controller creating a 
new block. Tests our
-                // block
-                // building.
-                CellScanner cellScanner = pcrc.cellScanner();
-                List<Cell> list = null;
-                if (cellScanner != null) {
-                  list = new ArrayList<Cell>();
-                  try {
-                    while (cellScanner.advance()) {
-                      list.add(cellScanner.current());
-                    }
-                  } catch (IOException e) {
-                    throw new ServiceException(e);
-                  }
-                }
-                cellScanner = CellUtil.createCellScanner(list);
-                ((PayloadCarryingRpcController) 
controller).setCellScanner(cellScanner);
-              }
-              return TestProtos.EchoResponseProto.newBuilder()
-                  .setMessage(request.getMessage()).build();
-            }
-          });
-
-  private static MiniKdc KDC;
-  private static String HOST = "localhost";
-  private static String PRINCIPAL;
-
-  String krbKeytab;
-  String krbPrincipal;
-  UserGroupInformation ugi;
-  Configuration clientConf;
-  Configuration serverConf;
-
-  abstract Class<? extends RpcClient> getRpcClientClass();
-
-  @Rule
-  public ExpectedException exception = ExpectedException.none();
-
-  @BeforeClass
-  public static void setUp() throws Exception {
-    KDC = TEST_UTIL.setupMiniKdc(KEYTAB_FILE);
-    PRINCIPAL = "hbase/" + HOST;
-    KDC.createPrincipal(KEYTAB_FILE, PRINCIPAL);
-    HBaseKerberosUtils.setPrincipalForTesting(PRINCIPAL + "@" + 
KDC.getRealm());
-  }
-
-  @AfterClass
-  public static void tearDown() throws IOException {
-    if (KDC != null) {
-      KDC.stop();
-    }
-    TEST_UTIL.cleanupTestDir();
-  }
-
-  @Before
-  public void setUpTest() throws Exception {
-    krbKeytab = getKeytabFileForTesting();
-    krbPrincipal = getPrincipalForTesting();
-    ugi = loginKerberosPrincipal(krbKeytab, krbPrincipal);
-    clientConf = getSecuredConfiguration();
-    clientConf.set(RpcClientFactory.CUSTOM_RPC_CLIENT_IMPL_CONF_KEY, 
getRpcClientClass().getName());
-    serverConf = getSecuredConfiguration();
-  }
-
-  @Test
-  public void testRpcCallWithEnabledKerberosSaslAuth() throws Exception {
-    UserGroupInformation ugi2 = UserGroupInformation.getCurrentUser();
-
-    // check that the login user is okay:
-    assertSame(ugi, ugi2);
-    assertEquals(AuthenticationMethod.KERBEROS, ugi.getAuthenticationMethod());
-    assertEquals(krbPrincipal, ugi.getUserName());
-
-    callRpcService(User.create(ugi2));
-  }
-
-  @Test
-  public void testRpcFallbackToSimpleAuth() throws Exception {
-    String clientUsername = "testuser";
-    UserGroupInformation clientUgi = 
UserGroupInformation.createUserForTesting(clientUsername,
-        new String[]{clientUsername});
-
-    // check that the client user is insecure
-    assertNotSame(ugi, clientUgi);
-    assertEquals(AuthenticationMethod.SIMPLE, 
clientUgi.getAuthenticationMethod());
-    assertEquals(clientUsername, clientUgi.getUserName());
-
-    clientConf.set(User.HBASE_SECURITY_CONF_KEY, "simple");
-    serverConf.setBoolean(RpcServer.FALLBACK_TO_INSECURE_CLIENT_AUTH, true);
-    callRpcService(User.create(clientUgi));
-  }
-
-  void setRpcProtection(String clientProtection, String serverProtection) {
-    clientConf.set("hbase.rpc.protection", clientProtection);
-    serverConf.set("hbase.rpc.protection", serverProtection);
-  }
-
-  /**
-   * Test various qpos of Server and Client.
-   * @throws Exception
-   */
-  @Test
-  public void testSaslWithCommonQop() throws Exception {
-    setRpcProtection("authentication", "authentication");
-    callRpcService(User.create(ugi));
-
-    setRpcProtection("integrity", "integrity");
-    callRpcService(User.create(ugi));
-
-    setRpcProtection("privacy", "privacy");
-    callRpcService(User.create(ugi));
-  }
-
-  private UserGroupInformation loginKerberosPrincipal(String krbKeytab, String 
krbPrincipal)
-      throws Exception {
-    Configuration cnf = new Configuration();
-    cnf.set(CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION, 
"kerberos");
-    UserGroupInformation.setConfiguration(cnf);
-    UserGroupInformation.loginUserFromKeytab(krbPrincipal, krbKeytab);
-    return UserGroupInformation.getLoginUser();
-  }
-
-  /**
-   * Sets up a RPC Server and a Client. Does a RPC checks the result. If an 
exception is thrown
-   * from the stub, this function will throw root cause of that exception.
-   */
-  private void callRpcService(User clientUser) throws Exception {
-    SecurityInfo securityInfoMock = Mockito.mock(SecurityInfo.class);
-    Mockito.when(securityInfoMock.getServerPrincipal())
-        .thenReturn(HBaseKerberosUtils.KRB_PRINCIPAL);
-    SecurityInfo.addInfo("TestProtobufRpcProto", securityInfoMock);
-
-    InetSocketAddress isa = new InetSocketAddress(HOST, 0);
-
-    RpcServerInterface rpcServer =
-        new RpcServer(null, "AbstractTestSecureIPC",
-            Lists.newArrayList(new 
RpcServer.BlockingServiceAndInterface(SERVICE, null)), isa,
-            serverConf, new FifoRpcScheduler(serverConf, 1));
-    rpcServer.start();
-    try (RpcClient rpcClient = RpcClientFactory.createClient(clientConf,
-        HConstants.DEFAULT_CLUSTER_ID.toString())) {
-      InetSocketAddress address = rpcServer.getListenerAddress();
-      if (address == null) {
-        throw new IOException("Listener channel is closed");
-      }
-      BlockingRpcChannel channel =
-          rpcClient.createBlockingRpcChannel(
-              ServerName.valueOf(address.getHostName(), address.getPort(),
-                  System.currentTimeMillis()), clientUser, 0);
-      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface stub =
-          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(channel);
-      TestThread th1 = new TestThread(stub);
-      final Throwable exception[] = new Throwable[1];
-      Collections.synchronizedList(new ArrayList<Throwable>());
-      Thread.UncaughtExceptionHandler exceptionHandler =
-          new Thread.UncaughtExceptionHandler() {
-            public void uncaughtException(Thread th, Throwable ex) {
-              exception[0] = ex;
-            }
-          };
-      th1.setUncaughtExceptionHandler(exceptionHandler);
-      th1.start();
-      th1.join();
-      if (exception[0] != null) {
-        // throw root cause.
-        while (exception[0].getCause() != null) {
-          exception[0] = exception[0].getCause();
-        }
-        throw (Exception) exception[0];
-      }
-    } finally {
-      rpcServer.stop();
-    }
-  }
-
-  public static class TestThread extends Thread {
-    private final TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface 
stub;
-
-    public 
TestThread(TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface stub) {
-      this.stub = stub;
-    }
-
-    @Override
-    public void run() {
-      try {
-        int[] messageSize = new int[] {100, 1000, 10000};
-        for (int i = 0; i < messageSize.length; i++) {
-          String input = RandomStringUtils.random(messageSize[i]);
-          String result = stub.echo(null, 
TestProtos.EchoRequestProto.newBuilder()
-              .setMessage(input).build()).getMessage();
-          assertEquals(input, result);
-        }
-      } catch (ServiceException e) {
-        throw new RuntimeException(e);
-      }
-    }
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestAsyncSecureIPC.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestAsyncSecureIPC.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestAsyncSecureIPC.java
deleted file mode 100644
index 2fc270d..0000000
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestAsyncSecureIPC.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.hbase.security;
-
-import org.apache.hadoop.hbase.ipc.AsyncRpcClient;
-import org.apache.hadoop.hbase.ipc.RpcClient;
-import org.apache.hadoop.hbase.testclassification.SecurityTests;
-import org.apache.hadoop.hbase.testclassification.SmallTests;
-import org.junit.experimental.categories.Category;
-
-@Category({ SecurityTests.class, SmallTests.class })
-public class TestAsyncSecureIPC extends AbstractTestSecureIPC {
-
-  Class<? extends RpcClient> getRpcClientClass() {
-    return AsyncRpcClient.class;
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/094e9a31/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
deleted file mode 100644
index db4a8ee..0000000
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/TestHBaseSaslRpcClient.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.security;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.TextOutputCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.sasl.Sasl;
-import javax.security.sasl.RealmCallback;
-import javax.security.sasl.RealmChoiceCallback;
-import javax.security.sasl.SaslClient;
-
-import org.apache.hadoop.hbase.testclassification.SmallTests;
-import 
org.apache.hadoop.hbase.security.HBaseSaslRpcClient.SaslClientCallbackHandler;
-import org.apache.hadoop.io.DataInputBuffer;
-import org.apache.hadoop.io.DataOutputBuffer;
-import org.apache.hadoop.security.token.Token;
-import org.apache.hadoop.security.token.TokenIdentifier;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.ExpectedException;
-import org.mockito.Mockito;
-
-import com.google.common.base.Strings;
-
-@Category(SmallTests.class)
-public class TestHBaseSaslRpcClient {
-  
-  static {
-    System.setProperty("java.security.krb5.realm", "DOMAIN.COM");
-    System.setProperty("java.security.krb5.kdc", "DOMAIN.COM");
-  }
-  
-  static final String DEFAULT_USER_NAME = "principal";
-  static final String DEFAULT_USER_PASSWORD = "password";
-
-  private static final Logger LOG = 
Logger.getLogger(TestHBaseSaslRpcClient.class);
-
-
-  @Rule
-  public ExpectedException exception = ExpectedException.none();
-
-  @BeforeClass
-  public static void before() {
-    Logger.getRootLogger().setLevel(Level.DEBUG);
-  }
-
-  @Test
-  public void testSaslQOPNotEmpty() throws Exception {
-    Token<? extends TokenIdentifier> token = 
createTokenMockWithCredentials(DEFAULT_USER_NAME,
-        DEFAULT_USER_PASSWORD);
-    // default QOP is authentication
-    new HBaseSaslRpcClient(AuthMethod.DIGEST, token, 
"principal/[email protected]", false);
-    
assertTrue(SaslUtil.SASL_PROPS.get(Sasl.QOP).equals(SaslUtil.QualityOfProtection.
-        AUTHENTICATION.getSaslQop()));
-
-    // check with specific QOPs
-    new HBaseSaslRpcClient(AuthMethod.DIGEST, token, 
"principal/[email protected]", false,
-        "authentication");
-    
assertTrue(SaslUtil.SASL_PROPS.get(Sasl.QOP).equals(SaslUtil.QualityOfProtection.
-        AUTHENTICATION.getSaslQop()));
-
-    new HBaseSaslRpcClient(AuthMethod.DIGEST, token, 
"principal/[email protected]", false,
-        "privacy");
-    
assertTrue(SaslUtil.SASL_PROPS.get(Sasl.QOP).equals(SaslUtil.QualityOfProtection.
-        PRIVACY.getSaslQop()));
-
-    new HBaseSaslRpcClient(AuthMethod.DIGEST, token, 
"principal/[email protected]", false,
-        "integrity");
-    
assertTrue(SaslUtil.SASL_PROPS.get(Sasl.QOP).equals(SaslUtil.QualityOfProtection.
-        INTEGRITY.getSaslQop()));
-
-    exception.expect(IllegalArgumentException.class);
-    new HBaseSaslRpcClient(AuthMethod.DIGEST, token, 
"principal/[email protected]", false,
-        "wrongvalue");
-  }
-
-  @Test
-  public void testSaslClientCallbackHandler() throws 
UnsupportedCallbackException {
-    final Token<? extends TokenIdentifier> token = createTokenMock();
-    when(token.getIdentifier()).thenReturn(DEFAULT_USER_NAME.getBytes());
-    when(token.getPassword()).thenReturn(DEFAULT_USER_PASSWORD.getBytes());
-
-    final NameCallback nameCallback = mock(NameCallback.class);
-    final PasswordCallback passwordCallback = mock(PasswordCallback.class);
-    final RealmCallback realmCallback = mock(RealmCallback.class);
-    final RealmChoiceCallback realmChoiceCallback = 
mock(RealmChoiceCallback.class);
-
-    Callback[] callbackArray = {nameCallback, passwordCallback,
-        realmCallback, realmChoiceCallback};
-    final SaslClientCallbackHandler saslClCallbackHandler = new 
SaslClientCallbackHandler(token);
-    saslClCallbackHandler.handle(callbackArray);
-    verify(nameCallback).setName(anyString());
-    verify(realmCallback).setText(anyString());
-    verify(passwordCallback).setPassword(any(char[].class));
-  }
-
-  @Test
-  public void testSaslClientCallbackHandlerWithException() {
-    final Token<? extends TokenIdentifier> token = createTokenMock();
-    when(token.getIdentifier()).thenReturn(DEFAULT_USER_NAME.getBytes());
-    when(token.getPassword()).thenReturn(DEFAULT_USER_PASSWORD.getBytes());
-    final SaslClientCallbackHandler saslClCallbackHandler = new 
SaslClientCallbackHandler(token);
-    try {
-      saslClCallbackHandler.handle(new Callback[] { 
mock(TextOutputCallback.class) });
-    } catch (UnsupportedCallbackException expEx) {
-      //expected
-    } catch (Exception ex) {
-      fail("testSaslClientCallbackHandlerWithException error : " + 
ex.getMessage());
-    }
-  }
-
-  @Test
-  public void testHBaseSaslRpcClientCreation() throws Exception {
-    //creation kerberos principal check section
-    assertFalse(assertSuccessCreationKerberosPrincipal(null));
-    assertFalse(assertSuccessCreationKerberosPrincipal("DOMAIN.COM"));
-    
assertFalse(assertSuccessCreationKerberosPrincipal("principal/DOMAIN.COM"));
-    if 
(!assertSuccessCreationKerberosPrincipal("principal/[email protected]")) {
-      // XXX: This can fail if kerberos support in the OS is not sane, see 
HBASE-10107.
-      // For now, don't assert, just warn
-      LOG.warn("Could not create a SASL client with valid Kerberos 
credential");
-    }
-
-    //creation digest principal check section
-    assertFalse(assertSuccessCreationDigestPrincipal(null, null));
-    assertFalse(assertSuccessCreationDigestPrincipal("", ""));
-    assertFalse(assertSuccessCreationDigestPrincipal("", null));
-    assertFalse(assertSuccessCreationDigestPrincipal(null, ""));
-    assertTrue(assertSuccessCreationDigestPrincipal(DEFAULT_USER_NAME, 
DEFAULT_USER_PASSWORD));
-
-    //creation simple principal check section
-    assertFalse(assertSuccessCreationSimplePrincipal("", ""));
-    assertFalse(assertSuccessCreationSimplePrincipal(null, null));
-    assertFalse(assertSuccessCreationSimplePrincipal(DEFAULT_USER_NAME, 
DEFAULT_USER_PASSWORD));
-
-    //exceptions check section
-    assertTrue(assertIOExceptionThenSaslClientIsNull(DEFAULT_USER_NAME, 
DEFAULT_USER_PASSWORD));
-    assertTrue(assertIOExceptionWhenGetStreamsBeforeConnectCall(
-        DEFAULT_USER_NAME, DEFAULT_USER_PASSWORD));
-  }
-
-  @Test
-  public void testAuthMethodReadWrite() throws IOException {
-    DataInputBuffer in = new DataInputBuffer();
-    DataOutputBuffer out = new DataOutputBuffer();
-
-    assertAuthMethodRead(in, AuthMethod.SIMPLE);
-    assertAuthMethodRead(in, AuthMethod.KERBEROS);
-    assertAuthMethodRead(in, AuthMethod.DIGEST);
-
-    assertAuthMethodWrite(out, AuthMethod.SIMPLE);
-    assertAuthMethodWrite(out, AuthMethod.KERBEROS);
-    assertAuthMethodWrite(out, AuthMethod.DIGEST);
-  }
-
-  private void assertAuthMethodRead(DataInputBuffer in, AuthMethod authMethod)
-      throws IOException {
-    in.reset(new byte[] {authMethod.code}, 1);
-    assertEquals(authMethod, AuthMethod.read(in));
-  }
-
-  private void assertAuthMethodWrite(DataOutputBuffer out, AuthMethod 
authMethod)
-      throws IOException {
-    authMethod.write(out);
-    assertEquals(authMethod.code, out.getData()[0]);
-    out.reset();
-  }
-
-  private boolean assertIOExceptionWhenGetStreamsBeforeConnectCall(String 
principal,
-      String password) throws IOException {
-    boolean inState = false;
-    boolean outState = false;
-
-    HBaseSaslRpcClient rpcClient = new HBaseSaslRpcClient(AuthMethod.DIGEST, 
-        createTokenMockWithCredentials(principal, password), principal, false) 
{
-      @Override
-      public SaslClient createDigestSaslClient(String[] mechanismNames,
-          String saslDefaultRealm, CallbackHandler saslClientCallbackHandler)
-              throws IOException {
-        return Mockito.mock(SaslClient.class);
-      }
-
-      @Override
-      public SaslClient createKerberosSaslClient(String[] mechanismNames,
-          String userFirstPart, String userSecondPart) throws IOException {
-        return Mockito.mock(SaslClient.class);
-      }
-    };
-    
-    try {
-      rpcClient.getInputStream(Mockito.mock(InputStream.class));
-    } catch(IOException ex) {
-      //Sasl authentication exchange hasn't completed yet
-      inState = true;
-    }
-
-    try {
-      rpcClient.getOutputStream(Mockito.mock(OutputStream.class));
-    } catch(IOException ex) {
-      //Sasl authentication exchange hasn't completed yet
-      outState = true;
-    }
-
-    return inState && outState;
-  }
-
-  private boolean assertIOExceptionThenSaslClientIsNull(String principal, 
String password) {
-    try {
-      new HBaseSaslRpcClient(AuthMethod.DIGEST, 
-          createTokenMockWithCredentials(principal, password), principal, 
false) {
-        @Override
-        public SaslClient createDigestSaslClient(String[] mechanismNames,
-            String saslDefaultRealm, CallbackHandler saslClientCallbackHandler)
-                throws IOException {
-          return null;
-        }
-  
-        @Override
-        public SaslClient createKerberosSaslClient(String[] mechanismNames,
-            String userFirstPart, String userSecondPart) throws IOException {
-          return null;
-        }
-      };
-      return false;
-    } catch (IOException ex) {
-      return true;
-    }
-  }
-
-  private boolean assertSuccessCreationKerberosPrincipal(String principal) {
-    HBaseSaslRpcClient rpcClient = null;
-    try {
-      rpcClient = createSaslRpcClientForKerberos(principal);
-    } catch(Exception ex) {
-      LOG.error(ex.getMessage(), ex);
-    }
-    return rpcClient != null;
-  }
-
-  private boolean assertSuccessCreationDigestPrincipal(String principal, 
String password) {
-    HBaseSaslRpcClient rpcClient = null;
-    try {
-      rpcClient = new HBaseSaslRpcClient(AuthMethod.DIGEST, 
-          createTokenMockWithCredentials(principal, password), principal, 
false);
-    } catch(Exception ex) {
-      LOG.error(ex.getMessage(), ex);
-    }
-    return rpcClient != null;
-  }
-
-  private boolean assertSuccessCreationSimplePrincipal(String principal, 
String password) {
-    HBaseSaslRpcClient rpcClient = null;
-    try {
-      rpcClient = createSaslRpcClientSimple(principal, password);
-    } catch(Exception ex) {
-      LOG.error(ex.getMessage(), ex);
-    }
-    return rpcClient != null;
-  }
-
-  private HBaseSaslRpcClient createSaslRpcClientForKerberos(String principal)
-      throws IOException {
-    return new HBaseSaslRpcClient(AuthMethod.KERBEROS, createTokenMock(), 
principal, false);
-  }
-
-  private Token<? extends TokenIdentifier> createTokenMockWithCredentials(
-      String principal, String password)
-      throws IOException {
-    Token<? extends TokenIdentifier> token = createTokenMock();
-    if (!Strings.isNullOrEmpty(principal) && !Strings.isNullOrEmpty(password)) 
{
-      when(token.getIdentifier()).thenReturn(DEFAULT_USER_NAME.getBytes());
-      when(token.getPassword()).thenReturn(DEFAULT_USER_PASSWORD.getBytes());
-    }
-    return token;
-  }
-
-  private HBaseSaslRpcClient createSaslRpcClientSimple(String principal, 
String password)
-      throws IOException {
-    return new HBaseSaslRpcClient(AuthMethod.SIMPLE, createTokenMock(), 
principal, false);
-  }
-
-  @SuppressWarnings("unchecked")
-  private Token<? extends TokenIdentifier> createTokenMock() {
-    return mock(Token.class);
-  }
-}

Reply via email to