docs: static <T> T runWithRetries(Callable<T> callable) {
      // Use same backoff setting as abort, somewhat arbitrarily.
      Span span = tracer.getCurrentSpan();
      ExponentialBackOff backOff = newBackOff();
      Context context = Context.current();
      int attempt = 0;
      while (true) {
        attempt++;
        try {
          span.addAnnotation(
              "Starting operation",
              ImmutableMap.of("Attempt", AttributeValue.longAttributeValue(attempt)));
          T result = callable.call();
          return result;
        } catch (SpannerException e) {
          if (!e.isRetryable()) {
            throw e;
          }
          logger.log(Level.FINE, "Retryable exception, will sleep and retry", e);
          long delay = e.getRetryDelayInMillis();
          if (delay != -1) {
            backoffSleep(context, delay);
          } else {
            backoffSleep(context, backOff);
          }
        } catch (Exception e) {
          Throwables.throwIfUnchecked(e);
          throw newSpannerException(ErrorCode.INTERNAL, "Unexpected exception thrown", e);
        }
      }
    }