Skip to content

Commit 2e45bee

Browse files
committed
refactor grpc: add internal GetMetadata method to services
commit_hash:0ac135f14b396e3d1fa33b980d67cb29f33de2fc
1 parent 0b432f0 commit 2e45bee

File tree

9 files changed

+49
-30
lines changed

9 files changed

+49
-30
lines changed

grpc/include/userver/ugrpc/client/client_factory.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class ClientFactory final {
9191

9292
template <typename Client>
9393
Client ClientFactory::MakeClient(ClientSettings&& client_settings) {
94-
return Client(MakeClientInternals(std::move(client_settings), Client::GetMetadata()));
94+
return Client(MakeClientInternals(std::move(client_settings), Client::GetMetadata(utils::impl::InternalTag{})));
9595
}
9696

9797
template <typename Client>

grpc/include/userver/ugrpc/client/generic_client.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ class GenericClient final {
7474
// For internal use only.
7575
explicit GenericClient(impl::ClientInternals&&);
7676

77-
static std::optional<ugrpc::impl::StaticServiceMetadata> GetMetadata() { return std::nullopt; }
77+
// For internal use only.
78+
static std::optional<ugrpc::impl::StaticServiceMetadata> GetMetadata(utils::impl::InternalTag) {
79+
return std::nullopt;
80+
}
7881
/// @endcond
7982

8083
private:

grpc/include/userver/ugrpc/server/service_base.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class ServiceBase {
4444
virtual ~ServiceBase();
4545

4646
/// @cond
47+
// For internal use only.
48+
virtual ugrpc::impl::StaticServiceMetadata GetMetadata(utils::impl::InternalTag) const = 0;
49+
4750
// Creates a worker that forwards requests to this service.
4851
// The service must be destroyed after the worker.
4952
// For internal use only.

grpc/tests/compat/channel_arguments_builder_test.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void VerifyMethodConfig(
9797
} // namespace
9898

9999
UTEST(ServiceConfigBuilderTest, BuildEmpty) {
100-
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata();
100+
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata(utils::impl::InternalTag{});
101101

102102
const ugrpc::client::RetryConfig retry_config;
103103

@@ -117,7 +117,7 @@ UTEST(ServiceConfigBuilderTest, BuildEmpty) {
117117
}
118118

119119
UTEST(ServiceConfigBuilderTest, Static) {
120-
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata();
120+
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata(utils::impl::InternalTag{});
121121

122122
const ugrpc::client::RetryConfig retry_config{/*attempts=*/2};
123123

@@ -142,7 +142,7 @@ UTEST(ServiceConfigBuilderTest, Static) {
142142
}
143143

144144
UTEST(ServiceConfigBuilderTest, Qos) {
145-
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata();
145+
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata(utils::impl::InternalTag{});
146146

147147
const ugrpc::client::RetryConfig retry_config;
148148

@@ -188,7 +188,7 @@ UTEST(ServiceConfigBuilderTest, Qos) {
188188
}
189189

190190
UTEST(ServiceConfigBuilderTest, QosNoRetry) {
191-
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata();
191+
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata(utils::impl::InternalTag{});
192192

193193
const ugrpc::client::RetryConfig retry_config;
194194

@@ -234,7 +234,7 @@ UTEST(ServiceConfigBuilderTest, QosNoRetry) {
234234
}
235235

236236
UTEST(ServiceConfigBuilderTest, Complex) {
237-
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata();
237+
const auto metadata = sample::ugrpc::UnitTestServiceClient::GetMetadata(utils::impl::InternalTag{});
238238

239239
const ugrpc::client::RetryConfig retry_config;
240240

grpc/tests/tracing_test.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ USERVER_NAMESPACE_BEGIN
1616
namespace {
1717

1818
template <typename MetadataMap>
19-
grpc::string GetMetadata(const MetadataMap& metadata, const grpc::string& key) {
19+
grpc::string GetMetadataValue(const MetadataMap& metadata, const grpc::string& key) {
2020
return ugrpc::impl::ToGrpcString(utils::FindOrDefault(metadata, key));
2121
}
2222

@@ -66,9 +66,9 @@ class UnitTestServiceWithTracingChecks final : public sample::ugrpc::UnitTestSer
6666
context.AddInitialMetadata(kServerParentSpanId, ugrpc::impl::ToGrpcString(span.GetParentId()));
6767
context.AddInitialMetadata(kServerParentLink, ugrpc::impl::ToGrpcString(span.GetParentLink()));
6868

69-
context.AddInitialMetadata(kClientTraceIdEcho, GetMetadata(client_meta, ugrpc::impl::kXYaTraceId));
70-
context.AddInitialMetadata(kClientSpanIdEcho, GetMetadata(client_meta, ugrpc::impl::kXYaSpanId));
71-
context.AddInitialMetadata(kClientLinkEcho, GetMetadata(client_meta, ugrpc::impl::kXYaRequestId));
69+
context.AddInitialMetadata(kClientTraceIdEcho, GetMetadataValue(client_meta, ugrpc::impl::kXYaTraceId));
70+
context.AddInitialMetadata(kClientSpanIdEcho, GetMetadataValue(client_meta, ugrpc::impl::kXYaSpanId));
71+
context.AddInitialMetadata(kClientLinkEcho, GetMetadataValue(client_meta, ugrpc::impl::kXYaRequestId));
7272
}
7373
};
7474

@@ -92,16 +92,16 @@ void CheckMetadata(const grpc::ClientContext& client_context) {
9292
// - client uses a detached sub-Span for the RPC
9393

9494
// the checks below follow EXPECT_EQ(cause, effect) order
95-
EXPECT_EQ(span.GetTraceId(), GetMetadata(metadata, kClientTraceIdEcho));
96-
EXPECT_EQ(GetMetadata(metadata, kClientTraceIdEcho), GetMetadata(metadata, kServerTraceId));
95+
EXPECT_EQ(span.GetTraceId(), GetMetadataValue(metadata, kClientTraceIdEcho));
96+
EXPECT_EQ(GetMetadataValue(metadata, kClientTraceIdEcho), GetMetadataValue(metadata, kServerTraceId));
9797

98-
EXPECT_NE(span.GetSpanId(), GetMetadata(metadata, kClientSpanIdEcho));
99-
EXPECT_EQ(GetMetadata(metadata, kClientSpanIdEcho), GetMetadata(metadata, kServerParentSpanId));
100-
EXPECT_NE(GetMetadata(metadata, kServerParentSpanId), GetMetadata(metadata, kServerSpanId));
98+
EXPECT_NE(span.GetSpanId(), GetMetadataValue(metadata, kClientSpanIdEcho));
99+
EXPECT_EQ(GetMetadataValue(metadata, kClientSpanIdEcho), GetMetadataValue(metadata, kServerParentSpanId));
100+
EXPECT_NE(GetMetadataValue(metadata, kServerParentSpanId), GetMetadataValue(metadata, kServerSpanId));
101101

102-
EXPECT_EQ(span.GetLink(), GetMetadata(metadata, kClientLinkEcho));
103-
EXPECT_EQ(GetMetadata(metadata, kClientLinkEcho), GetMetadata(metadata, kServerParentLink));
104-
EXPECT_NE(GetMetadata(metadata, kServerParentLink), GetMetadata(metadata, kServerLink));
102+
EXPECT_EQ(span.GetLink(), GetMetadataValue(metadata, kClientLinkEcho));
103+
EXPECT_EQ(GetMetadataValue(metadata, kClientLinkEcho), GetMetadataValue(metadata, kServerParentLink));
104+
EXPECT_NE(GetMetadataValue(metadata, kServerParentLink), GetMetadataValue(metadata, kServerLink));
105105
}
106106

107107
} // namespace
@@ -149,11 +149,11 @@ UTEST_F(GrpcTracing, SpansInDifferentRPCs) {
149149
future2.Get();
150150
const auto& metadata2 = future2.GetContext().GetClientContext().GetServerInitialMetadata();
151151

152-
EXPECT_EQ(GetMetadata(metadata1, kServerTraceId), GetMetadata(metadata2, kServerTraceId));
153-
EXPECT_NE(GetMetadata(metadata1, kServerSpanId), GetMetadata(metadata2, kServerSpanId));
154-
EXPECT_NE(GetMetadata(metadata1, kServerParentSpanId), GetMetadata(metadata2, kServerParentSpanId));
155-
EXPECT_NE(GetMetadata(metadata1, kServerLink), GetMetadata(metadata2, kServerLink));
156-
EXPECT_EQ(GetMetadata(metadata1, kServerParentLink), GetMetadata(metadata2, kServerParentLink));
152+
EXPECT_EQ(GetMetadataValue(metadata1, kServerTraceId), GetMetadataValue(metadata2, kServerTraceId));
153+
EXPECT_NE(GetMetadataValue(metadata1, kServerSpanId), GetMetadataValue(metadata2, kServerSpanId));
154+
EXPECT_NE(GetMetadataValue(metadata1, kServerParentSpanId), GetMetadataValue(metadata2, kServerParentSpanId));
155+
EXPECT_NE(GetMetadataValue(metadata1, kServerLink), GetMetadataValue(metadata2, kServerLink));
156+
EXPECT_EQ(GetMetadataValue(metadata1, kServerParentLink), GetMetadataValue(metadata2, kServerParentLink));
157157
}
158158

159159
USERVER_NAMESPACE_END

scripts/grpc/templates/client.usrv.cpp.jinja

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ inline const bool k{{service.name}}TypesRegistration =
4545
false);
4646

4747
{{service.name}}Client::{{service.name}}Client(USERVER_NAMESPACE::ugrpc::client::impl::ClientInternals&& internals)
48-
: client_data_(std::move(internals), GetMetadata(),
48+
: client_data_(std::move(internals), GetMetadata(USERVER_NAMESPACE::utils::impl::InternalTag{}),
4949
std::in_place_type<{{utils.namespace_with_colons(proto.namespace)}}::{{service.name}}>) {
5050
}
5151

@@ -127,7 +127,7 @@ inline const bool k{{service.name}}TypesRegistration =
127127
{% endfor %}
128128

129129
USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata
130-
{{ service.name }}Client::GetMetadata() {
130+
{{ service.name }}Client::GetMetadata(USERVER_NAMESPACE::utils::impl::InternalTag) {
131131
(void)k{{service.name}}TypesRegistration; // odr-use
132132

133133
return USERVER_NAMESPACE::ugrpc::impl::MakeStaticServiceMetadata<
@@ -192,8 +192,8 @@ const {{namespace_path}}::{{service.name}}Client& {{ service.name }}Client::GetP
192192
{% endfor %}
193193

194194
USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata
195-
{{ service.name }}Client::GetMetadata() {
196-
return {{namespace_path}}::{{service.name}}Client::GetMetadata();
195+
{{ service.name }}Client::GetMetadata(USERVER_NAMESPACE::utils::impl::InternalTag) {
196+
return {{namespace_path}}::{{service.name}}Client::GetMetadata(USERVER_NAMESPACE::utils::impl::InternalTag{});
197197
}
198198

199199
} // namespace structs

scripts/grpc/templates/client.usrv.hpp.jinja

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ public:
7575
explicit {{service.name}}Client(USERVER_NAMESPACE::ugrpc::client::impl::ClientInternals&& internals);
7676

7777
// For internal use only
78-
static USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata GetMetadata();
78+
static USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata GetMetadata(
79+
USERVER_NAMESPACE::utils::impl::InternalTag
80+
);
7981
/// @endcond
8082

8183
private:
@@ -152,7 +154,9 @@ public:
152154
);
153155

154156
// For internal use only
155-
static USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata GetMetadata();
157+
static USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata GetMetadata(
158+
USERVER_NAMESPACE::utils::impl::InternalTag
159+
);
156160
/// @endcond
157161

158162
private:

scripts/grpc/templates/service.usrv.cpp.jinja

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ inline const bool k{{service.name}}TypesRegistration =
8484
{% endif %}
8585
{% endfor %}
8686

87+
USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata
88+
{{service.name}}Base::GetMetadata(USERVER_NAMESPACE::utils::impl::InternalTag) const {
89+
using GrpcppService = {{utils.namespace_with_colons(proto.namespace)}}::{{service.name}};
90+
return USERVER_NAMESPACE::ugrpc::impl::MakeStaticServiceMetadata<GrpcppService>(k{{service.name}}Methods);
91+
}
92+
8793
std::unique_ptr<USERVER_NAMESPACE::ugrpc::server::impl::ServiceWorker>
8894
{{service.name}}Base::MakeWorker(USERVER_NAMESPACE::ugrpc::server::impl::ServiceInternals&& internals) {
8995
(void)k{{service.name}}TypesRegistration; // odr-use

scripts/grpc/templates/service.usrv.hpp.jinja

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ class {{service.name}}Base
6060
{% endfor %}
6161

6262
private:
63+
USERVER_NAMESPACE::ugrpc::impl::StaticServiceMetadata
64+
GetMetadata(USERVER_NAMESPACE::utils::impl::InternalTag) const final;
65+
6366
std::unique_ptr<USERVER_NAMESPACE::ugrpc::server::impl::ServiceWorker>
6467
MakeWorker(USERVER_NAMESPACE::ugrpc::server::impl::ServiceInternals&& internals) final;
6568
};

0 commit comments

Comments
 (0)