@Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    if (isSslError(cause)) {
      // this should have been logged in other places, see HBASE-27782 for more details.
      // here we just log it with debug and tell users that this is not a critical problem,
      // otherwise if we just pass it through the pipeline, it will lead to a confusing
      // "An exceptionCaught() event was fired, and it reached at the tail of the pipeline"
      LOG.debug(
        "got ssl exception, which should have already been proceeded, log it here to"
          + " prevent it being passed to netty's TailContext and trigger a confusing WARN message",
        cause);
    } else {
      ctx.fireExceptionCaught(cause);
    }
  }
We will expose the connection to upper layer before initialized, so we need to buffer the calls
passed in and write them out once the connection is established.
hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.java