Skip to main content

Blob

Trait Blob 

Source
pub trait Blob:
    Clone
    + Send
    + Sync
    + 'static {
    // Required methods
    fn read_at_buf(
        &self,
        offset: u64,
        len: usize,
        bufs: impl Into<IoBufsMut> + Send,
    ) -> impl Future<Output = Result<IoBufsMut, Error>> + Send;
    fn read_at(
        &self,
        offset: u64,
        len: usize,
    ) -> impl Future<Output = Result<IoBufsMut, Error>> + Send;
    fn write_at(
        &self,
        offset: u64,
        bufs: impl Into<IoBufs> + Send,
    ) -> impl Future<Output = Result<(), Error>> + Send;
    fn resize(&self, len: u64) -> impl Future<Output = Result<(), Error>> + Send;
    fn sync(&self) -> impl Future<Output = Result<(), Error>> + Send;
}
Expand description

Interface to read and write to a blob.

To support blob implementations that enable concurrent reads and writes, blobs are responsible for maintaining synchronization.

Cloning a blob is similar to wrapping a single file descriptor in a lock whereas opening a new blob (of the same name) is similar to opening a new file descriptor. If multiple blobs are opened with the same name, they are not expected to coordinate access to underlying storage and writing to both is undefined behavior.

When a blob is dropped, any unsynced changes may be discarded. Implementations may attempt to sync during drop but errors will go unhandled. Call sync before dropping to ensure all changes are durably persisted.

Required Methods§

Source

fn read_at_buf( &self, offset: u64, len: usize, bufs: impl Into<IoBufsMut> + Send, ) -> impl Future<Output = Result<IoBufsMut, Error>> + Send

Read len bytes at offset into caller-provided buffer(s).

The caller provides the buffer(s), and the implementation fills it with exactly len bytes of data read from the blob starting at offset. Returns the same buffer(s), filled with data.

§Contract
  • The returned buffers reuse caller-provided storage, with exactly len bytes filled from offset.
  • Caller-provided chunk layout is preserved.
§Panics

Panics if len exceeds the total capacity of bufs.

Source

fn read_at( &self, offset: u64, len: usize, ) -> impl Future<Output = Result<IoBufsMut, Error>> + Send

Read len bytes at offset, returning a buffer(s) with exactly len bytes of data read from the blob starting at offset.

To reuse a buffer(s), use Blob::read_at_buf.

Source

fn write_at( &self, offset: u64, bufs: impl Into<IoBufs> + Send, ) -> impl Future<Output = Result<(), Error>> + Send

Write bufs to the blob at the given offset.

Source

fn resize(&self, len: u64) -> impl Future<Output = Result<(), Error>> + Send

Resize the blob to the given length.

If the length is greater than the current length, the blob is extended with zeros. If the length is less than the current length, the blob is resized.

Source

fn sync(&self) -> impl Future<Output = Result<(), Error>> + Send

Ensure all pending data is durably persisted.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§