struct Framed {
block: Block,
data: Buffer,
header: MessageHeader,
version: MetadataVersion,
}Expand description
One encapsulated IPC message, described entirely by the checksummed bytes it starts at.
Nothing in here comes from the footer, and that is the point. The footer’s
dictionaries and recordBatches vectors are the file’s table of contents,
they sit outside the CRC, and a flatbuffer vector’s length is a single u32
— so clearing recordBatches is one bit flip that makes a block read back
Ok with no rows in it. Not a panic and not an error: a whole table of
telemetry silently gone, reported as success, which is the worst of the three
outcomes and the only one no caller can react to.
The body does not need that table of contents. Every message declares its own
metadata length in the 8-byte encapsulation prefix and its own body length in
its flatbuffer header, both inside [0, body_len), so the messages chain: the
next one starts exactly Framed::stride bytes after this one. Walking that
chain costs one extra flatbuffer verify per message — a few hundred bytes each,
against a CRC of the whole body — and takes the footer out of the read path.
Fields§
§block: BlockWhat arrow-rs is told about the message. Only metaDataLength is read
back out of it (read_record_batch slices data by it); the offset is
relative to data, which starts at the message, so it is zero.
data: BufferExactly this message: metadata, padding and body, and nothing after it.
header: MessageHeader§version: MetadataVersionImplementations§
Auto Trait Implementations§
impl Freeze for Framed
impl RefUnwindSafe for Framed
impl Send for Framed
impl Sync for Framed
impl Unpin for Framed
impl UnsafeUnpin for Framed
impl UnwindSafe for Framed
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].