joosthooz commented on code in PR #12609:
URL: https://github.com/apache/arrow/pull/12609#discussion_r841866871


##########
cpp/src/arrow/util/tracing_internal.h:
##########
@@ -101,6 +86,33 @@ AsyncGenerator<T> WrapAsyncGenerator(AsyncGenerator<T> 
wrapped,
   };
 }
 
+/// \brief Propagate the given span to each invocation of an async generator.
+template <typename T>
+AsyncGenerator<T> PropagateSpanThroughAsyncGenerator(
+    AsyncGenerator<T> wrapped,
+    opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span) {
+  return [=]() mutable -> Future<T> {
+    auto scope = GetTracer()->WithActiveSpan(span);
+    return wrapped();
+  };
+}
+
+/// \brief Propagate the currently active span to each invocation of an async 
generator.
+template <typename T>
+AsyncGenerator<T> PropagateSpanThroughAsyncGenerator(AsyncGenerator<T> 
wrapped) {
+  auto span = GetTracer()->GetCurrentSpan();
+  if (!span->GetContext().IsValid()) return wrapped;
+  return PropagateSpanThroughAsyncGenerator(std::move(wrapped), 
std::move(span));
+}
+
+/*
+ * PropagateSpanThroughAsyncGenerator - only makes sure the trace context is 
propagated,
+ * so that spans created when running generator instances asynchronously do not
+ * end up in a separate, disconnected trace.
+ * WrapAsyncGenerator - Connect the current span to the generator. When the 
generator
+ * finishes, it will stop the span. Optionally, create child spans at each 
invocation.

Review Comment:
   Yeah, after merging the 3 functions into 2, the extra block isn't really 
needed anymore. I've extended the `\brief`s instead.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to