use std::os::unix::io::AsRawFd;
use std::path::{Path, PathBuf};
use std::sync::{Arc, Mutex};
-use std::task::{Context, Poll};
+use std::task::Context;
use std::pin::Pin;
use anyhow::{bail, format_err, Error};
use proxmox::tools::uuid::Uuid;
use proxmox::tools::vec;
use proxmox::tools::mmap::Mmap;
+use pxar::accessor::{MaybeReady, ReadAt, ReadAtOperation};
use super::chunk_stat::ChunkStat;
use super::chunk_store::ChunkStore;
}
}
-impl<R: ReadChunk> pxar::accessor::ReadAt for LocalDynamicReadAt<R> {
- fn poll_read_at(
- self: Pin<&Self>,
+impl<R: ReadChunk> ReadAt for LocalDynamicReadAt<R> {
+ fn start_read_at<'a>(
+ self: Pin<&'a Self>,
_cx: &mut Context,
- buf: &mut [u8],
+ buf: &'a mut [u8],
offset: u64,
- ) -> Poll<io::Result<usize>> {
+ ) -> MaybeReady<io::Result<usize>, ReadAtOperation<'a>> {
use std::io::Read;
- tokio::task::block_in_place(move || {
+ MaybeReady::Ready(tokio::task::block_in_place(move || {
let mut reader = self.inner.lock().unwrap();
reader.seek(SeekFrom::Start(offset))?;
- Poll::Ready(Ok(reader.read(buf)?))
- })
+ Ok(reader.read(buf)?)
+ }))
+ }
+
+ fn poll_complete<'a>(
+ self: Pin<&'a Self>,
+ _op: ReadAtOperation<'a>,
+ ) -> MaybeReady<io::Result<usize>, ReadAtOperation<'a>> {
+ panic!("LocalDynamicReadAt::start_read_at returned Pending");
}
}