code: private ManagedChannel createManagedChannel(ChannelKey channelKey) {
      NettyChannelBuilder channelBuilder = NettyChannelBuilder.forAddress(channelKey.mAddress);
      if (channelKey.mKeepAliveTime.isPresent()) {
        channelBuilder.keepAliveTime(channelKey.mKeepAliveTime.get().getFirst(),
            channelKey.mKeepAliveTime.get().getSecond());
      }
      if (channelKey.mKeepAliveTimeout.isPresent()) {
        channelBuilder.keepAliveTimeout(channelKey.mKeepAliveTimeout.get().getFirst(),
            channelKey.mKeepAliveTimeout.get().getSecond());
      }
      if (channelKey.mMaxInboundMessageSize.isPresent()) {
        channelBuilder.maxInboundMessageSize(channelKey.mMaxInboundMessageSize.get());
      }
      if (channelKey.mFlowControlWindow.isPresent()) {
        channelBuilder.flowControlWindow(channelKey.mFlowControlWindow.get());
      }
      if (channelKey.mChannelType.isPresent()) {
        channelBuilder.channelType(channelKey.mChannelType.get());
      }
      if (channelKey.mEventLoopGroup.isPresent()) {
        channelBuilder.eventLoopGroup(channelKey.mEventLoopGroup.get());
      }
      channelBuilder.usePlaintext();
      return channelBuilder.build();
    }
docs: Creates a {@link ManagedChannel} by given pool key.
  
  (Should be called with {@code mLock} acquired.)
  
  @param channelKey channel pool key
  @return the created channel