Skip to content

Commit

Permalink
dynamic_modules: add mut to &FilterConfig on filter creation (#38349)
Browse files Browse the repository at this point in the history
Commit Message: dynamic_modules: add mut to &FilterConfig on filter
creation
Additional Description:

This adds `mut` keywrod to &HttpFilterConfig on new_http_filter method.
Without this, for example, we cannot share a cache across multiple http
filters on a central place.

Risk Level: low
Testing: existing ones
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a

---------

Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
  • Loading branch information
mathetake authored Feb 8, 2025
1 parent 79f28bf commit 6e6898f
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 18 deletions.
6 changes: 3 additions & 3 deletions source/extensions/dynamic_modules/sdk/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ pub static NEW_HTTP_FILTER_CONFIG_FUNCTION: OnceLock<
/// imlementation is recommended to implement the [`Drop`] trait to handle the necessary cleanup.
pub trait HttpFilterConfig<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> {
/// This is called when a HTTP filter chain is created for a new stream.
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
panic!("not implemented");
}
}
Expand Down Expand Up @@ -1047,14 +1047,14 @@ unsafe extern "C" fn envoy_dynamic_module_on_http_filter_new(
let filter_config = {
let raw = filter_config_ptr
as *mut *mut dyn HttpFilterConfig<EnvoyHttpFilterConfigImpl, EnvoyHttpFilterImpl>;
&**raw
&mut **raw
};
envoy_dynamic_module_on_http_filter_new_impl(&mut envoy_filter_config, filter_config)
}

fn envoy_dynamic_module_on_http_filter_new_impl(
envoy_filter_config: &mut EnvoyHttpFilterConfigImpl,
filter_config: &dyn HttpFilterConfig<EnvoyHttpFilterConfigImpl, EnvoyHttpFilterImpl>,
filter_config: &mut dyn HttpFilterConfig<EnvoyHttpFilterConfigImpl, EnvoyHttpFilterImpl>,
) -> abi::envoy_dynamic_module_type_http_filter_module_ptr {
let filter = filter_config.new_http_filter(envoy_filter_config);
wrap_into_c_void_ptr!(filter)
Expand Down
12 changes: 6 additions & 6 deletions source/extensions/dynamic_modules/sdk/rust/src/lib_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ fn test_envoy_dynamic_module_on_http_filter_new_destroy() {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for TestHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(TestHttpFilter)
}
}
Expand All @@ -95,12 +95,12 @@ fn test_envoy_dynamic_module_on_http_filter_new_destroy() {
}
}

let filter_config = TestHttpFilterConfig;
let mut filter_config = TestHttpFilterConfig;
let result = envoy_dynamic_module_on_http_filter_new_impl(
&mut EnvoyHttpFilterConfigImpl {
raw_ptr: std::ptr::null_mut(),
},
&filter_config,
&mut filter_config,
);
assert!(!result.is_null());

Expand All @@ -118,7 +118,7 @@ fn test_envoy_dynamic_module_on_http_filter_callbacks() {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for TestHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(TestHttpFilter)
}
}
Expand Down Expand Up @@ -185,12 +185,12 @@ fn test_envoy_dynamic_module_on_http_filter_callbacks() {
}
}

let filter_config = TestHttpFilterConfig;
let mut filter_config = TestHttpFilterConfig;
let filter = envoy_dynamic_module_on_http_filter_new_impl(
&mut EnvoyHttpFilterConfigImpl {
raw_ptr: std::ptr::null_mut(),
},
&filter_config,
&mut filter_config,
);

unsafe {
Expand Down
8 changes: 4 additions & 4 deletions test/extensions/dynamic_modules/test_data/rust/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct HeaderCallbacksFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for HeaderCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(HeaderCallbacksFilter {})
}
}
Expand Down Expand Up @@ -239,7 +239,7 @@ struct SendResponseFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for SendResponseFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(SendResponseFilter {})
}
}
Expand Down Expand Up @@ -274,7 +274,7 @@ struct DynamicMetadataCallbacksFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for DynamicMetadataCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(DynamicMetadataCallbacksFilter {})
}
}
Expand Down Expand Up @@ -365,7 +365,7 @@ struct BodyCallbacksFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for BodyCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(BodyCallbacksFilter::default())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ struct PassthroughHttpFilterConfig {}
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for PassthroughHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(PassthroughHttpFilter {})
}
}
Expand All @@ -48,7 +48,7 @@ struct HeadersHttpFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for HeadersHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
let headers_to_add: Vec<(String, String)> = self
.headers_to_add
.split(',')
Expand Down Expand Up @@ -165,7 +165,7 @@ struct BodyCallbacksFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for BodyCallbacksFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(BodyCallbacksFilter {
immediate_end_of_stream: self.immediate_end_of_stream,
seen_request_body: false,
Expand Down Expand Up @@ -258,7 +258,7 @@ struct SendResponseHttpFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for SendResponseHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(SendResponseHttpFilter {
on_request_headers: self.on_request_headers,
})
Expand Down
2 changes: 1 addition & 1 deletion test/extensions/dynamic_modules/test_data/rust/no_op.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ struct NopHttpFilterConfig {
impl<EC: EnvoyHttpFilterConfig, EHF: EnvoyHttpFilter> HttpFilterConfig<EC, EHF>
for NopHttpFilterConfig
{
fn new_http_filter(&self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
fn new_http_filter(&mut self, _envoy: &mut EC) -> Box<dyn HttpFilter<EHF>> {
Box::new(NopHttpFilter {
on_request_headers_called: false,
on_request_body_called: false,
Expand Down

0 comments on commit 6e6898f

Please sign in to comment.