code: public void flush(ByteBuffer request, Object ctx)
        throws InvalidPhase, TooManyPendingRequests {
      this.mainThread.flush(request, ctx);
    }
docs: Flushes a request through pipeline. The flushed request will be delivered
  in order with other sending requests, but it will not be convereted to
  idempotent transaction and will not be persisted in log. And it will only
  be delivered on the server who issued this request. The purpose of flush
  is to allow implementing a consistent read-after-write. If you send flush
  request in non-broadcasting phase, the operation will fail.
  
  @param request the request to be flushed.
  @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.