Skip to content

Commit

Permalink
Fix compilation bug with Rust 1.68.2 caused by an unnecessary HRTB (f…
Browse files Browse the repository at this point in the history
…or<'a> ...) that Rust 1.69.0+ are fine with but 1.68.2 is not (perhaps due to rust-lang/rust#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)
  • Loading branch information
ximon18 committed Sep 25, 2024
1 parent e70f8ea commit ab6a634
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 32 deletions.
58 changes: 29 additions & 29 deletions src/net/server/middleware/xfr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<RequestOctets, NextSvc, XDP, Metadata = ()> {
pub struct XfrMiddlewareSvc<RequestOctets, NextSvc, RequestMeta, XDP> {
/// The upstream [`Service`] to pass requests to and receive responses
/// from.
next_svc: NextSvc,
Expand All @@ -123,13 +123,13 @@ pub struct XfrMiddlewareSvc<RequestOctets, NextSvc, XDP, Metadata = ()> {
/// may run concurrently.
batcher_semaphore: Arc<Semaphore>,

_phantom: PhantomData<(RequestOctets, Metadata)>,
_phantom: PhantomData<(RequestOctets, RequestMeta)>,
}

impl<RequestOctets, NextSvc, XDP, Metadata>
XfrMiddlewareSvc<RequestOctets, NextSvc, XDP, Metadata>
impl<RequestOctets, NextSvc, RequestMeta, XDP>
XfrMiddlewareSvc<RequestOctets, NextSvc, RequestMeta, XDP>
where
XDP: XfrDataProvider<Metadata>,
XDP: XfrDataProvider<RequestMeta>,
{
/// Creates a new instance of this middleware.
///
Expand Down Expand Up @@ -158,16 +158,16 @@ where
}
}

impl<RequestOctets, NextSvc, XDP, Metadata>
XfrMiddlewareSvc<RequestOctets, NextSvc, XDP, Metadata>
impl<RequestOctets, NextSvc, RequestMeta, XDP>
XfrMiddlewareSvc<RequestOctets, NextSvc, RequestMeta, XDP>
where
RequestOctets: Octets + Send + Sync + 'static + Unpin,
for<'a> <RequestOctets as octseq::Octets>::Range<'a>: Send + Sync,
NextSvc: Service<RequestOctets, ()> + Clone + Send + Sync + 'static,
NextSvc::Future: Send + Sync + Unpin,
NextSvc::Target: Composer + Default + Send + Sync,
NextSvc::Stream: Send + Sync,
XDP: XfrDataProvider<Metadata>,
XDP: XfrDataProvider<RequestMeta>,
XDP::Diff: Debug + 'static,
for<'a> <XDP::Diff as ZoneDiff>::Stream<'a>: Send,
{
Expand All @@ -178,7 +178,7 @@ where
pub async fn preprocess(
zone_walking_semaphore: Arc<Semaphore>,
batcher_semaphore: Arc<Semaphore>,
req: &Request<RequestOctets, Metadata>,
req: &Request<RequestOctets, RequestMeta>,
xfr_data_provider: XDP,
) -> Result<
ControlFlow<
Expand Down Expand Up @@ -807,19 +807,19 @@ where

//--- impl Service

impl<RequestOctets, NextSvc, XDP, Metadata> Service<RequestOctets, Metadata>
for XfrMiddlewareSvc<RequestOctets, NextSvc, XDP, Metadata>
impl<RequestOctets, NextSvc, RequestMeta, XDP>
Service<RequestOctets, RequestMeta>
for XfrMiddlewareSvc<RequestOctets, NextSvc, RequestMeta, XDP>
where
RequestOctets: Octets + Send + Sync + Unpin + 'static,
for<'a> <RequestOctets as octseq::Octets>::Range<'a>: Send + Sync,
NextSvc: Service<RequestOctets, ()> + Clone + Send + Sync + 'static,
NextSvc::Future: Send + Sync + Unpin,
NextSvc::Target: Composer + Default + Send + Sync,
NextSvc::Stream: Send + Sync,
XDP: XfrDataProvider<Metadata> + Clone + Sync + Send + 'static,
XDP: XfrDataProvider<RequestMeta> + Clone + Sync + Send + 'static,
XDP::Diff: Debug + Sync,
for<'a> <XDP::Diff as ZoneDiff>::Stream<'a>: Send,
Metadata: Clone + Default + Sync + Send + 'static,
RequestMeta: Clone + Default + Sync + Send + 'static,
{
type Target = NextSvc::Target;
type Stream = XfrMiddlewareStream<
Expand All @@ -831,7 +831,7 @@ where

fn call(
&self,
request: Request<RequestOctets, Metadata>,
request: Request<RequestOctets, RequestMeta>,
) -> Self::Future {
let request = request.clone();
let next_svc = self.next_svc.clone();
Expand Down Expand Up @@ -902,8 +902,8 @@ pub enum XfrDataProviderError {
//------------ Transferable ---------------------------------------------------

/// A provider of data needed for responding to XFR requests.
pub trait XfrDataProvider<Metadata = ()> {
type Diff: ZoneDiff + Send;
pub trait XfrDataProvider<RequestMeta = ()> {
type Diff: ZoneDiff + Send + Sync;

/// Request data needed to respond to an XFR request.
///
Expand All @@ -918,7 +918,7 @@ pub trait XfrDataProvider<Metadata = ()> {
#[allow(clippy::type_complexity)]
fn request<Octs>(
&self,
req: &Request<Octs, Metadata>,
req: &Request<Octs, RequestMeta>,
diff_from: Option<Serial>,
) -> Pin<
Box<
Expand All @@ -938,16 +938,16 @@ pub trait XfrDataProvider<Metadata = ()> {

//--- impl XfrDataProvider for Deref<XfrDataProvider>

impl<Metadata, T, U> XfrDataProvider<Metadata> for U
impl<RequestMeta, T, U> XfrDataProvider<RequestMeta> for U
where
T: XfrDataProvider<Metadata> + 'static,
T: XfrDataProvider<RequestMeta> + 'static,
U: Deref<Target = T>,
{
type Diff = T::Diff;

fn request<Octs>(
&self,
req: &Request<Octs, Metadata>,
req: &Request<Octs, RequestMeta>,
diff_from: Option<Serial>,
) -> Pin<
Box<
Expand All @@ -970,7 +970,7 @@ where

//--- impl XfrDataProvider for Zone

impl<Metadata> XfrDataProvider<Metadata> for Zone {
impl<RequestMeta> XfrDataProvider<RequestMeta> for Zone {
type Diff = EmptyZoneDiff;

/// Request data needed to respond to an XFR request.
Expand All @@ -981,7 +981,7 @@ impl<Metadata> XfrDataProvider<Metadata> for Zone {
/// Returns Err if the requested zone is not this zone.
fn request<Octs>(
&self,
req: &Request<Octs, Metadata>,
req: &Request<Octs, RequestMeta>,
_diff_from: Option<Serial>,
) -> Pin<
Box<
Expand Down Expand Up @@ -1013,7 +1013,7 @@ impl<Metadata> XfrDataProvider<Metadata> for Zone {

//--- impl XfrDataProvider for ZoneTree

impl<Metadata> XfrDataProvider<Metadata> for ZoneTree {
impl<RequestMeta> XfrDataProvider<RequestMeta> for ZoneTree {
type Diff = EmptyZoneDiff;

/// Request data needed to respond to an XFR request.
Expand All @@ -1024,7 +1024,7 @@ impl<Metadata> XfrDataProvider<Metadata> for ZoneTree {
/// Returns Err if the requested zone is not this zone tree.
fn request<Octs>(
&self,
req: &Request<Octs, Metadata>,
req: &Request<Octs, RequestMeta>,
_diff_from: Option<Serial>,
) -> Pin<
Box<
Expand Down Expand Up @@ -2057,7 +2057,7 @@ JAIN-BB.JAIN.AD.JP. IN A 192.41.197.2
async fn get_zone_soa(zone: &Zone) -> Soa<Name<Bytes>> {
let read = zone.read();
let zone_soa_answer =
XfrMiddlewareSvc::<Vec<u8>, TestNextSvc, Zone>::read_soa(
XfrMiddlewareSvc::<Vec<u8>, TestNextSvc, (), Zone>::read_soa(
&read,
zone.apex_name().to_owned(),
)
Expand Down Expand Up @@ -2176,9 +2176,9 @@ JAIN-BB.JAIN.AD.JP. IN A 192.41.197.2
)
}

async fn do_preprocess<Metadata, XDP: XfrDataProvider<Metadata>>(
async fn do_preprocess<RequestMeta, XDP: XfrDataProvider<RequestMeta>>(
zone: XDP,
req: &Request<Vec<u8>, Metadata>,
req: &Request<Vec<u8>, RequestMeta>,
) -> Result<
ControlFlow<
XfrMiddlewareStream<
Expand All @@ -2193,7 +2193,7 @@ JAIN-BB.JAIN.AD.JP. IN A 192.41.197.2
XDP::Diff: Debug + 'static,
for<'a> <XDP::Diff as ZoneDiff>::Stream<'a>: Send,
{
XfrMiddlewareSvc::<Vec<u8>, TestNextSvc, XDP, Metadata>::preprocess(
XfrMiddlewareSvc::<Vec<u8>, TestNextSvc, RequestMeta, XDP>::preprocess(
Arc::new(Semaphore::new(1)),
Arc::new(Semaphore::new(1)),
req,
Expand Down
5 changes: 2 additions & 3 deletions src/net/server/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::<Vec<u8>, _, _, Option<Arc<Key>>>::new(
// 4. XFR(-in) middleware service.
let svc = XfrMiddlewareSvc::<Vec<u8>, _, Option<Arc<Key>>, _>::new(
svc, zones, 1,
);

Expand Down

0 comments on commit ab6a634

Please sign in to comment.