pull/36732/head
Craig Tiller 11 months ago
parent 676fb0914e
commit 2d29dce5ed
  1. 3
      src/core/client_channel/client_channel.cc
  2. 11
      src/core/lib/channel/context.h
  3. 5
      src/core/lib/promise/context.h
  4. 9
      src/core/load_balancing/lb_policy.h

@ -1842,8 +1842,7 @@ ClientChannel::PickSubchannel(LoadBalancingPolicy::SubchannelPicker& picker,
// it when the call finishes.
if (complete_pick->subchannel_call_tracker != nullptr) {
complete_pick->subchannel_call_tracker->Start();
unstarted_handler.SetContext(
complete_pick->subchannel_call_tracker.release());
SetContext(complete_pick->subchannel_call_tracker.release());
}
// Return the connected subchannel.
return connected_subchannel;

@ -59,6 +59,9 @@ typedef enum {
/// the server.
GRPC_CONTEXT_BACKEND_METRIC_PROVIDER,
/// A LoadBalancingPolicy::SubchannelCallTrackerInterface
GRPC_SUBCHANNEL_CALL_TRACKER_INTERFACE,
/// Special Google context
GRPC_CONTEXT_GOOGLE,
@ -104,6 +107,14 @@ class Context<T, absl::void_t<decltype(OldStyleContext<T>::kIndex)>> {
GetContext<grpc_call_context_element>()[OldStyleContext<T>::kIndex]
.value);
}
static void set(T* value) {
auto& elem = GetContext<grpc_call_context_element>()[OldStyleContext<T>::kIndex];
if (elem.destroy != nullptr) {
elem.destroy(elem.value);
elem.destroy = nullptr;
}
elem.value = value;
}
};
} // namespace promise_detail

@ -119,6 +119,11 @@ T* GetContext() {
return p;
}
template <typename T>
void SetContext(T* p) {
promise_detail::Context<T>::set(p);
}
// Given a promise and a context, return a promise that has that context set.
template <typename T, typename F>
promise_detail::WithContext<T, F> WithContext(F f, T* context) {

@ -484,6 +484,15 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
ChannelArgs channel_args_;
};
namespace promise_detail {
template <>
struct OldStyleContext<LoadBalancingPolicy::SubchannelCallTrackerInterface> {
static constexpr grpc_context_index kIndex = GRPC_SUBCHANNEL_CALL_TRACKER_INTERFACE;
};
}
} // namespace grpc_core
#endif // GRPC_SRC_CORE_LOAD_BALANCING_LB_POLICY_H

Loading…
Cancel
Save