[call-v3] Add an opt-out for call-v3 stack instantiation (#35956)
We've got a few filters in prod that are going to be awful to convert, and are getting pulled into some unit tests in hard to disable ways -- buuut we don't need them for chaotic good in the reality in which we're deploying it -- so I want an escape hatch for the moment.
Closes #35956
COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35956 from ctiller:not-now-thanks f5d331b923
PiperOrigin-RevId: 609384999
This commit is contained in:
parent
9db40fa845
commit
84b0bb3d1c
|
|
@ -74,6 +74,12 @@
|
|||
|
||||
namespace grpc_core {
|
||||
|
||||
// HACK: If a filter has this type as a base class it will be skipped in
|
||||
// v3 filter stacks. This is a temporary measure to allow the v3 filter stack
|
||||
// to be bought up whilst some tests inadvertently rely on hard to convert
|
||||
// filters.
|
||||
class HackyHackyHackySkipInV3FilterStacks {};
|
||||
|
||||
class ChannelFilter {
|
||||
public:
|
||||
class Args {
|
||||
|
|
@ -1906,9 +1912,11 @@ struct ChannelFilterWithFlagsMethods {
|
|||
// ChannelArgs channel_args, ChannelFilter::Args filter_args);
|
||||
// };
|
||||
template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
|
||||
absl::enable_if_t<std::is_base_of<ChannelFilter, F>::value &&
|
||||
!std::is_base_of<ImplementChannelFilter<F>, F>::value,
|
||||
grpc_channel_filter>
|
||||
absl::enable_if_t<
|
||||
std::is_base_of<ChannelFilter, F>::value &&
|
||||
!std::is_base_of<ImplementChannelFilter<F>, F>::value &&
|
||||
!std::is_base_of<HackyHackyHackySkipInV3FilterStacks, F>::value,
|
||||
grpc_channel_filter>
|
||||
MakePromiseBasedFilter(const char* name) {
|
||||
using CallData = promise_filter_detail::CallData<kEndpoint>;
|
||||
|
||||
|
|
@ -1946,6 +1954,52 @@ MakePromiseBasedFilter(const char* name) {
|
|||
};
|
||||
}
|
||||
|
||||
template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
|
||||
absl::enable_if_t<
|
||||
std::is_base_of<HackyHackyHackySkipInV3FilterStacks, F>::value,
|
||||
grpc_channel_filter>
|
||||
MakePromiseBasedFilter(const char* name) {
|
||||
using CallData = promise_filter_detail::CallData<kEndpoint>;
|
||||
|
||||
return grpc_channel_filter{
|
||||
// start_transport_stream_op_batch
|
||||
promise_filter_detail::BaseCallDataMethods::StartTransportStreamOpBatch,
|
||||
// make_call_promise
|
||||
promise_filter_detail::ChannelFilterMethods::MakeCallPromise,
|
||||
[](grpc_channel_element* elem, CallSpineInterface*) {
|
||||
GRPC_LOG_EVERY_N_SEC(
|
||||
1, GPR_ERROR,
|
||||
"gRPC V3 call stack in use, with a filter ('%s') that is not V3.",
|
||||
elem->filter->name);
|
||||
},
|
||||
// start_transport_op
|
||||
promise_filter_detail::ChannelFilterMethods::StartTransportOp,
|
||||
// sizeof_call_data
|
||||
sizeof(CallData),
|
||||
// init_call_elem
|
||||
promise_filter_detail::CallDataFilterWithFlagsMethods<
|
||||
CallData, kFlags>::InitCallElem,
|
||||
// set_pollset_or_pollset_set
|
||||
promise_filter_detail::BaseCallDataMethods::SetPollsetOrPollsetSet,
|
||||
// destroy_call_elem
|
||||
promise_filter_detail::CallDataFilterWithFlagsMethods<
|
||||
CallData, kFlags>::DestroyCallElem,
|
||||
// sizeof_channel_data
|
||||
sizeof(F),
|
||||
// init_channel_elem
|
||||
promise_filter_detail::ChannelFilterWithFlagsMethods<
|
||||
F, kFlags>::InitChannelElem,
|
||||
// post_init_channel_elem
|
||||
promise_filter_detail::ChannelFilterMethods::PostInitChannelElem,
|
||||
// destroy_channel_elem
|
||||
promise_filter_detail::ChannelFilterMethods::DestroyChannelElem,
|
||||
// get_channel_info
|
||||
promise_filter_detail::ChannelFilterMethods::GetChannelInfo,
|
||||
// name
|
||||
name,
|
||||
};
|
||||
}
|
||||
|
||||
template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
|
||||
absl::enable_if_t<std::is_base_of<ImplementChannelFilter<F>, F>::value,
|
||||
grpc_channel_filter>
|
||||
|
|
|
|||
Loading…
Reference in New Issue