code: @Override
    public ResultScanner getScanner(Scan scan) throws IOException {
      LOG.trace("getScanner(Scan)");
      Span span = TRACER.spanBuilder("BigtableTable.scan").startSpan();
      try (Scope scope = TRACER.withSpan(span)) {
        com.google.cloud.bigtable.grpc.scanner.ResultScanner<FlatRow>
            scanner = clientWrapper.readFlatRows(hbaseAdapter.adapt(scan));
        if (hasWhileMatchFilter(scan.getFilter())) {
          return Adapters.BIGTABLE_WHILE_MATCH_RESULT_RESULT_SCAN_ADAPTER.adapt(scanner, span);
        }
        return Adapters.BIGTABLE_RESULT_SCAN_ADAPTER.adapt(scanner, span);
      } catch (Throwable throwable) {
        LOG.error("Encountered exception when executing getScanner.", throwable);
        span.setStatus(Status.UNKNOWN);
        // Close the span only when throw an exception and not on finally because if no exception
        // the span will be ended by the adapter.
        span.end();
        throw new IOException(
            makeGenericExceptionMessage(
                "getScanner",
                options.getProjectId(),
                tableName.getQualifierAsString()),
            throwable);
      }
    }
docs: {@inheritDoc}