[tracing] Add new RecordAnnotation method to CallTracer API (#33696)

Adding a new method for custom Annotation types (per design suggested in
#33649) to unblock metadata annotation.
pull/33899/head
Alisha Nanda 2 years ago committed by GitHub
parent 5974ea7553
commit cb003bb1e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      src/core/lib/channel/call_tracer.h
  2. 31
      src/cpp/ext/filters/census/client_filter.cc
  3. 2
      src/cpp/ext/filters/census/open_census_call_tracer.h
  4. 14
      src/cpp/ext/filters/census/server_call_tracer.cc
  5. 2
      src/cpp/ext/otel/otel_call_tracer.h
  6. 10
      src/cpp/ext/otel/otel_client_filter.cc
  7. 4
      src/cpp/ext/otel/otel_server_call_tracer.cc

@ -49,11 +49,31 @@ namespace grpc_core {
// The base class for all tracer implementations.
class CallTracerAnnotationInterface {
public:
// Enum associated with types of Annotations.
enum class AnnotationType {
kDoNotUse_MustBeLast,
};
// Base class to define a new type of annotation.
class Annotation {
public:
explicit Annotation(AnnotationType type) : type_(type) {}
AnnotationType type() const { return type_; }
virtual std::string ToString() const = 0;
protected:
~Annotation() {}
private:
const AnnotationType type_;
};
virtual ~CallTracerAnnotationInterface() {}
// Records an annotation on the call attempt.
// TODO(yashykt): If needed, extend this to attach attributes with
// annotations.
virtual void RecordAnnotation(absl::string_view annotation) = 0;
virtual void RecordAnnotation(const Annotation& annotation) = 0;
virtual std::string TraceId() = 0;
virtual std::string SpanId() = 0;
virtual bool IsSampled() = 0;

@ -284,10 +284,24 @@ void OpenCensusCallTracer::OpenCensusCallAttemptTracer::RecordEnd(
void OpenCensusCallTracer::OpenCensusCallAttemptTracer::RecordAnnotation(
absl::string_view annotation) {
// If tracing is disabled, the following will be a no-op.
if (!context_.Span().IsRecording()) {
return;
}
context_.AddSpanAnnotation(annotation, {});
}
void OpenCensusCallTracer::OpenCensusCallAttemptTracer::RecordAnnotation(
const Annotation& annotation) {
if (!context_.Span().IsRecording()) {
return;
}
switch (annotation.type()) {
default:
context_.AddSpanAnnotation(annotation.ToString(), {});
}
}
//
// OpenCensusCallTracer
//
@ -355,10 +369,23 @@ OpenCensusCallTracer::StartNewAttempt(bool is_transparent_retry) {
}
void OpenCensusCallTracer::RecordAnnotation(absl::string_view annotation) {
// If tracing is disabled, the following will be a no-op.
if (!context_.Span().IsRecording()) {
return;
}
context_.AddSpanAnnotation(annotation, {});
}
void OpenCensusCallTracer::RecordAnnotation(const Annotation& annotation) {
if (!context_.Span().IsRecording()) {
return;
}
switch (annotation.type()) {
default:
context_.AddSpanAnnotation(annotation.ToString(), {});
}
}
void OpenCensusCallTracer::RecordApiLatency(absl::Duration api_latency,
absl::StatusCode status_code) {
if (OpenCensusStatsEnabled()) {

@ -99,6 +99,7 @@ class OpenCensusCallTracer : public grpc_core::ClientCallTracer {
void RecordCancel(grpc_error_handle cancel_error) override;
void RecordEnd(const gpr_timespec& /*latency*/) override;
void RecordAnnotation(absl::string_view annotation) override;
void RecordAnnotation(const Annotation& annotation) override;
experimental::CensusContext* context() { return &context_; }
@ -136,6 +137,7 @@ class OpenCensusCallTracer : public grpc_core::ClientCallTracer {
OpenCensusCallAttemptTracer* StartNewAttempt(
bool is_transparent_retry) override;
void RecordAnnotation(absl::string_view annotation) override;
void RecordAnnotation(const Annotation& annotation) override;
// APIs to record API call latency
void RecordApiLatency(absl::Duration api_latency,

@ -157,9 +157,23 @@ class OpenCensusServerCallTracer : public grpc_core::ServerCallTracer {
void RecordEnd(const grpc_call_final_info* final_info) override;
void RecordAnnotation(absl::string_view annotation) override {
if (!context_.Span().IsRecording()) {
return;
}
context_.AddSpanAnnotation(annotation, {});
}
void RecordAnnotation(const Annotation& annotation) override {
if (!context_.Span().IsRecording()) {
return;
}
switch (annotation.type()) {
default:
context_.AddSpanAnnotation(annotation.ToString(), {});
}
}
private:
experimental::CensusContext context_;
// server method

@ -85,6 +85,7 @@ class OpenTelemetryCallTracer : public grpc_core::ClientCallTracer {
void RecordCancel(grpc_error_handle cancel_error) override;
void RecordEnd(const gpr_timespec& /*latency*/) override;
void RecordAnnotation(absl::string_view /*annotation*/) override;
void RecordAnnotation(const Annotation& /*annotation*/) override;
private:
const OpenTelemetryCallTracer* parent_;
@ -115,6 +116,7 @@ class OpenTelemetryCallTracer : public grpc_core::ClientCallTracer {
OpenTelemetryCallAttemptTracer* StartNewAttempt(
bool is_transparent_retry) override;
void RecordAnnotation(absl::string_view /*annotation*/) override;
void RecordAnnotation(const Annotation& /*annotation*/) override;
private:
// Client method.

@ -167,6 +167,11 @@ void OpenTelemetryCallTracer::OpenTelemetryCallAttemptTracer::RecordAnnotation(
// Not implemented
}
void OpenTelemetryCallTracer::OpenTelemetryCallAttemptTracer::RecordAnnotation(
const Annotation& /*annotation*/) {
// Not implemented
}
//
// OpenTelemetryCallTracer
//
@ -208,5 +213,10 @@ void OpenTelemetryCallTracer::RecordAnnotation(
// Not implemented
}
void OpenTelemetryCallTracer::RecordAnnotation(
const Annotation& /*annotation*/) {
// Not implemented
}
} // namespace internal
} // namespace grpc

@ -114,6 +114,10 @@ class OpenTelemetryServerCallTracer : public grpc_core::ServerCallTracer {
// Not implemented
}
void RecordAnnotation(const Annotation& /*annotation*/) override {
// Not implemented
}
private:
grpc_core::Slice path_;
absl::string_view method_;

Loading…
Cancel
Save