code: private <R extends Row, T> ApiFuture<Result> issueAsyncRowRequest(
        Row row, Batch.Callback<T> callback, Object[] results,
        int index) {
      LOG.trace("issueRowRequest(Row, Batch.Callback, Object[], index");
      SettableApiFuture<Result> resultFuture = SettableApiFuture.create();
      RpcResultFutureCallback<T> futureCallback =
          new RpcResultFutureCallback<T>(row, callback, index, results, resultFuture);
      results[index] = null;
      ApiFutures.addCallback(issueAsyncRequest(row),
          futureCallback, MoreExecutors.directExecutor());
      return resultFuture;
    }
docs: Issue a single RPC recording the result into {@code results[index]} and if not-null, invoking
  the supplied callback.
  @param row The action to perform
  @param callback The callback to invoke when the RPC completes and we have results
  @param results An array of results, into which we should store the result of the operation
  @param index The into into the array of results where we should store our result
  @param <R> The action type
  @param <T> The type of the callback.
  @return A {@link ApiFuture} that will have the result when the RPC completes.