From ab6a63411725a8af57aa3c1064cd15480c691def Mon Sep 17 00:00:00 2001 From: Ximon Eighteen <3304436+ximon18@users.noreply.github.com> Date: Thu, 26 Sep 2024 00:23:12 +0200 Subject: [PATCH] Fix compilation bug with Rust 1.68.2 caused by an unnecessary HRTB (for<'a> ...) that Rust 1.69.0+ are fine with but 1.68.2 is not (perhaps due to https://github.com/rust-lang/rust/pull/103695/ which was fixed in Rust 1.69.0). Also reorder XfrMiddlewareSvc generic types to match the order used in other middleware services, i.e. add the extra type XDP at the end, not before RequestMeta. Also rename Metadata to RequestMeta as in other middleware services. (and fix a comment that is ahead of its time, there is no ZoneMaintainer yet in this branch) --- src/net/server/middleware/xfr.rs | 58 ++++++++++++++--------------- src/net/server/tests/integration.rs | 5 +-- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/net/server/middleware/xfr.rs b/src/net/server/middleware/xfr.rs index c72fb5fd8..04eb9133e 100644 --- a/src/net/server/middleware/xfr.rs +++ b/src/net/server/middleware/xfr.rs @@ -106,7 +106,7 @@ const MAX_TCP_MSG_BYTE_LEN: u16 = u16::MAX; /// /// [module documentation]: crate::net::server::middleware::xfr #[derive(Clone, Debug)] -pub struct XfrMiddlewareSvc { +pub struct XfrMiddlewareSvc { /// The upstream [`Service`] to pass requests to and receive responses /// from. next_svc: NextSvc, @@ -123,13 +123,13 @@ pub struct XfrMiddlewareSvc { /// may run concurrently. batcher_semaphore: Arc, - _phantom: PhantomData<(RequestOctets, Metadata)>, + _phantom: PhantomData<(RequestOctets, RequestMeta)>, } -impl - XfrMiddlewareSvc +impl + XfrMiddlewareSvc where - XDP: XfrDataProvider, + XDP: XfrDataProvider, { /// Creates a new instance of this middleware. /// @@ -158,8 +158,8 @@ where } } -impl - XfrMiddlewareSvc +impl + XfrMiddlewareSvc where RequestOctets: Octets + Send + Sync + 'static + Unpin, for<'a> ::Range<'a>: Send + Sync, @@ -167,7 +167,7 @@ where NextSvc::Future: Send + Sync + Unpin, NextSvc::Target: Composer + Default + Send + Sync, NextSvc::Stream: Send + Sync, - XDP: XfrDataProvider, + XDP: XfrDataProvider, XDP::Diff: Debug + 'static, for<'a> ::Stream<'a>: Send, { @@ -178,7 +178,7 @@ where pub async fn preprocess( zone_walking_semaphore: Arc, batcher_semaphore: Arc, - req: &Request, + req: &Request, xfr_data_provider: XDP, ) -> Result< ControlFlow< @@ -807,8 +807,9 @@ where //--- impl Service -impl Service - for XfrMiddlewareSvc +impl + Service + for XfrMiddlewareSvc where RequestOctets: Octets + Send + Sync + Unpin + 'static, for<'a> ::Range<'a>: Send + Sync, @@ -816,10 +817,9 @@ where NextSvc::Future: Send + Sync + Unpin, NextSvc::Target: Composer + Default + Send + Sync, NextSvc::Stream: Send + Sync, - XDP: XfrDataProvider + Clone + Sync + Send + 'static, + XDP: XfrDataProvider + Clone + Sync + Send + 'static, XDP::Diff: Debug + Sync, - for<'a> ::Stream<'a>: Send, - Metadata: Clone + Default + Sync + Send + 'static, + RequestMeta: Clone + Default + Sync + Send + 'static, { type Target = NextSvc::Target; type Stream = XfrMiddlewareStream< @@ -831,7 +831,7 @@ where fn call( &self, - request: Request, + request: Request, ) -> Self::Future { let request = request.clone(); let next_svc = self.next_svc.clone(); @@ -902,8 +902,8 @@ pub enum XfrDataProviderError { //------------ Transferable --------------------------------------------------- /// A provider of data needed for responding to XFR requests. -pub trait XfrDataProvider { - type Diff: ZoneDiff + Send; +pub trait XfrDataProvider { + type Diff: ZoneDiff + Send + Sync; /// Request data needed to respond to an XFR request. /// @@ -918,7 +918,7 @@ pub trait XfrDataProvider { #[allow(clippy::type_complexity)] fn request( &self, - req: &Request, + req: &Request, diff_from: Option, ) -> Pin< Box< @@ -938,16 +938,16 @@ pub trait XfrDataProvider { //--- impl XfrDataProvider for Deref -impl XfrDataProvider for U +impl XfrDataProvider for U where - T: XfrDataProvider + 'static, + T: XfrDataProvider + 'static, U: Deref, { type Diff = T::Diff; fn request( &self, - req: &Request, + req: &Request, diff_from: Option, ) -> Pin< Box< @@ -970,7 +970,7 @@ where //--- impl XfrDataProvider for Zone -impl XfrDataProvider for Zone { +impl XfrDataProvider for Zone { type Diff = EmptyZoneDiff; /// Request data needed to respond to an XFR request. @@ -981,7 +981,7 @@ impl XfrDataProvider for Zone { /// Returns Err if the requested zone is not this zone. fn request( &self, - req: &Request, + req: &Request, _diff_from: Option, ) -> Pin< Box< @@ -1013,7 +1013,7 @@ impl XfrDataProvider for Zone { //--- impl XfrDataProvider for ZoneTree -impl XfrDataProvider for ZoneTree { +impl XfrDataProvider for ZoneTree { type Diff = EmptyZoneDiff; /// Request data needed to respond to an XFR request. @@ -1024,7 +1024,7 @@ impl XfrDataProvider for ZoneTree { /// Returns Err if the requested zone is not this zone tree. fn request( &self, - req: &Request, + req: &Request, _diff_from: Option, ) -> Pin< Box< @@ -2057,7 +2057,7 @@ JAIN-BB.JAIN.AD.JP. IN A 192.41.197.2 async fn get_zone_soa(zone: &Zone) -> Soa> { let read = zone.read(); let zone_soa_answer = - XfrMiddlewareSvc::, TestNextSvc, Zone>::read_soa( + XfrMiddlewareSvc::, TestNextSvc, (), Zone>::read_soa( &read, zone.apex_name().to_owned(), ) @@ -2176,9 +2176,9 @@ JAIN-BB.JAIN.AD.JP. IN A 192.41.197.2 ) } - async fn do_preprocess>( + async fn do_preprocess>( zone: XDP, - req: &Request, Metadata>, + req: &Request, RequestMeta>, ) -> Result< ControlFlow< XfrMiddlewareStream< @@ -2193,7 +2193,7 @@ JAIN-BB.JAIN.AD.JP. IN A 192.41.197.2 XDP::Diff: Debug + 'static, for<'a> ::Stream<'a>: Send, { - XfrMiddlewareSvc::, TestNextSvc, XDP, Metadata>::preprocess( + XfrMiddlewareSvc::, TestNextSvc, RequestMeta, XDP>::preprocess( Arc::new(Semaphore::new(1)), Arc::new(Semaphore::new(1)), req, diff --git a/src/net/server/tests/integration.rs b/src/net/server/tests/integration.rs index 78ab2d9ca..db9c5f190 100644 --- a/src/net/server/tests/integration.rs +++ b/src/net/server/tests/integration.rs @@ -158,9 +158,8 @@ async fn server_tests(#[files("test-data/server/*.rpl")] rpl_file: PathBuf) { let svc = EdnsMiddlewareSvc::new(svc).enable(server_config.edns_tcp_keepalive); - // 4. XFR(-in) middleware service (XFR-out is handled by the - // ZoneMaintainer). - let svc = XfrMiddlewareSvc::, _, _, Option>>::new( + // 4. XFR(-in) middleware service. + let svc = XfrMiddlewareSvc::, _, Option>, _>::new( svc, zones, 1, );