def METHOD_NAME(span):
    # type: (Span) -> bool
    # We determine if we should capture the exception information from the span
    # by looking at its local root. If we have budget to capture, we mark the
    # root as "info captured" and return True. If we don't have budget, we mark
    # the root as "info not captured" and return False. If the root is already
    # marked, we return the mark.
    root = span._local_root
    if root is None:
        return False
    info_captured = root.get_tag(CAPTURE_TRACE_TAG)
    if info_captured == "false":
        return False
    if info_captured == "true":
        return True
    if info_captured is None:
        result = GLOBAL_RATE_LIMITER.limit() is not RateLimitExceeded
        root.set_tag_str(CAPTURE_TRACE_TAG, str(result).lower())
        return result
    raise ValueError("unexpected value for %s: %r" % (CAPTURE_TRACE_TAG, info_captured))