| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
There was a problem hiding this comment.
This pull request introduces a fast-path optimization in OpenTelemetry tracing for Google Cloud Spanner, bypassing attribute dictionary construction and span creation when a no-op tracer is active. It also expands type checking for observability options to support general mappings and adds comprehensive unit tests. The review feedback suggests further simplifying the fast-path implementation to eliminate nested context manager overhead when tracing is inactive, and recommends streamlining type checks by using isinstance(observability_options, Mapping) instead of checking for both dict and Mapping.
Sorry, something went wrong.
|
/gemini review |
Sorry, something went wrong.
There was a problem hiding this comment.
This pull request introduces a fast-path optimization in trace_call to bypass attribute dictionary construction and span creation when a no-op tracer is active or no TracerProvider is registered. Feedback on the changes highlights two critical issues: first, the helper _is_tracer_noop should check _real_tracer instead of _tracer on ProxyTracer to correctly handle lazy initialization; second, the unit tests should assign to the private _tracer attribute instead of the read-only _real_tracer property to avoid raising an AttributeError at runtime.
Sorry, something went wrong.
Skip building the trace attribute dictionary and creating spans in `trace_call` when OpenTelemetry is not configured or uses a no-op tracer. This reduces overhead by ~4.8 µs per call (~10 µs per query). If a valid ambient span is present in the caller's context, a child span is still started on the no-op tracer to prevent Spanner-internal attributes and events from attaching to the parent span. Also update `observability_options` validation to check `Mapping`.
|
/gemini review |
Sorry, something went wrong.
There was a problem hiding this comment.
This pull request introduces a fast-path optimization in the OpenTelemetry tracing implementation for Google Cloud Spanner. When no TracerProvider is registered or a no-op tracer is active, the code now skips attribute dictionary construction and span creation entirely, yielding a non-recording span or an invalid span instead. Additionally, observability_options type checking was updated to support any Mapping subclass. Comprehensive unit tests were added to verify these changes under various tracing configurations. There are no review comments, and I have no feedback to provide.
Sorry, something went wrong.
|
Could you please share the benchmark? The code path I see is one trace_call per single-use query, so I'm curious what makes up the ~10 µs. |
Sorry, something went wrong.
Many of these changes are so small that we do not run separate benchmarks for them (this is one such example). Instead, this is more about shaving away a few microseconds everywhere you can find them, as in a single-threaded language like Python, that makes a much bigger difference for overall throughput than in multi-threaded languages. The 10us in this case purely an estimate. The overall picture is clearer when you take all of these together and compare with what the performance was before (see screenshots shared separately). |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Skip building the trace attribute dictionary and creating spans in
trace_call when OpenTelemetry is not configured or uses a no-op tracer.
This reduces overhead by ~4.8 µs per call (~10 µs per query).
If a valid ambient span is present in the caller's context, a child span
is still started on the no-op tracer to prevent Spanner-internal attributes
and events from attaching to the parent span.
Also update observability_options validation to check Mapping.