Skip to main content

SpawnedReader

Struct SpawnedReader 

Source
pub struct SpawnedReader<R> {
    inner: R,
    handle: Handle,
}
Expand description

An AsyncFileReader that performs I/O on a separate tokio runtime.

Tokio is a cooperative scheduler, and relies on tasks yielding in a timely manner to service IO. Therefore, running IO and CPU-bound tasks, such as avro decoding, on the same tokio runtime can lead to degraded throughput, dropped connections and other issues. For more information see here.

This wrapper spawns each operation of the inner reader onto the provided runtime [Handle], so that the runtime driving the avro decoding does not also drive the I/O.

The inner reader must be Clone (typically an Arc’d handle to some shared resource) as each spawned task requires a 'static copy of it.

Fields§

§inner: R§handle: Handle

Implementations§

Source§

impl<R> SpawnedReader<R>

Source

pub fn new(inner: R, handle: Handle) -> Self

Creates a new SpawnedReader that performs the I/O of inner on handle

Source

pub fn into_inner(self) -> R

Returns the inner reader

Trait Implementations§

Source§

impl<R> AsyncFileReader for SpawnedReader<R>
where R: AsyncFileReader + Clone + Send + 'static,

Source§

fn get_bytes( &mut self, range: Range<u64>, ) -> BoxFuture<'_, Result<Bytes, AvroError>>

Retrieve the bytes in range
Source§

fn get_byte_ranges( &mut self, ranges: Vec<Range<u64>>, ) -> BoxFuture<'_, Result<Vec<Bytes>, AvroError>>

Retrieve multiple byte ranges. The default implementation will call get_bytes sequentially
Source§

impl<R: Clone> Clone for SpawnedReader<R>

Source§

fn clone(&self) -> SpawnedReader<R>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<R: Debug> Debug for SpawnedReader<R>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<R> Freeze for SpawnedReader<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for SpawnedReader<R>
where R: RefUnwindSafe,

§

impl<R> Send for SpawnedReader<R>
where R: Send,

§

impl<R> Sync for SpawnedReader<R>
where R: Sync,

§

impl<R> Unpin for SpawnedReader<R>
where R: Unpin,

§

impl<R> UnsafeUnpin for SpawnedReader<R>
where R: UnsafeUnpin,

§

impl<R> UnwindSafe for SpawnedReader<R>
where R: UnwindSafe,

Blanket Implementations§

§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V