all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>
Cc: pbs-devel@lists.proxmox.com
Subject: Re: [pbs-devel] [RFC pxar 3/3] remove futures-io feature
Date: Tue, 12 Jan 2021 15:42:39 +0100	[thread overview]
Message-ID: <20210112144239.mxtal6guiiyb6x6e@wobu-vie.proxmox.com> (raw)
In-Reply-To: <20210112135830.2798301-21-f.gruenbichler@proxmox.com>

The `futures` crate also contains the `Stream` trait which was also
covered by the `futures-io` feature.

Rather than removing `DecoderStream` and `into_decoder` those two should
probably be a `stream` feature now.

Btw. `cargo test` needs to be run `--all-features` (`make check` does
it btw.). This currently fails due to the missing stream part.

On Tue, Jan 12, 2021 at 02:58:30PM +0100, Fabian Grünbichler wrote:
> we don't use it, and it adds unnecessary duplication/complexity.
> 
> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
> ---
> 
> Notes:
>     I am not particularly fond of FileContents::poll_read scaling the buffer Vec
>     like that..
> 
>  Cargo.toml          |   6 +--
>  debian/control      |  78 ++++++++++----------------------
>  src/accessor/aio.rs |  42 ++++-------------
>  src/decoder/aio.rs  | 108 --------------------------------------------
>  src/encoder/aio.rs  |  81 ---------------------------------
>  src/encoder/mod.rs  |  21 ++-------
>  6 files changed, 37 insertions(+), 299 deletions(-)
> 
> diff --git a/Cargo.toml b/Cargo.toml
> index 875de7a..703525e 100644
> --- a/Cargo.toml
> +++ b/Cargo.toml
> @@ -53,16 +53,14 @@ tokio = { version = "1.0", optional = true, default-features = false }
>  libc = "0.2"
>  
>  [features]
> -default = [ "futures-io", "tokio-io" ]
> -futures-io = [ "futures" ]
> +default = [ "tokio-io" ]
>  tokio-io = [ "tokio" ]
>  tokio-fs = [ "tokio-io", "tokio/fs" ]
>  
> -full = [ "tokio-fs", "futures-io" ]
> +full = [ "tokio-fs"]
>  
>  async-example = [
>      "anyhow",
> -    "futures-io",
>      "tokio-io",
>      "tokio-fs",
>      "tokio/rt-multi-thread",
> diff --git a/debian/control b/debian/control
> index 0409da8..dbbd0d6 100644
> --- a/debian/control
> +++ b/debian/control
> @@ -9,10 +9,9 @@ Build-Depends: debhelper (>= 11),
>   librust-bitflags-1+default-dev (>= 1.2.1-~~) <!nocheck>,
>   librust-endian-trait-0.6+arrays-dev <!nocheck>,
>   librust-endian-trait-0.6+default-dev <!nocheck>,
> - librust-futures-0.3+default-dev (>= 0.3.1-~~) <!nocheck>,
>   librust-libc-0.2+default-dev <!nocheck>,
>   librust-siphasher-0.3+default-dev <!nocheck>,
> - librust-tokio-0.2-dev (>= 0.2.10-~~) <!nocheck>
> + librust-tokio-1-dev <!nocheck>
>  Maintainer: Proxmox Support Team <support@proxmox.com>
>  Standards-Version: 4.4.1
>  Vcs-Git: 
> @@ -29,13 +28,11 @@ Depends:
>   librust-libc-0.2+default-dev,
>   librust-siphasher-0.3+default-dev
>  Recommends:
> - librust-pxar+default-dev (= ${binary:Version})
> + librust-pxar+tokio-dev (= ${binary:Version})
>  Suggests:
>   librust-pxar+anyhow-dev (= ${binary:Version}),
>   librust-pxar+async-example-dev (= ${binary:Version}),
> - librust-pxar+full-dev (= ${binary:Version}),
>   librust-pxar+futures-dev (= ${binary:Version}),
> - librust-pxar+tokio-dev (= ${binary:Version}),
>   librust-pxar+tokio-fs-dev (= ${binary:Version})
>  Provides:
>   librust-pxar+test-harness-dev (= ${binary:Version}),
> @@ -70,13 +67,11 @@ Multi-Arch: same
>  Depends:
>   ${misc:Depends},
>   librust-pxar-dev (= ${binary:Version}),
> - librust-pxar+futures-io-dev (= ${binary:Version}),
>   librust-pxar+tokio-io-dev (= ${binary:Version}),
>   librust-pxar+tokio-fs-dev (= ${binary:Version}),
>   librust-anyhow-1+default-dev,
> - librust-tokio-0.2+io-driver-dev (>= 0.2.10-~~),
> - librust-tokio-0.2+macros-dev (>= 0.2.10-~~),
> - librust-tokio-0.2+rt-threaded-dev (>= 0.2.10-~~)
> + librust-tokio-1+macros-dev,
> + librust-tokio-1+rt-multi-thread-dev
>  Provides:
>   librust-pxar-0+async-example-dev (= ${binary:Version}),
>   librust-pxar-0.6+async-example-dev (= ${binary:Version}),
> @@ -85,38 +80,6 @@ Description: Proxmox Archive format support library - feature "async-example"
>   This metapackage enables feature "async-example" for the Rust pxar crate, by
>   pulling in any additional dependencies needed by that feature.
>  
> -Package: librust-pxar+default-dev
> -Architecture: any
> -Multi-Arch: same
> -Depends:
> - ${misc:Depends},
> - librust-pxar-dev (= ${binary:Version}),
> - librust-pxar+futures-io-dev (= ${binary:Version}),
> - librust-pxar+tokio-io-dev (= ${binary:Version})
> -Provides:
> - librust-pxar-0+default-dev (= ${binary:Version}),
> - librust-pxar-0.6+default-dev (= ${binary:Version}),
> - librust-pxar-0.6.2+default-dev (= ${binary:Version})
> -Description: Proxmox Archive format support library - feature "default"
> - This metapackage enables feature "default" for the Rust pxar crate, by pulling
> - in any additional dependencies needed by that feature.
> -
> -Package: librust-pxar+full-dev
> -Architecture: any
> -Multi-Arch: same
> -Depends:
> - ${misc:Depends},
> - librust-pxar-dev (= ${binary:Version}),
> - librust-pxar+tokio-fs-dev (= ${binary:Version}),
> - librust-pxar+futures-io-dev (= ${binary:Version})
> -Provides:
> - librust-pxar-0+full-dev (= ${binary:Version}),
> - librust-pxar-0.6+full-dev (= ${binary:Version}),
> - librust-pxar-0.6.2+full-dev (= ${binary:Version})
> -Description: Proxmox Archive format support library - feature "full"
> - This metapackage enables feature "full" for the Rust pxar crate, by pulling in
> - any additional dependencies needed by that feature.
> -
>  Package: librust-pxar+futures-dev
>  Architecture: any
>  Multi-Arch: same
> @@ -125,18 +88,12 @@ Depends:
>   librust-pxar-dev (= ${binary:Version}),
>   librust-futures-0.3+default-dev (>= 0.3.1-~~)
>  Provides:
> - librust-pxar+futures-io-dev (= ${binary:Version}),
>   librust-pxar-0+futures-dev (= ${binary:Version}),
> - librust-pxar-0+futures-io-dev (= ${binary:Version}),
>   librust-pxar-0.6+futures-dev (= ${binary:Version}),
> - librust-pxar-0.6+futures-io-dev (= ${binary:Version}),
> - librust-pxar-0.6.2+futures-dev (= ${binary:Version}),
> - librust-pxar-0.6.2+futures-io-dev (= ${binary:Version})
> -Description: Proxmox Archive format support library - feature "futures" and 1 more
> + librust-pxar-0.6.2+futures-dev (= ${binary:Version})
> +Description: Proxmox Archive format support library - feature "futures"
>   This metapackage enables feature "futures" for the Rust pxar crate, by pulling
>   in any additional dependencies needed by that feature.
> - .
> - Additionally, this package also provides the "futures-io" feature.
>  
>  Package: librust-pxar+tokio-dev
>  Architecture: any
> @@ -144,20 +101,25 @@ Multi-Arch: same
>  Depends:
>   ${misc:Depends},
>   librust-pxar-dev (= ${binary:Version}),
> - librust-tokio-0.2-dev (>= 0.2.10-~~)
> + librust-tokio-1-dev
>  Provides:
> + librust-pxar+default-dev (= ${binary:Version}),
>   librust-pxar+tokio-io-dev (= ${binary:Version}),
>   librust-pxar-0+tokio-dev (= ${binary:Version}),
> + librust-pxar-0+default-dev (= ${binary:Version}),
>   librust-pxar-0+tokio-io-dev (= ${binary:Version}),
>   librust-pxar-0.6+tokio-dev (= ${binary:Version}),
> + librust-pxar-0.6+default-dev (= ${binary:Version}),
>   librust-pxar-0.6+tokio-io-dev (= ${binary:Version}),
>   librust-pxar-0.6.2+tokio-dev (= ${binary:Version}),
> + librust-pxar-0.6.2+default-dev (= ${binary:Version}),
>   librust-pxar-0.6.2+tokio-io-dev (= ${binary:Version})
> -Description: Proxmox Archive format support library - feature "tokio" and 1 more
> +Description: Proxmox Archive format support library - feature "tokio" and 2 more
>   This metapackage enables feature "tokio" for the Rust pxar crate, by pulling in
>   any additional dependencies needed by that feature.
>   .
> - Additionally, this package also provides the "tokio-io" feature.
> + Additionally, this package also provides the "default", and "tokio-io"
> + features.
>  
>  Package: librust-pxar+tokio-fs-dev
>  Architecture: any
> @@ -166,11 +128,17 @@ Depends:
>   ${misc:Depends},
>   librust-pxar-dev (= ${binary:Version}),
>   librust-pxar+tokio-io-dev (= ${binary:Version}),
> - librust-tokio-0.2+fs-dev (>= 0.2.10-~~)
> + librust-tokio-1+fs-dev
>  Provides:
> + librust-pxar+full-dev (= ${binary:Version}),
>   librust-pxar-0+tokio-fs-dev (= ${binary:Version}),
> + librust-pxar-0+full-dev (= ${binary:Version}),
>   librust-pxar-0.6+tokio-fs-dev (= ${binary:Version}),
> - librust-pxar-0.6.2+tokio-fs-dev (= ${binary:Version})
> -Description: Proxmox Archive format support library - feature "tokio-fs"
> + librust-pxar-0.6+full-dev (= ${binary:Version}),
> + librust-pxar-0.6.2+tokio-fs-dev (= ${binary:Version}),
> + librust-pxar-0.6.2+full-dev (= ${binary:Version})
> +Description: Proxmox Archive format support library - feature "tokio-fs" and 1 more
>   This metapackage enables feature "tokio-fs" for the Rust pxar crate, by pulling
>   in any additional dependencies needed by that feature.
> + .
> + Additionally, this package also provides the "full" feature.
> diff --git a/src/accessor/aio.rs b/src/accessor/aio.rs
> index dd017ae..c48ca8f 100644
> --- a/src/accessor/aio.rs
> +++ b/src/accessor/aio.rs
> @@ -348,20 +348,19 @@ pub struct FileContents<T> {
>  unsafe impl<T: Send> Send for FileContents<T> {}
>  unsafe impl<T: Sync> Sync for FileContents<T> {}
>  
> -#[cfg(any(feature = "futures-io", feature = "tokio-io"))]
> -impl<T: Clone + ReadAt> FileContents<T> {
> -    /// Similar implementation exists for SeqReadAtAdapter in mod.rs
> -    fn do_poll_read(
> +#[cfg(feature = "tokio-io")]
> +impl<T: Clone + ReadAt> tokio::io::AsyncRead for FileContents<T> {
> +    fn poll_read(
>          self: Pin<&mut Self>,
>          cx: &mut Context,
> -        dest: &mut [u8],
> -    ) -> Poll<io::Result<usize>> {
> +        dest: &mut tokio::io::ReadBuf,
> +    ) -> Poll<io::Result<()>> {
>          let this = unsafe { Pin::into_inner_unchecked(self) };
>          loop {
>              match this.future.take() {
>                  None => {
>                      let mut buffer = mem::take(&mut this.buffer);
> -                    util::scale_read_buffer(&mut buffer, dest.len());
> +                    util::scale_read_buffer(&mut buffer, dest.remaining());
>                      let reader: accessor::FileContentsImpl<T> = this.inner.clone();
>                      let at = this.at;
>                      let future: Pin<Box<dyn Future<Output = io::Result<ReadResult>>>> =
> @@ -384,9 +383,9 @@ impl<T: Clone + ReadAt> FileContents<T> {
>                      Poll::Ready(Ok(ReadResult { len: got, buffer })) => {
>                          this.buffer = buffer;
>                          this.at += got as u64;
> -                        let len = got.min(dest.len());
> -                        dest[..len].copy_from_slice(&this.buffer[..len]);
> -                        return Poll::Ready(Ok(len));
> +                        let len = got.min(dest.remaining());
> +                        dest.put_slice(&this.buffer[..len]);
> +                        return Poll::Ready(Ok(()));
>                      }
>                  },
>              }
> @@ -394,29 +393,6 @@ impl<T: Clone + ReadAt> FileContents<T> {
>      }
>  }
>  
> -#[cfg(feature = "futures-io")]
> -impl<T: Clone + ReadAt> futures::io::AsyncRead for FileContents<T> {
> -    fn poll_read(
> -        self: Pin<&mut Self>,
> -        cx: &mut Context,
> -        buf: &mut [u8],
> -    ) -> Poll<io::Result<usize>> {
> -        Self::do_poll_read(self, cx, buf)
> -    }
> -}
> -
> -#[cfg(feature = "tokio-io")]
> -impl<T: Clone + ReadAt> tokio::io::AsyncRead for FileContents<T> {
> -    fn poll_read(
> -        self: Pin<&mut Self>,
> -        cx: &mut Context,
> -        buf: &mut tokio::io::ReadBuf,
> -    ) -> Poll<io::Result<()>> {
> -        Self::do_poll_read(self, cx, &mut buf.initialize_unfilled())
> -            .map_ok(|bytes| { buf.set_filled(bytes); () })
> -    }
> -}
> -
>  impl<T: Clone + ReadAt> ReadAt for FileContents<T> {
>      fn start_read_at<'a>(
>          self: Pin<&'a Self>,
> diff --git a/src/decoder/aio.rs b/src/decoder/aio.rs
> index 1a5f5ea..82030b0 100644
> --- a/src/decoder/aio.rs
> +++ b/src/decoder/aio.rs
> @@ -16,15 +16,6 @@ pub struct Decoder<T> {
>      inner: decoder::DecoderImpl<T>,
>  }
>  
> -#[cfg(feature = "futures-io")]
> -impl<T: futures::io::AsyncRead> Decoder<FuturesReader<T>> {
> -    /// Decode a `pxar` archive from a `futures::io::AsyncRead` input.
> -    #[inline]
> -    pub async fn from_futures(input: T) -> io::Result<Self> {
> -        Decoder::new(FuturesReader::new(input)).await
> -    }
> -}
> -
>  #[cfg(feature = "tokio-io")]
>  impl<T: tokio::io::AsyncRead> Decoder<TokioReader<T>> {
>      /// Decode a `pxar` archive from a `tokio::io::AsyncRead` input.
> @@ -69,107 +60,8 @@ impl<T: SeqRead> Decoder<T> {
>      pub fn enable_goodbye_entries(&mut self, on: bool) {
>          self.inner.with_goodbye_tables = on;
>      }
> -
> -    /// Turn this decoder into a `Stream`.
> -    #[cfg(feature = "futures-io")]
> -    pub fn into_stream(self) -> DecoderStream<T> {
> -        DecoderStream::new(self)
> -    }
> -}
> -
> -#[cfg(feature = "futures-io")]
> -mod stream {
> -    use std::future::Future;
> -    use std::io;
> -    use std::pin::Pin;
> -    use std::task::{Context, Poll};
> -
> -    use super::{Entry, SeqRead};
> -
> -    /// A wrapper for the async decoder implementing `futures::stream::Stream`.
> -    ///
> -    /// As long as streams are poll-based this wrapper is required to turn `async fn next()` into
> -    /// `Stream`'s `poll_next()` interface.
> -    #[allow(clippy::type_complexity)] // yeah no
> -    pub struct DecoderStream<T> {
> -        inner: super::Decoder<T>,
> -        future: Option<Pin<Box<dyn Future<Output = Option<io::Result<Entry>>>>>>,
> -    }
> -
> -    impl<T> DecoderStream<T> {
> -        pub fn new(inner: super::Decoder<T>) -> Self {
> -            Self {
> -                inner,
> -                future: None,
> -            }
> -        }
> -    }
> -
> -    impl<T: SeqRead> futures::stream::Stream for DecoderStream<T> {
> -        type Item = io::Result<Entry>;
> -
> -        fn poll_next(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
> -            let this = unsafe { self.get_unchecked_mut() };
> -            loop {
> -                if let Some(mut fut) = this.future.take() {
> -                    match fut.as_mut().poll(cx) {
> -                        Poll::Ready(res) => return Poll::Ready(res),
> -                        Poll::Pending => {
> -                            this.future = Some(fut);
> -                            return Poll::Pending;
> -                        }
> -                    }
> -                }
> -                unsafe {
> -                    let fut: Box<dyn Future<Output = _>> = Box::new(this.inner.next());
> -                    // Discard the lifetime:
> -                    let fut: *mut (dyn Future<Output = Option<io::Result<Entry>>> + 'static) =
> -                        core::mem::transmute(Box::into_raw(fut));
> -                    let fut = Box::from_raw(fut);
> -                    this.future = Some(Pin::new_unchecked(fut));
> -                }
> -            }
> -        }
> -    }
> -}
> -
> -#[cfg(feature = "futures-io")]
> -pub use stream::DecoderStream;
> -
> -#[cfg(feature = "futures-io")]
> -mod fut {
> -    use std::io;
> -    use std::pin::Pin;
> -    use std::task::{Context, Poll};
> -
> -    /// Read adapter for `futures::io::AsyncRead`
> -    pub struct FuturesReader<T> {
> -        inner: T,
> -    }
> -
> -    impl<T: futures::io::AsyncRead> FuturesReader<T> {
> -        pub fn new(inner: T) -> Self {
> -            Self { inner }
> -        }
> -    }
> -
> -    impl<T: futures::io::AsyncRead> crate::decoder::SeqRead for FuturesReader<T> {
> -        fn poll_seq_read(
> -            self: Pin<&mut Self>,
> -            cx: &mut Context,
> -            buf: &mut [u8],
> -        ) -> Poll<io::Result<usize>> {
> -            unsafe {
> -                self.map_unchecked_mut(|this| &mut this.inner)
> -                    .poll_read(cx, buf)
> -            }
> -        }
> -    }
>  }
>  
> -#[cfg(feature = "futures-io")]
> -use fut::FuturesReader;
> -
>  #[cfg(feature = "tokio-io")]
>  mod tok {
>      use std::io;
> diff --git a/src/encoder/aio.rs b/src/encoder/aio.rs
> index d989abd..908e019 100644
> --- a/src/encoder/aio.rs
> +++ b/src/encoder/aio.rs
> @@ -9,11 +9,6 @@ use crate::encoder::{self, LinkOffset, SeqWrite};
>  use crate::format;
>  use crate::Metadata;
>  
> -// #[cfg(feature = "futures-io")]
> -// use crate::decoder::aio::FuturesReader;
> -// #[cfg(feature = "tokio-io")]
> -// use crate::decoder::aio::TokioReader;
> -
>  /// Asynchronous `pxar` encoder.
>  ///
>  /// This is the `async` version of the `pxar` encoder.
> @@ -22,18 +17,6 @@ pub struct Encoder<'a, T: SeqWrite + 'a> {
>      inner: encoder::EncoderImpl<'a, T>,
>  }
>  
> -#[cfg(feature = "futures-io")]
> -impl<'a, T: futures::io::AsyncWrite + 'a> Encoder<'a, FuturesWriter<T>> {
> -    /// Encode a `pxar` archive into a `futures::io::AsyncWrite` output.
> -    #[inline]
> -    pub async fn from_futures(
> -        output: T,
> -        metadata: &Metadata,
> -    ) -> io::Result<Encoder<'a, FuturesWriter<T>>> {
> -        Encoder::new(FuturesWriter::new(output), metadata).await
> -    }
> -}
> -
>  #[cfg(feature = "tokio-io")]
>  impl<'a, T: tokio::io::AsyncWrite + 'a> Encoder<'a, TokioWriter<T>> {
>      /// Encode a `pxar` archive into a `tokio::io::AsyncWrite` output.
> @@ -214,21 +197,6 @@ impl<'a> File<'a> {
>      }
>  }
>  
> -#[cfg(feature = "futures-io")]
> -impl<'a> futures::io::AsyncWrite for File<'a> {
> -    fn poll_write(self: Pin<&mut Self>, cx: &mut Context, data: &[u8]) -> Poll<io::Result<usize>> {
> -        unsafe { self.map_unchecked_mut(|this| &mut this.inner) }.poll_write(cx, data)
> -    }
> -
> -    fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
> -        unsafe { self.map_unchecked_mut(|this| &mut this.inner) }.poll_flush(cx)
> -    }
> -
> -    fn poll_close(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
> -        unsafe { self.map_unchecked_mut(|this| &mut this.inner) }.poll_close(cx)
> -    }
> -}
> -
>  #[cfg(feature = "tokio-io")]
>  impl<'a> tokio::io::AsyncWrite for File<'a> {
>      fn poll_write(self: Pin<&mut Self>, cx: &mut Context, data: &[u8]) -> Poll<io::Result<usize>> {
> @@ -244,55 +212,6 @@ impl<'a> tokio::io::AsyncWrite for File<'a> {
>      }
>  }
>  
> -/// Pxar encoder write adapter for `futures::io::AsyncWrite`.
> -#[cfg(feature = "futures-io")]
> -mod futures_writer {
> -    use std::io;
> -    use std::pin::Pin;
> -    use std::task::{Context, Poll};
> -
> -    use crate::encoder::SeqWrite;
> -
> -    pub struct FuturesWriter<T> {
> -        inner: Option<T>,
> -    }
> -
> -    impl<T: futures::io::AsyncWrite> FuturesWriter<T> {
> -        pub fn new(inner: T) -> Self {
> -            Self { inner: Some(inner) }
> -        }
> -
> -        fn inner_mut(&mut self) -> io::Result<Pin<&mut T>> {
> -            let inner = self
> -                .inner
> -                .as_mut()
> -                .ok_or_else(|| io_format_err!("write after close"))?;
> -            Ok(unsafe { Pin::new_unchecked(inner) })
> -        }
> -
> -        fn inner(self: Pin<&mut Self>) -> io::Result<Pin<&mut T>> {
> -            unsafe { self.get_unchecked_mut() }.inner_mut()
> -        }
> -    }
> -
> -    impl<T: futures::io::AsyncWrite> SeqWrite for FuturesWriter<T> {
> -        fn poll_seq_write(
> -            self: Pin<&mut Self>,
> -            cx: &mut Context,
> -            buf: &[u8],
> -        ) -> Poll<io::Result<usize>> {
> -            let this = unsafe { self.get_unchecked_mut() };
> -            this.inner_mut()?.poll_write(cx, buf)
> -        }
> -
> -        fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
> -            self.inner()?.poll_flush(cx)
> -        }
> -    }
> -}
> -
> -pub use futures_writer::FuturesWriter;
> -
>  /// Pxar encoder write adapter for `tokio::io::AsyncWrite`.
>  #[cfg(feature = "tokio-io")]
>  mod tokio_writer {
> diff --git a/src/encoder/mod.rs b/src/encoder/mod.rs
> index f186aa8..fdd04ae 100644
> --- a/src/encoder/mod.rs
> +++ b/src/encoder/mod.rs
> @@ -818,7 +818,7 @@ impl<'a> FileImpl<'a> {
>      }
>  
>      /// Poll write interface to more easily connect to tokio/futures.
> -    #[cfg(any(feature = "tokio-io", feature = "futures-io"))]
> +    #[cfg(feature = "tokio-io")]
>      pub fn poll_write(
>          self: Pin<&mut Self>,
>          cx: &mut Context,
> @@ -838,7 +838,7 @@ impl<'a> FileImpl<'a> {
>      }
>  
>      /// Poll flush interface to more easily connect to tokio/futures.
> -    #[cfg(any(feature = "tokio-io", feature = "futures-io"))]
> +    #[cfg(feature = "tokio-io")]
>      pub fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
>          unsafe {
>              self.map_unchecked_mut(|this| &mut this.output)
> @@ -850,7 +850,7 @@ impl<'a> FileImpl<'a> {
>      ///
>      /// This just calls flush, though, since we're just a virtual writer writing to the file
>      /// provided by our encoder.
> -    #[cfg(any(feature = "tokio-io", feature = "futures-io"))]
> +    #[cfg(feature = "tokio-io")]
>      pub fn poll_close(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
>          unsafe {
>              self.map_unchecked_mut(|this| &mut this.output)
> @@ -897,18 +897,3 @@ impl<'a> tokio::io::AsyncWrite for FileImpl<'a> {
>          FileImpl::poll_close(self, cx)
>      }
>  }
> -
> -#[cfg(feature = "futures-io")]
> -impl<'a> futures::io::AsyncWrite for FileImpl<'a> {
> -    fn poll_write(self: Pin<&mut Self>, cx: &mut Context, buf: &[u8]) -> Poll<io::Result<usize>> {
> -        FileImpl::poll_write(self, cx, buf)
> -    }
> -
> -    fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
> -        FileImpl::poll_flush(self, cx)
> -    }
> -
> -    fn poll_close(self: Pin<&mut Self>, cx: &mut Context) -> Poll<io::Result<()>> {
> -        FileImpl::poll_close(self, cx)
> -    }
> -}
> -- 
> 2.20.1
> 
> 
> 
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel




  reply	other threads:[~2021-01-12 14:43 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-12 13:58 [pbs-devel] [PATCH-SERIES 0/20] update to tokio 1.0 and friends Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox 1/4] Cargo.toml: update to tokio 1.0 Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox 2/4] update to rustyline 7 Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox 3/4] update to tokio 1.0 Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox 4/4] tokio 1.0: drop TimeoutFutureExt Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 01/12] update to tokio 1.0 Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 02/12] tokio 1.0: delay -> sleep Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 03/12] proxmox XXX: use tokio::time::timeout directly Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 04/12] tokio 1.0: AsyncRead/Seek with ReadBuf Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 05/12] tokio: adapt to 1.0 runtime changes Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 06/12] tokio: adapt to 1.0 process:Child changes Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 07/12] tokio 1.0: use ReceiverStream from tokio-stream Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 08/12] tokio 1.0: update to new tokio-openssl interface Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 09/12] tokio 1.0: update to new Signal interface Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 10/12] hyper: use new hyper::upgrade Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 11/12] examples: unify h2 examples Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-backup 12/12] cleanup: remove unnecessary 'mut' and '.clone()' Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH proxmox-fuse] update to tokio 1.0 Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [PATCH pxar 1/3] " Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [RFC pxar 2/3] clippy: use matches! instead of match Fabian Grünbichler
2021-01-12 13:58 ` [pbs-devel] [RFC pxar 3/3] remove futures-io feature Fabian Grünbichler
2021-01-12 14:42   ` Wolfgang Bumiller [this message]
2021-01-12 14:52 ` [pbs-devel] [PATCH-SERIES 0/20] update to tokio 1.0 and friends Wolfgang Bumiller
2021-01-14 13:39   ` [pbs-devel] [PATCH proxmox 1/3] fix u2f example Fabian Grünbichler
2021-01-14 13:39     ` [pbs-devel] [PATCH proxmox-backup] proxmox XXX: adapt to moved ParameterSchema Fabian Grünbichler
2021-01-14 13:39     ` [pbs-devel] [PATCH proxmox 2/3] move ParameterSchema from router to schema Fabian Grünbichler
2021-01-14 13:39     ` [pbs-devel] [PATCH proxmox 3/3] build: add autopkgtest target Fabian Grünbichler
2021-01-14 13:41   ` [pbs-devel] [PATCH pxar 1/2] fix example Fabian Grünbichler
2021-01-14 13:41     ` [pbs-devel] [PATCH pxar 2/2] build: fix --no-default-features Fabian Grünbichler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210112144239.mxtal6guiiyb6x6e@wobu-vie.proxmox.com \
    --to=w.bumiller@proxmox.com \
    --cc=f.gruenbichler@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal