diff --git a/src/core/lib/channel/promise_based_filter.cc b/src/core/lib/channel/promise_based_filter.cc index 388dad6f766..ccb7d07438e 100644 --- a/src/core/lib/channel/promise_based_filter.cc +++ b/src/core/lib/channel/promise_based_filter.cc @@ -25,7 +25,6 @@ #include #include "src/core/lib/channel/channel_stack.h" -#include "src/core/lib/event_engine/default_event_engine.h" #include "src/core/lib/gprpp/manual_constructor.h" #include "src/core/lib/gprpp/status_helper.h" #include "src/core/lib/iomgr/error.h" @@ -45,7 +44,9 @@ BaseCallData::BaseCallData(grpc_call_element* elem, call_combiner_(args->call_combiner), deadline_(args->deadline), context_(args->context), - event_engine_(grpc_event_engine::experimental::GetDefaultEventEngine()) { + event_engine_( + static_cast(elem->channel_data) + ->hack_until_per_channel_stack_event_engines_land_get_event_engine()) { if (flags & kFilterExaminesServerInitialMetadata) { server_initial_metadata_latch_ = arena_->New>(); } diff --git a/src/core/lib/channel/promise_based_filter.h b/src/core/lib/channel/promise_based_filter.h index b5d898b8799..2cabc081bfb 100644 --- a/src/core/lib/channel/promise_based_filter.h +++ b/src/core/lib/channel/promise_based_filter.h @@ -108,6 +108,16 @@ class ChannelFilter { virtual bool GetChannelInfo(const grpc_channel_info*) { return false; } virtual ~ChannelFilter() = default; + + grpc_event_engine::experimental::EventEngine* + hack_until_per_channel_stack_event_engines_land_get_event_engine() { + return event_engine_.get(); + } + + private: + // TODO(ctiller): remove once per-channel-stack event engines land + std::shared_ptr event_engine_ = + grpc_event_engine::experimental::GetDefaultEventEngine(); }; // Designator for whether a filter is client side or server side. @@ -176,7 +186,7 @@ class BaseCallData : public Activity, private Wakeable { call_data->pollent_.load(std::memory_order_acquire)), promise_detail::Context(&call_data->finalization_), promise_detail::Context( - call_data->event_engine_.get()) {} + call_data->event_engine_) {} }; class Flusher { @@ -283,7 +293,7 @@ class BaseCallData : public Activity, private Wakeable { grpc_call_context_element* const context_; std::atomic pollent_{nullptr}; Latch* server_initial_metadata_latch_ = nullptr; - std::shared_ptr event_engine_; + grpc_event_engine::experimental::EventEngine* event_engine_; }; class ClientCallData : public BaseCallData { diff --git a/test/core/filters/client_authority_filter_test.cc b/test/core/filters/client_authority_filter_test.cc index 01508a72d4a..fe21c37271a 100644 --- a/test/core/filters/client_authority_filter_test.cc +++ b/test/core/filters/client_authority_filter_test.cc @@ -127,5 +127,10 @@ TEST(ClientAuthorityFilterTest, int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + // TODO(ctiller): promise_based_call currently demands to instantiate an event + // engine which needs grpc to be initialized. + grpc_init(); + int r = RUN_ALL_TESTS(); + grpc_shutdown(); + return r; }