diff --git a/src/filters.rs b/src/filters.rs index 938ade78b..0efa40e34 100644 --- a/src/filters.rs +++ b/src/filters.rs @@ -66,7 +66,7 @@ pub use self::{ registry::FilterRegistry, set::{FilterMap, FilterSet}, timestamp::Timestamp, - token_router::TokenRouter, + token_router::{HashedTokenRouter, TokenRouter}, write::WriteContext, }; diff --git a/src/filters/set.rs b/src/filters/set.rs index cf88ab9d8..fbcb71577 100644 --- a/src/filters/set.rs +++ b/src/filters/set.rs @@ -51,6 +51,7 @@ impl FilterSet { filters::Debug::factory(), filters::Drop::factory(), filters::Firewall::factory(), + filters::HashedTokenRouter::factory(), filters::LoadBalancer::factory(), filters::LocalRateLimit::factory(), filters::Match::factory(), diff --git a/src/filters/token_router.rs b/src/filters/token_router.rs index 9304a2f74..b9dee65d0 100644 --- a/src/filters/token_router.rs +++ b/src/filters/token_router.rs @@ -75,6 +75,27 @@ impl Filter for TokenRouter { } } +pub struct HashedTokenRouter(TokenRouter); + +impl StaticFilter for HashedTokenRouter { + const NAME: &'static str = "quilkin.filters.token_router.v1alpha1.HashedTokenRouter"; + type Configuration = Config; + type BinaryConfiguration = proto::TokenRouter; + + fn try_from_config(config: Option) -> Result { + Ok(Self(TokenRouter { + config: config.unwrap_or_default(), + })) + } +} + +#[async_trait::async_trait] +impl Filter for HashedTokenRouter { + async fn read(&self, ctx: &mut ReadContext) -> Result<(), FilterError> { + self.0.sync_read(ctx) + } +} + pub enum RouterError { NoTokenFound, NoEndpointMatch { token: bytes::Bytes }, diff --git a/src/xds.rs b/src/xds.rs index 05c93a336..dff0c17b2 100644 --- a/src/xds.rs +++ b/src/xds.rs @@ -78,8 +78,6 @@ impl Resource { } }; - let len = config.value.len(); - let json_value = match crate::filters::FilterRegistry::get_factory(&filter.name) .ok_or_else(|| { crate::filters::CreationError::NotFound(filter.name.clone()) @@ -88,7 +86,6 @@ impl Resource { { Ok(jv) => jv, Err(err) => { - tracing::error!("wtf {} {len} {err:#}", filter.name); return Err(err.into()); } };