code: public long uploadStream(
        ManagedBuffer meta,
        ManagedBuffer data,
        RpcResponseCallback callback) {
      if (logger.isTraceEnabled()) {
        logger.trace("Sending RPC to {}", getRemoteAddress(channel));
      }
  
      long requestId = requestId();
      handler.addRpcRequest(requestId, callback);
  
      RpcChannelListener listener = new RpcChannelListener(requestId, callback);
      channel.writeAndFlush(new UploadStream(requestId, meta, data)).addListener(listener);
  
      return requestId;
    }
docs: Send data to the remote end as a stream.  This differs from stream() in that this is a request
  to *send* data to the remote end, not to receive it from the remote.
  
  @param meta meta data associated with the stream, which will be read completely on the
  receiving end before the stream itself.
  @param data this will be streamed to the remote end to allow for transferring large amounts
  of data without reading into memory.
  @param callback handles the reply -- onSuccess will only be called when both message and data
  are received successfully.