code: public void send(ByteBuffer request, Object ctx)
        throws InvalidPhase, TooManyPendingRequests {
      this.mainThread.send(request, ctx);
    }
docs: Submits a request to Zab. Under the hood, followers forward requests to the
  leader and the leader will be responsible for converting this request to
  idempotent transaction and broadcasting. If you send request in
  non-broadcasting phase, the operation will fail.
  
  @param request the request to send through Zab
  @param ctx context to be provided to the callback
  @throws ZabException.InvalidPhase if Zab is not in broadcasting phase.
  @throws ZabException.TooManyPendingRequests if the pending requests exceeds
  the certain size, for example: if there are more pending requests than
  ZabConfig.MAX_PENDING_REQS.