blob: e56e788d12dbf154d66a7380a8dad9bd075a2a00 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
--- contrib/libs/grpc/src/core/ext/filters/client_channel/client_channel.cc (index)
+++ contrib/libs/grpc/src/core/ext/filters/client_channel/client_channel.cc (working tree)
@@ -3037,6 +3037,8 @@ void ClientChannel::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
// recv_initial_metadata_flags is not populated for clients
self->call_attempt_tracer()->RecordReceivedInitialMetadata(
self->recv_initial_metadata_);
+ auto* peer_string = self->recv_initial_metadata_->get_pointer(PeerString());
+ if (peer_string != nullptr) self->peer_string_ = peer_string->Ref();
}
Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
error);
@@ -3080,12 +3082,8 @@ void ClientChannel::FilterBasedLoadBalancedCall::RecvTrailingMetadataReady(
}
}
y_absl::string_view peer_string;
- if (self->recv_initial_metadata_ != nullptr) {
- Slice* peer_string_slice =
- self->recv_initial_metadata_->get_pointer(PeerString());
- if (peer_string_slice != nullptr) {
- peer_string = peer_string_slice->as_string_view();
- }
+ if (self->peer_string_.has_value()) {
+ peer_string = self->peer_string_->as_string_view();
}
self->RecordCallCompletion(status, self->recv_trailing_metadata_,
self->transport_stream_stats_, peer_string);
--- contrib/libs/grpc/src/core/ext/filters/client_channel/client_channel.h (index)
+++ contrib/libs/grpc/src/core/ext/filters/client_channel/client_channel.h (working tree)
@@ -64,6 +64,7 @@
#include "src/core/lib/resolver/resolver.h"
#include "src/core/lib/resource_quota/arena.h"
#include "src/core/lib/service_config/service_config.h"
+#include "src/core/lib/slice/slice.h"
#include "src/core/lib/surface/channel.h"
#include "src/core/lib/transport/connectivity_state.h"
#include "src/core/lib/transport/metadata_batch.h"
@@ -549,6 +550,7 @@ class ClientChannel::FilterBasedLoadBalancedCall
CallCombiner* call_combiner_;
grpc_polling_entity* pollent_;
grpc_closure* on_call_destruction_complete_;
+ y_absl::optional<Slice> peer_string_;
// Set when we get a cancel_stream op.
grpc_error_handle cancel_error_;
|