@Override
  public <T extends Service, R> void coprocessorService(Class<T> service, byte[] startKey,
    byte[] endKey, Batch.Call<T, R> callable, Batch.Callback<R> callback)
    throws ServiceException, Throwable {
    final Supplier<Span> supplier = new TableOperationSpanBuilder(conn)
      .setTableName(table.getName()).setOperation(HBaseSemanticAttributes.Operation.COPROC_EXEC);
    TraceUtil.trace(() -> {
      final Context context = Context.current();
      coprocessorService(service.getName(), startKey, endKey, callback, channel -> {
        try (Scope ignored = context.makeCurrent()) {
          T instance = ProtobufUtil.newServiceStub(service, channel);
          return callable.call(instance);
        }
      });
    }, supplier);
  }
Get the corresponding start keys and regions for an arbitrary range of keys.
<p>
@param startKey      Starting row in range, inclusive
@param endKey        Ending row in range
@param includeEndKey true if endRow is inclusive, false if exclusive
@param reload        true to reload information or false to use cached information
@return A pair of list of start keys and list of HRegionLocations that contain the specified
        range
@throws IOException if a remote or network exception occurs
hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableOverAsyncTable.java