Skip to content

Commit

Permalink
Make opencensus Stackdriver exporter respects initial_metadata option…
Browse files Browse the repository at this point in the history
… (#11831) (envoyproxy#261)

Currently Opencensus tracer uses grpcService proto to configure its tracing client stub. It uses GoogleGrpcUtil to construct a channel and create client stub with that. However, the channel created there does not take care of initial_metadata from grpcService configure. This change fills in OCprepare_client_context option in export to make it respect initial metadata.

Risk level: Low

Signed-off-by: Pengyuan Bian <bianpengyuan@google.com>
  • Loading branch information
bianpengyuan authored Aug 24, 2020
1 parent c82318d commit a550863
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 4 deletions.
8 changes: 4 additions & 4 deletions bazel/repository_locations.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -388,10 +388,10 @@ DEPENDENCY_REPOSITORIES = dict(
use_category = ["other"],
),
io_opencensus_cpp = dict(
sha256 = "193ffb4e13bd7886757fd22b61b7f7a400634412ad8e7e1071e73f57bedd7fc6",
strip_prefix = "opencensus-cpp-04ed0211931f12b03c1a76b3907248ca4db7bc90",
# 2020-03-24
urls = ["https://github.com/census-instrumentation/opencensus-cpp/archive/04ed0211931f12b03c1a76b3907248ca4db7bc90.tar.gz"],
sha256 = "12ff300fa804f97bd07e2ff071d969e09d5f3d7bbffeac438c725fa52a51a212",
strip_prefix = "opencensus-cpp-7877337633466358ed680f9b26967da5b310d7aa",
# 2020-06-01
urls = ["https://github.com/census-instrumentation/opencensus-cpp/archive/7877337633466358ed680f9b26967da5b310d7aa.tar.gz"],
use_category = ["observability"],
cpe = "N/A",
),
Expand Down
10 changes: 10 additions & 0 deletions source/extensions/tracers/opencensus/opencensus_tracer_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,17 @@ Driver::Driver(const envoy::config::trace::v3::OpenCensusConfig& oc_config,
stackdriver_service.mutable_google_grpc()->set_target_uri(GoogleStackdriverTraceAddress);
}
auto channel = Envoy::Grpc::GoogleGrpcUtils::createChannel(stackdriver_service, api);
// TODO(bianpengyuan): add tests for trace_service_stub and initial_metadata options with mock
// stubs.
opts.trace_service_stub = ::google::devtools::cloudtrace::v2::TraceService::NewStub(channel);
const auto& initial_metadata = stackdriver_service.initial_metadata();
if (!initial_metadata.empty()) {
opts.prepare_client_context = [initial_metadata](grpc::ClientContext* ctx) {
for (const auto& metadata : initial_metadata) {
ctx->AddMetadata(metadata.key(), metadata.value());
}
};
}
#else
throw EnvoyException("Opencensus tracer: cannot handle stackdriver google grpc service, "
"google grpc is not built in.");
Expand Down
3 changes: 3 additions & 0 deletions test/extensions/tracers/opencensus/config_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@ TEST(OpenCensusTracerConfigTest, OpenCensusHttpTracerStackdriverGrpc) {
google_grpc:
target_uri: 127.0.0.1:55678
stat_prefix: test
initial_metadata:
- key: foo
value: bar
)EOF";

envoy::config::trace::v3::Tracing configuration;
Expand Down

0 comments on commit a550863

Please sign in to comment.