Skip to content

Commit c988dbf

Browse files
authored
impl(spanner): include tracing stub (#11863)
1 parent 149587a commit c988dbf

2 files changed

Lines changed: 74 additions & 2 deletions

File tree

google/cloud/spanner/internal/spanner_stub_factory.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616
#include "google/cloud/spanner/internal/spanner_auth_decorator.h"
1717
#include "google/cloud/spanner/internal/spanner_logging_decorator.h"
1818
#include "google/cloud/spanner/internal/spanner_metadata_decorator.h"
19+
#include "google/cloud/spanner/internal/spanner_tracing_stub.h"
1920
#include "google/cloud/common_options.h"
2021
#include "google/cloud/grpc_error_delegate.h"
2122
#include "google/cloud/grpc_options.h"
2223
#include "google/cloud/internal/algorithm.h"
24+
#include "google/cloud/internal/opentelemetry.h"
2325
#include "google/cloud/log.h"
2426
#include <grpcpp/grpcpp.h>
2527

@@ -56,6 +58,9 @@ std::shared_ptr<SpannerStub> CreateDefaultSpannerStub(
5658
std::move(stub), opts.get<GrpcTracingOptionsOption>(),
5759
opts.get<TracingComponentsOption>());
5860
}
61+
if (internal::TracingEnabled(opts)) {
62+
stub = MakeSpannerTracingStub(std::move(stub));
63+
}
5964
return stub;
6065
}
6166

google/cloud/spanner/internal/spanner_stub_factory_test.cc

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "google/cloud/common_options.h"
1818
#include "google/cloud/grpc_options.h"
1919
#include "google/cloud/log.h"
20+
#include "google/cloud/testing_util/opentelemetry_matchers.h"
2021
#include "google/cloud/testing_util/scoped_log.h"
2122
#include "google/cloud/testing_util/status_matchers.h"
2223
#include <gmock/gmock.h>
@@ -33,7 +34,7 @@ using ::testing::AnyOf;
3334
using ::testing::Contains;
3435
using ::testing::HasSubstr;
3536

36-
TEST(SpannerStub, CreateDefaultStub) {
37+
TEST(CreateDefaultSpannerStub, Basic) {
3738
auto opts = spanner_internal::DefaultOptions();
3839
auto auth =
3940
internal::CreateAuthenticationStrategy(opts.get<GrpcCredentialOption>());
@@ -43,7 +44,7 @@ TEST(SpannerStub, CreateDefaultStub) {
4344
EXPECT_NE(stub, nullptr);
4445
}
4546

46-
TEST(SpannerStub, CreateDefaultStubWithLogging) {
47+
TEST(CreateDefaultSpannerStub, WithLogging) {
4748
testing_util::ScopedLog log;
4849

4950
auto opts = Options{}
@@ -70,6 +71,72 @@ TEST(SpannerStub, CreateDefaultStubWithLogging) {
7071
Contains(HasSubstr(session.status().message())));
7172
}
7273

74+
#ifdef GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY
75+
using ::google::cloud::testing_util::DisableTracing;
76+
using ::google::cloud::testing_util::EnableTracing;
77+
using ::google::cloud::testing_util::SpanNamed;
78+
using ::testing::ElementsAre;
79+
using ::testing::IsEmpty;
80+
81+
TEST(CreateDefaultSpannerStub, TracingEnabled) {
82+
auto span_catcher = testing_util::InstallSpanCatcher();
83+
auto propagator = testing_util::InstallMockPropagator();
84+
EXPECT_CALL(*propagator, Inject);
85+
86+
auto opts = EnableTracing(
87+
Options{}
88+
.set<GrpcCredentialOption>(grpc::InsecureChannelCredentials())
89+
.set<EndpointOption>("localhost:1"));
90+
auto auth =
91+
internal::CreateAuthenticationStrategy(opts.get<GrpcCredentialOption>());
92+
auto stub = CreateDefaultSpannerStub(spanner::Database("foo", "bar", "baz"),
93+
std::move(auth), std::move(opts),
94+
/*channel_id=*/0);
95+
EXPECT_NE(stub, nullptr);
96+
97+
grpc::ClientContext context;
98+
context.set_deadline(std::chrono::system_clock::now() +
99+
std::chrono::milliseconds(5));
100+
auto session =
101+
stub->CreateSession(context, google::spanner::v1::CreateSessionRequest());
102+
EXPECT_THAT(session, StatusIs(AnyOf(StatusCode::kUnavailable,
103+
StatusCode::kInvalidArgument,
104+
StatusCode::kDeadlineExceeded)));
105+
106+
EXPECT_THAT(
107+
span_catcher->GetSpans(),
108+
ElementsAre(SpanNamed("google.spanner.v1.Spanner/CreateSession")));
109+
}
110+
111+
TEST(CreateDefaultSpannerStub, TracingDisabled) {
112+
auto span_catcher = testing_util::InstallSpanCatcher();
113+
auto propagator = testing_util::InstallMockPropagator();
114+
EXPECT_CALL(*propagator, Inject).Times(0);
115+
116+
auto opts = DisableTracing(
117+
Options{}
118+
.set<GrpcCredentialOption>(grpc::InsecureChannelCredentials())
119+
.set<EndpointOption>("localhost:1"));
120+
auto auth =
121+
internal::CreateAuthenticationStrategy(opts.get<GrpcCredentialOption>());
122+
auto stub = CreateDefaultSpannerStub(spanner::Database("foo", "bar", "baz"),
123+
std::move(auth), std::move(opts),
124+
/*channel_id=*/0);
125+
EXPECT_NE(stub, nullptr);
126+
127+
grpc::ClientContext context;
128+
context.set_deadline(std::chrono::system_clock::now() +
129+
std::chrono::milliseconds(5));
130+
auto session =
131+
stub->CreateSession(context, google::spanner::v1::CreateSessionRequest());
132+
EXPECT_THAT(session, StatusIs(AnyOf(StatusCode::kUnavailable,
133+
StatusCode::kInvalidArgument,
134+
StatusCode::kDeadlineExceeded)));
135+
136+
EXPECT_THAT(span_catcher->GetSpans(), IsEmpty());
137+
}
138+
#endif // GOOGLE_CLOUD_CPP_HAVE_OPENTELEMETRY
139+
73140
} // namespace
74141
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
75142
} // namespace spanner_internal

0 commit comments

Comments
 (0)