pub struct MultiResourceReader<I, O: MultiResourceReaderOpener<I>> { /* private fields */ }Expand description
Reads an ordered set of physical resources as one logical, restartable input.
§Contract
- Input/output:
I, same as every delegate the opener produces. - State/checkpoint:
ResourceSetRevisionplus the current resource’s ordinal and embedded delegate position, through the pairedMultiResourceReaderStream. A resource-set revision mismatch on restart fails closed rather than reinterpreting a stored index against a different physical resource. - Ordering: resources are traversed in
ResourceSet’s declared order; within a resource, delegate order is preserved. - Restartability: the meet of this wrapper’s own (always
restartable, since the durable envelope is self-contained) and the
opener’s declared restartability, supplied explicitly at construction
(
multi_resource_reader’srestartabilityparameter) because a resource backend’s stable-identity guarantee (e.g. an object store without version tokens) cannot be introspected from here. - Thread safety: used exclusively (
&mut self) like every reader; internally synchronized with its paired stream via an async-aware lock, since the stream (&self) must observe the same active resource’s position at a commit boundary. - Bounded resource: at most one resource’s delegate open at a time;
the current resource’s delegate stream is always closed (with
crate::StreamRuntimeOutcome::ResourceBoundary) before the next resource is opened, never overlapping. - Close: a resource exhausted mid-attempt is closed immediately,
right there, rather than held open until the outer step attempt ends;
the paired
MultiResourceReaderStream::closecloses whichever resource (if any) is still active when the step attempt reaches its own terminal outcome, and never re-closes a resource already closed at a boundary. - Support tier: first-party.
Trait Implementations§
Source§impl<I, O> ItemReader<I> for MultiResourceReader<I, O>where
I: Send + 'static,
O: MultiResourceReaderOpener<I> + 'static,
impl<I, O> ItemReader<I> for MultiResourceReader<I, O>where
I: Send + 'static,
O: MultiResourceReaderOpener<I> + 'static,
Source§async fn read(
&mut self,
context: ReadContext<'_>,
) -> Result<ReadOutcome<I>, ReaderError>
async fn read( &mut self, context: ReadContext<'_>, ) -> Result<ReadOutcome<I>, ReaderError>
Reads at most one item while borrowing the reader and call scope.
Auto Trait Implementations§
impl<I, O> !RefUnwindSafe for MultiResourceReader<I, O>
impl<I, O> !UnwindSafe for MultiResourceReader<I, O>
impl<I, O> Freeze for MultiResourceReader<I, O>
impl<I, O> Send for MultiResourceReader<I, O>
impl<I, O> Sync for MultiResourceReader<I, O>
impl<I, O> Unpin for MultiResourceReader<I, O>
impl<I, O> UnsafeUnpin for MultiResourceReader<I, O>where
Arc<ReaderShared<I, O>>: UnsafeUnpin,
Option<<O as MultiResourceReaderOpener<I>>::Reader>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more