Skip to content

Commit 58b2fb6

Browse files
committed
feat grpc: retry on next channel
commit_hash:9f2c059fe510d157832d96c03adb160337abc83d
1 parent 514c460 commit 58b2fb6

File tree

18 files changed

+128
-145
lines changed

18 files changed

+128
-145
lines changed

.mapping.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2372,6 +2372,7 @@
23722372
"grpc/include/userver/ugrpc/client/impl/completion_queue_pool.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/completion_queue_pool.hpp",
23732373
"grpc/include/userver/ugrpc/client/impl/fwd.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/fwd.hpp",
23742374
"grpc/include/userver/ugrpc/client/impl/graceful_stream_finish.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/graceful_stream_finish.hpp",
2375+
"grpc/include/userver/ugrpc/client/impl/method_stubs.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/method_stubs.hpp",
23752376
"grpc/include/userver/ugrpc/client/impl/middleware_hooks.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/middleware_hooks.hpp",
23762377
"grpc/include/userver/ugrpc/client/impl/middleware_pipeline.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/middleware_pipeline.hpp",
23772378
"grpc/include/userver/ugrpc/client/impl/perform_unary_call.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/perform_unary_call.hpp",
@@ -2381,8 +2382,6 @@
23812382
"grpc/include/userver/ugrpc/client/impl/retry_policy.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/retry_policy.hpp",
23822383
"grpc/include/userver/ugrpc/client/impl/rpc.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/rpc.hpp",
23832384
"grpc/include/userver/ugrpc/client/impl/stream_read_future_impl_base.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/stream_read_future_impl_base.hpp",
2384-
"grpc/include/userver/ugrpc/client/impl/stub_handle.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/stub_handle.hpp",
2385-
"grpc/include/userver/ugrpc/client/impl/stub_pool.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/stub_pool.hpp",
23862385
"grpc/include/userver/ugrpc/client/impl/stub_state.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/stub_state.hpp",
23872386
"grpc/include/userver/ugrpc/client/impl/tracing.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/tracing.hpp",
23882387
"grpc/include/userver/ugrpc/client/impl/unary_call.hpp":"taxi/uservices/userver/grpc/include/userver/ugrpc/client/impl/unary_call.hpp",
@@ -2520,12 +2519,11 @@
25202519
"grpc/src/ugrpc/client/impl/compat/retry_policy.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/compat/retry_policy.cpp",
25212520
"grpc/src/ugrpc/client/impl/compat/retry_policy.hpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/compat/retry_policy.hpp",
25222521
"grpc/src/ugrpc/client/impl/completion_queue_pool.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/completion_queue_pool.cpp",
2522+
"grpc/src/ugrpc/client/impl/method_stubs.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/method_stubs.cpp",
25232523
"grpc/src/ugrpc/client/impl/middleware_hooks.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/middleware_hooks.cpp",
25242524
"grpc/src/ugrpc/client/impl/middleware_pipeline.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/middleware_pipeline.cpp",
25252525
"grpc/src/ugrpc/client/impl/retry_backoff.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/retry_backoff.cpp",
25262526
"grpc/src/ugrpc/client/impl/retry_policy.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/retry_policy.cpp",
2527-
"grpc/src/ugrpc/client/impl/stub_handle.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/stub_handle.cpp",
2528-
"grpc/src/ugrpc/client/impl/stub_pool.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/stub_pool.cpp",
25292527
"grpc/src/ugrpc/client/impl/stub_state.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/stub_state.cpp",
25302528
"grpc/src/ugrpc/client/impl/tracing.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/impl/tracing.cpp",
25312529
"grpc/src/ugrpc/client/middlewares/baggage/middleware.cpp":"taxi/uservices/userver/grpc/src/ugrpc/client/middlewares/baggage/middleware.cpp",

grpc/functional_tests/basic_chaos/client.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ class GreeterClient final : public components::ComponentBase {
3535
context.FindComponent<ugrpc::client::SimpleClientComponent<Client>>("greeter-client-component").GetClient();
3636
const auto& data = ugrpc::client::impl::ClientDataAccessor::GetClientData(client);
3737
const auto stub_state = data.GetStubState();
38-
UASSERT(stub_state->dedicated_stubs[0].Size() == 3);
39-
UASSERT(stub_state->dedicated_stubs[1].Size() == 0);
40-
UASSERT(stub_state->dedicated_stubs[2].Size() == 2);
41-
UASSERT(stub_state->dedicated_stubs[3].Size() == 0);
42-
UASSERT(stub_state->dedicated_stubs[4].Size() == 0);
38+
UASSERT(stub_state->dedicated_stubs[0].stubs.size() == 3);
39+
UASSERT(stub_state->dedicated_stubs[1].stubs.size() == 0);
40+
UASSERT(stub_state->dedicated_stubs[2].stubs.size() == 2);
41+
UASSERT(stub_state->dedicated_stubs[3].stubs.size() == 0);
42+
UASSERT(stub_state->dedicated_stubs[4].stubs.size() == 0);
4343
}
4444

4545
inline std::string SayHello(std::string name, bool is_small_timeout);

grpc/include/userver/ugrpc/client/impl/call_params.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <userver/ugrpc/client/call_options.hpp>
1111
#include <userver/ugrpc/client/fwd.hpp>
1212
#include <userver/ugrpc/client/generic_options.hpp>
13-
#include <userver/ugrpc/client/impl/stub_handle.hpp>
13+
#include <userver/ugrpc/client/impl/method_stubs.hpp>
1414
#include <userver/ugrpc/client/middlewares/fwd.hpp>
1515
#include <userver/ugrpc/impl/maybe_owned_string.hpp>
1616
#include <userver/ugrpc/impl/statistics.hpp>
@@ -32,7 +32,7 @@ struct CallParams {
3232
std::string_view service_name;
3333
std::string_view method_name;
3434
CallOptions call_options;
35-
StubHandle stub;
35+
MethodStubs method_stubs;
3636
const Middlewares& middlewares;
3737
ugrpc::impl::MethodStatistics& statistics;
3838
const testsuite::GrpcControl& testsuite_grpc;

grpc/include/userver/ugrpc/client/impl/call_state.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
#include <userver/tracing/in_place_span.hpp>
1313

1414
#include <userver/ugrpc/client/fwd.hpp>
15+
#include <userver/ugrpc/client/impl/method_stubs.hpp>
1516
#include <userver/ugrpc/client/impl/middleware_pipeline.hpp>
16-
#include <userver/ugrpc/client/impl/stub_handle.hpp>
1717
#include <userver/ugrpc/impl/async_method_invocation.hpp>
1818
#include <userver/ugrpc/impl/maybe_owned_string.hpp>
1919
#include <userver/ugrpc/impl/statistics_scope.hpp>
@@ -44,7 +44,7 @@ class CallState {
4444
CallState(CallState&&) noexcept = delete;
4545
CallState& operator=(CallState&&) noexcept = delete;
4646

47-
ugrpc::impl::StubAny& GetStub() noexcept;
47+
ugrpc::impl::StubAny& GetStub() const noexcept;
4848

4949
void SetClientContext(std::unique_ptr<grpc::ClientContext> client_context) noexcept;
5050

@@ -83,7 +83,7 @@ class CallState {
8383
void ResetSpan() noexcept;
8484

8585
private:
86-
StubHandle stub_;
86+
MethodStubs method_stubs_;
8787

8888
std::unique_ptr<grpc::ClientContext> client_context_;
8989

grpc/include/userver/ugrpc/client/impl/client_data.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class ClientData final {
109109

110110
private:
111111
template <typename Service>
112-
static StubPool MakeStubs(
112+
static StubArray MakeStubs(
113113
std::size_t size,
114114
const ChannelFactory& channel_factory,
115115
std::string_view target,
@@ -121,11 +121,11 @@ class ClientData final {
121121
auto stubs = utils::GenerateFixedArray(channels.size(), [&channels](std::size_t index) {
122122
return ugrpc::impl::AsyncService<Service>::NewStub(channels[index]);
123123
});
124-
return StubPool{std::move(channels), std::move(stubs)};
124+
return StubArray{std::move(channels), std::move(stubs)};
125125
}
126126

127127
template <typename Service>
128-
static utils::FixedArray<StubPool> MakeDedicatedStubs(
128+
static utils::FixedArray<StubArray> MakeDedicatedStubs(
129129
const ugrpc::impl::StaticServiceMetadata& metadata,
130130
const DedicatedMethodsConfig& dedicated_methods_config,
131131
const ChannelFactory& channel_factory,
@@ -184,7 +184,7 @@ class ClientData final {
184184
target,
185185
channel_args
186186
)
187-
: utils::FixedArray<StubPool>{};
187+
: utils::FixedArray<StubArray>{};
188188

189189
stub_state_.Assign({client_qos, std::move(stubs), std::move(dedicated_stubs)});
190190
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#pragma once
2+
3+
#include <optional>
4+
5+
#include <userver/rcu/rcu.hpp>
6+
7+
#include <userver/ugrpc/impl/stub_any.hpp>
8+
9+
USERVER_NAMESPACE_BEGIN
10+
11+
namespace ugrpc::client::impl {
12+
13+
struct StubState;
14+
struct StubArray;
15+
16+
class MethodStubs final {
17+
public:
18+
MethodStubs(rcu::ReadablePtr<StubState>&& stub_state, const StubArray& stubs);
19+
20+
MethodStubs(MethodStubs&&) noexcept = default;
21+
MethodStubs& operator=(MethodStubs&&) = delete;
22+
23+
MethodStubs(const MethodStubs&) = delete;
24+
MethodStubs& operator=(const MethodStubs&) = delete;
25+
26+
ugrpc::impl::StubAny& GetStub() const;
27+
28+
private:
29+
const rcu::ReadablePtr<StubState> stub_state_;
30+
const StubArray& stubs_;
31+
mutable std::optional<std::size_t> last_;
32+
};
33+
34+
} // namespace ugrpc::client::impl
35+
36+
USERVER_NAMESPACE_END

grpc/include/userver/ugrpc/client/impl/stub_handle.hpp

Lines changed: 0 additions & 32 deletions
This file was deleted.

grpc/include/userver/ugrpc/client/impl/stub_pool.hpp

Lines changed: 0 additions & 35 deletions
This file was deleted.

grpc/include/userver/ugrpc/client/impl/stub_state.hpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
#pragma once
22

3+
#include <grpcpp/channel.h>
4+
35
#include <userver/utils/fixed_array.hpp>
46

57
#include <userver/ugrpc/client/client_qos.hpp>
6-
#include <userver/ugrpc/client/impl/stub_pool.hpp>
8+
#include <userver/ugrpc/impl/stub_any.hpp>
79

810
USERVER_NAMESPACE_BEGIN
911

1012
namespace ugrpc::client::impl {
1113

14+
struct StubArray {
15+
utils::FixedArray<std::shared_ptr<grpc::Channel>> channels;
16+
mutable utils::FixedArray<ugrpc::impl::StubAny> stubs;
17+
};
18+
1219
struct StubState {
1320
ClientQos client_qos;
1421

15-
StubPool stubs;
22+
StubArray stubs;
1623
// method_id -> stub_pool
17-
utils::FixedArray<StubPool> dedicated_stubs;
24+
utils::FixedArray<StubArray> dedicated_stubs;
1825
};
1926

20-
ugrpc::impl::StubAny& NextStub(const StubState& stub_state, std::size_t method_id);
27+
const StubArray& GetMethodStubs(const StubState& stub_state, std::size_t method_id);
2128

22-
ugrpc::impl::StubAny& NextGenericStub(const StubState& stub_state);
29+
const StubArray& GetGenericMethodStubs(const StubState& stub_state);
2330

2431
} // namespace ugrpc::client::impl
2532

grpc/src/ugrpc/client/channels.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ namespace {
5252
engine::TaskProcessor& blocking_task_processor
5353
) {
5454
const auto stub_state = client_data.GetStubState();
55-
const auto& channels = stub_state->stubs.GetChannels();
55+
const auto& channels = stub_state->stubs.channels;
5656

5757
auto& queue = client_data.NextQueue();
5858

0 commit comments

Comments
 (0)